@prozilla-os/shared 1.2.1 → 1.3.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/dist/main.d.ts +544 -21
- package/dist/main.js +682 -83
- package/dist/main.js.map +1 -1
- package/package.json +8 -6
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/constants/ansi.const.ts","../src/features/_utils/array.utils.ts","../src/features/_utils/date.utils.ts","../src/features/_utils/event.utils.ts","../src/features/_utils/math.utils.ts","../src/features/_utils/number.utils.ts","../src/features/_utils/string.utils.ts"],"sourcesContent":["export const ANSI = {\n\tfg: {\n\t\tblack: \"\\u001b[30m\",\n\t\tred: \"\\u001b[31m\",\n\t\tgreen: \"\\u001b[32m\",\n\t\tyellow: \"\\u001b[33m\",\n\t\tblue: \"\\u001b[34m\",\n\t\tmagenta: \"\\u001b[35m\",\n\t\tcyan: \"\\u001b[36m\",\n\t\twhite: \"\\u001b[37m\",\n\t},\n\tbg: {\n\n\t},\n\tdecoration: {\n\t\tdim: \"\\u001b[2m\",\n\t\tbold: \"\\u001b[1m\",\n\t},\n\treset: \"\\u001b[0m\",\n};","export function removeFromArray<Type>(item: Type, array: Type[]) {\n\tconst index = array.indexOf(item);\n\tif (index !== -1) {\n\t\tarray.splice(index, 1);\n\t}\n}\n\nexport function randomFromArray<Type>(array: Type[]): Type {\n\treturn array[Math.floor(Math.random() * array.length)];\n}\n\nexport function removeDuplicatesFromArray<Type>(array: Type[]): Type[] {\n\treturn array.filter((item, index) => array.indexOf(item) === index);\n}","const TIME_INDICATORS = {\n\t\"s\": 1000,\n\t\"m\": 1000 * 60,\n\t\"h\": 1000 * 60 * 60,\n\t\"d\": 1000 * 60 * 60 * 24,\n\t\"w\": 1000 * 60 * 60 * 24 * 7,\n\t\"n\": 1000 * 60 * 60 * 24 * 31,\n\t\"y\": 1000 * 60 * 60 * 24 * 365,\n\t\"c\": 1000 * 60 * 60 * 24 * 365 * 100,\n};\n\n/**\n * Format a time\n * @param time - Time in milliseconds\n * @param maxLength - The maximum amount of units, e.g.: 3 => years, months, days\n */\nexport function formatTime(time: number, maxLength: number = 3, allowAffixes: boolean): string {\n\tconst result: string[] = [];\n\n\tconst formatResult = (result: string[], inPast: boolean): string => {\n\t\tif (!allowAffixes)\n\t\t\treturn result.join(\", \");\n\n\t\tlet prefix = \"\";\n\t\tlet suffix = \"\";\n\n\t\tif (inPast) {\n\t\t\tsuffix = \"ago\";\n\t\t} else {\n\t\t\tprefix = \"in\";\n\t\t}\n\n\t\treturn [prefix, result.join(\", \"), suffix].join(\" \").trim();\n\t};\n\n\tlet inPast = false;\n\n\tif (time < 0) {\n\t\ttime = -time;\n\t\tinPast = true;\n\t}\n\n\tif (Math.abs(time) < TIME_INDICATORS.s) {\n\t\treturn formatResult([\"less than a second\"], inPast);\n\t}\n\n\tconst units: { amount: number, label: string }[] = [];\n\tconst unitLabels: Record<string, string> = {\n\t\t\"s\": \"seconds\",\n\t\t\"m\": \"minutes\",\n\t\t\"h\": \"hours\",\n\t\t\"d\": \"days\",\n\t\t\"n\": \"months\",\n\t\t\"y\": \"years\",\n\t};\n\n\tfor (const [key, value] of Object.entries(TIME_INDICATORS).reverse()) {\n\t\tif (key === \"w\" || key === \"c\")\n\t\t\tcontinue;\n\n\t\tconst amount = Math.floor(time / value);\n\t\ttime -= amount * value;\n\n\t\tif (amount > 0)\n\t\t\tunits.push({ amount, label: unitLabels[key] });\n\t}\n\n\tfor (let i = 0; i < maxLength; i++) {\n\t\tconst unit = units[i];\n\n\t\tif (unit)\n\t\t\tresult.push(`${unit.amount} ${unit.label}`);\n\t}\n\n\tif (result.length === 0) {\n\t\treturn formatResult([\"less than a second\"], inPast);\n\t} else {\n\t\treturn formatResult(result, inPast);\n\t}\n};\n\n/**\n * Format a time relative to now\n * @param date - The date\n * @param maxLength - The maximum amount of units, e.g.: 3 => years, months, days\n */\nexport function formatRelativeTime(date: Date, maxLength: number = 3, allowAffixes: boolean): string {\n\tconst difference = date.valueOf() - Date.now();\n\treturn formatTime(difference, maxLength, allowAffixes);\n};","export type EventNamesMap = Record<string, string>;\nexport type Listener = (data: unknown) => void;\n\nexport class EventEmitter<EventMap extends EventNamesMap> {\n\tstatic EVENT_NAMES: EventNamesMap = {};\n\n\t#events: Record<string, Array<Listener>> = {};\n\n\t/**\n\t * Add event listener for an event\n\t */\n\ton<Key extends keyof EventMap>(eventName: Key, callback: Listener) {\n\t\tif (!this.#events[eventName as string]) {\n\t\t\tthis.#events[eventName as string] = [];\n\t\t}\n\t\tthis.#events[eventName as string].push(callback);\n\t\treturn callback;\n\t}\n\t\n\t/**\n\t * Remove event listener for an event\n\t */\n\toff<Key extends keyof EventMap>(eventName: Key, callback: Listener) {\n\t\tif (this.#events[eventName as string]) {\n\t\t\tthis.#events[eventName as string] = this.#events[eventName as string].filter(\n\t\t\t\t(listener) => listener !== callback\n\t\t\t);\n\t\t}\n\t}\n\t\n\t/**\n\t * Dispatch event\n\t */\n\temit<Key extends keyof EventMap>(eventName: Key, data?: unknown) {\n\t\tif (this.#events[eventName as string]) {\n\t\t\tthis.#events[eventName as string].forEach((listener) => {\n\t\t\t\tlistener(data);\n\t\t\t});\n\t\t}\n\t}\n}","export function clamp(value: number, min: number, max: number): number {\n\tif (value < min) {\n\t\treturn min;\n\t} else if (value > max) {\n\t\treturn max;\n\t} else {\n\t\treturn value;\n\t}\n}\n\nexport function randomRange(min: number, max: number): number {\n\treturn Math.random() * (max - min) + min;\n}\n\nexport function round(value: number, precision: number): number {\n\tconst multiplier = Math.pow(10, precision || 0);\n\treturn Math.round(value * multiplier) / multiplier;\n}","export function isValidInteger(number: number | string): number | boolean {\n\treturn (typeof number === \"number\" || parseInt(number) || parseInt(number) === 0);\n}","export function parseBool(input: string) {\r\n\treturn input.trim().toLowerCase() === \"true\";\r\n}"],"names":["ANSI","removeFromArray","item","array","index","randomFromArray","removeDuplicatesFromArray","TIME_INDICATORS","formatTime","time","maxLength","allowAffixes","result","formatResult","inPast","prefix","suffix","units","unitLabels","key","value","amount","i","unit","formatRelativeTime","date","difference","_events","EventEmitter","__privateAdd","eventName","callback","__privateGet","listener","data","__publicField","clamp","min","max","randomRange","round","precision","multiplier","isValidInteger","number","parseBool","input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/constants/ansi.const.ts","../src/features/_utils/array.utils.ts","../src/features/_utils/date.utils.ts","../src/features/_utils/event.utils.ts","../src/features/_utils/math.utils.ts","../src/features/_utils/number.utils.ts","../src/features/_utils/string.utils.ts","../src/features/logging/ansi.ts","../src/features/logging/logger.ts","../src/features/markdown/markdown.ts","../src/features/math/vector2.ts"],"sourcesContent":["/**\n * ANSI escape codes.\n * \n * @see [ANSI escape code - Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code).\n */\nexport const ANSI = {\n\t/**\n\t * Foreground colors.\n\t */\n\tfg: {\n\t\tblack: \"\\u001b[30m\",\n\t\tred: \"\\u001b[31m\",\n\t\tgreen: \"\\u001b[32m\",\n\t\tyellow: \"\\u001b[33m\",\n\t\tblue: \"\\u001b[34m\",\n\t\tmagenta: \"\\u001b[35m\",\n\t\tcyan: \"\\u001b[36m\",\n\t\twhite: \"\\u001b[37m\",\n\t},\n\t/**\n\t * Background colors.\n\t */\n\tbg: {\n\t\tblack: \"\\u001b[40m\",\n\t\tred: \"\\u001b[41m\",\n\t\tgreen: \"\\u001b[42m\",\n\t\tyellow: \"\\u001b[43m\",\n\t\tblue: \"\\u001b[44m\",\n\t\tmagenta: \"\\u001b[45m\",\n\t\tcyan: \"\\u001b[46m\",\n\t\twhite: \"\\u001b[47m\",\n\t},\n\t/**\n\t * Screen buffer and clearing controls.\n\t */\n\tscreen: {\n\t\tenterAltBuffer: \"\\u001b[?1049h\",\n\t\texitAltBuffer: \"\\u001b[?1049l\",\n\t\tclear: \"\\u001b[2J\",\n\t\thome: \"\\u001b[H\",\n\t},\n\t/**\n\t * Decorations.\n\t */\n\tdecoration: {\n\t\tdim: \"\\u001b[2m\",\n\t\tbold: \"\\u001b[1m\",\n\t\tunderline: \"\\u001b[4m\",\n\t},\n\treset: \"\\u001b[0m\",\n};","/**\n * Removes an item from an array.\n * @param item - The item to remove.\n */\nexport function removeFromArray<Type>(item: Type, array: Type[]) {\n\tconst index = array.indexOf(item);\n\tif (index !== -1) {\n\t\tarray.splice(index, 1);\n\t}\n}\n\n/**\n * Returns a random item from an array.\n */\nexport function randomFromArray<Type>(array: Type[]): Type {\n\treturn array[Math.floor(Math.random() * array.length)];\n}\n\n/**\n * Removes all duplicate items from an array.\n */\nexport function removeDuplicatesFromArray<Type>(array: Type[]): Type[] {\n\treturn array.filter((item, index) => array.indexOf(item) === index);\n}","const TIME_INDICATORS = {\n\t\"s\": 1000,\n\t\"m\": 1000 * 60,\n\t\"h\": 1000 * 60 * 60,\n\t\"d\": 1000 * 60 * 60 * 24,\n\t\"w\": 1000 * 60 * 60 * 24 * 7,\n\t\"n\": 1000 * 60 * 60 * 24 * 31,\n\t\"y\": 1000 * 60 * 60 * 24 * 365,\n\t\"c\": 1000 * 60 * 60 * 24 * 365 * 100,\n};\n\n/**\n * Formats time in a human-readable format.\n * @param time - Time in milliseconds.\n * @param maxLength - The maximum amount of units, e.g.: 3 => years, months, days.\n */\nexport function formatTime(time: number, maxLength: number = 3, allowAffixes: boolean = false): string {\n\tconst result: string[] = [];\n\n\tconst formatResult = (result: string[], inPast: boolean): string => {\n\t\tif (!allowAffixes)\n\t\t\treturn result.join(\", \");\n\n\t\tlet prefix = \"\";\n\t\tlet suffix = \"\";\n\n\t\tif (inPast) {\n\t\t\tsuffix = \"ago\";\n\t\t} else {\n\t\t\tprefix = \"in\";\n\t\t}\n\n\t\treturn [prefix, result.join(\", \"), suffix].join(\" \").trim();\n\t};\n\n\tlet inPast = false;\n\n\tif (time < 0) {\n\t\ttime = -time;\n\t\tinPast = true;\n\t}\n\n\tif (Math.abs(time) < TIME_INDICATORS.s) {\n\t\treturn formatResult([\"less than a second\"], inPast);\n\t}\n\n\tconst units: { amount: number, label: string }[] = [];\n\tconst unitLabels: Record<string, string> = {\n\t\t\"s\": \"second\",\n\t\t\"m\": \"minute\",\n\t\t\"h\": \"hour\",\n\t\t\"d\": \"day\",\n\t\t\"n\": \"month\",\n\t\t\"y\": \"year\",\n\t};\n\n\tfor (const [key, value] of Object.entries(TIME_INDICATORS).reverse()) {\n\t\tif (key === \"w\" || key === \"c\")\n\t\t\tcontinue;\n\n\t\tconst amount = Math.floor(time / value);\n\t\ttime -= amount * value;\n\n\t\tif (amount > 0)\n\t\t\tunits.push({ amount, label: amount != 1 ? unitLabels[key] + \"s\" : unitLabels[key] });\n\t}\n\n\tfor (let i = 0; i < maxLength; i++) {\n\t\tif (i < units.length) {\n\t\t\tconst unit = units[i];\n\t\t\tresult.push(`${unit.amount} ${unit.label}`);\n\t\t}\n\t}\n\n\tif (result.length === 0) {\n\t\treturn formatResult([\"less than a second\"], inPast);\n\t} else {\n\t\treturn formatResult(result, inPast);\n\t}\n};\n\n/**\n * Formats time relative to now.\n * @param date - The date.\n * @param maxLength - The maximum amount of units, e.g.: 3 => years, months, days.\n */\nexport function formatRelativeTime(date: Date, maxLength: number = 3, allowAffixes: boolean = false): string {\n\tconst difference = date.valueOf() - Date.now();\n\treturn formatTime(difference, maxLength, allowAffixes);\n};","import { removeFromArray } from \"./array.utils\";\n\n/**\n * A function that handles an event.\n * @typeParam T - A record of all events.\n * @typeParam K - The event this function handles.\n */\nexport type Listener<T extends Record<keyof T, unknown[]>, K extends keyof T> = (...args: T[K]) => void;\n\n/**\n * A function that handles an event asynchronously.\n * @typeParam T - A record of all events.\n * @typeParam K - The event this function handles.\n */\nexport type AsyncListener<T extends Record<keyof T, unknown[]>, K extends keyof T> = (...args: T[K]) => Promise<void>;\n\n/**\n * A simple event emitter.\n * @typeParam T - A record of all events.\n */\nexport class EventEmitter<T extends Record<keyof T, unknown[]>> {\n\n\t#listeners: {\n\t\t[K in keyof T]?: Listener<T, K>[];\n\t} = {};\n\n\t/**\n\t * Starts listening to an event.\n\t * @param event - The event to listen to.\n\t * @param listener - The function to call when the event is emitted.\n\t * @returns The listener.\n\t */\n\ton<K extends keyof T>(event: K, listener: Listener<T, K>) {\n\t\tif (this.#listeners[event] === undefined) {\n\t\t\tthis.#listeners[event] = [listener];\n\t\t} else {\n\t\t\tthis.#listeners[event].push(listener);\n\t\t}\n\t\treturn listener;\n\t}\n\n\t/**\n\t * Registers an event listener that is automatically removed when called.\n\t * @param event - The event to listen to.\n\t * @param listener - The function to call once the event is emitted.\n\t * @returns The wrapped listener.\n\t */\n\tonce<K extends keyof T>(event: K, listener: Listener<T, K>) {\n\t\tconst wrapper = this.on(event, (...args) => {\n\t\t\tthis.off(event, wrapper);\n\t\t\tlistener(...args);\n\t\t});\n\t\treturn wrapper;\n\t}\n\n\t/**\n\t * Starts listening to an event.\n\t * @param event - The event to listen to.\n\t * @param listener - The function to call when the event is emitted.\n\t * @returns The wrapped listener. \n\t */\n\tonAsync<K extends keyof T>(event: K, listener: AsyncListener<T, K>, onRejected?: Parameters<Promise<void>[\"catch\"]>[0]) {\n\t\treturn this.on(event, (...args) => {\n\t\t\tvoid listener(...args).catch((reason) => {\n\t\t\t\tif (onRejected) {\n\t\t\t\t\tonRejected(reason);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(reason);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\t/**\n\t * Removes an event listener.\n\t * @param event - The event to remove the listener from.\n\t * @param listener - The listener to remove.\n\t */\n\toff<K extends keyof T>(event: K, listener: Listener<T, K>) {\n\t\tif (this.#listeners[event] === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tremoveFromArray(listener, this.#listeners[event]);\n\t}\n\t\n\t/**\n\t * Emits an event to all its listeners.\n\t * @param event - The event to emit.\n\t * @param args - The arguments to pass to the listeners.\n\t */\n\temit<K extends keyof T>(event: K, ...args: T[K]) {\n\t\tif (this.#listeners[event] === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const listener of this.#listeners[event]) {\n\t\t\tlistener(...args);\n\t\t}\t\n\t}\n}","/**\n * Clamps a value between an upper and lower bound.\n * @param value - The value to clamp.\n * @param min - The lower bound.\n * @param max - The upper bound.\n * @returns The clamped value.\n */\nexport function clamp(value: number, min: number, max: number): number {\n\tif (value < min) {\n\t\treturn min;\n\t} else if (value > max) {\n\t\treturn max;\n\t} else {\n\t\treturn value;\n\t}\n}\n\n/**\n * Returns a random value inside a range.\n * @param min - The lower bound.\n * @param max - The upper bound.\n */\nexport function randomRange(min: number, max: number): number {\n\treturn Math.random() * (max - min) + min;\n}\n\n/**\n * Rounds a value.\n * @param value - The value to round.\n * @param precision - The precision to round with.\n */\nexport function round(value: number, precision?: number): number {\n\tconst factor = Math.pow(10, precision ?? 0);\n\treturn Math.round(value * factor) / factor;\n}","/**\n * Checks if `input` is a valid integer.\n */\nexport function isValidInteger(input: number | string): boolean {\n\tif (typeof input === \"number\") return true;\n\tif (input.trim() === \"\") return false;\n\treturn Number.isInteger(Number(input));\n}\n\n/**\n * Checks if `input` is a valid number.\n */\nexport function isValidNumber(input: number | string): boolean {\n\tif (typeof input === \"number\") return true;\n\tif (input.trim() === \"\") return false;\n\treturn !isNaN(Number(input));\n}\n\nexport function parseOptionalInteger(input?: string, defaultValue = 0) {\n\treturn input !== undefined && isValidInteger(input) ? Number(input) : defaultValue;\n}\n\nexport function parseOptionalFloat(input?: string, defaultValue = 0) {\n\treturn input !== undefined && isValidNumber(input) ? parseFloat(input) : defaultValue;\n}","/**\n * Converts a string to a boolean.\n * @param input - The string to parse.\n */\nexport function parseBool(input: string) {\n\treturn input.trim().toLowerCase() === \"true\";\n}\n\n/**\n * Returns the longest common prefix from a list of strings.\n */\nexport function getLongestCommonPrefix(strings: string[]) {\n\tif (!strings.length) return \"\";\n \n\tlet prefix = strings[0];\n\tfor (let i = 1; i < strings.length; i++) {\n\t\twhile (strings[i].indexOf(prefix) !== 0) {\n\t\t\tprefix = prefix.substring(0, prefix.length - 1);\n\t\t\tif (prefix === \"\") return \"\";\n\t\t}\n\t}\n\treturn prefix;\n}","import { ANSI } from \"../../constants\";\n\n/**\n * Provides utility functions for wrapping text in ANSI escape codes.\n * \n * @see {@link ANSI}\n * @hideconstructor\n */\nexport class Ansi {\n\n\t/**\n\t * Makes text black using {@link ANSI.fg.black}.\n\t */\n\tstatic black(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.black);\n\t}\n\n\t/**\n\t * Makes text red using {@link ANSI.fg.red}.\n\t */\n\tstatic red(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.red);\n\t}\n\n\t/**\n\t * Makes text green using {@link ANSI.fg.green}.\n\t */\n\tstatic green(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.green);\n\t}\n\n\t/**\n\t * Makes text yellow using {@link ANSI.fg.yellow}.\n\t */\n\tstatic yellow(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.yellow);\n\t}\n\n\t/**\n\t * Makes text blue using {@link ANSI.fg.blue}.\n\t */\n\tstatic blue(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.blue);\n\t}\n\n\t/**\n\t * Makes text magenta using {@link ANSI.fg.magenta}.\n\t */\n\tstatic magenta(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.magenta);\n\t}\n\n\t/**\n\t * Makes text cyan using {@link ANSI.fg.cyan}.\n\t */\n\tstatic cyan(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.cyan);\n\t}\n\n\t/**\n\t * Makes text white using {@link ANSI.fg.white}.\n\t */\n\tstatic white(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.fg.white);\n\t}\n\n\t/**\n\t * Makes text bold using {@link ANSI.decoration.bold}.\n\t */\n\tstatic bold(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.decoration.bold);\n\t}\n\n\t/**\n\t * Makes text dim using {@link ANSI.decoration.dim}.\n\t */\n\tstatic dim(text: string) {\n\t\treturn Ansi.#apply(text, ANSI.decoration.dim);\n\t}\n\n\tstatic #apply(text: string, code: string) {\n\t\ttext = text.replaceAll(ANSI.reset, ANSI.reset + code);\n\t\treturn code + text + ANSI.reset;\n\t}\n\n\t/**\n\t * Removes all ANSI escape sequences.\n\t */\n\tstatic strip(text: string) {\n\t\t// eslint-disable-next-line no-control-regex\n\t\treturn text.replace(/\\u001b\\[[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, \"\");\n\t}\n\n\t/**\n\t * Removes ANSI escape sequences for colors and background colors (SGR).\n\t */\n\tstatic stripColors(text: string) {\n\t\t// eslint-disable-next-line no-control-regex\n\t\treturn text.replace(/\\u001b\\[[0-9;]*m/g, \"\");\n\t}\n}","import { Ansi } from \"./ansi\";\n\n/**\n * Applies a format to a string.\n * @param text - The text to format.\n * @returns The formatted text.\n */\nexport type Formatter = (text: string) => string;\n\nexport enum LogLevel {\n\tDebug,\n\tInfo,\n\tSuccess,\n\tWarning,\n\tError\n};\n\n/**\n * A simple wrapper for {@link console} that logs formatted text and supports log levels.\n */\nexport class Logger {\n\n\t/**\n\t * The minimum log level or an array of log levels to enable.\n\t * \n\t * `undefined` enables all log levels. An array enables all log levels in that array. A single level enables that log level and the ones above.\n\t * @default LogLevel.Debug\n\t */\n\tlevel?: LogLevel | LogLevel[];\n\n\t/**\n\t * The current level of indentation.\n\t * @default 0\n\t */\n\tindent: number = 0;\n\n\t/**\n\t * The string to use for indentation.\n\t * @default \"\\t\"\n\t */\n\tindentString?: string;\n\n\t/**\n\t * The function to use when highlighting text.\n\t * @default Ansi.cyan\n\t * @see {@link Ansi.cyan}\n\t */\n\thighlight: Formatter = Ansi.cyan;\n\n\t/**\n\t * The function to use when emphasizing text.\n\t * @default Ansi.bold\n\t * @see {@link Ansi.bold}\n\t */\n\temphasize: Formatter = Ansi.bold;\n\n\t/**\n\t * The prefixes to prepend to logs.\n\t * @default {\n\t[LogLevel.Info]: Ansi.cyan(\"[info]\"),\n\t[LogLevel.Success]: Ansi.green(\"[success]\"),\n\t[LogLevel.Warning]: Ansi.yellow(\"[warning]\"),\n\t[LogLevel.Error]: Ansi.red(\"[error]\"),\n}\n\t */\n\tprefix: {\n\t\t[key in LogLevel | \"global\"]?: string\n\t} = {};\n\n\t#errorCount = 0;\n\t#warningCount = 0;\n\n\tconstructor(options?: {\n\t\t/** {@inheritDoc Logger.level}. */\n\t\tlevel?: Logger[\"level\"],\n\t\t/** \n\t\t * The prefix(es) to prepend to logs.\n\t\t * \n\t\t * Does not override default prefixes unless specified.\n\t\t*/\n\t\tprefix?: Logger[\"prefix\"] | string\n\t})\n\t/**\n\t * @param level - The minimum log level.\n\t */\n\tconstructor(level: LogLevel)\n\t/**\n\t * @param levels - The log levels to enable.\n\t */\n\tconstructor(levels: LogLevel[])\n\tconstructor(options?: LogLevel | LogLevel[] | { level?: Logger[\"level\"], prefix?: Logger[\"prefix\"] | string }) {\n\t\tthis.reset();\n\n\t\tif (options === undefined)\n\t\t\treturn;\n\n\t\tif (Array.isArray(options) || typeof options === \"number\") {\n\t\t\tthis.level = options;\n\t\t} else {\n\t\t\tif (options.level !== undefined)\n\t\t\t\tthis.level = options.level;\n\t\t\tif (options.prefix) {\n\t\t\t\tif (typeof options.prefix === \"string\") {\n\t\t\t\t\tthis.prefix.global = options.prefix;\n\t\t\t\t} else {\n\t\t\t\t\tthis.prefix = {\n\t\t\t\t\t\t...this.prefix,\n\t\t\t\t\t\t...options.prefix,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// ===== Modifying state =====\n\n\t/**\n\t * Resets all properties to their default values.\n\t */\n\treset(): this {\n\t\tthis.level = LogLevel.Debug;\n\n\t\tthis.indent = 0;\n\t\tthis.indentString = \"\\t\";\n\n\t\tthis.highlight = Ansi.cyan;\n\t\tthis.emphasize = Ansi.bold;\n\n\t\tthis.prefix = {\n\t\t\t[LogLevel.Info]: Ansi.cyan(\"[info]\"),\n\t\t\t[LogLevel.Success]: Ansi.green(\"[success]\"),\n\t\t\t[LogLevel.Warning]: Ansi.yellow(\"[warning]\"),\n\t\t\t[LogLevel.Error]: Ansi.red(\"[error]\"),\n\t\t};\n\n\t\tthis.#errorCount = 0;\n\t\tthis.#warningCount = 0;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls a function while the level of indentation is increased.\n\t * \n\t * Increases the level of indentation, then calls the function and finally restores the indentation.\n\t * @param callback - The function to call.\n\t * @param indentation - The amount of indentation to use.\n\t */\n\tindented(callback: (this: undefined) => void, indentation?: number): this\n\t/**\n\t * Logs every line while the level of indentation is increased.\n\t * \n\t * Increases the level of indentation, then logs every line and finally restores the indentation.\n\t * @param lines - The lines to log.\n\t * @param indentation - The amount of indentation to use.\n\t * @param level - The log level.\n\t */\n\tindented(lines: unknown[], indentation?: number, level?: LogLevel): this\n\t/**\n\t * Logs a message while the level of indentation is increased.\n\t * \n\t * Increases the level of indentation, then logs the message and finally restores the indentation.\n\t * @param message - The message to log.\n\t * @param indentation - The amount of indentation to use.\n\t * @param level - The log level.\n\t */\n\tindented(message: unknown, indentation?: number, level?: LogLevel): this\n\tindented(callbackOrMessage: unknown, indentation = 1, level?: LogLevel): this {\n\t\tif (level !== undefined && !this.isLevelEnabled(level))\n\t\t\treturn this;\n\n\t\t// Avoid side effects of negative indentation \n\t\tif (this.indent + indentation < 0)\n\t\t\tindentation = -this.indent;\n\n\t\tthis.tab(indentation);\n\t\tif (typeof callbackOrMessage === \"function\") {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\tcallbackOrMessage();\n\t\t} else if (Array.isArray(callbackOrMessage)) {\n\t\t\tthis.lines(callbackOrMessage, level);\n\t\t} else {\n\t\t\tthis.log(callbackOrMessage, level);\n\t\t}\n\t\tthis.shiftTab(indentation);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Increases the level of indentation.\n\t * @param amount - The amount to increase the level of indentation with.\n\t */\n\ttab(amount = 1): this {\n\t\tthis.indent += amount;\n\t\tif (this.indent < 0) this.indent = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Decreases the level of indentation.\n\t * @param amount - The amount to decrease the level of indentation with.\n\t */\n\tshiftTab(amount = 1): this {\n\t\tthis.indent -= amount;\n\t\tif (this.indent < 0) this.indent = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the prefix to prepend to all logs.\n\t * @param prefix - The prefix to use.\n\t */\n\tsetPrefix(prefix: string): this\n\t/**\n\t * Sets the prefixes to prepend to logs.\n\t * \n\t * Will override any existing prefixes.\n\t * @param prefixes - The prefixes to use.\n\t */\n\tsetPrefix(prefixes: Logger[\"prefix\"]): this\n\t/**\n\t * Sets the prefix to prepend to logs at a given log level.\n\t * @param level - The log level.\n\t * @param prefix - The prefix to use.\n\t */\n\tsetPrefix(level: LogLevel, prefix: string): this\n\tsetPrefix(prefixOrLevel: Logger[\"prefix\"] | string | LogLevel, prefix?: string): this {\n\t\tif (typeof prefixOrLevel === \"string\") {\n\t\t\tthis.prefix = {\n\t\t\t\tglobal: prefixOrLevel,\n\t\t\t};\n\t\t} else if (typeof prefixOrLevel === \"object\") {\n\t\t\tthis.prefix = prefixOrLevel;\t\t\t\n\t\t} else {\n\t\t\tthis.prefix[prefixOrLevel] = prefix;\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ===== Logging status messages =====\n\n\t/**\n\t * Logs an info message about a URL being fetched.\n\t * @param url - The URL being fetched.\n\t */\n\tfetching(url: string): this {\n\t\treturn this.pending(`Fetching: ${this.highlight(url)}`);\n\t}\n\n\t/**\n\t * Logs an info message that implies a pending state.\n\t * @param message - The status message.\n\t */\n\tpending(message: string): this {\n\t\treturn this.info(Ansi.yellow(message));\n\t}\n\n\t/**\n\t * Logs an error message.\n\t * @param message - The error message or reason.\n\t * @param details - The details of the error message.\n\t */\n\terror(message: unknown, ...details: unknown[]): this {\n\t\tthis.#errorCount++;\n\t\tif (!this.isLevelEnabled(LogLevel.Error))\n\t\t\treturn this;\n\n\t\tif (typeof message === \"string\") {\n\t\t\tthis.statusMessage(Ansi.red(message), details, LogLevel.Error);\n\t\t} else {\n\t\t\tconsole.error(message, ...details);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Logs a warning message.\n\t * @param message - The warning message.\n\t * @param details - The details of the warning message.\n\t */\n\twarn(message: string, ...details: unknown[]): this {\n\t\tthis.#warningCount++;\n\t\treturn this.statusMessage(Ansi.yellow(message), details, LogLevel.Warning);\n\t}\n\n\t/**\n\t * Logs a success message.\n\t * @param message - The success message.\n\t * @param details - The details of the success message.\n\t */\n\tsuccess(message: string, ...details: unknown[]): this {\n\t\treturn this.statusMessage(Ansi.green(message), details, LogLevel.Success);\n\t}\n\n\t/**\n\t * Logs an info message.\n\t * @param message - The info message.\n\t * @param details - The details of the info message.\n\t */\n\tinfo(message: string, ...details: unknown[]): this {\n\t\treturn this.statusMessage(message, details, LogLevel.Info);\n\t}\n\n\t/**\n\t * Logs a status message.\n\t * @param message - The status message.\n\t * @param details - The details of the status message.\n\t * @param level - The log level.\n\t */\n\tstatusMessage(message: string, details: unknown[], level?: LogLevel): this {\n\t\tlet text = message;\n\n\t\t// Append details on new indented lines below message\n\t\tif (details.length) {\n\t\t\tconst detailsPrefix = this.indentString ? this.indentString.repeat(this.indent + 1) : \"\\t\";\n\t\t\ttext += \"\\n\" + details.map((detail) => detailsPrefix + String(detail)).join(\"\\n\");\n\t\t}\n\n\t\treturn this.text(text, level);\n\t}\n\n\t/**\n\t * Logs the amount of errors and warnings that have been logged since the previous call to this function or the creation of this logger.\n\t */\n\tsummary(): this {\n\t\tconst errorsText = `${this.#errorCount} error${this.#errorCount != 1 ? \"s\" : \"\"}`;\n\t\tconst warningsText = `${this.#warningCount} warning${this.#warningCount != 1 ? \"s\" : \"\"}`;\n\t\tlet message = `Found ${errorsText} and ${warningsText}`;\n\t\tif (this.#errorCount > 0) {\n\t\t\tmessage = Ansi.red(message);\n\t\t} else if (this.#warningCount > 0) {\n\t\t\tmessage = Ansi.yellow(message);\n\t\t} else {\n\t\t\tmessage = Ansi.green(message);\n\t\t}\n\t\tthis.text(message);\n\t\tthis.#errorCount = 0;\n\t\tthis.#warningCount = 0;\n\t\treturn this;\n\t}\n\n\t// ===== Logging text =====\n\n\t/**\n\t * Logs a labeled parameter.\n\t * \n\t * The value is emphasized using {@link emphasize}.\n\t * @param label - The label of the parameter.\n\t * @param value - The value of the parameter.\n\t * @param level - The log level.\n\t */\n\tparameter(label: string, value: unknown, level?: LogLevel): this {\n\t\treturn this.text(`${label}: ${this.emphasize(String(value))}`, level);\n\t}\n\n\t/**\n\t * Logs properties as a list of key-value pairs.\n\t * @param properties - The properties to log.\n\t * @param level - The log level.\n\t * @see {@link value()}\n\t */\n\tproperties(properties: Record<string, unknown>, level?: LogLevel): this {\n\t\tfor (const [key, value] of Object.entries(properties)) {\n\t\t\tthis.value(`- ${key}`, value, level);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Logs a labeled value.\n\t * \n\t * The value is highlighted using {@link highlight}.\n\t * @param label - The label of the value.\n\t * @param value - The value.\n\t * @param level - The log level.\n\t */\n\tvalue(label: string, value: unknown, level?: LogLevel): this {\n\t\treturn this.text(`${label}: ${this.highlight(String(value))}`, level);\n\t}\n\n\t/**\n\t * Logs emphasized text.\n\t * @param text - The text to log.\n\t * @param level - The log level.\n\t */\n\temphasized(text: string, level?: LogLevel): this {\n\t\treturn this.text(this.emphasize(text), level);\n\t}\n\n\t/**\n\t * Logs highlighted text.\n\t * @param text - The text to log.\n\t * @param level - The log level.\n\t */\n\thighlighted(text: string, level?: LogLevel): this {\n\t\treturn this.text(this.highlight(text), level);\n\t}\n\n\t/**\n\t * Logs each item on a new line.\n\t * @param lines - The items to log.\n\t * @param level - The log level.\n\t */\n\tlines(lines: unknown[], level?: LogLevel): this {\n\t\tlines.map(String).forEach((line) => this.text(line, level));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Logs a message.\n\t * @param message - The message to log.\n\t * @param level - The log level.\n\t */\n\tlog(message: unknown, level?: LogLevel): this {\n\t\treturn this.text(String(message), level);\n\t}\n\n\t/**\n\t * Logs text using this logger's format.\n\t * @param text - The text to log.\n\t * @param level - The log level.\n\t */\n\ttext(text: string, level: LogLevel = LogLevel.Debug): this {\n\t\tif (!this.isLevelEnabled(level))\n\t\t\treturn this;\n\n\t\tconst message = this.format(this.applyPrefix(text, level));\n\t\tswitch (level) {\n\t\t\tcase LogLevel.Info:\n\t\t\t\tconsole.info(message);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.Warning:\n\t\t\t\tconsole.warn(message);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.Error:\n\t\t\t\tconsole.error(message);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.log(message);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Logs an newline character.\n\t */\n\tnewLine(): this {\n\t\tconsole.log(\"\\n\");\n\t\treturn this;\n\t}\n\n\t/**\n\t * Checks if the given log level is enabled.\n\t * @param level - The log level to check.\n\t */\n\tisLevelEnabled(level: LogLevel) {\n\t\tif (this.level === undefined)\n\t\t\treturn true;\n\n\t\treturn Array.isArray(this.level)\n\t\t\t? this.level.includes(level)\n\t\t\t: this.level <= level;\n\t}\n\n\t// ===== Formatting strings =====\n\n\t/**\n\t * Formats text using this logger's formatting properties.\n\t * @param text - The text to format.\n\t */\n\tformat(text: string) {\n\t\tif (this.indentString) {\n\t\t\treturn this.applyPrefix(this.indentString.repeat(this.indent) + text);\n\t\t} else {\n\t\t\treturn this.applyPrefix(text);\n\t\t}\n\t}\n\n\t/**\n\t * Prepends a prefix to text.\n\t * @param text - The text to apply the prefix to.\n\t * @param level - The log level.\n\t */\n\tapplyPrefix(text: string, level?: LogLevel) {\n\t\tconst prefix = level ? this.prefix[level] : this.prefix.global;\n\t\treturn prefix ? `${prefix} ${text}` : text;\n\t}\n\n}","export function heading1(text: string) {\n\treturn `# ${text}`;\n}\n\nexport function heading2(text: string) {\n\treturn `## ${text}`;\n}\n\nexport function heading3(text: string) {\n\treturn `### ${text}`;\n}\n\nexport function heading4(text: string) {\n\treturn `#### ${text}`;\n}\n\nexport function heading5(text: string) {\n\treturn `##### ${text}`;\n}\n\nexport function heading6(text: string) {\n\treturn `###### ${text}`;\n}\n\nexport function bold(text: string) {\n\treturn `**${text}**`;\n}\n\nexport function italic(text: string) {\n\treturn `*${text}*`;\n}\n\nexport function code(text: string) {\n\treturn `\\`${text}\\``;\n}\n\nexport function codeBlock(text: string) {\n\treturn `\\`\\`\\`${text}\\`\\`\\``;\n}\n\nexport function strikethrough(text: string) {\n\treturn `~~${text}~~`;\n}\n\nexport function link(label: string, url: string) {\n\treturn `[${label}](${url})`;\n}\n\nexport function quote(text: string) {\n\treturn `> ${text}`;\n}\n\nexport function horizontalRule() {\n\treturn \"---\";\n}","export class Vector2 {\n\tx: number;\n\ty: number;\n\n\tconstructor(xy: number)\n\tconstructor(x: number, y?: number)\n\tconstructor(x: number, y?: number) {\n\t\tthis.x = x;\n\t\tthis.y = y ?? x;\n\t}\n\n\tstatic get ZERO() {\n\t\treturn new Vector2(0, 0);\n\t};\n\n\tget clone() {\n\t\treturn new Vector2(this.x, this.y);\n\t}\n\n\tget magnitude() {\n\t\treturn this.getDistance(this);\n\t}\n\n\tsetX(x: number): this {\n\t\tthis.x = x;\n\t\treturn this;\n\t}\n\n\tsetY(y: number): this {\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tset(x: number, y: number): this {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tround(): this {\n\t\tthis.x = Math.round(this.x);\n\t\tthis.y = Math.round(this.y);\n\t\treturn this;\n\t}\n\n\tnormalize() {\n\t\tconst magnitude = this.magnitude;\n\t\treturn this.scale(magnitude === 0 ? 0 : 1 / magnitude);\n\t}\n\n\tscale(scalar: number) {\n\t\treturn this.multiply(scalar);\n\t}\n\n\tgetDistanceSquared(x: number, y?: number): number;\n\tgetDistanceSquared(vector2: Vector2): number;\n\tgetDistanceSquared(x: number | Vector2, y?: number): number {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\tconst deltaX = this.x - other.x;\n\t\tconst deltaY = this.y - other.y;\n\t\treturn deltaX * deltaX + deltaY * deltaY;\n\t}\n\n\tgetDistance(x: number, y?: number): number;\n\tgetDistance(vector2: Vector2): number;\n\tgetDistance(x: number | Vector2, y?: number): number {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\treturn Math.sqrt(this.getDistanceSquared(other.x, other.y));\n\t}\n\n\t\n\tadd(x: number, y?: number): this;\n\tadd(vector2: Vector2): this;\n\tadd(x: number | Vector2, y?: number): this {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\tthis.x += other.x;\n\t\tthis.y += other.y;\n\t\treturn this;\n\t}\n\n\tsubtract(x: number, y?: number): this;\n\tsubtract(vector2: Vector2): this;\n\tsubtract(x: number | Vector2, y?: number): this {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\tthis.x -= other.x;\n\t\tthis.y -= other.y;\n\t\treturn this;\n\t}\n\n\tmultiply(x: number, y?: number): this;\n\tmultiply(vector2: Vector2): this;\n\tmultiply(x: number | Vector2, y?: number): this {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\tthis.x *= other.x;\n\t\tthis.y *= other.y;\n\t\treturn this;\n\t}\n\n\tdivide(x: number, y?: number): this;\n\tdivide(vector2: Vector2): this;\n\tdivide(x: number | Vector2, y?: number): this {\n\t\tconst other = Vector2.parseVector(x, y);\n\t\tthis.x /= other.x;\n\t\tthis.y /= other.y;\n\t\treturn this;\n\t}\n\n\tlerp(vector2: Vector2, t: number): this {\n\t\tthis.x += (vector2.x - this.x) * t;\n\t\tthis.y += (vector2.y - this.y) * t;\n\t\treturn this;\n\t}\n\n\tstatic sum(vector2A: Vector2, vector2B: Vector2) {\n\t\treturn vector2A.clone.add(vector2B);\n\t}\n\n\tstatic difference(vector2A: Vector2, vector2B: Vector2) {\n\t\treturn vector2A.clone.subtract(vector2B);\n\t}\n\n\tstatic product(vector2A: Vector2, vector2B: Vector2) {\n\t\treturn vector2A.clone.multiply(vector2B);\n\t}\n\n\tstatic division(vector2A: Vector2, vector2B: Vector2) {\n\t\treturn vector2A.clone.divide(vector2B);\n\t}\n\n\tstatic scale(vector2: Vector2, scalar: number) {\n\t\treturn vector2.clone.scale(scalar);\n\t}\n\n\tstatic normalize(vector2: Vector2) {\n\t\treturn vector2.clone.normalize();\n\t}\n\n\tstatic lerp(vector2A: Vector2, vector2B: Vector2, t: number) {\n\t\treturn vector2A.clone.lerp(vector2B, t);\n\t}\n\n\tstatic from({ x, y }: { x: number, y: number }) {\n\t\treturn new Vector2(x, y);\n\t}\n\n\tstatic parseVector(x: number | Vector2, y?: number): { x: number, y: number} {\n\t\tif (x instanceof Vector2) {\n\t\t\ty = x.y;\n\t\t\tx = x.x;\n\t\t} else if (y === undefined) {\n\t\t\ty = x;\n\t\t}\n\t\treturn { x, y };\n\t}\n}"],"names":["ANSI","removeFromArray","item","array","index","randomFromArray","removeDuplicatesFromArray","TIME_INDICATORS","formatTime","time","maxLength","allowAffixes","result","formatResult","inPast","prefix","suffix","units","unitLabels","key","value","amount","i","unit","formatRelativeTime","date","difference","EventEmitter","#listeners","event","listener","wrapper","args","onRejected","reason","clamp","min","max","randomRange","round","precision","factor","isValidInteger","input","isValidNumber","parseOptionalInteger","defaultValue","parseOptionalFloat","parseBool","getLongestCommonPrefix","strings","Ansi","text","#apply","code","LogLevel","Logger","#errorCount","#warningCount","options","callbackOrMessage","indentation","level","prefixOrLevel","url","message","details","detailsPrefix","detail","errorsText","warningsText","label","properties","lines","line","heading1","heading2","heading3","heading4","heading5","heading6","bold","italic","codeBlock","strikethrough","link","quote","horizontalRule","Vector2","x","y","magnitude","scalar","other","deltaX","deltaY","vector2","t","vector2A","vector2B"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prozilla-os/shared",
|
|
3
3
|
"description": "A library of shared utility functions for ProzillaOS packages.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"homepage": "https://os.prozilla.dev",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Prozilla",
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^20.14.5",
|
|
23
|
-
"@types/react": "^18.3.
|
|
23
|
+
"@types/react": "^18.3.27",
|
|
24
24
|
"@vitejs/plugin-react-swc": "^3.7.0",
|
|
25
25
|
"typescript": "^5.5.4",
|
|
26
|
-
"vite": "^
|
|
27
|
-
"vite-plugin-dts": "^
|
|
28
|
-
"vite-plugin-lib-inject-css": "^2.1.1"
|
|
26
|
+
"vite": "^7.3.1",
|
|
27
|
+
"vite-plugin-dts": "^4.5.4",
|
|
28
|
+
"vite-plugin-lib-inject-css": "^2.1.1",
|
|
29
|
+
"vitest": "^4.0.18"
|
|
29
30
|
},
|
|
30
31
|
"files": [
|
|
31
32
|
"dist"
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"access": "public"
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
|
-
"build": "tsc && vite build"
|
|
39
|
+
"build": "tsc && vite build",
|
|
40
|
+
"test": "vitest"
|
|
39
41
|
}
|
|
40
42
|
}
|