@mojir/lits 2.2.2 → 2.2.4
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/README.md +0 -8
- package/dist/cli/cli.js +1145 -1105
- package/dist/cli/src/AutoCompleter/AutoCompleter.d.ts +2 -1
- package/dist/cli/src/builtin/bindingNode.d.ts +3 -3
- package/dist/cli/src/builtin/index.d.ts +0 -1
- package/dist/cli/src/builtin/interface.d.ts +3 -4
- package/dist/cli/src/builtin/specialExpressionTypes.d.ts +0 -1
- package/dist/cli/src/builtin/specialExpressions/and.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/array.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/block.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/cond.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/if.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/loop.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/loops.d.ts +4 -4
- package/dist/cli/src/builtin/specialExpressions/object.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/or.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/qq.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/recur.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/switch.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/throw.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/try.d.ts +2 -2
- package/dist/cli/src/builtin/specialExpressions/unless.d.ts +2 -2
- package/dist/cli/src/builtin/utils.d.ts +2 -2
- package/dist/cli/src/evaluator/index.d.ts +2 -2
- package/dist/cli/src/evaluator/interface.d.ts +4 -3
- package/dist/cli/src/getUndefinedSymbols/index.d.ts +2 -2
- package/dist/cli/src/parser/ParserContext.d.ts +20 -0
- package/dist/cli/src/parser/helpers.d.ts +19 -0
- package/dist/cli/src/parser/index.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/getPrecedence.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseArray.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
- package/dist/cli/src/parser/subParsers/parseCond.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseDo.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseFunction.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
- package/dist/cli/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
- package/dist/cli/src/parser/subParsers/parseLet.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseLoop.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseNumber.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseObject.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseOperand.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseString.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseSwitch.d.ts +4 -0
- package/dist/cli/src/parser/subParsers/parseSymbol.d.ts +3 -0
- package/dist/cli/src/parser/subParsers/parseTry.d.ts +4 -0
- package/dist/cli/src/parser/types.d.ts +19 -26
- package/dist/cli/src/testFramework/index.d.ts +3 -2
- package/dist/cli/src/tokenizer/token.d.ts +0 -2
- package/dist/cli/src/tokenizer/tokenizers.d.ts +2 -2
- package/dist/cli/src/typeGuards/astNode.d.ts +18 -19
- package/dist/cli/src/typeGuards/index.d.ts +0 -1
- package/dist/cli/src/typeGuards/lits.d.ts +0 -1
- package/dist/full.esm.js +1 -1
- package/dist/full.esm.js.map +1 -1
- package/dist/full.js +1 -1
- package/dist/full.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +1 -1
- package/dist/lits.iife.js.map +1 -1
- package/dist/modules/assert.esm.js.map +1 -1
- package/dist/modules/assert.js.map +1 -1
- package/dist/modules/bitwise.esm.js.map +1 -1
- package/dist/modules/bitwise.js.map +1 -1
- package/dist/modules/collection.esm.js.map +1 -1
- package/dist/modules/collection.js.map +1 -1
- package/dist/modules/functional.esm.js.map +1 -1
- package/dist/modules/functional.js.map +1 -1
- package/dist/modules/grid.esm.js.map +1 -1
- package/dist/modules/grid.js.map +1 -1
- package/dist/modules/linear-algebra.esm.js.map +1 -1
- package/dist/modules/linear-algebra.js.map +1 -1
- package/dist/modules/matrix.esm.js.map +1 -1
- package/dist/modules/matrix.js.map +1 -1
- package/dist/modules/number-theory.esm.js.map +1 -1
- package/dist/modules/number-theory.js.map +1 -1
- package/dist/modules/random.esm.js.map +1 -1
- package/dist/modules/random.js.map +1 -1
- package/dist/modules/sequence.esm.js.map +1 -1
- package/dist/modules/sequence.js.map +1 -1
- package/dist/modules/src/AutoCompleter/AutoCompleter.d.ts +2 -1
- package/dist/modules/src/builtin/bindingNode.d.ts +3 -3
- package/dist/modules/src/builtin/index.d.ts +0 -1
- package/dist/modules/src/builtin/interface.d.ts +3 -4
- package/dist/modules/src/builtin/specialExpressionTypes.d.ts +0 -1
- package/dist/modules/src/builtin/specialExpressions/and.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/array.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/block.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/cond.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/if.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/loop.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/loops.d.ts +4 -4
- package/dist/modules/src/builtin/specialExpressions/object.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/or.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/qq.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/recur.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/switch.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/throw.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/try.d.ts +2 -2
- package/dist/modules/src/builtin/specialExpressions/unless.d.ts +2 -2
- package/dist/modules/src/builtin/utils.d.ts +2 -2
- package/dist/modules/src/evaluator/index.d.ts +2 -2
- package/dist/modules/src/evaluator/interface.d.ts +4 -3
- package/dist/modules/src/getUndefinedSymbols/index.d.ts +2 -2
- package/dist/modules/src/parser/ParserContext.d.ts +20 -0
- package/dist/modules/src/parser/helpers.d.ts +19 -0
- package/dist/modules/src/parser/index.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/getPrecedence.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseArray.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
- package/dist/modules/src/parser/subParsers/parseCond.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseDo.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseFunction.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
- package/dist/modules/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
- package/dist/modules/src/parser/subParsers/parseLet.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseLoop.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseNumber.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseObject.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseOperand.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseString.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseSwitch.d.ts +4 -0
- package/dist/modules/src/parser/subParsers/parseSymbol.d.ts +3 -0
- package/dist/modules/src/parser/subParsers/parseTry.d.ts +4 -0
- package/dist/modules/src/parser/types.d.ts +19 -26
- package/dist/modules/src/testFramework/index.d.ts +3 -2
- package/dist/modules/src/tokenizer/token.d.ts +0 -2
- package/dist/modules/src/tokenizer/tokenizers.d.ts +2 -2
- package/dist/modules/src/typeGuards/astNode.d.ts +18 -19
- package/dist/modules/src/typeGuards/index.d.ts +0 -1
- package/dist/modules/src/typeGuards/lits.d.ts +0 -1
- package/dist/modules/string.esm.js.map +1 -1
- package/dist/modules/string.js.map +1 -1
- package/dist/modules/vector.esm.js.map +1 -1
- package/dist/modules/vector.js.map +1 -1
- package/dist/src/AutoCompleter/AutoCompleter.d.ts +2 -1
- package/dist/src/builtin/bindingNode.d.ts +3 -3
- package/dist/src/builtin/index.d.ts +0 -1
- package/dist/src/builtin/interface.d.ts +3 -4
- package/dist/src/builtin/specialExpressionTypes.d.ts +0 -1
- package/dist/src/builtin/specialExpressions/and.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/array.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/block.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/cond.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/if.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/loop.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/loops.d.ts +4 -4
- package/dist/src/builtin/specialExpressions/object.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/or.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/qq.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/recur.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/switch.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/throw.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/try.d.ts +2 -2
- package/dist/src/builtin/specialExpressions/unless.d.ts +2 -2
- package/dist/src/builtin/utils.d.ts +2 -2
- package/dist/src/evaluator/index.d.ts +2 -2
- package/dist/src/evaluator/interface.d.ts +4 -3
- package/dist/src/getUndefinedSymbols/index.d.ts +2 -2
- package/dist/src/parser/ParserContext.d.ts +20 -0
- package/dist/src/parser/helpers.d.ts +19 -0
- package/dist/src/parser/index.d.ts +3 -0
- package/dist/src/parser/subParsers/getPrecedence.d.ts +3 -0
- package/dist/src/parser/subParsers/parseArray.d.ts +3 -0
- package/dist/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
- package/dist/src/parser/subParsers/parseCond.d.ts +4 -0
- package/dist/src/parser/subParsers/parseDo.d.ts +3 -0
- package/dist/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
- package/dist/src/parser/subParsers/parseFunction.d.ts +4 -0
- package/dist/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
- package/dist/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
- package/dist/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
- package/dist/src/parser/subParsers/parseLet.d.ts +4 -0
- package/dist/src/parser/subParsers/parseLoop.d.ts +4 -0
- package/dist/src/parser/subParsers/parseNumber.d.ts +3 -0
- package/dist/src/parser/subParsers/parseObject.d.ts +3 -0
- package/dist/src/parser/subParsers/parseOperand.d.ts +3 -0
- package/dist/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
- package/dist/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
- package/dist/src/parser/subParsers/parseString.d.ts +4 -0
- package/dist/src/parser/subParsers/parseSwitch.d.ts +4 -0
- package/dist/src/parser/subParsers/parseSymbol.d.ts +3 -0
- package/dist/src/parser/subParsers/parseTry.d.ts +4 -0
- package/dist/src/parser/types.d.ts +19 -26
- package/dist/src/testFramework/index.d.ts +3 -2
- package/dist/src/tokenizer/token.d.ts +0 -2
- package/dist/src/tokenizer/tokenizers.d.ts +2 -2
- package/dist/src/typeGuards/astNode.d.ts +18 -19
- package/dist/src/typeGuards/index.d.ts +0 -1
- package/dist/src/typeGuards/lits.d.ts +0 -1
- package/dist/testFramework.esm.js +1 -1
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +1 -1
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/src/parser/Parser.d.ts +0 -58
- package/dist/modules/src/parser/Parser.d.ts +0 -58
- package/dist/src/parser/Parser.d.ts +0 -58
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.esm.js","sources":["../../src/utils/debug/getCodeMarker.ts","../../src/errors.ts","../../src/constants/constants.ts","../../src/utils/debug/debugTools.ts","../../src/utils/symbols.ts","../../src/utils/debug/getSourceCodeInfo.ts","../../src/utils/getAssertionError.ts","../../src/typeGuards/array.ts","../../src/typeGuards/lits.ts","../../src/typeGuards/number.ts","../../src/typeGuards/string.ts","../../src/utils/arity.ts","../../src/builtin/modules/random/docs.ts","../../src/builtin/modules/random/index.ts"],"sourcesContent":["import type { SourceCodeInfo } from '../../tokenizer/token'\n\nexport function getCodeMarker(sourceCodeInfo: SourceCodeInfo): string {\n if (!sourceCodeInfo.position || !sourceCodeInfo.code)\n return ''\n\n const leftPadding = sourceCodeInfo.position.column - 1\n const rightPadding = sourceCodeInfo.code.length - leftPadding - 1\n return `${' '.repeat(Math.max(leftPadding, 0))}^${' '.repeat(Math.max(rightPadding, 0))}`\n}\n","import { getCodeMarker } from '../src/utils/debug/getCodeMarker'\nimport type { Arr } from './interface'\nimport type { SourceCodeInfo } from './tokenizer/token'\n\nfunction getLitsErrorMessage(message: string, sourceCodeInfo?: SourceCodeInfo) {\n if (!sourceCodeInfo) {\n return message\n }\n const location = `${sourceCodeInfo.position.line}:${sourceCodeInfo.position.column}`\n const filePathLine = sourceCodeInfo.filePath\n ? `\\n${sourceCodeInfo.filePath}:${location}`\n : `\\nLocation ${location}`\n const codeLine = `\\n${sourceCodeInfo.code}`\n const codeMarker = `\\n${getCodeMarker(sourceCodeInfo)}`\n return `${message}${filePathLine}${codeLine}${codeMarker}`\n}\n\nexport class RecurSignal extends Error {\n public params: Arr\n constructor(params: Arr) {\n super(`recur, params: ${params}`)\n Object.setPrototypeOf(this, RecurSignal.prototype)\n this.name = 'RecurSignal'\n this.params = params\n }\n}\n\nexport class LitsError extends Error {\n public readonly sourceCodeInfo?: SourceCodeInfo\n public readonly shortMessage: string\n constructor(err: unknown, sourceCodeInfo: SourceCodeInfo | undefined) {\n const message = err instanceof Error\n ? err.message\n : `${err}`\n\n super(getLitsErrorMessage(message, sourceCodeInfo))\n this.shortMessage = message\n this.sourceCodeInfo = sourceCodeInfo\n Object.setPrototypeOf(this, LitsError.prototype)\n this.name = 'LitsError'\n }\n\n public getCodeMarker(): string | undefined {\n return this.sourceCodeInfo && getCodeMarker(this.sourceCodeInfo)\n }\n}\n\nexport class UserDefinedError extends LitsError {\n public userMessage: string\n constructor(message: string, sourceCodeInfo?: SourceCodeInfo) {\n super(message, sourceCodeInfo)\n this.userMessage = message\n Object.setPrototypeOf(this, UserDefinedError.prototype)\n this.name = 'UserDefinedError'\n }\n}\n\nexport class AssertionError extends LitsError {\n constructor(message: string | Error, sourceCodeInfo?: SourceCodeInfo) {\n super(message, sourceCodeInfo)\n Object.setPrototypeOf(this, AssertionError.prototype)\n this.name = 'AssertionError'\n }\n}\n\nexport class UndefinedSymbolError extends LitsError {\n public symbol: string\n constructor(symbolName: string, sourceCodeInfo?: SourceCodeInfo) {\n const message = `Undefined symbol '${symbolName}'.`\n super(message, sourceCodeInfo)\n this.symbol = symbolName\n Object.setPrototypeOf(this, UndefinedSymbolError.prototype)\n this.name = 'UndefinedSymbolError'\n }\n}\n\nexport function isLitsError(error: unknown): error is LitsError {\n return error instanceof LitsError\n}\n","export const NodeTypes = {\n Number: 1,\n String: 2,\n NormalExpression: 3,\n SpecialExpression: 4,\n UserDefinedSymbol: 5,\n NormalBuiltinSymbol: 6,\n SpecialBuiltinSymbol: 7,\n ReservedSymbol: 8,\n Binding: 9,\n Spread: 10,\n} as const\n\nconst NodeTypesSet = new Set(Object.values(NodeTypes))\n\nexport type NodeType = typeof NodeTypes[keyof typeof NodeTypes]\n\nexport function getNodeTypeName(type: NodeType): keyof typeof NodeTypes {\n return Object.keys(NodeTypes).find(key => NodeTypes[key as keyof typeof NodeTypes] === type) as keyof typeof NodeTypes\n}\n\n// TODO, is this needed?\nexport function isNodeType(type: unknown): type is NodeType {\n return typeof type === 'number' && NodeTypesSet.has(type as NodeType)\n}\n\nconst functionTypes = [\n 'UserDefined',\n 'Partial',\n 'Comp',\n 'Constantly',\n 'Juxt',\n 'Complement',\n 'EveryPred',\n 'SomePred',\n 'Fnull',\n 'Builtin',\n 'SpecialBuiltin',\n 'NativeJsFunction',\n 'Module',\n] as const\n\nconst functionTypeSet = new Set(functionTypes)\n\nexport type FunctionType = typeof functionTypes[number]\n\nexport function isFunctionType(type: unknown): type is FunctionType {\n return typeof type === 'string' && functionTypeSet.has(type as FunctionType)\n}\n","import { getNodeTypeName, isFunctionType, isNodeType } from '../../constants/constants'\nimport type { LitsFunction, Node } from '../../parser/types'\nimport { FUNCTION_SYMBOL } from '../symbols'\n\nfunction isLitsFunction(func: unknown): func is LitsFunction {\n if (func === null || typeof func !== 'object')\n return false\n\n return FUNCTION_SYMBOL in func && 'functionType' in func && isFunctionType(func.functionType)\n}\n\nfunction isNode(value: unknown): value is Node {\n if (!Array.isArray(value) || value.length < 2)\n return false\n return isNodeType(value[0])\n}\n\nexport function valueToString(value: unknown): string {\n if (isLitsFunction(value))\n // eslint-disable-next-line ts/no-unsafe-member-access\n return `<function ${(value as any).name || '\\u03BB'}>`\n\n if (isNode(value))\n return `${getNodeTypeName(value[0])}-node`\n\n if (value === null)\n return 'null'\n\n if (typeof value === 'object' && value instanceof RegExp)\n return `${value}`\n\n if (typeof value === 'object' && value instanceof Error)\n return value.toString()\n\n return JSON.stringify(value)\n}\n","export const FUNCTION_SYMBOL = '^^fn^^'\nexport const REGEXP_SYMBOL = '^^re^^'\n","import type { SourceCodeInfo } from '../../tokenizer/token'\n\nexport function getSourceCodeInfo(anyValue: any, sourceCodeInfo: SourceCodeInfo | undefined): SourceCodeInfo | undefined {\n // eslint-disable-next-line ts/no-unsafe-return, ts/no-unsafe-member-access\n return anyValue?.sourceCodeInfo ?? sourceCodeInfo\n}\n","import { LitsError } from '../errors'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { valueToString } from './debug/debugTools'\nimport { getSourceCodeInfo } from './debug/getSourceCodeInfo'\n\nexport function getAssertionError(typeName: string, value: unknown, sourceCodeInfo?: SourceCodeInfo): LitsError {\n return new LitsError(`Expected ${typeName}, got ${valueToString(value)}.`, getSourceCodeInfo(value, sourceCodeInfo))\n}\n","import type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\n\n// isArray not needed, use Array.isArary\nexport function asArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): unknown[] {\n assertArray(value, sourceCodeInfo)\n return value\n}\nexport function assertArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is unknown[] {\n if (!Array.isArray(value))\n throw getAssertionError('array', value, sourceCodeInfo)\n}\n\nexport function isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(v => typeof v === 'string')\n}\nexport function asStringArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): string[] {\n assertStringArray(value, sourceCodeInfo)\n return value\n}\nexport function assertStringArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is string[] {\n if (!isStringArray(value))\n throw getAssertionError('array of strings', value, sourceCodeInfo)\n}\n\nexport function isCharArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(v => typeof v === 'string' && v.length === 1)\n}\nexport function asCharArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): string[] {\n assertCharArray(value, sourceCodeInfo)\n return value\n}\nexport function assertCharArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is string[] {\n if (!isCharArray(value))\n throw getAssertionError('array of strings', value, sourceCodeInfo)\n}\n","import type { Any, Coll, Obj, Seq } from '../interface'\nimport type { FunctionLike, RegularExpression } from '../parser/types'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\nimport { REGEXP_SYMBOL } from '../utils/symbols'\nimport { isLitsFunction } from './litsFunction'\n\nexport function isAny(value: unknown): value is Any {\n // TODO weak test\n return value !== undefined\n}\nexport function asAny(value: unknown, sourceCodeInfo?: SourceCodeInfo): Any {\n assertAny(value, sourceCodeInfo)\n return value\n}\nexport function assertAny(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Any {\n if (!isAny(value))\n throw getAssertionError('not undefined', value, sourceCodeInfo)\n}\n\nexport function isSeq(value: unknown): value is Seq {\n return Array.isArray(value) || typeof value === 'string'\n}\nexport function asSeq(value: unknown, sourceCodeInfo?: SourceCodeInfo): Seq {\n assertSeq(value, sourceCodeInfo)\n return value\n}\nexport function assertSeq(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Seq {\n if (!isSeq(value))\n throw getAssertionError('string or array', value, sourceCodeInfo)\n}\n\nexport function isObj(value: unknown): value is Obj {\n return !(\n value === null\n || typeof value !== 'object'\n || Array.isArray(value)\n || value instanceof RegExp\n || isLitsFunction(value)\n || isRegularExpression(value)\n )\n}\nexport function asObj(value: unknown, sourceCodeInfo?: SourceCodeInfo): Obj {\n assertObj(value, sourceCodeInfo)\n return value\n}\nexport function assertObj(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Obj {\n if (!isObj(value))\n throw getAssertionError('object', value, sourceCodeInfo)\n}\n\nexport function isColl(value: unknown): value is Coll {\n return isSeq(value) || isObj(value)\n}\nexport function asColl(value: unknown, sourceCodeInfo?: SourceCodeInfo): Coll {\n assertColl(value, sourceCodeInfo)\n return value\n}\nexport function assertColl(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Coll {\n if (!isColl(value))\n throw getAssertionError('string, array or object', value, sourceCodeInfo)\n}\n\nexport function isRegularExpression(regexp: unknown): regexp is RegularExpression {\n if (regexp === null || typeof regexp !== 'object')\n return false\n\n return !!(regexp as RegularExpression)[REGEXP_SYMBOL]\n}\nexport function asRegularExpression(value: unknown, sourceCodeInfo?: SourceCodeInfo): RegularExpression {\n assertRegularExpression(value, sourceCodeInfo)\n return value\n}\nexport function assertRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is RegularExpression {\n if (!isRegularExpression(value))\n throw getAssertionError('RegularExpression', value, sourceCodeInfo)\n}\n\nexport function isStringOrRegularExpression(value: unknown): value is string | RegularExpression {\n return isRegularExpression(value) || typeof value === 'string'\n}\nexport function asStringOrRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): string | RegularExpression {\n assertStringOrRegularExpression(value, sourceCodeInfo)\n return value\n}\nexport function assertStringOrRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is string | RegularExpression {\n if (!isStringOrRegularExpression(value))\n throw getAssertionError('string or RegularExpression', value, sourceCodeInfo)\n}\n\nexport function isFunctionLike(value: unknown): value is FunctionLike {\n if (typeof value === 'number')\n return true\n if (isColl(value))\n return true\n if (isLitsFunction(value))\n return true\n\n return false\n}\nexport function asFunctionLike(value: unknown, sourceCodeInfo?: SourceCodeInfo): FunctionLike {\n assertFunctionLike(value, sourceCodeInfo)\n return value\n}\nexport function assertFunctionLike(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is FunctionLike {\n if (!isFunctionLike(value))\n throw getAssertionError('FunctionLike', value, sourceCodeInfo)\n}\n","import { LitsError } from '../errors'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { valueToString } from '../utils/debug/debugTools'\nimport { getSourceCodeInfo } from '../utils/debug/getSourceCodeInfo'\n\ntype SignOptions =\n | {\n positive?: true\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: true\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: true\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: true\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: true\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: true\n }\n\ntype GtOptions =\n | {\n gt?: number\n gte?: never\n }\n | {\n gt?: never\n gte?: number\n }\n\ntype LtOptions =\n | {\n lt?: number\n lte?: never\n }\n | {\n lt?: never\n lte?: number\n }\n\ntype NumberOptions = {\n integer?: true\n finite?: true\n} & SignOptions &\nGtOptions &\nLtOptions\n\nfunction getRangeString(options: NumberOptions): string {\n const hasUpperAndLowerBound\n = (typeof options.gt === 'number' || typeof options.gte === 'number')\n && (typeof options.lt === 'number' || typeof options.lte === 'number')\n if (hasUpperAndLowerBound) {\n return `${typeof options.gt === 'number' ? `${options.gt} < n ` : `${options.gte} <= n `}${\n typeof options.lt === 'number' ? `< ${options.lt}` : `<= ${options.lte}`\n }`\n }\n else if (typeof options.gt === 'number' || typeof options.gte === 'number') {\n return `${typeof options.gt === 'number' ? `n > ${options.gt}` : `n >= ${options.gte}`}`\n }\n else if (typeof options.lt === 'number' || typeof options.lte === 'number') {\n return `${typeof options.lt === 'number' ? `n < ${options.lt}` : `n <= ${options.lte}`}`\n }\n else { return '' }\n}\n\nfunction getSignString(options: NumberOptions): string {\n return options.positive\n ? 'positive'\n : options.negative\n ? 'negative'\n : options.nonNegative\n ? 'non negative'\n : options.nonPositive\n ? 'non positive'\n : options.nonZero\n ? 'non zero'\n : ''\n}\n\nfunction getNumberTypeName(options: NumberOptions): string {\n if (options.zero)\n return 'zero'\n\n const sign = getSignString(options)\n const numberType = options.integer ? 'integer' : 'number'\n const finite = options.finite ? 'finite' : ''\n const range = getRangeString(options)\n\n return [sign, finite, numberType, range].filter(x => !!x).join(' ')\n}\n\nexport function isNumber(value: unknown, options: NumberOptions = {}): value is number {\n if (typeof value !== 'number')\n return false\n\n if (Number.isNaN(value))\n return false\n\n if (options.integer && !Number.isInteger(value))\n return false\n\n if (options.finite && !Number.isFinite(value))\n return false\n\n if (options.zero && value !== 0)\n return false\n\n if (options.nonZero && value === 0)\n return false\n\n if (options.positive && value <= 0)\n return false\n\n if (options.negative && value >= 0)\n return false\n\n if (options.nonPositive && value > 0)\n return false\n\n if (options.nonNegative && value < 0)\n return false\n\n if (typeof options.gt === 'number' && value <= options.gt)\n return false\n\n if (typeof options.gte === 'number' && value < options.gte)\n return false\n\n if (typeof options.lt === 'number' && value >= options.lt)\n return false\n\n if (typeof options.lte === 'number' && value > options.lte)\n return false\n\n return true\n}\n\nexport function assertNumber(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n options: NumberOptions = {},\n): asserts value is number {\n if (!isNumber(value, options)) {\n throw new LitsError(\n `Expected ${getNumberTypeName(options)}, got ${valueToString(value)}.`,\n getSourceCodeInfo(value, sourceCodeInfo),\n )\n }\n}\n\nexport function asNumber(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: NumberOptions = {},\n): number {\n assertNumber(value, sourceCodeInfo, options)\n return value\n}\n","import type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\n\ntype StringAssertionOptions =\n | {\n nonEmpty?: true\n char?: never\n }\n | {\n nonEmpty?: never\n char?: true\n }\n\nexport function isString(value: unknown, options: StringAssertionOptions = {}): value is string {\n if (typeof value !== 'string')\n return false\n\n if (options.nonEmpty && value.length === 0)\n return false\n\n if (options.char && value.length !== 1)\n return false\n\n return true\n}\n\nexport function assertString(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: StringAssertionOptions = {},\n): asserts value is string {\n if (!isString(value, options)) {\n throw getAssertionError(\n `${options.nonEmpty ? 'non empty string' : options.char ? 'character' : 'string'}`,\n value,\n sourceCodeInfo,\n )\n }\n}\n\nexport function asString(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: StringAssertionOptions = {},\n): string {\n assertString(value, sourceCodeInfo, options)\n return value\n}\n\nexport function isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number'\n}\nexport function asStringOrNumber(value: unknown, sourceCodeInfo?: SourceCodeInfo): string | number {\n assertStringOrNumber(value, sourceCodeInfo)\n return value\n}\nexport function assertStringOrNumber(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is string | number {\n if (!isStringOrNumber(value))\n throw getAssertionError('string or number', value, sourceCodeInfo)\n}\n","import type { Arity } from '../builtin/interface'\nimport { LitsError } from '../errors'\nimport type { FunctionLike } from '../parser/types'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { isColl } from '../typeGuards/lits'\nimport { valueToString } from './debug/debugTools'\n\nexport function arityAccepts(arity: Arity, nbrOfParams: number): boolean {\n const { min, max } = arity\n if (typeof min === 'number' && nbrOfParams < min) {\n return false\n }\n if (typeof max === 'number' && nbrOfParams > max) {\n return false\n }\n return true\n}\n\nexport function arityAcceptsMin(arity: Arity, nbrOfParams: number): boolean {\n const { min } = arity\n if (typeof min === 'number' && nbrOfParams < min) {\n return false\n }\n return true\n}\n\nexport function getCommonArityFromFunctions(params: FunctionLike[]): Arity | null {\n return params.reduce((acc: Arity | null, param): Arity | null => {\n if (acc === null) {\n return null\n }\n const arity: Arity = (typeof param === 'number' || isColl(param)) ? toFixedArity(1) : param.arity\n const { min: aMin, max: aMax } = arity\n const { min: bMin, max: bMax } = acc\n const min = typeof aMin === 'number' && typeof bMin === 'number'\n ? Math.max(aMin, bMin)\n : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined\n const max = typeof aMax === 'number' && typeof bMax === 'number'\n ? Math.min(aMax, bMax)\n : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined\n\n if (typeof min === 'number' && typeof max === 'number' && min > max) {\n return null\n }\n\n return { min, max }\n }, {})\n}\n\nexport function getArityFromFunction(param: FunctionLike): Arity {\n return (typeof param === 'number' || isColl(param)) ? toFixedArity(1) : param.arity\n}\n\nexport function assertNumberOfParams(arity: Arity, length: number, sourceCodeInfo: SourceCodeInfo | undefined): void {\n const { min, max } = arity\n if (typeof min === 'number' && length < min) {\n throw new LitsError(\n `Wrong number of arguments, expected at least ${min}, got ${valueToString(length)}.`,\n sourceCodeInfo,\n )\n }\n\n if (typeof max === 'number' && length > max) {\n throw new LitsError(\n `Wrong number of arguments, expected at most ${max}, got ${valueToString(length)}.`,\n sourceCodeInfo,\n )\n }\n}\n\nexport function canBeOperator(count: Arity): boolean {\n if (typeof count.max === 'number' && count.max < 2) {\n return false\n }\n\n if (typeof count.min === 'number' && count.min > 2) {\n return false\n }\n\n return true\n}\n\nexport function toFixedArity(arity: number): Arity {\n return { min: arity, max: arity }\n}\n","import type { FunctionDocs } from '../../interface'\n\nexport const moduleDocs: Record<string, FunctionDocs> = {\n 'random!': {\n category: 'random',\n description: 'Returns a random number between 0 and 1.',\n returns: {\n type: 'number',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { random! } = import(\"random\"); random!()',\n ],\n seeAlso: ['random.random-float!', 'random.random-int!', 'random.random-boolean!'],\n },\n 'random-int!': {\n category: 'random',\n description: 'Returns a random integer between min and max (exclusive).',\n returns: {\n type: 'integer',\n },\n args: {\n a: {\n type: 'integer',\n description: 'The minimum value.',\n },\n b: {\n type: 'integer',\n description: 'The maximum value (exclusive).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-int! } = import(\"random\"); random-int!(0, 10)',\n 'let { random-int! } = import(\"random\"); random-int!(1, 100)',\n ],\n seeAlso: ['random.random-int-inclusive!', 'random.random-float!', 'random.random!'],\n },\n 'random-int-inclusive!': {\n category: 'random',\n description: 'Returns a random integer between min and max (inclusive).',\n returns: {\n type: 'integer',\n },\n args: {\n a: {\n type: 'integer',\n description: 'The minimum value.',\n },\n b: {\n type: 'integer',\n description: 'The maximum value (inclusive).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-int-inclusive! } = import(\"random\"); random-int-inclusive!(0, 10)',\n ],\n seeAlso: ['random.random-int!', 'random.random-float!'],\n },\n 'random-float!': {\n category: 'random',\n description: 'Returns a random float between min and max.',\n returns: {\n type: 'number',\n },\n args: {\n a: {\n type: 'number',\n description: 'The minimum value.',\n },\n b: {\n type: 'number',\n description: 'The maximum value.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-float! } = import(\"random\"); random-float!(0, 10)',\n 'let { random-float! } = import(\"random\"); random-float!(1, 100)',\n ],\n seeAlso: ['random.random!', 'random.random-int!', 'random.random-int-inclusive!'],\n },\n 'random-boolean!': {\n category: 'random',\n description: 'Returns a random boolean.',\n returns: {\n type: 'boolean',\n },\n args: {\n prob: {\n type: 'number',\n description: 'The probability of returning true (between 0 and 1).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'prob',\n ],\n },\n ],\n examples: [\n 'let { random-boolean! } = import(\"random\"); random-boolean!()',\n 'let { random-boolean! } = import(\"random\"); random-boolean!(0.99)',\n ],\n seeAlso: ['random.random!'],\n },\n 'random-item!': {\n category: 'random',\n description: 'Returns a random item from the array.',\n returns: {\n type: 'any',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n ],\n },\n ],\n examples: [\n 'let { random-item! } = import(\"random\"); random-item!([1, 2, 3, 4, 5])',\n 'let { random-item! } = import(\"random\"); random-item!([\"apple\", \"banana\", \"cherry\"])',\n ],\n seeAlso: ['random.random-sample!', 'random.random-sample-unique!', 'random.random-char!'],\n },\n 'random-sample-unique!': {\n category: 'random',\n description: 'Returns a random sample of n unique items from the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n b: {\n type: 'integer',\n description: 'The number of items to sample.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-sample-unique! } = import(\"random\"); random-sample-unique!([1, 2, 3, 4, 5], 3)',\n 'let { random-sample-unique! } = import(\"random\"); random-sample-unique!([\"apple\", \"banana\", \"cherry\"], 2)',\n ],\n seeAlso: ['random.random-sample!', 'random.random-item!', 'random.shuffle!'],\n },\n 'random-sample!': {\n category: 'random',\n description: 'Returns a random sample of n items from the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n b: {\n type: 'integer',\n description: 'The number of items to sample.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-sample! } = import(\"random\"); random-sample!([1, 2, 3, 4, 5], 3)',\n 'let { random-sample! } = import(\"random\"); random-sample!([\"apple\", \"banana\", \"cherry\"], 10)',\n ],\n seeAlso: ['random.random-sample-unique!', 'random.random-item!', 'random.shuffle!'],\n },\n 'shuffle!': {\n category: 'random',\n description: 'Returns a shuffled version of the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to shuffle.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n ],\n },\n ],\n examples: [\n 'let { shuffle! } = import(\"random\"); shuffle!([1, 2, 3, 4, 5])',\n 'let { shuffle! } = import(\"random\"); shuffle!([\"apple\", \"banana\", \"cherry\"])',\n ],\n seeAlso: ['random.random-sample!', 'random.random-sample-unique!'],\n },\n 'random-normal!': {\n category: 'random',\n description: 'Returns a random number from a normal distribution with the given mean and standard deviation.',\n returns: {\n type: 'number',\n },\n args: {\n mean: {\n type: 'number',\n description: 'The mean of the normal distribution.',\n },\n stdDev: {\n type: 'number',\n description: 'The standard deviation of the normal distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'mean',\n 'stdDev',\n ],\n },\n ],\n examples: [\n 'let { random-normal! } = import(\"random\"); random-normal!(0, 1)',\n 'let { random-normal! } = import(\"random\"); random-normal!(5, 2)',\n ],\n seeAlso: ['random.random-exponential!', 'random.random-binomial!', 'random.random-poisson!'],\n hideOperatorForm: true,\n },\n 'random-exponential!': {\n category: 'random',\n description: 'Returns a random number from an exponential distribution with the given rate parameter.',\n returns: {\n type: 'number',\n },\n args: {\n lambda: {\n type: 'number',\n description: 'The rate parameter of the exponential distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'lambda',\n ],\n },\n ],\n examples: [\n 'let { random-exponential! } = import(\"random\"); random-exponential!(1)',\n 'let { random-exponential! } = import(\"random\"); random-exponential!(0.5)',\n ],\n seeAlso: ['random.random-normal!', 'random.random-poisson!', 'random.random-gamma!', 'random.random-pareto!'],\n },\n 'random-binomial!': {\n category: 'random',\n description: 'Returns a random number from a binomial distribution with the given number of trials and probability of success.',\n returns: {\n type: 'integer',\n },\n args: {\n n: {\n type: 'integer',\n description: 'The number of trials.',\n },\n p: {\n type: 'number',\n description: 'The probability of success on each trial.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'n',\n 'p',\n ],\n },\n ],\n examples: [\n 'let { random-binomial! } = import(\"random\"); random-binomial!(10, 0.5)',\n 'let { random-binomial! } = import(\"random\"); random-binomial!(20, 0.3)',\n ],\n seeAlso: ['random.random-normal!', 'random.random-poisson!'],\n hideOperatorForm: true,\n },\n 'random-poisson!': {\n category: 'random',\n description: 'Returns a random number from a Poisson distribution with the given rate parameter.',\n returns: {\n type: 'integer',\n },\n args: {\n lambda: {\n type: 'number',\n description: 'The rate parameter of the Poisson distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'lambda',\n ],\n },\n ],\n examples: [\n 'let { random-poisson! } = import(\"random\"); random-poisson!(1)',\n 'let { random-poisson! } = import(\"random\"); random-poisson!(5)',\n ],\n seeAlso: ['random.random-binomial!', 'random.random-normal!', 'random.random-exponential!'],\n },\n 'random-gamma!': {\n category: 'random',\n description: 'Returns a random number from a gamma distribution with the given shape and scale parameters.',\n returns: {\n type: 'number',\n },\n args: {\n shape: {\n type: 'number',\n description: 'The shape parameter of the gamma distribution.',\n },\n scale: {\n type: 'number',\n description: 'The scale parameter of the gamma distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'shape',\n 'scale',\n ],\n },\n ],\n examples: [\n 'let { random-gamma! } = import(\"random\"); random-gamma!(2, 2)',\n 'let { random-gamma! } = import(\"random\"); random-gamma!(5, 1)',\n ],\n seeAlso: ['random.random-exponential!', 'random.random-pareto!'],\n hideOperatorForm: true,\n },\n 'random-pareto!': {\n category: 'random',\n description: 'Returns a random number from a Pareto distribution with the given shape parameter.',\n returns: {\n type: 'number',\n },\n args: {\n alpha: {\n type: 'number',\n description: 'The shape parameter of the Pareto distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'alpha',\n ],\n },\n ],\n examples: [\n 'let { random-pareto! } = import(\"random\"); random-pareto!(1)',\n 'let { random-pareto! } = import(\"random\"); random-pareto!(2)',\n ],\n seeAlso: ['random.random-gamma!', 'random.random-exponential!'],\n },\n 'uuid!': {\n category: 'random',\n description: 'Returns a random UUID v4 (Universally Unique Identifier).',\n returns: {\n type: 'string',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { uuid! } = import(\"random\"); uuid!()',\n ],\n seeAlso: ['random.random-id!', 'random.random-string!'],\n },\n 'random-char!': {\n category: 'random',\n description: 'Returns a random character from the given string.',\n returns: {\n type: 'string',\n },\n args: {\n charSet: {\n type: 'string',\n description: 'The string to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'charSet',\n ],\n },\n ],\n examples: [\n 'let { random-char! } = import(\"random\"); random-char!(\"abcde\")',\n 'let { random-char! } = import(\"random\"); random-char!(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")',\n ],\n seeAlso: ['random.random-string!', 'random.random-item!'],\n },\n 'random-string!': {\n category: 'random',\n description: 'Returns a random string of the given length from the given string.',\n returns: {\n type: 'string',\n },\n args: {\n length: {\n type: 'integer',\n description: 'The length of the random string.',\n },\n charSet: {\n type: 'string',\n description: 'The string to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'length',\n 'charSet',\n ],\n },\n ],\n examples: [\n 'let { random-string! } = import(\"random\"); random-string!(10, \"abcde\")',\n 'let { random-string! } = import(\"random\"); random-string!(5, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")',\n ],\n seeAlso: ['random.random-char!', 'random.random-id!', 'random.uuid!'],\n hideOperatorForm: true,\n },\n 'random-id!': {\n category: 'random',\n description: 'Returns a random ID of the given length.',\n returns: {\n type: 'string',\n },\n args: {\n length: {\n type: 'integer',\n description: 'The length of the random ID.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'length',\n ],\n },\n ],\n examples: [\n 'let { random-id! } = import(\"random\"); random-id!(10)',\n 'let { random-id! } = import(\"random\"); random-id!(5)',\n ],\n seeAlso: ['random.random-string!', 'random.uuid!'],\n },\n 'random-color!': {\n category: 'random',\n description: 'Returns a random color in hex format.',\n returns: {\n type: 'string',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { random-color! } = import(\"random\"); random-color!()',\n ],\n },\n}\n","import { LitsError } from '../../../errors'\nimport type { Any, Arr } from '../../../interface'\nimport { assertArray } from '../../../typeGuards/array'\nimport { asAny } from '../../../typeGuards/lits'\nimport { assertNumber } from '../../../typeGuards/number'\nimport { assertString } from '../../../typeGuards/string'\nimport { toFixedArity } from '../../../utils/arity'\nimport type { BuiltinNormalExpressions } from '../../../builtin/interface'\nimport type { LitsModule } from '../interface'\nimport { moduleDocs } from './docs'\n\nconst randomFunctions: BuiltinNormalExpressions = {\n 'random!': {\n evaluate: (): number => {\n return Math.random()\n },\n arity: toFixedArity(0),\n },\n 'random-int!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo, { integer: true })\n assertNumber(max, sourceCodeInfo, { integer: true, gt: min })\n return Math.floor(Math.random() * (max - min)) + min\n },\n arity: toFixedArity(2),\n },\n 'random-int-inclusive!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo, { integer: true })\n assertNumber(max, sourceCodeInfo, { integer: true, gte: min })\n return Math.floor(Math.random() * (max - min + 1)) + min\n },\n arity: toFixedArity(2),\n },\n 'random-float!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo)\n assertNumber(max, sourceCodeInfo, { gt: min })\n return Math.random() * (max - min) + min\n },\n arity: toFixedArity(2),\n },\n 'random-boolean!': {\n evaluate: ([prob], sourceCodeInfo): boolean => {\n const probability = prob ?? 0.5\n assertNumber(probability, sourceCodeInfo, { gte: 0, lte: 1 })\n return Math.random() < probability\n },\n arity: { min: 0, max: 1 },\n },\n 'random-item!': {\n evaluate: ([array], sourceCodeInfo): Any => {\n assertArray(array, sourceCodeInfo)\n const index = Math.floor(Math.random() * array.length)\n return asAny(array[index])\n },\n arity: toFixedArity(1),\n },\n 'random-sample!': {\n evaluate: ([array, n], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true })\n if (array.length === 0) {\n throw new LitsError('Cannot sample from an empty array.', sourceCodeInfo)\n }\n\n const result: Arr = []\n\n for (let i = 0; i < n; i++) {\n // Pick a random index from the array\n const randomIndex = Math.floor(Math.random() * array.length)\n // Add the randomly selected item to the result\n result.push(array[randomIndex])\n }\n\n return result\n },\n arity: toFixedArity(2),\n },\n 'random-sample-unique!': {\n evaluate: ([array, n], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true, lte: array.length })\n if (array.length === 0) {\n throw new LitsError('Cannot sample from an empty array.', sourceCodeInfo)\n }\n const result: Arr = []\n\n const copyArray = [...array]\n for (let i = 0; i < n; i++) {\n // Pick a random index from the array\n const randomIndex = Math.floor(Math.random() * copyArray.length)\n // Add the randomly selected item to the result\n result.push(copyArray[randomIndex])\n // Remove the used item from the copy array\n copyArray.splice(randomIndex, 1)\n }\n\n return result\n },\n arity: toFixedArity(2),\n },\n 'shuffle!': {\n evaluate: ([array], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n const shuffledArray = [...array]\n for (let i = shuffledArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]]\n }\n return shuffledArray\n },\n arity: toFixedArity(1),\n },\n 'random-normal!': {\n evaluate: ([mean, stdDev], sourceCodeInfo): number => {\n assertNumber(mean, sourceCodeInfo)\n assertNumber(stdDev, sourceCodeInfo, { gt: 0 })\n const u1 = Math.random()\n const u2 = Math.random()\n const z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2)\n return z0 * stdDev + mean\n },\n arity: toFixedArity(2),\n },\n 'random-exponential!': {\n evaluate: ([lambda], sourceCodeInfo): number => {\n assertNumber(lambda, sourceCodeInfo, { gt: 0 })\n const u = Math.random()\n return -Math.log(u) / lambda\n },\n arity: toFixedArity(1),\n },\n 'random-binomial!': {\n evaluate: ([n, p], sourceCodeInfo): number => {\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true })\n assertNumber(p, sourceCodeInfo, { gte: 0, lte: 1 })\n let k = 0\n for (let i = 0; i < n; i++) {\n if (Math.random() < p) {\n k++\n }\n }\n return k\n },\n arity: toFixedArity(2),\n },\n 'random-poisson!': {\n evaluate: ([lambda], sourceCodeInfo): number => {\n assertNumber(lambda, sourceCodeInfo, { gt: 0 })\n\n const L = Math.exp(-lambda)\n let k = 0\n let p = 1\n\n do {\n k++\n p *= Math.random()\n } while (p > L)\n\n return k - 1\n },\n arity: toFixedArity(1),\n },\n 'random-gamma!': {\n evaluate: ([shape, scale], sourceCodeInfo): number => {\n assertNumber(shape, sourceCodeInfo, { gt: 0 })\n assertNumber(scale, sourceCodeInfo, { gt: 0 })\n return randomGamma(shape, scale)\n },\n arity: toFixedArity(2),\n },\n 'random-pareto!': {\n evaluate: ([alpha], sourceCodeInfo): number => {\n assertNumber(alpha, sourceCodeInfo, { gt: 0 })\n const u = Math.random()\n return (1 / u) ** (1 / alpha)\n },\n arity: toFixedArity(1),\n },\n 'uuid!': {\n evaluate: (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n const random = Math.random() * 16 | 0\n const value = char === 'x' ? random : (random & 0x3 | 0x8)\n return value.toString(16)\n })\n },\n arity: toFixedArity(0),\n },\n 'random-char!': {\n evaluate: ([charSet], sourceCodeInfo): string => {\n assertString(charSet, sourceCodeInfo)\n if (charSet.length === 0) {\n throw new LitsError('Character set cannot be empty.', sourceCodeInfo)\n }\n const randomIndex = Math.floor(Math.random() * charSet.length)\n return charSet[randomIndex]!\n },\n arity: toFixedArity(1),\n },\n 'random-string!': {\n evaluate: ([length, charSet], sourceCodeInfo): string => {\n assertNumber(length, sourceCodeInfo, { integer: true, positive: true })\n assertString(charSet, sourceCodeInfo)\n if (charSet.length === 0) {\n throw new LitsError('Character set cannot be empty.', sourceCodeInfo)\n }\n let result = ''\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * charSet.length)\n result += charSet[randomIndex]!\n }\n return result\n },\n arity: toFixedArity(2),\n },\n 'random-id!': {\n evaluate: ([length], sourceCodeInfo): string => {\n assertNumber(length, sourceCodeInfo, { integer: true, positive: true })\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n let result = ''\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * chars.length)\n result += chars[randomIndex]!\n }\n return result\n },\n arity: toFixedArity(1),\n },\n 'random-color!': {\n evaluate: (): string => {\n const randomColor = Math.floor(Math.random() * 0x1000000).toString(16)\n return `#${randomColor.padStart(6, '0')}`\n },\n arity: toFixedArity(0),\n },\n}\n\n/**\n * Generates a random number from a gamma distribution\n * @param shape The shape parameter (alpha) - must be positive\n * @param scale The scale parameter (beta) - must be positive\n * @returns A random number following the gamma distribution\n */\nfunction randomGamma(shape: number, scale: number = 1): number {\n // Special case for shape < 1\n if (shape < 1) {\n const d = shape + 1.0 - 1.0 / 3.0\n return randomGamma(d, scale) * Math.random() ** (1.0 / shape)\n }\n\n // Marsaglia and Tsang method for shape >= 1\n const d = shape - 1.0 / 3.0\n const c = 1.0 / Math.sqrt(9.0 * d)\n\n let x: number, v: number, u: number\n\n while (true) {\n do {\n x = randn() // Standard normal random variable\n v = 1.0 + c * x\n } while (v <= 0)\n\n v = v * v * v\n u = Math.random()\n\n if (u < 1.0 - 0.0331 * x * x * x * x) {\n return scale * d * v\n }\n\n if (Math.log(u) < 0.5 * x * x + d * (1.0 - v + Math.log(v))) {\n return scale * d * v\n }\n }\n}\n\n/**\n * Helper function to generate standard normal random variables\n * using Box-Muller transform\n */\nfunction randn(): number {\n let u = 0\n let v = 0\n while (u === 0) u = Math.random()\n while (v === 0) v = Math.random()\n\n return Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v)\n}\n\nfor (const [key, docs] of Object.entries(moduleDocs)) {\n if (randomFunctions[key])\n randomFunctions[key].docs = docs\n}\n\nexport const randomModule: LitsModule = {\n name: 'random',\n functions: randomFunctions,\n}\n"],"names":["getCodeMarker","sourceCodeInfo","position","code","leftPadding","column","rightPadding","length","repeat","Math","max","LitsError","Error","shortMessage","constructor","err","message","super","location","line","filePath","getLitsErrorMessage","this","Object","setPrototypeOf","prototype","name","NodeTypes","Number","String","NormalExpression","SpecialExpression","UserDefinedSymbol","NormalBuiltinSymbol","SpecialBuiltinSymbol","ReservedSymbol","Binding","Spread","NodeTypesSet","Set","values","functionTypeSet","isLitsFunction","func","type","functionType","has","isNode","value","Array","isArray","valueToString","keys","find","key","RegExp","toString","JSON","stringify","getSourceCodeInfo","anyValue","getAssertionError","typeName","assertArray","asAny","undefined","isAny","assertAny","assertNumber","options","isNaN","integer","isInteger","finite","isFinite","zero","nonZero","positive","negative","nonPositive","nonNegative","gt","gte","lt","lte","isNumber","sign","getSignString","numberType","range","getRangeString","filter","x","join","getNumberTypeName","assertString","nonEmpty","char","isString","toFixedArity","arity","min","moduleDocs","category","description","returns","args","variants","argumentNames","examples","seeAlso","a","b","prob","mean","stdDev","hideOperatorForm","lambda","n","p","shape","scale","alpha","charSet","randomFunctions","evaluate","random","floor","probability","array","result","i","randomIndex","push","copyArray","splice","shuffledArray","j","u1","u2","sqrt","log","cos","PI","u","k","L","exp","randomGamma","replace","chars","padStart","d","c","v","randn","docs","entries","randomModule","functions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"random.esm.js","sources":["../../src/utils/debug/getCodeMarker.ts","../../src/errors.ts","../../src/constants/constants.ts","../../src/utils/debug/debugTools.ts","../../src/utils/symbols.ts","../../src/utils/debug/getSourceCodeInfo.ts","../../src/utils/getAssertionError.ts","../../src/typeGuards/array.ts","../../src/typeGuards/lits.ts","../../src/typeGuards/number.ts","../../src/typeGuards/string.ts","../../src/utils/arity.ts","../../src/builtin/modules/random/docs.ts","../../src/builtin/modules/random/index.ts"],"sourcesContent":["import type { SourceCodeInfo } from '../../tokenizer/token'\n\nexport function getCodeMarker(sourceCodeInfo: SourceCodeInfo): string {\n if (!sourceCodeInfo.position || !sourceCodeInfo.code)\n return ''\n\n const leftPadding = sourceCodeInfo.position.column - 1\n const rightPadding = sourceCodeInfo.code.length - leftPadding - 1\n return `${' '.repeat(Math.max(leftPadding, 0))}^${' '.repeat(Math.max(rightPadding, 0))}`\n}\n","import { getCodeMarker } from '../src/utils/debug/getCodeMarker'\nimport type { Arr } from './interface'\nimport type { SourceCodeInfo } from './tokenizer/token'\n\nfunction getLitsErrorMessage(message: string, sourceCodeInfo?: SourceCodeInfo) {\n if (!sourceCodeInfo) {\n return message\n }\n const location = `${sourceCodeInfo.position.line}:${sourceCodeInfo.position.column}`\n const filePathLine = sourceCodeInfo.filePath\n ? `\\n${sourceCodeInfo.filePath}:${location}`\n : `\\nLocation ${location}`\n const codeLine = `\\n${sourceCodeInfo.code}`\n const codeMarker = `\\n${getCodeMarker(sourceCodeInfo)}`\n return `${message}${filePathLine}${codeLine}${codeMarker}`\n}\n\nexport class RecurSignal extends Error {\n public params: Arr\n constructor(params: Arr) {\n super(`recur, params: ${params}`)\n Object.setPrototypeOf(this, RecurSignal.prototype)\n this.name = 'RecurSignal'\n this.params = params\n }\n}\n\nexport class LitsError extends Error {\n public readonly sourceCodeInfo?: SourceCodeInfo\n public readonly shortMessage: string\n constructor(err: unknown, sourceCodeInfo: SourceCodeInfo | undefined) {\n const message = err instanceof Error\n ? err.message\n : `${err}`\n\n super(getLitsErrorMessage(message, sourceCodeInfo))\n this.shortMessage = message\n this.sourceCodeInfo = sourceCodeInfo\n Object.setPrototypeOf(this, LitsError.prototype)\n this.name = 'LitsError'\n }\n\n public getCodeMarker(): string | undefined {\n return this.sourceCodeInfo && getCodeMarker(this.sourceCodeInfo)\n }\n}\n\nexport class UserDefinedError extends LitsError {\n public userMessage: string\n constructor(message: string, sourceCodeInfo?: SourceCodeInfo) {\n super(message, sourceCodeInfo)\n this.userMessage = message\n Object.setPrototypeOf(this, UserDefinedError.prototype)\n this.name = 'UserDefinedError'\n }\n}\n\nexport class AssertionError extends LitsError {\n constructor(message: string | Error, sourceCodeInfo?: SourceCodeInfo) {\n super(message, sourceCodeInfo)\n Object.setPrototypeOf(this, AssertionError.prototype)\n this.name = 'AssertionError'\n }\n}\n\nexport class UndefinedSymbolError extends LitsError {\n public symbol: string\n constructor(symbolName: string, sourceCodeInfo?: SourceCodeInfo) {\n const message = `Undefined symbol '${symbolName}'.`\n super(message, sourceCodeInfo)\n this.symbol = symbolName\n Object.setPrototypeOf(this, UndefinedSymbolError.prototype)\n this.name = 'UndefinedSymbolError'\n }\n}\n\nexport function isLitsError(error: unknown): error is LitsError {\n return error instanceof LitsError\n}\n","export const NodeTypes = {\n Number: 1,\n String: 2,\n NormalExpression: 3,\n SpecialExpression: 4,\n UserDefinedSymbol: 5,\n NormalBuiltinSymbol: 6,\n SpecialBuiltinSymbol: 7,\n ReservedSymbol: 8,\n Binding: 9,\n Spread: 10,\n} as const\n\nconst NodeTypesSet = new Set(Object.values(NodeTypes))\n\nexport type NodeType = typeof NodeTypes[keyof typeof NodeTypes]\n\nexport function getNodeTypeName(type: NodeType): keyof typeof NodeTypes {\n return Object.keys(NodeTypes).find(key => NodeTypes[key as keyof typeof NodeTypes] === type) as keyof typeof NodeTypes\n}\n\n// TODO, is this needed?\nexport function isNodeType(type: unknown): type is NodeType {\n return typeof type === 'number' && NodeTypesSet.has(type as NodeType)\n}\n\nconst functionTypes = [\n 'UserDefined',\n 'Partial',\n 'Comp',\n 'Constantly',\n 'Juxt',\n 'Complement',\n 'EveryPred',\n 'SomePred',\n 'Fnull',\n 'Builtin',\n 'SpecialBuiltin',\n 'NativeJsFunction',\n 'Module',\n] as const\n\nconst functionTypeSet = new Set(functionTypes)\n\nexport type FunctionType = typeof functionTypes[number]\n\nexport function isFunctionType(type: unknown): type is FunctionType {\n return typeof type === 'string' && functionTypeSet.has(type as FunctionType)\n}\n","import { getNodeTypeName, isFunctionType, isNodeType } from '../../constants/constants'\nimport type { AstNode, LitsFunction } from '../../parser/types'\nimport { FUNCTION_SYMBOL } from '../symbols'\n\nfunction isLitsFunction(func: unknown): func is LitsFunction {\n if (func === null || typeof func !== 'object')\n return false\n\n return FUNCTION_SYMBOL in func && 'functionType' in func && isFunctionType(func.functionType)\n}\n\nfunction isNode(value: unknown): value is AstNode {\n if (!Array.isArray(value) || value.length < 2)\n return false\n return isNodeType(value[0])\n}\n\nexport function valueToString(value: unknown): string {\n if (isLitsFunction(value))\n // eslint-disable-next-line ts/no-unsafe-member-access\n return `<function ${(value as any).name || '\\u03BB'}>`\n\n if (isNode(value))\n return `${getNodeTypeName(value[0])}-node`\n\n if (value === null)\n return 'null'\n\n if (typeof value === 'object' && value instanceof RegExp)\n return `${value}`\n\n if (typeof value === 'object' && value instanceof Error)\n return value.toString()\n\n return JSON.stringify(value)\n}\n","export const FUNCTION_SYMBOL = '^^fn^^'\nexport const REGEXP_SYMBOL = '^^re^^'\n","import type { SourceCodeInfo } from '../../tokenizer/token'\n\nexport function getSourceCodeInfo(anyValue: any, sourceCodeInfo: SourceCodeInfo | undefined): SourceCodeInfo | undefined {\n // eslint-disable-next-line ts/no-unsafe-return, ts/no-unsafe-member-access\n return anyValue?.sourceCodeInfo ?? sourceCodeInfo\n}\n","import { LitsError } from '../errors'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { valueToString } from './debug/debugTools'\nimport { getSourceCodeInfo } from './debug/getSourceCodeInfo'\n\nexport function getAssertionError(typeName: string, value: unknown, sourceCodeInfo?: SourceCodeInfo): LitsError {\n return new LitsError(`Expected ${typeName}, got ${valueToString(value)}.`, getSourceCodeInfo(value, sourceCodeInfo))\n}\n","import type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\n\n// isArray not needed, use Array.isArary\nexport function asArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): unknown[] {\n assertArray(value, sourceCodeInfo)\n return value\n}\nexport function assertArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is unknown[] {\n if (!Array.isArray(value))\n throw getAssertionError('array', value, sourceCodeInfo)\n}\n\nexport function isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(v => typeof v === 'string')\n}\nexport function asStringArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): string[] {\n assertStringArray(value, sourceCodeInfo)\n return value\n}\nexport function assertStringArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is string[] {\n if (!isStringArray(value))\n throw getAssertionError('array of strings', value, sourceCodeInfo)\n}\n\nexport function isCharArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(v => typeof v === 'string' && v.length === 1)\n}\nexport function asCharArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): string[] {\n assertCharArray(value, sourceCodeInfo)\n return value\n}\nexport function assertCharArray(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is string[] {\n if (!isCharArray(value))\n throw getAssertionError('array of strings', value, sourceCodeInfo)\n}\n","import type { Any, Coll, Obj, Seq } from '../interface'\nimport type { FunctionLike, RegularExpression } from '../parser/types'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\nimport { REGEXP_SYMBOL } from '../utils/symbols'\nimport { isLitsFunction } from './litsFunction'\n\nexport function isAny(value: unknown): value is Any {\n // TODO weak test\n return value !== undefined\n}\nexport function asAny(value: unknown, sourceCodeInfo?: SourceCodeInfo): Any {\n assertAny(value, sourceCodeInfo)\n return value\n}\nexport function assertAny(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Any {\n if (!isAny(value))\n throw getAssertionError('not undefined', value, sourceCodeInfo)\n}\n\nexport function isSeq(value: unknown): value is Seq {\n return Array.isArray(value) || typeof value === 'string'\n}\nexport function asSeq(value: unknown, sourceCodeInfo?: SourceCodeInfo): Seq {\n assertSeq(value, sourceCodeInfo)\n return value\n}\nexport function assertSeq(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Seq {\n if (!isSeq(value))\n throw getAssertionError('string or array', value, sourceCodeInfo)\n}\n\nexport function isObj(value: unknown): value is Obj {\n return !(\n value === null\n || typeof value !== 'object'\n || Array.isArray(value)\n || value instanceof RegExp\n || isLitsFunction(value)\n || isRegularExpression(value)\n )\n}\nexport function asObj(value: unknown, sourceCodeInfo?: SourceCodeInfo): Obj {\n assertObj(value, sourceCodeInfo)\n return value\n}\nexport function assertObj(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Obj {\n if (!isObj(value))\n throw getAssertionError('object', value, sourceCodeInfo)\n}\n\nexport function isColl(value: unknown): value is Coll {\n return isSeq(value) || isObj(value)\n}\nexport function asColl(value: unknown, sourceCodeInfo?: SourceCodeInfo): Coll {\n assertColl(value, sourceCodeInfo)\n return value\n}\nexport function assertColl(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is Coll {\n if (!isColl(value))\n throw getAssertionError('string, array or object', value, sourceCodeInfo)\n}\n\nexport function isRegularExpression(regexp: unknown): regexp is RegularExpression {\n if (regexp === null || typeof regexp !== 'object')\n return false\n\n return !!(regexp as RegularExpression)[REGEXP_SYMBOL]\n}\nexport function asRegularExpression(value: unknown, sourceCodeInfo?: SourceCodeInfo): RegularExpression {\n assertRegularExpression(value, sourceCodeInfo)\n return value\n}\nexport function assertRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is RegularExpression {\n if (!isRegularExpression(value))\n throw getAssertionError('RegularExpression', value, sourceCodeInfo)\n}\n\nexport function isStringOrRegularExpression(value: unknown): value is string | RegularExpression {\n return isRegularExpression(value) || typeof value === 'string'\n}\nexport function asStringOrRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): string | RegularExpression {\n assertStringOrRegularExpression(value, sourceCodeInfo)\n return value\n}\nexport function assertStringOrRegularExpression(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is string | RegularExpression {\n if (!isStringOrRegularExpression(value))\n throw getAssertionError('string or RegularExpression', value, sourceCodeInfo)\n}\n\nfunction isFunctionLike(value: unknown): value is FunctionLike {\n if (typeof value === 'number')\n return true\n if (isColl(value))\n return true\n if (isLitsFunction(value))\n return true\n\n return false\n}\nexport function asFunctionLike(value: unknown, sourceCodeInfo?: SourceCodeInfo): FunctionLike {\n assertFunctionLike(value, sourceCodeInfo)\n return value\n}\nexport function assertFunctionLike(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is FunctionLike {\n if (!isFunctionLike(value))\n throw getAssertionError('FunctionLike', value, sourceCodeInfo)\n}\n","import { LitsError } from '../errors'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { valueToString } from '../utils/debug/debugTools'\nimport { getSourceCodeInfo } from '../utils/debug/getSourceCodeInfo'\n\ntype SignOptions =\n | {\n positive?: true\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: true\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: true\n nonNegative?: never\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: true\n zero?: never\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: true\n nonZero?: never\n }\n | {\n positive?: never\n negative?: never\n nonPositive?: never\n nonNegative?: never\n zero?: never\n nonZero?: true\n }\n\ntype GtOptions =\n | {\n gt?: number\n gte?: never\n }\n | {\n gt?: never\n gte?: number\n }\n\ntype LtOptions =\n | {\n lt?: number\n lte?: never\n }\n | {\n lt?: never\n lte?: number\n }\n\ntype NumberOptions = {\n integer?: true\n finite?: true\n} & SignOptions &\nGtOptions &\nLtOptions\n\nfunction getRangeString(options: NumberOptions): string {\n const hasUpperAndLowerBound\n = (typeof options.gt === 'number' || typeof options.gte === 'number')\n && (typeof options.lt === 'number' || typeof options.lte === 'number')\n if (hasUpperAndLowerBound) {\n return `${typeof options.gt === 'number' ? `${options.gt} < n ` : `${options.gte} <= n `}${\n typeof options.lt === 'number' ? `< ${options.lt}` : `<= ${options.lte}`\n }`\n }\n else if (typeof options.gt === 'number' || typeof options.gte === 'number') {\n return `${typeof options.gt === 'number' ? `n > ${options.gt}` : `n >= ${options.gte}`}`\n }\n else if (typeof options.lt === 'number' || typeof options.lte === 'number') {\n return `${typeof options.lt === 'number' ? `n < ${options.lt}` : `n <= ${options.lte}`}`\n }\n else { return '' }\n}\n\nfunction getSignString(options: NumberOptions): string {\n return options.positive\n ? 'positive'\n : options.negative\n ? 'negative'\n : options.nonNegative\n ? 'non negative'\n : options.nonPositive\n ? 'non positive'\n : options.nonZero\n ? 'non zero'\n : ''\n}\n\nfunction getNumberTypeName(options: NumberOptions): string {\n if (options.zero)\n return 'zero'\n\n const sign = getSignString(options)\n const numberType = options.integer ? 'integer' : 'number'\n const finite = options.finite ? 'finite' : ''\n const range = getRangeString(options)\n\n return [sign, finite, numberType, range].filter(x => !!x).join(' ')\n}\n\nexport function isNumber(value: unknown, options: NumberOptions = {}): value is number {\n if (typeof value !== 'number')\n return false\n\n if (Number.isNaN(value))\n return false\n\n if (options.integer && !Number.isInteger(value))\n return false\n\n if (options.finite && !Number.isFinite(value))\n return false\n\n if (options.zero && value !== 0)\n return false\n\n if (options.nonZero && value === 0)\n return false\n\n if (options.positive && value <= 0)\n return false\n\n if (options.negative && value >= 0)\n return false\n\n if (options.nonPositive && value > 0)\n return false\n\n if (options.nonNegative && value < 0)\n return false\n\n if (typeof options.gt === 'number' && value <= options.gt)\n return false\n\n if (typeof options.gte === 'number' && value < options.gte)\n return false\n\n if (typeof options.lt === 'number' && value >= options.lt)\n return false\n\n if (typeof options.lte === 'number' && value > options.lte)\n return false\n\n return true\n}\n\nexport function assertNumber(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n options: NumberOptions = {},\n): asserts value is number {\n if (!isNumber(value, options)) {\n throw new LitsError(\n `Expected ${getNumberTypeName(options)}, got ${valueToString(value)}.`,\n getSourceCodeInfo(value, sourceCodeInfo),\n )\n }\n}\n\nexport function asNumber(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: NumberOptions = {},\n): number {\n assertNumber(value, sourceCodeInfo, options)\n return value\n}\n","import type { SourceCodeInfo } from '../tokenizer/token'\nimport { getAssertionError } from '../utils/getAssertionError'\n\ntype StringAssertionOptions =\n | {\n nonEmpty?: true\n char?: never\n }\n | {\n nonEmpty?: never\n char?: true\n }\n\nexport function isString(value: unknown, options: StringAssertionOptions = {}): value is string {\n if (typeof value !== 'string')\n return false\n\n if (options.nonEmpty && value.length === 0)\n return false\n\n if (options.char && value.length !== 1)\n return false\n\n return true\n}\n\nexport function assertString(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: StringAssertionOptions = {},\n): asserts value is string {\n if (!isString(value, options)) {\n throw getAssertionError(\n `${options.nonEmpty ? 'non empty string' : options.char ? 'character' : 'string'}`,\n value,\n sourceCodeInfo,\n )\n }\n}\n\nexport function asString(\n value: unknown,\n sourceCodeInfo: SourceCodeInfo | undefined,\n options: StringAssertionOptions = {},\n): string {\n assertString(value, sourceCodeInfo, options)\n return value\n}\n\nexport function isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number'\n}\nexport function asStringOrNumber(value: unknown, sourceCodeInfo?: SourceCodeInfo): string | number {\n assertStringOrNumber(value, sourceCodeInfo)\n return value\n}\nexport function assertStringOrNumber(\n value: unknown,\n sourceCodeInfo?: SourceCodeInfo,\n): asserts value is string | number {\n if (!isStringOrNumber(value))\n throw getAssertionError('string or number', value, sourceCodeInfo)\n}\n","import type { Arity } from '../builtin/interface'\nimport { LitsError } from '../errors'\nimport type { FunctionLike } from '../parser/types'\nimport type { SourceCodeInfo } from '../tokenizer/token'\nimport { isColl } from '../typeGuards/lits'\nimport { valueToString } from './debug/debugTools'\n\nexport function arityAccepts(arity: Arity, nbrOfParams: number): boolean {\n const { min, max } = arity\n if (typeof min === 'number' && nbrOfParams < min) {\n return false\n }\n if (typeof max === 'number' && nbrOfParams > max) {\n return false\n }\n return true\n}\n\nexport function arityAcceptsMin(arity: Arity, nbrOfParams: number): boolean {\n const { min } = arity\n if (typeof min === 'number' && nbrOfParams < min) {\n return false\n }\n return true\n}\n\nexport function getCommonArityFromFunctions(params: FunctionLike[]): Arity | null {\n return params.reduce((acc: Arity | null, param): Arity | null => {\n if (acc === null) {\n return null\n }\n const arity: Arity = (typeof param === 'number' || isColl(param)) ? toFixedArity(1) : param.arity\n const { min: aMin, max: aMax } = arity\n const { min: bMin, max: bMax } = acc\n const min = typeof aMin === 'number' && typeof bMin === 'number'\n ? Math.max(aMin, bMin)\n : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined\n const max = typeof aMax === 'number' && typeof bMax === 'number'\n ? Math.min(aMax, bMax)\n : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined\n\n if (typeof min === 'number' && typeof max === 'number' && min > max) {\n return null\n }\n\n return { min, max }\n }, {})\n}\n\nexport function getArityFromFunction(param: FunctionLike): Arity {\n return (typeof param === 'number' || isColl(param)) ? toFixedArity(1) : param.arity\n}\n\nexport function assertNumberOfParams(arity: Arity, length: number, sourceCodeInfo: SourceCodeInfo | undefined): void {\n const { min, max } = arity\n if (typeof min === 'number' && length < min) {\n throw new LitsError(\n `Wrong number of arguments, expected at least ${min}, got ${valueToString(length)}.`,\n sourceCodeInfo,\n )\n }\n\n if (typeof max === 'number' && length > max) {\n throw new LitsError(\n `Wrong number of arguments, expected at most ${max}, got ${valueToString(length)}.`,\n sourceCodeInfo,\n )\n }\n}\n\nexport function canBeOperator(count: Arity): boolean {\n if (typeof count.max === 'number' && count.max < 2) {\n return false\n }\n\n if (typeof count.min === 'number' && count.min > 2) {\n return false\n }\n\n return true\n}\n\nexport function toFixedArity(arity: number): Arity {\n return { min: arity, max: arity }\n}\n","import type { FunctionDocs } from '../../interface'\n\nexport const moduleDocs: Record<string, FunctionDocs> = {\n 'random!': {\n category: 'random',\n description: 'Returns a random number between 0 and 1.',\n returns: {\n type: 'number',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { random! } = import(\"random\"); random!()',\n ],\n seeAlso: ['random.random-float!', 'random.random-int!', 'random.random-boolean!'],\n },\n 'random-int!': {\n category: 'random',\n description: 'Returns a random integer between min and max (exclusive).',\n returns: {\n type: 'integer',\n },\n args: {\n a: {\n type: 'integer',\n description: 'The minimum value.',\n },\n b: {\n type: 'integer',\n description: 'The maximum value (exclusive).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-int! } = import(\"random\"); random-int!(0, 10)',\n 'let { random-int! } = import(\"random\"); random-int!(1, 100)',\n ],\n seeAlso: ['random.random-int-inclusive!', 'random.random-float!', 'random.random!'],\n },\n 'random-int-inclusive!': {\n category: 'random',\n description: 'Returns a random integer between min and max (inclusive).',\n returns: {\n type: 'integer',\n },\n args: {\n a: {\n type: 'integer',\n description: 'The minimum value.',\n },\n b: {\n type: 'integer',\n description: 'The maximum value (inclusive).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-int-inclusive! } = import(\"random\"); random-int-inclusive!(0, 10)',\n ],\n seeAlso: ['random.random-int!', 'random.random-float!'],\n },\n 'random-float!': {\n category: 'random',\n description: 'Returns a random float between min and max.',\n returns: {\n type: 'number',\n },\n args: {\n a: {\n type: 'number',\n description: 'The minimum value.',\n },\n b: {\n type: 'number',\n description: 'The maximum value.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-float! } = import(\"random\"); random-float!(0, 10)',\n 'let { random-float! } = import(\"random\"); random-float!(1, 100)',\n ],\n seeAlso: ['random.random!', 'random.random-int!', 'random.random-int-inclusive!'],\n },\n 'random-boolean!': {\n category: 'random',\n description: 'Returns a random boolean.',\n returns: {\n type: 'boolean',\n },\n args: {\n prob: {\n type: 'number',\n description: 'The probability of returning true (between 0 and 1).',\n },\n },\n variants: [\n {\n argumentNames: [\n 'prob',\n ],\n },\n ],\n examples: [\n 'let { random-boolean! } = import(\"random\"); random-boolean!()',\n 'let { random-boolean! } = import(\"random\"); random-boolean!(0.99)',\n ],\n seeAlso: ['random.random!'],\n },\n 'random-item!': {\n category: 'random',\n description: 'Returns a random item from the array.',\n returns: {\n type: 'any',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n ],\n },\n ],\n examples: [\n 'let { random-item! } = import(\"random\"); random-item!([1, 2, 3, 4, 5])',\n 'let { random-item! } = import(\"random\"); random-item!([\"apple\", \"banana\", \"cherry\"])',\n ],\n seeAlso: ['random.random-sample!', 'random.random-sample-unique!', 'random.random-char!'],\n },\n 'random-sample-unique!': {\n category: 'random',\n description: 'Returns a random sample of n unique items from the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n b: {\n type: 'integer',\n description: 'The number of items to sample.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-sample-unique! } = import(\"random\"); random-sample-unique!([1, 2, 3, 4, 5], 3)',\n 'let { random-sample-unique! } = import(\"random\"); random-sample-unique!([\"apple\", \"banana\", \"cherry\"], 2)',\n ],\n seeAlso: ['random.random-sample!', 'random.random-item!', 'random.shuffle!'],\n },\n 'random-sample!': {\n category: 'random',\n description: 'Returns a random sample of n items from the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to sample from.',\n },\n b: {\n type: 'integer',\n description: 'The number of items to sample.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n 'b',\n ],\n },\n ],\n examples: [\n 'let { random-sample! } = import(\"random\"); random-sample!([1, 2, 3, 4, 5], 3)',\n 'let { random-sample! } = import(\"random\"); random-sample!([\"apple\", \"banana\", \"cherry\"], 10)',\n ],\n seeAlso: ['random.random-sample-unique!', 'random.random-item!', 'random.shuffle!'],\n },\n 'shuffle!': {\n category: 'random',\n description: 'Returns a shuffled version of the array.',\n returns: {\n type: 'array',\n },\n args: {\n a: {\n type: 'array',\n description: 'The array to shuffle.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'a',\n ],\n },\n ],\n examples: [\n 'let { shuffle! } = import(\"random\"); shuffle!([1, 2, 3, 4, 5])',\n 'let { shuffle! } = import(\"random\"); shuffle!([\"apple\", \"banana\", \"cherry\"])',\n ],\n seeAlso: ['random.random-sample!', 'random.random-sample-unique!'],\n },\n 'random-normal!': {\n category: 'random',\n description: 'Returns a random number from a normal distribution with the given mean and standard deviation.',\n returns: {\n type: 'number',\n },\n args: {\n mean: {\n type: 'number',\n description: 'The mean of the normal distribution.',\n },\n stdDev: {\n type: 'number',\n description: 'The standard deviation of the normal distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'mean',\n 'stdDev',\n ],\n },\n ],\n examples: [\n 'let { random-normal! } = import(\"random\"); random-normal!(0, 1)',\n 'let { random-normal! } = import(\"random\"); random-normal!(5, 2)',\n ],\n seeAlso: ['random.random-exponential!', 'random.random-binomial!', 'random.random-poisson!'],\n hideOperatorForm: true,\n },\n 'random-exponential!': {\n category: 'random',\n description: 'Returns a random number from an exponential distribution with the given rate parameter.',\n returns: {\n type: 'number',\n },\n args: {\n lambda: {\n type: 'number',\n description: 'The rate parameter of the exponential distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'lambda',\n ],\n },\n ],\n examples: [\n 'let { random-exponential! } = import(\"random\"); random-exponential!(1)',\n 'let { random-exponential! } = import(\"random\"); random-exponential!(0.5)',\n ],\n seeAlso: ['random.random-normal!', 'random.random-poisson!', 'random.random-gamma!', 'random.random-pareto!'],\n },\n 'random-binomial!': {\n category: 'random',\n description: 'Returns a random number from a binomial distribution with the given number of trials and probability of success.',\n returns: {\n type: 'integer',\n },\n args: {\n n: {\n type: 'integer',\n description: 'The number of trials.',\n },\n p: {\n type: 'number',\n description: 'The probability of success on each trial.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'n',\n 'p',\n ],\n },\n ],\n examples: [\n 'let { random-binomial! } = import(\"random\"); random-binomial!(10, 0.5)',\n 'let { random-binomial! } = import(\"random\"); random-binomial!(20, 0.3)',\n ],\n seeAlso: ['random.random-normal!', 'random.random-poisson!'],\n hideOperatorForm: true,\n },\n 'random-poisson!': {\n category: 'random',\n description: 'Returns a random number from a Poisson distribution with the given rate parameter.',\n returns: {\n type: 'integer',\n },\n args: {\n lambda: {\n type: 'number',\n description: 'The rate parameter of the Poisson distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'lambda',\n ],\n },\n ],\n examples: [\n 'let { random-poisson! } = import(\"random\"); random-poisson!(1)',\n 'let { random-poisson! } = import(\"random\"); random-poisson!(5)',\n ],\n seeAlso: ['random.random-binomial!', 'random.random-normal!', 'random.random-exponential!'],\n },\n 'random-gamma!': {\n category: 'random',\n description: 'Returns a random number from a gamma distribution with the given shape and scale parameters.',\n returns: {\n type: 'number',\n },\n args: {\n shape: {\n type: 'number',\n description: 'The shape parameter of the gamma distribution.',\n },\n scale: {\n type: 'number',\n description: 'The scale parameter of the gamma distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'shape',\n 'scale',\n ],\n },\n ],\n examples: [\n 'let { random-gamma! } = import(\"random\"); random-gamma!(2, 2)',\n 'let { random-gamma! } = import(\"random\"); random-gamma!(5, 1)',\n ],\n seeAlso: ['random.random-exponential!', 'random.random-pareto!'],\n hideOperatorForm: true,\n },\n 'random-pareto!': {\n category: 'random',\n description: 'Returns a random number from a Pareto distribution with the given shape parameter.',\n returns: {\n type: 'number',\n },\n args: {\n alpha: {\n type: 'number',\n description: 'The shape parameter of the Pareto distribution.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'alpha',\n ],\n },\n ],\n examples: [\n 'let { random-pareto! } = import(\"random\"); random-pareto!(1)',\n 'let { random-pareto! } = import(\"random\"); random-pareto!(2)',\n ],\n seeAlso: ['random.random-gamma!', 'random.random-exponential!'],\n },\n 'uuid!': {\n category: 'random',\n description: 'Returns a random UUID v4 (Universally Unique Identifier).',\n returns: {\n type: 'string',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { uuid! } = import(\"random\"); uuid!()',\n ],\n seeAlso: ['random.random-id!', 'random.random-string!'],\n },\n 'random-char!': {\n category: 'random',\n description: 'Returns a random character from the given string.',\n returns: {\n type: 'string',\n },\n args: {\n charSet: {\n type: 'string',\n description: 'The string to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'charSet',\n ],\n },\n ],\n examples: [\n 'let { random-char! } = import(\"random\"); random-char!(\"abcde\")',\n 'let { random-char! } = import(\"random\"); random-char!(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")',\n ],\n seeAlso: ['random.random-string!', 'random.random-item!'],\n },\n 'random-string!': {\n category: 'random',\n description: 'Returns a random string of the given length from the given string.',\n returns: {\n type: 'string',\n },\n args: {\n length: {\n type: 'integer',\n description: 'The length of the random string.',\n },\n charSet: {\n type: 'string',\n description: 'The string to sample from.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'length',\n 'charSet',\n ],\n },\n ],\n examples: [\n 'let { random-string! } = import(\"random\"); random-string!(10, \"abcde\")',\n 'let { random-string! } = import(\"random\"); random-string!(5, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")',\n ],\n seeAlso: ['random.random-char!', 'random.random-id!', 'random.uuid!'],\n hideOperatorForm: true,\n },\n 'random-id!': {\n category: 'random',\n description: 'Returns a random ID of the given length.',\n returns: {\n type: 'string',\n },\n args: {\n length: {\n type: 'integer',\n description: 'The length of the random ID.',\n },\n },\n variants: [\n {\n argumentNames: [\n 'length',\n ],\n },\n ],\n examples: [\n 'let { random-id! } = import(\"random\"); random-id!(10)',\n 'let { random-id! } = import(\"random\"); random-id!(5)',\n ],\n seeAlso: ['random.random-string!', 'random.uuid!'],\n },\n 'random-color!': {\n category: 'random',\n description: 'Returns a random color in hex format.',\n returns: {\n type: 'string',\n },\n args: {},\n variants: [\n {\n argumentNames: [],\n },\n ],\n examples: [\n 'let { random-color! } = import(\"random\"); random-color!()',\n ],\n },\n}\n","import { LitsError } from '../../../errors'\nimport type { Any, Arr } from '../../../interface'\nimport { assertArray } from '../../../typeGuards/array'\nimport { asAny } from '../../../typeGuards/lits'\nimport { assertNumber } from '../../../typeGuards/number'\nimport { assertString } from '../../../typeGuards/string'\nimport { toFixedArity } from '../../../utils/arity'\nimport type { BuiltinNormalExpressions } from '../../../builtin/interface'\nimport type { LitsModule } from '../interface'\nimport { moduleDocs } from './docs'\n\nconst randomFunctions: BuiltinNormalExpressions = {\n 'random!': {\n evaluate: (): number => {\n return Math.random()\n },\n arity: toFixedArity(0),\n },\n 'random-int!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo, { integer: true })\n assertNumber(max, sourceCodeInfo, { integer: true, gt: min })\n return Math.floor(Math.random() * (max - min)) + min\n },\n arity: toFixedArity(2),\n },\n 'random-int-inclusive!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo, { integer: true })\n assertNumber(max, sourceCodeInfo, { integer: true, gte: min })\n return Math.floor(Math.random() * (max - min + 1)) + min\n },\n arity: toFixedArity(2),\n },\n 'random-float!': {\n evaluate: ([min, max], sourceCodeInfo): number => {\n assertNumber(min, sourceCodeInfo)\n assertNumber(max, sourceCodeInfo, { gt: min })\n return Math.random() * (max - min) + min\n },\n arity: toFixedArity(2),\n },\n 'random-boolean!': {\n evaluate: ([prob], sourceCodeInfo): boolean => {\n const probability = prob ?? 0.5\n assertNumber(probability, sourceCodeInfo, { gte: 0, lte: 1 })\n return Math.random() < probability\n },\n arity: { min: 0, max: 1 },\n },\n 'random-item!': {\n evaluate: ([array], sourceCodeInfo): Any => {\n assertArray(array, sourceCodeInfo)\n const index = Math.floor(Math.random() * array.length)\n return asAny(array[index])\n },\n arity: toFixedArity(1),\n },\n 'random-sample!': {\n evaluate: ([array, n], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true })\n if (array.length === 0) {\n throw new LitsError('Cannot sample from an empty array.', sourceCodeInfo)\n }\n\n const result: Arr = []\n\n for (let i = 0; i < n; i++) {\n // Pick a random index from the array\n const randomIndex = Math.floor(Math.random() * array.length)\n // Add the randomly selected item to the result\n result.push(array[randomIndex])\n }\n\n return result\n },\n arity: toFixedArity(2),\n },\n 'random-sample-unique!': {\n evaluate: ([array, n], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true, lte: array.length })\n if (array.length === 0) {\n throw new LitsError('Cannot sample from an empty array.', sourceCodeInfo)\n }\n const result: Arr = []\n\n const copyArray = [...array]\n for (let i = 0; i < n; i++) {\n // Pick a random index from the array\n const randomIndex = Math.floor(Math.random() * copyArray.length)\n // Add the randomly selected item to the result\n result.push(copyArray[randomIndex])\n // Remove the used item from the copy array\n copyArray.splice(randomIndex, 1)\n }\n\n return result\n },\n arity: toFixedArity(2),\n },\n 'shuffle!': {\n evaluate: ([array], sourceCodeInfo): Arr => {\n assertArray(array, sourceCodeInfo)\n const shuffledArray = [...array]\n for (let i = shuffledArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]]\n }\n return shuffledArray\n },\n arity: toFixedArity(1),\n },\n 'random-normal!': {\n evaluate: ([mean, stdDev], sourceCodeInfo): number => {\n assertNumber(mean, sourceCodeInfo)\n assertNumber(stdDev, sourceCodeInfo, { gt: 0 })\n const u1 = Math.random()\n const u2 = Math.random()\n const z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2)\n return z0 * stdDev + mean\n },\n arity: toFixedArity(2),\n },\n 'random-exponential!': {\n evaluate: ([lambda], sourceCodeInfo): number => {\n assertNumber(lambda, sourceCodeInfo, { gt: 0 })\n const u = Math.random()\n return -Math.log(u) / lambda\n },\n arity: toFixedArity(1),\n },\n 'random-binomial!': {\n evaluate: ([n, p], sourceCodeInfo): number => {\n assertNumber(n, sourceCodeInfo, { integer: true, nonNegative: true })\n assertNumber(p, sourceCodeInfo, { gte: 0, lte: 1 })\n let k = 0\n for (let i = 0; i < n; i++) {\n if (Math.random() < p) {\n k++\n }\n }\n return k\n },\n arity: toFixedArity(2),\n },\n 'random-poisson!': {\n evaluate: ([lambda], sourceCodeInfo): number => {\n assertNumber(lambda, sourceCodeInfo, { gt: 0 })\n\n const L = Math.exp(-lambda)\n let k = 0\n let p = 1\n\n do {\n k++\n p *= Math.random()\n } while (p > L)\n\n return k - 1\n },\n arity: toFixedArity(1),\n },\n 'random-gamma!': {\n evaluate: ([shape, scale], sourceCodeInfo): number => {\n assertNumber(shape, sourceCodeInfo, { gt: 0 })\n assertNumber(scale, sourceCodeInfo, { gt: 0 })\n return randomGamma(shape, scale)\n },\n arity: toFixedArity(2),\n },\n 'random-pareto!': {\n evaluate: ([alpha], sourceCodeInfo): number => {\n assertNumber(alpha, sourceCodeInfo, { gt: 0 })\n const u = Math.random()\n return (1 / u) ** (1 / alpha)\n },\n arity: toFixedArity(1),\n },\n 'uuid!': {\n evaluate: (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n const random = Math.random() * 16 | 0\n const value = char === 'x' ? random : (random & 0x3 | 0x8)\n return value.toString(16)\n })\n },\n arity: toFixedArity(0),\n },\n 'random-char!': {\n evaluate: ([charSet], sourceCodeInfo): string => {\n assertString(charSet, sourceCodeInfo)\n if (charSet.length === 0) {\n throw new LitsError('Character set cannot be empty.', sourceCodeInfo)\n }\n const randomIndex = Math.floor(Math.random() * charSet.length)\n return charSet[randomIndex]!\n },\n arity: toFixedArity(1),\n },\n 'random-string!': {\n evaluate: ([length, charSet], sourceCodeInfo): string => {\n assertNumber(length, sourceCodeInfo, { integer: true, positive: true })\n assertString(charSet, sourceCodeInfo)\n if (charSet.length === 0) {\n throw new LitsError('Character set cannot be empty.', sourceCodeInfo)\n }\n let result = ''\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * charSet.length)\n result += charSet[randomIndex]!\n }\n return result\n },\n arity: toFixedArity(2),\n },\n 'random-id!': {\n evaluate: ([length], sourceCodeInfo): string => {\n assertNumber(length, sourceCodeInfo, { integer: true, positive: true })\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n let result = ''\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * chars.length)\n result += chars[randomIndex]!\n }\n return result\n },\n arity: toFixedArity(1),\n },\n 'random-color!': {\n evaluate: (): string => {\n const randomColor = Math.floor(Math.random() * 0x1000000).toString(16)\n return `#${randomColor.padStart(6, '0')}`\n },\n arity: toFixedArity(0),\n },\n}\n\n/**\n * Generates a random number from a gamma distribution\n * @param shape The shape parameter (alpha) - must be positive\n * @param scale The scale parameter (beta) - must be positive\n * @returns A random number following the gamma distribution\n */\nfunction randomGamma(shape: number, scale: number = 1): number {\n // Special case for shape < 1\n if (shape < 1) {\n const d = shape + 1.0 - 1.0 / 3.0\n return randomGamma(d, scale) * Math.random() ** (1.0 / shape)\n }\n\n // Marsaglia and Tsang method for shape >= 1\n const d = shape - 1.0 / 3.0\n const c = 1.0 / Math.sqrt(9.0 * d)\n\n let x: number, v: number, u: number\n\n while (true) {\n do {\n x = randn() // Standard normal random variable\n v = 1.0 + c * x\n } while (v <= 0)\n\n v = v * v * v\n u = Math.random()\n\n if (u < 1.0 - 0.0331 * x * x * x * x) {\n return scale * d * v\n }\n\n if (Math.log(u) < 0.5 * x * x + d * (1.0 - v + Math.log(v))) {\n return scale * d * v\n }\n }\n}\n\n/**\n * Helper function to generate standard normal random variables\n * using Box-Muller transform\n */\nfunction randn(): number {\n let u = 0\n let v = 0\n while (u === 0) u = Math.random()\n while (v === 0) v = Math.random()\n\n return Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v)\n}\n\nfor (const [key, docs] of Object.entries(moduleDocs)) {\n if (randomFunctions[key])\n randomFunctions[key].docs = docs\n}\n\nexport const randomModule: LitsModule = {\n name: 'random',\n functions: randomFunctions,\n}\n"],"names":["getCodeMarker","sourceCodeInfo","position","code","leftPadding","column","rightPadding","length","repeat","Math","max","LitsError","Error","shortMessage","constructor","err","message","super","location","line","filePath","getLitsErrorMessage","this","Object","setPrototypeOf","prototype","name","NodeTypes","Number","String","NormalExpression","SpecialExpression","UserDefinedSymbol","NormalBuiltinSymbol","SpecialBuiltinSymbol","ReservedSymbol","Binding","Spread","NodeTypesSet","Set","values","functionTypeSet","isLitsFunction","func","type","functionType","has","isNode","value","Array","isArray","valueToString","keys","find","key","RegExp","toString","JSON","stringify","getSourceCodeInfo","anyValue","getAssertionError","typeName","assertArray","asAny","undefined","isAny","assertAny","assertNumber","options","isNaN","integer","isInteger","finite","isFinite","zero","nonZero","positive","negative","nonPositive","nonNegative","gt","gte","lt","lte","isNumber","sign","getSignString","numberType","range","getRangeString","filter","x","join","getNumberTypeName","assertString","nonEmpty","char","isString","toFixedArity","arity","min","moduleDocs","category","description","returns","args","variants","argumentNames","examples","seeAlso","a","b","prob","mean","stdDev","hideOperatorForm","lambda","n","p","shape","scale","alpha","charSet","randomFunctions","evaluate","random","floor","probability","array","result","i","randomIndex","push","copyArray","splice","shuffledArray","j","u1","u2","sqrt","log","cos","PI","u","k","L","exp","randomGamma","replace","chars","padStart","d","c","v","randn","docs","entries","randomModule","functions"],"mappings":"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"}
|