@soundscript/soundscript 0.1.10 → 0.1.12
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/decode.js +7 -1
- package/decode.js.map +1 -1
- package/encode.js +3 -0
- package/encode.js.map +1 -1
- package/json.js +9 -5
- package/json.js.map +1 -1
- package/numerics.js +4 -4
- package/numerics.js.map +1 -1
- package/package.json +6 -6
- package/soundscript/decode.sts +7 -1
- package/soundscript/encode.sts +3 -0
- package/soundscript/json.sts +9 -5
- package/soundscript/numerics.sts +4 -4
package/decode.js
CHANGED
|
@@ -2,7 +2,10 @@ import { Failure } from '@soundscript/soundscript/failures';
|
|
|
2
2
|
import { err, isErr, none, ok, some } from '@soundscript/soundscript/result';
|
|
3
3
|
export class DecodeFailure extends Failure {
|
|
4
4
|
constructor(message = 'Failed to decode value.', options = {}) {
|
|
5
|
-
super(message, {
|
|
5
|
+
super(message, {
|
|
6
|
+
...(options.cause === undefined ? {} : { cause: options.cause }),
|
|
7
|
+
...(options.trace === undefined ? {} : { trace: options.trace }),
|
|
8
|
+
});
|
|
6
9
|
this.path = options.path ?? [];
|
|
7
10
|
}
|
|
8
11
|
at(segment) {
|
|
@@ -157,6 +160,9 @@ export function object(shape) {
|
|
|
157
160
|
const decodedObject = {};
|
|
158
161
|
for (const key of Object.keys(shape)) {
|
|
159
162
|
const decoder = shape[key];
|
|
163
|
+
if (!decoder) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
160
166
|
const hasKey = key in record;
|
|
161
167
|
const rawValue = record[key];
|
|
162
168
|
if (!hasKey || rawValue === undefined) {
|
package/decode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["./soundscript/decode.sts"],"names":[],"mappings":"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","sourcesContent":["import { type ErrorFrame, Failure } from '@soundscript/soundscript/failures';\nimport { err, isErr, none, ok, some, type Option, type Result } from '@soundscript/soundscript/result';\n\nexport type DecodePathSegment = string | number;\nexport type DecodePath = readonly DecodePathSegment[];\n\nexport class DecodeFailure extends Failure {\n readonly path: DecodePath;\n\n constructor(\n message = 'Failed to decode value.',\n options: {\n cause?: unknown;\n path?: DecodePath;\n trace?: readonly ErrorFrame[];\n } = {},\n ) {\n super(message, { cause: options.cause, trace: options.trace });\n this.path = options.path ?? [];\n }\n\n at(segment: DecodePathSegment): this {\n const prototype = Object.getPrototypeOf(this as object);\n const clone = (prototype === null ? Object.create(null) : Object.create(prototype)) as this;\n Object.defineProperties(clone, Object.getOwnPropertyDescriptors(this));\n Object.defineProperty(clone, 'path', {\n configurable: true,\n enumerable: true,\n writable: false,\n value: [segment, ...this.path],\n });\n return clone;\n }\n}\n\n// #[variance(T: out, E: out)]\nexport type Decoder<T, E = DecodeFailure> = {\n decode(value: unknown): Result<T, E>;\n};\n\n// #[variance(T: out, E: out)]\nexport type OptionalDecoder<T, E = DecodeFailure> = Decoder<T | undefined, E> & {\n readonly __soundscriptOptional: true;\n readonly inner: Decoder<T, E>;\n};\n\ntype DecoderValue<TDecoder> = TDecoder extends Decoder<infer TValue, unknown> ? TValue : never;\ntype DecoderError<TDecoder> = TDecoder extends Decoder<unknown, infer E> ? E : never;\n\ntype ObjectShape = Record<string, Decoder<unknown, unknown>>;\ntype TupleShape = readonly Decoder<unknown, unknown>[];\n\nexport const string: Decoder<string> = {\n decode(value): Result<string, DecodeFailure> {\n return typeof value === 'string'\n ? ok(value)\n : err(new DecodeFailure('Expected string.', { cause: value }));\n },\n};\n\nexport const number: Decoder<number> = {\n decode(value): Result<number, DecodeFailure> {\n return typeof value === 'number'\n ? ok(value)\n : err(new DecodeFailure('Expected number.', { cause: value }));\n },\n};\n\nexport const boolean: Decoder<boolean> = {\n decode(value): Result<boolean, DecodeFailure> {\n return typeof value === 'boolean'\n ? ok(value)\n : err(new DecodeFailure('Expected boolean.', { cause: value }));\n },\n};\n\nexport const bigint: Decoder<bigint> = {\n decode(value): Result<bigint, DecodeFailure> {\n if (typeof value === 'bigint') {\n return ok(value);\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) && Number.isSafeInteger(value)\n ? ok(BigInt(value))\n : err(new DecodeFailure('Expected bigint.', { cause: value }));\n }\n\n if (typeof value === 'string') {\n try {\n return ok(BigInt(value));\n } catch {\n return err(new DecodeFailure('Expected bigint.', { cause: value }));\n }\n }\n\n return err(new DecodeFailure('Expected bigint.', { cause: value }));\n },\n};\n\nexport function lazy<T, E>(getDecoder: () => Decoder<T, E>): Decoder<T, E> {\n return {\n decode(value) {\n return getDecoder().decode(value);\n },\n };\n}\n\nexport function optional<T, E>(decoder: Decoder<T, E>): OptionalDecoder<T, E> {\n return {\n __soundscriptOptional: true,\n inner: decoder,\n decode(value) {\n return value === undefined ? ok(undefined) : decoder.decode(value);\n },\n };\n}\n\nexport function literal<const T extends string | number | boolean | null>(value: T): Decoder<T> {\n return {\n decode(input) {\n return Object.is(input, value)\n ? ok(value)\n : err(new DecodeFailure(`Expected literal ${JSON.stringify(value)}.`, { cause: input }));\n },\n };\n}\n\nexport function array<T, E>(item: Decoder<T, E>): Decoder<readonly T[], E | DecodeFailure> {\n return {\n decode(value) {\n if (!Array.isArray(value)) {\n return err(new DecodeFailure('Expected array.', { cause: value }));\n }\n\n const decodedValues: T[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const decoded = item.decode(value[index]);\n if (isErr(decoded)) {\n return err(prependPathIfPossible(decoded.error, index));\n }\n decodedValues.push(decoded.value);\n }\n\n return ok(decodedValues);\n },\n };\n}\n\nexport function tuple<const TElements extends TupleShape>(\n ...elements: TElements\n): Decoder<\n { readonly [K in keyof TElements]: DecoderValue<TElements[K]> },\n DecoderError<TElements[number]> | DecodeFailure\n> {\n return {\n decode(value) {\n if (!Array.isArray(value)) {\n return err(new DecodeFailure('Expected tuple.', { cause: value }));\n }\n\n if (value.length !== elements.length) {\n return err(\n new DecodeFailure(`Expected tuple of length ${elements.length}.`, {\n cause: value,\n }),\n );\n }\n\n const decodedValues: unknown[] = [];\n for (let index = 0; index < elements.length; index += 1) {\n const elementDecoder = elements[index];\n if (!elementDecoder) {\n continue;\n }\n const decoded = elementDecoder.decode(value[index]);\n if (isErr(decoded)) {\n return err(\n prependPathIfPossible(decoded.error, index) as\n | DecoderError<TElements[number]>\n | DecodeFailure,\n );\n }\n decodedValues.push(decoded.value);\n }\n\n return ok(decodedValues as { readonly [K in keyof TElements]: DecoderValue<TElements[K]> });\n },\n };\n}\n\nexport function option<T, E>(item: Decoder<T, E>): Decoder<Option<T>, E | DecodeFailure> {\n return union(\n map(\n object({\n tag: literal('some'),\n value: item,\n }),\n (value) => some(value.value) as Option<T>,\n ),\n map(\n object({\n tag: literal('none'),\n }),\n () => none() as Option<T>,\n ),\n );\n}\n\nexport function result<T, EValue, EDecodeValue, EDecodeError>(\n okDecoder: Decoder<T, EDecodeValue>,\n errDecoder: Decoder<EValue, EDecodeError>,\n): Decoder<Result<T, EValue>, EDecodeValue | EDecodeError | DecodeFailure> {\n return union(\n map(\n object({\n tag: literal('ok'),\n value: okDecoder,\n }),\n (value) => ok(value.value) as Result<T, EValue>,\n ),\n map(\n object({\n tag: literal('err'),\n error: errDecoder,\n }),\n (value) => err(value.error) as Result<T, EValue>,\n ),\n );\n}\n\nexport function object<TShape extends ObjectShape>(\n shape: TShape,\n): Decoder<\n { readonly [K in keyof TShape]: DecoderValue<TShape[K]> },\n DecoderError<TShape[keyof TShape]> | DecodeFailure\n> {\n return {\n decode(value) {\n if (!isPlainObject(value)) {\n return err(new DecodeFailure('Expected object.', { cause: value }));\n }\n\n const record = value as Record<string, unknown>;\n const decodedObject: Record<string, unknown> = {};\n\n for (const key of Object.keys(shape)) {\n const decoder = shape[key];\n const hasKey = key in record;\n const rawValue = record[key];\n\n if (!hasKey || rawValue === undefined) {\n if (isOptionalDecoder(decoder)) {\n decodedObject[key] = undefined;\n continue;\n }\n\n return err(\n new DecodeFailure(`Missing field \"${key}\".`, {\n cause: value,\n path: [key],\n }),\n );\n }\n\n const decoded = decoder.decode(rawValue);\n if (isErr(decoded)) {\n return err(\n prependPathIfPossible(decoded.error, key) as\n | DecoderError<TShape[keyof TShape]>\n | DecodeFailure,\n );\n }\n\n decodedObject[key] = decoded.value;\n }\n\n return ok(decodedObject as { readonly [K in keyof TShape]: DecoderValue<TShape[K]> });\n },\n };\n}\n\nexport function field<K extends string, T, E>(\n key: K,\n decoder: Decoder<T, E>,\n): Decoder<T, E | DecodeFailure> {\n const shape = { [key]: decoder } as { readonly [P in K]: Decoder<T, E> };\n return map(object(shape), (value) => value[key]);\n}\n\nexport function optionalField<K extends string, T, E>(\n key: K,\n decoder: Decoder<T, E>,\n): Decoder<T | undefined, E | DecodeFailure> {\n const shape = { [key]: optional(decoder) } as {\n readonly [P in K]: OptionalDecoder<T, E>;\n };\n return map(object(shape), (value) => value[key]);\n}\n\nexport function union<A, B, ELeft, ERight>(\n left: Decoder<A, ELeft>,\n right: Decoder<B, ERight>,\n): Decoder<A | B, ELeft | ERight | DecodeFailure> {\n return {\n decode(value) {\n const leftDecoded = left.decode(value);\n if (isErr(leftDecoded)) {\n const rightDecoded = right.decode(value);\n if (isErr(rightDecoded)) {\n return err(\n new DecodeFailure('Expected one of the union members.', {\n cause: value,\n }),\n );\n }\n return rightDecoded;\n }\n return leftDecoded;\n },\n };\n}\n\nexport function map<A, B, E>(\n decoder: Decoder<A, E>,\n project: (value: A) => B,\n): Decoder<B, E> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n return isErr(decoded) ? decoded : ok(project(decoded.value));\n },\n };\n}\n\nexport function andThen<A, B, E>(\n decoder: Decoder<A, E>,\n project: (value: A) => Decoder<B, E>,\n): Decoder<B, E> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n return isErr(decoded) ? decoded : project(decoded.value).decode(valueOf(decoded));\n },\n };\n}\n\nexport function refine<A, B extends A, E>(\n decoder: Decoder<A, E>,\n predicate: (value: A) => value is B,\n message: string,\n): Decoder<B, E | DecodeFailure> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n if (isErr(decoded)) {\n return decoded;\n }\n\n return predicate(decoded.value)\n ? ok(decoded.value)\n : err(new DecodeFailure(message, { cause: value }));\n },\n };\n}\n\nfunction prependPathIfPossible<E>(error: E, segment: DecodePathSegment): E | DecodeFailure {\n return error instanceof DecodeFailure ? error.at(segment) : error;\n}\n\nfunction isOptionalDecoder(\n value: Decoder<unknown, unknown>,\n): value is OptionalDecoder<unknown, unknown> {\n return '__soundscriptOptional' in value &&\n value.__soundscriptOptional === true;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction valueOf<T>(decoded: { readonly value: T }): T {\n return decoded.value;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["./soundscript/decode.sts"],"names":[],"mappings":"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","sourcesContent":["import { type ErrorFrame, Failure } from '@soundscript/soundscript/failures';\nimport { err, isErr, none, ok, some, type Option, type Result } from '@soundscript/soundscript/result';\n\nexport type DecodePathSegment = string | number;\nexport type DecodePath = readonly DecodePathSegment[];\n\nexport class DecodeFailure extends Failure {\n readonly path: DecodePath;\n\n constructor(\n message = 'Failed to decode value.',\n options: {\n cause?: unknown;\n path?: DecodePath;\n trace?: readonly ErrorFrame[];\n } = {},\n ) {\n super(message, {\n ...(options.cause === undefined ? {} : { cause: options.cause }),\n ...(options.trace === undefined ? {} : { trace: options.trace }),\n });\n this.path = options.path ?? [];\n }\n\n at(segment: DecodePathSegment): this {\n const prototype = Object.getPrototypeOf(this as object);\n const clone = (prototype === null ? Object.create(null) : Object.create(prototype)) as this;\n Object.defineProperties(clone, Object.getOwnPropertyDescriptors(this));\n Object.defineProperty(clone, 'path', {\n configurable: true,\n enumerable: true,\n writable: false,\n value: [segment, ...this.path],\n });\n return clone;\n }\n}\n\n// #[variance(T: out, E: out)]\nexport type Decoder<T, E = DecodeFailure> = {\n decode(value: unknown): Result<T, E>;\n};\n\n// #[variance(T: out, E: out)]\nexport type OptionalDecoder<T, E = DecodeFailure> = Decoder<T | undefined, E> & {\n readonly __soundscriptOptional: true;\n readonly inner: Decoder<T, E>;\n};\n\ntype DecoderValue<TDecoder> = TDecoder extends Decoder<infer TValue, unknown> ? TValue : never;\ntype DecoderError<TDecoder> = TDecoder extends Decoder<unknown, infer E> ? E : never;\n\ntype ObjectShape = Record<string, Decoder<unknown, unknown>>;\ntype TupleShape = readonly Decoder<unknown, unknown>[];\n\nexport const string: Decoder<string> = {\n decode(value): Result<string, DecodeFailure> {\n return typeof value === 'string'\n ? ok(value)\n : err(new DecodeFailure('Expected string.', { cause: value }));\n },\n};\n\nexport const number: Decoder<number> = {\n decode(value): Result<number, DecodeFailure> {\n return typeof value === 'number'\n ? ok(value)\n : err(new DecodeFailure('Expected number.', { cause: value }));\n },\n};\n\nexport const boolean: Decoder<boolean> = {\n decode(value): Result<boolean, DecodeFailure> {\n return typeof value === 'boolean'\n ? ok(value)\n : err(new DecodeFailure('Expected boolean.', { cause: value }));\n },\n};\n\nexport const bigint: Decoder<bigint> = {\n decode(value): Result<bigint, DecodeFailure> {\n if (typeof value === 'bigint') {\n return ok(value);\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) && Number.isSafeInteger(value)\n ? ok(BigInt(value))\n : err(new DecodeFailure('Expected bigint.', { cause: value }));\n }\n\n if (typeof value === 'string') {\n try {\n return ok(BigInt(value));\n } catch {\n return err(new DecodeFailure('Expected bigint.', { cause: value }));\n }\n }\n\n return err(new DecodeFailure('Expected bigint.', { cause: value }));\n },\n};\n\nexport function lazy<T, E>(getDecoder: () => Decoder<T, E>): Decoder<T, E> {\n return {\n decode(value) {\n return getDecoder().decode(value);\n },\n };\n}\n\nexport function optional<T, E>(decoder: Decoder<T, E>): OptionalDecoder<T, E> {\n return {\n __soundscriptOptional: true,\n inner: decoder,\n decode(value) {\n return value === undefined ? ok(undefined) : decoder.decode(value);\n },\n };\n}\n\nexport function literal<const T extends string | number | boolean | null>(value: T): Decoder<T> {\n return {\n decode(input) {\n return Object.is(input, value)\n ? ok(value)\n : err(new DecodeFailure(`Expected literal ${JSON.stringify(value)}.`, { cause: input }));\n },\n };\n}\n\nexport function array<T, E>(item: Decoder<T, E>): Decoder<readonly T[], E | DecodeFailure> {\n return {\n decode(value) {\n if (!Array.isArray(value)) {\n return err(new DecodeFailure('Expected array.', { cause: value }));\n }\n\n const decodedValues: T[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const decoded = item.decode(value[index]);\n if (isErr(decoded)) {\n return err(prependPathIfPossible(decoded.error, index));\n }\n decodedValues.push(decoded.value);\n }\n\n return ok(decodedValues);\n },\n };\n}\n\nexport function tuple<const TElements extends TupleShape>(\n ...elements: TElements\n): Decoder<\n { readonly [K in keyof TElements]: DecoderValue<TElements[K]> },\n DecoderError<TElements[number]> | DecodeFailure\n> {\n return {\n decode(value) {\n if (!Array.isArray(value)) {\n return err(new DecodeFailure('Expected tuple.', { cause: value }));\n }\n\n if (value.length !== elements.length) {\n return err(\n new DecodeFailure(`Expected tuple of length ${elements.length}.`, {\n cause: value,\n }),\n );\n }\n\n const decodedValues: unknown[] = [];\n for (let index = 0; index < elements.length; index += 1) {\n const elementDecoder = elements[index];\n if (!elementDecoder) {\n continue;\n }\n const decoded = elementDecoder.decode(value[index]);\n if (isErr(decoded)) {\n return err(\n prependPathIfPossible(decoded.error, index) as\n | DecoderError<TElements[number]>\n | DecodeFailure,\n );\n }\n decodedValues.push(decoded.value);\n }\n\n return ok(decodedValues as { readonly [K in keyof TElements]: DecoderValue<TElements[K]> });\n },\n };\n}\n\nexport function option<T, E>(item: Decoder<T, E>): Decoder<Option<T>, E | DecodeFailure> {\n return union(\n map(\n object({\n tag: literal('some'),\n value: item,\n }),\n (value) => some(value.value) as Option<T>,\n ),\n map(\n object({\n tag: literal('none'),\n }),\n () => none() as Option<T>,\n ),\n );\n}\n\nexport function result<T, EValue, EDecodeValue, EDecodeError>(\n okDecoder: Decoder<T, EDecodeValue>,\n errDecoder: Decoder<EValue, EDecodeError>,\n): Decoder<Result<T, EValue>, EDecodeValue | EDecodeError | DecodeFailure> {\n return union(\n map(\n object({\n tag: literal('ok'),\n value: okDecoder,\n }),\n (value) => ok(value.value) as Result<T, EValue>,\n ),\n map(\n object({\n tag: literal('err'),\n error: errDecoder,\n }),\n (value) => err(value.error) as Result<T, EValue>,\n ),\n );\n}\n\nexport function object<TShape extends ObjectShape>(\n shape: TShape,\n): Decoder<\n { readonly [K in keyof TShape]: DecoderValue<TShape[K]> },\n DecoderError<TShape[keyof TShape]> | DecodeFailure\n> {\n return {\n decode(value) {\n if (!isPlainObject(value)) {\n return err(new DecodeFailure('Expected object.', { cause: value }));\n }\n\n const record = value as Record<string, unknown>;\n const decodedObject: Record<string, unknown> = {};\n\n for (const key of Object.keys(shape)) {\n const decoder = shape[key];\n if (!decoder) {\n continue;\n }\n const hasKey = key in record;\n const rawValue = record[key];\n\n if (!hasKey || rawValue === undefined) {\n if (isOptionalDecoder(decoder)) {\n decodedObject[key] = undefined;\n continue;\n }\n\n return err(\n new DecodeFailure(`Missing field \"${key}\".`, {\n cause: value,\n path: [key],\n }),\n );\n }\n\n const decoded = decoder.decode(rawValue);\n if (isErr(decoded)) {\n return err(\n prependPathIfPossible(decoded.error, key) as\n | DecoderError<TShape[keyof TShape]>\n | DecodeFailure,\n );\n }\n\n decodedObject[key] = decoded.value;\n }\n\n return ok(decodedObject as { readonly [K in keyof TShape]: DecoderValue<TShape[K]> });\n },\n };\n}\n\nexport function field<K extends string, T, E>(\n key: K,\n decoder: Decoder<T, E>,\n): Decoder<T, E | DecodeFailure> {\n const shape = { [key]: decoder } as { readonly [P in K]: Decoder<T, E> };\n return map(object(shape), (value) => value[key]);\n}\n\nexport function optionalField<K extends string, T, E>(\n key: K,\n decoder: Decoder<T, E>,\n): Decoder<T | undefined, E | DecodeFailure> {\n const shape = { [key]: optional(decoder) } as {\n readonly [P in K]: OptionalDecoder<T, E>;\n };\n return map(object(shape), (value) => value[key]);\n}\n\nexport function union<A, B, ELeft, ERight>(\n left: Decoder<A, ELeft>,\n right: Decoder<B, ERight>,\n): Decoder<A | B, ELeft | ERight | DecodeFailure> {\n return {\n decode(value) {\n const leftDecoded = left.decode(value);\n if (isErr(leftDecoded)) {\n const rightDecoded = right.decode(value);\n if (isErr(rightDecoded)) {\n return err(\n new DecodeFailure('Expected one of the union members.', {\n cause: value,\n }),\n );\n }\n return rightDecoded;\n }\n return leftDecoded;\n },\n };\n}\n\nexport function map<A, B, E>(\n decoder: Decoder<A, E>,\n project: (value: A) => B,\n): Decoder<B, E> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n return isErr(decoded) ? decoded : ok(project(decoded.value));\n },\n };\n}\n\nexport function andThen<A, B, E>(\n decoder: Decoder<A, E>,\n project: (value: A) => Decoder<B, E>,\n): Decoder<B, E> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n return isErr(decoded) ? decoded : project(decoded.value).decode(valueOf(decoded));\n },\n };\n}\n\nexport function refine<A, B extends A, E>(\n decoder: Decoder<A, E>,\n predicate: (value: A) => value is B,\n message: string,\n): Decoder<B, E | DecodeFailure> {\n return {\n decode(value) {\n const decoded = decoder.decode(value);\n if (isErr(decoded)) {\n return decoded;\n }\n\n return predicate(decoded.value)\n ? ok(decoded.value)\n : err(new DecodeFailure(message, { cause: value }));\n },\n };\n}\n\nfunction prependPathIfPossible<E>(error: E, segment: DecodePathSegment): E | DecodeFailure {\n return error instanceof DecodeFailure ? error.at(segment) : error;\n}\n\nfunction isOptionalDecoder(\n value: Decoder<unknown, unknown>,\n): value is OptionalDecoder<unknown, unknown> {\n return '__soundscriptOptional' in value &&\n value.__soundscriptOptional === true;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction valueOf<T>(decoded: { readonly value: T }): T {\n return decoded.value;\n}\n"]}
|
package/encode.js
CHANGED
|
@@ -101,6 +101,9 @@ export function object(shape) {
|
|
|
101
101
|
const encodedObject = {};
|
|
102
102
|
for (const key of Object.keys(shape)) {
|
|
103
103
|
const encoder = shape[key];
|
|
104
|
+
if (!encoder) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
104
107
|
const hasKey = key in record;
|
|
105
108
|
const rawValue = record[key];
|
|
106
109
|
if (!hasKey || rawValue === undefined) {
|
package/encode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["./soundscript/encode.sts"],"names":[],"mappings":"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","sourcesContent":["import { type Bind, type Kind3, type TypeLambda } from '@soundscript/soundscript/hkt';\nimport { Failure } from '@soundscript/soundscript/failures';\nimport { err, isErr, isOk, isSome, ok, type Option, type Result } from '@soundscript/soundscript/result';\nimport type { Contravariant } from '@soundscript/soundscript/typeclasses';\n\nexport class EncodeFailure extends Failure {\n constructor(message = 'Failed to encode value.', cause?: unknown) {\n super(message, { cause });\n }\n}\n\n// #[variance(T: in, TEncoded: out, E: out)]\nexport type Encoder<T, TEncoded = unknown, E = EncodeFailure> = {\n encode(value: T): Result<TEncoded, E>;\n};\n\n// #[variance(T: in, TEncoded: out, E: out)]\nexport type OptionalEncoder<T, TEncoded = T, E = EncodeFailure> =\n Encoder<T | undefined, TEncoded | undefined, E> & {\n readonly __soundscriptOptional: true;\n readonly inner: Encoder<T, TEncoded, E>;\n };\n\ntype EncoderInput<TEncoder> = TEncoder extends Encoder<infer T, unknown, unknown> ? T : never;\ntype EncoderOutput<TEncoder> = TEncoder extends Encoder<unknown, infer TEncoded, unknown> ? TEncoded\n : never;\ntype EncoderError<TEncoder> = TEncoder extends Encoder<unknown, unknown, infer E> ? E : never;\ntype ObjectShape = Record<string, Encoder<unknown, unknown, unknown>>;\ntype TupleShape = readonly Encoder<unknown, unknown, unknown>[];\n\nexport interface EncoderF extends TypeLambda {\n readonly type: Encoder<this['Args'][2], this['Args'][1], this['Args'][0]>;\n}\n\nexport type EncoderKind<E, TEncoded, T> = Kind3<EncoderF, E, TEncoded, T>;\n\nexport function fromEncode<T, TEncoded, E>(\n encode: (value: T) => Result<TEncoded, E>,\n): Encoder<T, TEncoded, E> {\n return {\n encode,\n };\n}\n\nexport function contramap<A, B, TEncoded, E>(\n encoder: Encoder<A, TEncoded, E>,\n project: (value: B) => A,\n): Encoder<B, TEncoded, E> {\n return fromEncode((value) => encoder.encode(project(value)));\n}\n\nexport function encoderContravariant<TEncoded, E = EncodeFailure>(): Contravariant<\n Bind<Bind<EncoderF, [E]>, [TEncoded]>\n> {\n return {\n contramap,\n };\n}\n\nexport const stringEncoder: Encoder<string, string> = fromEncode((value) => ok(value));\nexport const numberEncoder: Encoder<number, number> = fromEncode((value) => ok(value));\nexport const booleanEncoder: Encoder<boolean, boolean> = fromEncode((value) => ok(value));\nexport const bigintEncoder: Encoder<bigint, bigint> = fromEncode((value) => ok(value));\n\nexport function optional<T, TEncoded, E>(\n encoder: Encoder<T, TEncoded, E>,\n): OptionalEncoder<T, TEncoded, E> {\n return {\n __soundscriptOptional: true,\n inner: encoder,\n encode(value) {\n return value === undefined ? ok(undefined) : encoder.encode(value);\n },\n };\n}\n\nexport function lazy<T, TEncoded, E>(\n getEncoder: () => Encoder<T, TEncoded, E>,\n): Encoder<T, TEncoded, E> {\n return fromEncode((value) => getEncoder().encode(value));\n}\n\nexport function nullable<T, TEncoded, E>(\n encoder: Encoder<T, TEncoded, E>,\n): Encoder<T | null, TEncoded | null, E> {\n return fromEncode((value) => value === null ? ok(null) : encoder.encode(value));\n}\n\nexport function literal<const T extends string | number | boolean | null>(value: T): Encoder<T, T> {\n return fromEncode((input) =>\n Object.is(input, value)\n ? ok(value)\n : err(new EncodeFailure(`Expected literal ${JSON.stringify(value)}.`, input))\n );\n}\n\nexport function array<T, TEncoded, E>(\n item: Encoder<T, TEncoded, E>,\n): Encoder<readonly T[], readonly TEncoded[], E | EncodeFailure> {\n return fromEncode((value) => {\n const encodedValues: TEncoded[] = [];\n for (const entry of value) {\n const encoded = item.encode(entry);\n if (isErr(encoded)) {\n return encoded;\n }\n encodedValues.push(encoded.value);\n }\n return ok(encodedValues);\n });\n}\n\nexport function tuple<const TElements extends TupleShape>(\n ...elements: TElements\n): Encoder<\n { readonly [K in keyof TElements]: EncoderInput<TElements[K]> },\n { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },\n EncoderError<TElements[number]>\n> {\n return fromEncode((value) => {\n const values = value as readonly unknown[];\n const encodedValues: unknown[] = [];\n for (let index = 0; index < elements.length; index += 1) {\n const elementEncoder = elements[index];\n if (!elementEncoder) {\n continue;\n }\n const encoded = elementEncoder.encode(values[index] as never);\n if (isErr(encoded)) {\n return encoded as Result<\n { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },\n EncoderError<TElements[number]>\n >;\n }\n encodedValues.push(encoded.value);\n }\n return ok(encodedValues as { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> });\n });\n}\n\nexport function option<T, TEncoded, E>(\n item: Encoder<T, TEncoded, E>,\n): Encoder<\n Option<T>,\n { readonly tag: 'none' } | {\n readonly tag: 'some';\n readonly value: TEncoded;\n },\n E\n> {\n return fromEncode<\n Option<T>,\n { readonly tag: 'none' } | {\n readonly tag: 'some';\n readonly value: TEncoded;\n },\n E\n >((value) => {\n if (isSome(value)) {\n const encoded = item.encode(value.value);\n return isErr(encoded) ? encoded : ok({ tag: 'some', value: encoded.value });\n }\n\n return ok({ tag: 'none' });\n });\n}\n\nexport function result<T, EValue, TEncoded, EEncoded, EOk, EErr>(\n okEncoder: Encoder<T, TEncoded, EOk>,\n errEncoder: Encoder<EValue, EEncoded, EErr>,\n): Encoder<\n Result<T, EValue>,\n { readonly tag: 'ok'; readonly value: TEncoded } | {\n readonly error: EEncoded;\n readonly tag: 'err';\n },\n EOk | EErr\n> {\n return fromEncode<\n Result<T, EValue>,\n { readonly tag: 'ok'; readonly value: TEncoded } | {\n readonly error: EEncoded;\n readonly tag: 'err';\n },\n EOk | EErr\n >((value) => {\n if (isOk(value)) {\n const encoded = okEncoder.encode(value.value);\n return isErr(encoded) ? encoded : ok({ tag: 'ok', value: encoded.value });\n }\n\n const encoded = errEncoder.encode(value.error);\n return isErr(encoded) ? encoded : ok({ tag: 'err', error: encoded.value });\n });\n}\n\nexport function object<TShape extends ObjectShape>(\n shape: TShape,\n): Encoder<\n { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },\n { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n> {\n return fromEncode<\n { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },\n { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n >((value) => {\n if (!isPlainObject(value)) {\n return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(\n new EncodeFailure('Expected object.', value),\n );\n }\n\n const record = value as Record<string, unknown>;\n const encodedObject: Record<string, unknown> = {};\n\n for (const key of Object.keys(shape)) {\n const encoder = shape[key];\n const hasKey = key in record;\n const rawValue = record[key];\n\n if (!hasKey || rawValue === undefined) {\n if (isOptionalEncoder(encoder)) {\n encodedObject[key] = undefined;\n continue;\n }\n\n return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(\n new EncodeFailure(`Missing field \"${key}\".`, value),\n );\n }\n\n const encoded = encoder.encode(rawValue as never) as Result<\n unknown,\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n >;\n if (isErr(encoded)) {\n return encoded;\n }\n encodedObject[key] = encoded.value;\n }\n\n return ok(encodedObject as { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> });\n });\n}\n\nfunction isOptionalEncoder(\n value: Encoder<unknown, unknown, unknown>,\n): value is OptionalEncoder<unknown, unknown, unknown> {\n return '__soundscriptOptional' in value && value.__soundscriptOptional === true;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["./soundscript/encode.sts"],"names":[],"mappings":"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","sourcesContent":["import { type Bind, type Kind3, type TypeLambda } from '@soundscript/soundscript/hkt';\nimport { Failure } from '@soundscript/soundscript/failures';\nimport { err, isErr, isOk, isSome, ok, type Option, type Result } from '@soundscript/soundscript/result';\nimport type { Contravariant } from '@soundscript/soundscript/typeclasses';\n\nexport class EncodeFailure extends Failure {\n constructor(message = 'Failed to encode value.', cause?: unknown) {\n super(message, { cause });\n }\n}\n\n// #[variance(T: in, TEncoded: out, E: out)]\nexport type Encoder<T, TEncoded = unknown, E = EncodeFailure> = {\n encode(value: T): Result<TEncoded, E>;\n};\n\n// #[variance(T: in, TEncoded: out, E: out)]\nexport type OptionalEncoder<T, TEncoded = T, E = EncodeFailure> =\n Encoder<T | undefined, TEncoded | undefined, E> & {\n readonly __soundscriptOptional: true;\n readonly inner: Encoder<T, TEncoded, E>;\n };\n\ntype EncoderInput<TEncoder> = TEncoder extends Encoder<infer T, unknown, unknown> ? T : never;\ntype EncoderOutput<TEncoder> = TEncoder extends Encoder<unknown, infer TEncoded, unknown> ? TEncoded\n : never;\ntype EncoderError<TEncoder> = TEncoder extends Encoder<unknown, unknown, infer E> ? E : never;\ntype ObjectShape = Record<string, Encoder<unknown, unknown, unknown>>;\ntype TupleShape = readonly Encoder<unknown, unknown, unknown>[];\n\nexport interface EncoderF extends TypeLambda {\n readonly type: Encoder<this['Args'][2], this['Args'][1], this['Args'][0]>;\n}\n\nexport type EncoderKind<E, TEncoded, T> = Kind3<EncoderF, E, TEncoded, T>;\n\nexport function fromEncode<T, TEncoded, E>(\n encode: (value: T) => Result<TEncoded, E>,\n): Encoder<T, TEncoded, E> {\n return {\n encode,\n };\n}\n\nexport function contramap<A, B, TEncoded, E>(\n encoder: Encoder<A, TEncoded, E>,\n project: (value: B) => A,\n): Encoder<B, TEncoded, E> {\n return fromEncode((value) => encoder.encode(project(value)));\n}\n\nexport function encoderContravariant<TEncoded, E = EncodeFailure>(): Contravariant<\n Bind<Bind<EncoderF, [E]>, [TEncoded]>\n> {\n return {\n contramap,\n };\n}\n\nexport const stringEncoder: Encoder<string, string> = fromEncode((value) => ok(value));\nexport const numberEncoder: Encoder<number, number> = fromEncode((value) => ok(value));\nexport const booleanEncoder: Encoder<boolean, boolean> = fromEncode((value) => ok(value));\nexport const bigintEncoder: Encoder<bigint, bigint> = fromEncode((value) => ok(value));\n\nexport function optional<T, TEncoded, E>(\n encoder: Encoder<T, TEncoded, E>,\n): OptionalEncoder<T, TEncoded, E> {\n return {\n __soundscriptOptional: true,\n inner: encoder,\n encode(value) {\n return value === undefined ? ok(undefined) : encoder.encode(value);\n },\n };\n}\n\nexport function lazy<T, TEncoded, E>(\n getEncoder: () => Encoder<T, TEncoded, E>,\n): Encoder<T, TEncoded, E> {\n return fromEncode((value) => getEncoder().encode(value));\n}\n\nexport function nullable<T, TEncoded, E>(\n encoder: Encoder<T, TEncoded, E>,\n): Encoder<T | null, TEncoded | null, E> {\n return fromEncode((value) => value === null ? ok(null) : encoder.encode(value));\n}\n\nexport function literal<const T extends string | number | boolean | null>(value: T): Encoder<T, T> {\n return fromEncode((input) =>\n Object.is(input, value)\n ? ok(value)\n : err(new EncodeFailure(`Expected literal ${JSON.stringify(value)}.`, input))\n );\n}\n\nexport function array<T, TEncoded, E>(\n item: Encoder<T, TEncoded, E>,\n): Encoder<readonly T[], readonly TEncoded[], E | EncodeFailure> {\n return fromEncode((value) => {\n const encodedValues: TEncoded[] = [];\n for (const entry of value) {\n const encoded = item.encode(entry);\n if (isErr(encoded)) {\n return encoded;\n }\n encodedValues.push(encoded.value);\n }\n return ok(encodedValues);\n });\n}\n\nexport function tuple<const TElements extends TupleShape>(\n ...elements: TElements\n): Encoder<\n { readonly [K in keyof TElements]: EncoderInput<TElements[K]> },\n { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },\n EncoderError<TElements[number]>\n> {\n return fromEncode((value) => {\n const values = value as readonly unknown[];\n const encodedValues: unknown[] = [];\n for (let index = 0; index < elements.length; index += 1) {\n const elementEncoder = elements[index];\n if (!elementEncoder) {\n continue;\n }\n const encoded = elementEncoder.encode(values[index] as never);\n if (isErr(encoded)) {\n return encoded as Result<\n { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },\n EncoderError<TElements[number]>\n >;\n }\n encodedValues.push(encoded.value);\n }\n return ok(encodedValues as { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> });\n });\n}\n\nexport function option<T, TEncoded, E>(\n item: Encoder<T, TEncoded, E>,\n): Encoder<\n Option<T>,\n { readonly tag: 'none' } | {\n readonly tag: 'some';\n readonly value: TEncoded;\n },\n E\n> {\n return fromEncode<\n Option<T>,\n { readonly tag: 'none' } | {\n readonly tag: 'some';\n readonly value: TEncoded;\n },\n E\n >((value) => {\n if (isSome(value)) {\n const encoded = item.encode(value.value);\n return isErr(encoded) ? encoded : ok({ tag: 'some', value: encoded.value });\n }\n\n return ok({ tag: 'none' });\n });\n}\n\nexport function result<T, EValue, TEncoded, EEncoded, EOk, EErr>(\n okEncoder: Encoder<T, TEncoded, EOk>,\n errEncoder: Encoder<EValue, EEncoded, EErr>,\n): Encoder<\n Result<T, EValue>,\n { readonly tag: 'ok'; readonly value: TEncoded } | {\n readonly error: EEncoded;\n readonly tag: 'err';\n },\n EOk | EErr\n> {\n return fromEncode<\n Result<T, EValue>,\n { readonly tag: 'ok'; readonly value: TEncoded } | {\n readonly error: EEncoded;\n readonly tag: 'err';\n },\n EOk | EErr\n >((value) => {\n if (isOk(value)) {\n const encoded = okEncoder.encode(value.value);\n return isErr(encoded) ? encoded : ok({ tag: 'ok', value: encoded.value });\n }\n\n const encoded = errEncoder.encode(value.error);\n return isErr(encoded) ? encoded : ok({ tag: 'err', error: encoded.value });\n });\n}\n\nexport function object<TShape extends ObjectShape>(\n shape: TShape,\n): Encoder<\n { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },\n { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n> {\n return fromEncode<\n { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },\n { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n >((value) => {\n if (!isPlainObject(value)) {\n return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(\n new EncodeFailure('Expected object.', value),\n );\n }\n\n const record = value as Record<string, unknown>;\n const encodedObject: Record<string, unknown> = {};\n\n for (const key of Object.keys(shape)) {\n const encoder = shape[key];\n if (!encoder) {\n continue;\n }\n const hasKey = key in record;\n const rawValue = record[key];\n\n if (!hasKey || rawValue === undefined) {\n if (isOptionalEncoder(encoder)) {\n encodedObject[key] = undefined;\n continue;\n }\n\n return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(\n new EncodeFailure(`Missing field \"${key}\".`, value),\n );\n }\n\n const encoded = encoder.encode(rawValue as never) as Result<\n unknown,\n EncoderError<TShape[keyof TShape]> | EncodeFailure\n >;\n if (isErr(encoded)) {\n return encoded;\n }\n encodedObject[key] = encoded.value;\n }\n\n return ok(encodedObject as { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> });\n });\n}\n\nfunction isOptionalEncoder(\n value: Encoder<unknown, unknown, unknown>,\n): value is OptionalEncoder<unknown, unknown, unknown> {\n return '__soundscriptOptional' in value && value.__soundscriptOptional === true;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|
package/json.js
CHANGED
|
@@ -12,7 +12,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
12
12
|
var _JsonLikeParser_instances, _JsonLikeParser_index, _JsonLikeParser_text, _JsonLikeParser_consumeKeyword, _JsonLikeParser_parseArray, _JsonLikeParser_parseNumber, _JsonLikeParser_parseObject, _JsonLikeParser_parseString, _JsonLikeParser_consumeDigits, _JsonLikeParser_skipWhitespace, _JsonLikeParser_isDigit, _JsonLikeParser_error;
|
|
13
13
|
import { Failure } from '@soundscript/soundscript/failures';
|
|
14
14
|
import { isErr, resultOf } from '@soundscript/soundscript/result';
|
|
15
|
-
import { F32, F64, format as formatNumeric, I8, I16, I32, I64, isNumeric, toHostNumber, U8, U16, U32, U64, } from './numerics.
|
|
15
|
+
import { F32, F64, format as formatNumeric, I8, I16, I32, I64, isNumeric, toHostNumber, U8, U16, U32, U64, } from './numerics.sts';
|
|
16
16
|
const MAX_SAFE_INTEGER_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
17
17
|
const MIN_SAFE_INTEGER_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);
|
|
18
18
|
export class JsonParseFailure extends Failure {
|
|
@@ -286,8 +286,8 @@ function decodeTaggedMachineJsonValue(value) {
|
|
|
286
286
|
return value;
|
|
287
287
|
}
|
|
288
288
|
function decodeTaggedMachineNumeric(value) {
|
|
289
|
-
const numericKind = value
|
|
290
|
-
const numericValue = value
|
|
289
|
+
const numericKind = value['$numeric'];
|
|
290
|
+
const numericValue = value['value'];
|
|
291
291
|
const keys = Object.keys(value);
|
|
292
292
|
if (typeof numericKind !== 'string' ||
|
|
293
293
|
typeof numericValue !== 'string' ||
|
|
@@ -715,7 +715,11 @@ _JsonLikeParser_index = new WeakMap(), _JsonLikeParser_text = new WeakMap(), _Js
|
|
|
715
715
|
const current = __classPrivateFieldGet(this, _JsonLikeParser_text, "f")[__classPrivateFieldGet(this, _JsonLikeParser_index, "f")];
|
|
716
716
|
if (current === '"') {
|
|
717
717
|
__classPrivateFieldSet(this, _JsonLikeParser_index, __classPrivateFieldGet(this, _JsonLikeParser_index, "f") + 1, "f");
|
|
718
|
-
|
|
718
|
+
const parsed = JSON.parse(__classPrivateFieldGet(this, _JsonLikeParser_text, "f").slice(start, __classPrivateFieldGet(this, _JsonLikeParser_index, "f")));
|
|
719
|
+
if (typeof parsed !== 'string') {
|
|
720
|
+
__classPrivateFieldGet(this, _JsonLikeParser_instances, "m", _JsonLikeParser_error).call(this, 'Expected string literal.');
|
|
721
|
+
}
|
|
722
|
+
return parsed;
|
|
719
723
|
}
|
|
720
724
|
if (current === '\\') {
|
|
721
725
|
__classPrivateFieldSet(this, _JsonLikeParser_index, __classPrivateFieldGet(this, _JsonLikeParser_index, "f") + 1, "f");
|
|
@@ -732,7 +736,7 @@ _JsonLikeParser_index = new WeakMap(), _JsonLikeParser_text = new WeakMap(), _Js
|
|
|
732
736
|
}
|
|
733
737
|
}
|
|
734
738
|
}
|
|
735
|
-
else if (current <= '\u001F') {
|
|
739
|
+
else if (current !== undefined && current <= '\u001F') {
|
|
736
740
|
__classPrivateFieldGet(this, _JsonLikeParser_instances, "m", _JsonLikeParser_error).call(this, 'Invalid control character in string literal');
|
|
737
741
|
}
|
|
738
742
|
__classPrivateFieldSet(this, _JsonLikeParser_index, __classPrivateFieldGet(this, _JsonLikeParser_index, "f") + 1, "f");
|
package/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["./soundscript/json.sts"],"names":[],"mappings":"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","sourcesContent":["import type { Decoder } from '@soundscript/soundscript/decode';\nimport type { Encoder } from '@soundscript/soundscript/encode';\nimport { Failure } from '@soundscript/soundscript/failures';\nimport { isErr, type Result, resultOf } from '@soundscript/soundscript/result';\nimport {\n F32,\n F64,\n format as formatNumeric,\n I8,\n I16,\n I32,\n I64,\n isNumeric,\n toHostNumber,\n type Numeric,\n U8,\n U16,\n U32,\n U64,\n} from './numerics.js';\n\nexport type JsonArray = JsonValue[];\nexport type JsonObject = {\n [key: string]: JsonValue;\n};\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\ntype LosslessJsonArray = LosslessJsonValue[];\ntype LosslessJsonObject = {\n [key: string]: LosslessJsonValue;\n};\nexport type LosslessJsonValue =\n | string\n | number\n | bigint\n | boolean\n | null\n | LosslessJsonObject\n | LosslessJsonArray;\n\nexport type JsonLikeArray = JsonLikeValue[];\nexport type JsonLikeObject = {\n [key: string]: JsonLikeValue;\n};\nexport type JsonLikeValue =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | JsonLikeObject\n | JsonLikeArray;\n\nexport type MachineJsonArray = MachineJsonLikeValue[];\nexport type MachineJsonObject = {\n [key: string]: MachineJsonLikeValue;\n};\nexport type MachineJsonLikeValue =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | Numeric\n | MachineJsonObject\n | MachineJsonArray;\n\nexport type MachineJsonNumericMode = 'tagged' | 'decimal-string' | 'json-number';\n\nexport interface JsonParseOptions {\n int64?: 'default' | 'lossless';\n numerics?: 'tagged';\n}\n\nexport type JsonStringifyBigintMode = 'number' | 'reject' | 'string';\n\nexport interface JsonStringifyOptions {\n int64?: 'default' | 'string' | 'lossless';\n readonly bigint?: JsonStringifyBigintMode;\n numerics?: MachineJsonNumericMode;\n}\n\nconst MAX_SAFE_INTEGER_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_INTEGER_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nexport class JsonParseFailure extends Failure {\n constructor(cause?: unknown) {\n super('Failed to parse JSON.', { cause });\n }\n}\n\nexport class JsonStringifyFailure extends Failure {\n constructor(cause?: unknown) {\n super('Failed to stringify JSON.', { cause });\n }\n}\n\nexport function parseJson(text: string): Result<JsonValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions & { int64: 'lossless' },\n): Result<LosslessJsonValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions & { numerics: 'tagged' },\n): Result<MachineJsonLikeValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions = {},\n): Result<JsonValue | LosslessJsonValue | MachineJsonLikeValue, JsonParseFailure> {\n return resultOf(\n () => {\n const parsed = options.int64 === 'lossless' ? parseLosslessJson(text) : JSON.parse(text);\n return options.numerics === 'tagged'\n ? decodeTaggedMachineJsonValue(parsed as JsonValue | LosslessJsonValue)\n : parsed;\n },\n (cause) => new JsonParseFailure(cause),\n );\n}\n\nexport function stringifyJson(value: JsonValue): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: LosslessJsonValue,\n options: JsonStringifyOptions & { int64: 'string' | 'lossless' },\n): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: MachineJsonLikeValue,\n options: JsonStringifyOptions & { numerics: MachineJsonNumericMode },\n): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: JsonValue | LosslessJsonValue | MachineJsonLikeValue,\n options: JsonStringifyOptions = {},\n): Result<string, JsonStringifyFailure> {\n return resultOf(\n () => {\n if (options.numerics) {\n const normalized = normalizeMachineJsonLikeValue(\n value as MachineJsonLikeValue,\n new Set<object>(),\n options.numerics,\n 'root',\n );\n const encoded = stringifyJsonLikeInternal(\n normalized,\n new Set<object>(),\n options.bigint ?? 'reject',\n 'root',\n );\n if (encoded === undefined) {\n throw new TypeError('JSON stringification produced no top-level value.');\n }\n return encoded;\n }\n\n if (options.int64 === 'string') {\n return stringifyJsonWithInt64Mode(value as LosslessJsonValue, 'string');\n }\n if (options.int64 === 'lossless') {\n return stringifyJsonWithInt64Mode(value as LosslessJsonValue, 'lossless');\n }\n\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError(\n 'JSON.stringify returned undefined for a JsonValue input.',\n );\n }\n return encoded;\n },\n (cause) => new JsonStringifyFailure(cause),\n );\n}\n\nexport function parseAndDecode<T, E>(\n text: string,\n decoder: Decoder<T, E>,\n): Result<T, JsonParseFailure | E> {\n const parsed = parseJson(text);\n return isErr(parsed) ? parsed : decoder.decode(parsed.value);\n}\n\nexport function encodeAndStringify<T, E>(\n value: T,\n encoder: Encoder<T, JsonValue, E>,\n): Result<string, E | JsonStringifyFailure> {\n const encoded = encoder.encode(value);\n return isErr(encoded) ? encoded : stringifyJson(encoded.value);\n}\n\nexport function isJsonValue(value: unknown): value is JsonValue {\n return isJsonValueInternal(value, new Set<object>());\n}\n\nexport function parseJsonLike(text: string): Result<JsonLikeValue, JsonParseFailure> {\n return resultOf(\n () => {\n const parser = new JsonLikeParser(text);\n const value = parser.parseValue();\n parser.finish();\n return value;\n },\n (cause) => new JsonParseFailure(cause),\n );\n}\n\nexport function stringifyJsonLike(\n value: JsonLikeValue,\n options: JsonStringifyOptions = {},\n): Result<string, JsonStringifyFailure> {\n return resultOf(\n () => {\n const encoded = stringifyJsonLikeInternal(\n value,\n new Set<object>(),\n options.bigint ?? 'reject',\n 'root',\n );\n if (encoded === undefined) {\n throw new TypeError('JSON-like stringification produced no top-level value.');\n }\n return encoded;\n },\n (cause) => new JsonStringifyFailure(cause),\n );\n}\n\nexport function decodeJson<T, E>(\n text: string,\n decoder: Decoder<T, E>,\n): Result<T, E | JsonParseFailure> {\n const parsed = parseJsonLike(text);\n return isErr(parsed) ? parsed : decoder.decode(parsed.value);\n}\n\nexport function encodeJson<T, E>(\n value: T,\n encoder: Encoder<T, JsonLikeValue, E>,\n options: JsonStringifyOptions = {},\n): Result<string, E | JsonStringifyFailure> {\n const encoded = encoder.encode(value);\n return isErr(encoded) ? encoded : stringifyJsonLike(encoded.value, options);\n}\n\nexport function isJsonLikeValue(value: unknown): value is JsonLikeValue {\n return isJsonLikeValueInternal(value, new Set<object>());\n}\n\nfunction stringifyJsonWithInt64Mode(\n value: LosslessJsonValue,\n int64Mode: 'string' | 'lossless',\n): string {\n return stringifyJsonWithInt64ModeInternal(value, int64Mode, new Set<object>());\n}\n\nfunction stringifyJsonWithInt64ModeInternal(\n value: LosslessJsonValue,\n int64Mode: 'string' | 'lossless',\n visited: Set<object>,\n): string {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n case 'number': {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError('JSON.stringify returned undefined for a numeric input.');\n }\n return encoded;\n }\n case 'bigint':\n return int64Mode === 'string'\n ? JSON.stringify(value.toString())\n : value.toString();\n case 'boolean':\n return value ? 'true' : 'false';\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n if (visited.has(value)) {\n throw new TypeError('Could not stringify cyclic JSON value.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stringifyJsonWithInt64ModeInternal(entry, int64Mode, visited)).join(',')}]`;\n }\n\n const fields = Object.keys(value).map((key) =>\n `${JSON.stringify(key)}:${stringifyJsonWithInt64ModeInternal(value[key]!, int64Mode, visited)}`\n );\n return `{${fields.join(',')}}`;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError(`Unsupported JSON value kind: ${typeof value}`);\n }\n}\n\nfunction parseLosslessJson(text: string): LosslessJsonValue {\n const parser = new LosslessJsonParser(text);\n const value = parser.parseValue();\n parser.skipWhitespace();\n if (!parser.isAtEnd()) {\n parser.fail('Unexpected trailing characters.');\n }\n return value;\n}\n\nfunction isJsonValueInternal(value: unknown, visited: Set<object>): value is JsonValue {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n return true;\n case 'object':\n if (value === null) {\n return true;\n }\n\n if (visited.has(value)) {\n return true;\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.every((entry) => isJsonValueInternal(entry, visited));\n }\n\n for (const key of Object.keys(value)) {\n if (!isJsonValueInternal((value as Record<string, unknown>)[key], visited)) {\n return false;\n }\n }\n\n return true;\n } finally {\n visited.delete(value);\n }\n default:\n return false;\n }\n}\n\nfunction isJsonLikeValueInternal(\n value: unknown,\n visited: Set<object>,\n): value is JsonLikeValue {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'undefined':\n return true;\n case 'object':\n if (value === null) {\n return true;\n }\n\n if (visited.has(value)) {\n return true;\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.every((entry) => isJsonLikeValueInternal(entry, visited));\n }\n\n for (const key of Object.keys(value)) {\n if (!isJsonLikeValueInternal((value as Record<string, unknown>)[key], visited)) {\n return false;\n }\n }\n\n return true;\n } finally {\n visited.delete(value);\n }\n default:\n return false;\n }\n}\n\nfunction normalizeMachineJsonLikeValue(\n value: MachineJsonLikeValue,\n visited: Set<object>,\n numericMode: MachineJsonNumericMode,\n position: 'array' | 'object' | 'root',\n): JsonLikeValue {\n if (isNumeric(value)) {\n return normalizeMachineNumericJsonValue(value, numericMode);\n }\n\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n return value;\n case 'undefined':\n return position === 'array' ? null : undefined;\n case 'object':\n if (value === null) {\n return null;\n }\n\n if (visited.has(value)) {\n throw new TypeError('Converting circular structure to machine JSON text.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.map((entry) =>\n normalizeMachineJsonLikeValue(entry, visited, numericMode, 'array') ?? null\n );\n }\n\n const result: Record<string, JsonLikeValue> = {};\n for (const key of Object.keys(value)) {\n const normalized = normalizeMachineJsonLikeValue(\n (value as MachineJsonObject)[key]!,\n visited,\n numericMode,\n 'object',\n );\n if (normalized !== undefined) {\n result[key] = normalized;\n }\n }\n return result;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError(`Unsupported machine JSON value kind: ${typeof value}`);\n }\n}\n\nfunction normalizeMachineNumericJsonValue(\n value: Numeric,\n numericMode: MachineJsonNumericMode,\n): JsonLikeValue {\n switch (numericMode) {\n case 'tagged':\n return value.toJSON();\n case 'decimal-string':\n return formatNumeric(value);\n case 'json-number':\n switch (value.__soundscript_numeric_kind) {\n case 'i64':\n case 'u64':\n throw new TypeError('json-number machine JSON mode does not support bigint-backed machine numerics.');\n default:\n return toHostNumber(value);\n }\n }\n}\n\nfunction decodeTaggedMachineJsonValue(value: JsonValue | LosslessJsonValue): MachineJsonLikeValue {\n if (Array.isArray(value)) {\n return value.map((entry) => decodeTaggedMachineJsonValue(entry));\n }\n\n if (value && typeof value === 'object') {\n const taggedNumeric = decodeTaggedMachineNumeric(value);\n if (taggedNumeric) {\n return taggedNumeric;\n }\n\n const result: Record<string, MachineJsonLikeValue> = {};\n for (const key of Object.keys(value)) {\n result[key] = decodeTaggedMachineJsonValue(value[key]!);\n }\n return result;\n }\n\n return value;\n}\n\nfunction decodeTaggedMachineNumeric(\n value: Record<string, JsonValue | LosslessJsonValue>,\n): Numeric | undefined {\n const numericKind = value.$numeric;\n const numericValue = value.value;\n const keys = Object.keys(value);\n if (\n typeof numericKind !== 'string' ||\n typeof numericValue !== 'string' ||\n keys.length !== 2 ||\n !keys.includes('$numeric') ||\n !keys.includes('value')\n ) {\n return undefined;\n }\n\n switch (numericKind) {\n case 'f64':\n return F64.parse(numericValue);\n case 'f32':\n return F32.parse(numericValue);\n case 'i8':\n return I8.parse(numericValue);\n case 'i16':\n return I16.parse(numericValue);\n case 'i32':\n return I32.parse(numericValue);\n case 'i64':\n return I64.parse(numericValue);\n case 'u8':\n return U8.parse(numericValue);\n case 'u16':\n return U16.parse(numericValue);\n case 'u32':\n return U32.parse(numericValue);\n case 'u64':\n return U64.parse(numericValue);\n default:\n return undefined;\n }\n}\n\nfunction stringifyJsonLikeInternal(\n value: JsonLikeValue,\n visited: Set<object>,\n bigintMode: JsonStringifyBigintMode,\n position: 'array' | 'object' | 'root',\n): string | undefined {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n case 'number':\n return Number.isFinite(value) ? JSON.stringify(value) : 'null';\n case 'boolean':\n return value ? 'true' : 'false';\n case 'bigint':\n switch (bigintMode) {\n case 'string':\n return JSON.stringify(value.toString());\n case 'number':\n return value.toString();\n case 'reject':\n throw new TypeError('Encountered bigint while stringifying JSON-like data.');\n }\n case 'undefined':\n return position === 'array' ? 'null' : undefined;\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n if (visited.has(value)) {\n throw new TypeError('Converting circular structure to JSON-like text.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) =>\n stringifyJsonLikeInternal(entry, visited, bigintMode, 'array') ?? 'null'\n ).join(',')}]`;\n }\n\n const encodedProperties: string[] = [];\n for (const key of Object.keys(value)) {\n const encodedValue = stringifyJsonLikeInternal(\n (value as Record<string, JsonLikeValue>)[key],\n visited,\n bigintMode,\n 'object',\n );\n if (encodedValue === undefined) {\n continue;\n }\n encodedProperties.push(`${JSON.stringify(key)}:${encodedValue}`);\n }\n return `{${encodedProperties.join(',')}}`;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError('Encountered an unsupported JSON-like value.');\n }\n}\n\nclass LosslessJsonParser {\n private readonly text: string;\n private index = 0;\n\n constructor(text: string) {\n this.text = text;\n }\n\n fail(message: string): never {\n throw new SyntaxError(`${message} At character ${this.index}.`);\n }\n\n isAtEnd(): boolean {\n return this.index >= this.text.length;\n }\n\n skipWhitespace(): void {\n while (!this.isAtEnd() && /\\s/u.test(this.text[this.index]!)) {\n this.index += 1;\n }\n }\n\n parseValue(): LosslessJsonValue {\n this.skipWhitespace();\n if (this.isAtEnd()) {\n this.fail('Unexpected end of JSON input.');\n }\n\n const current = this.text[this.index]!;\n switch (current) {\n case '\"':\n return this.parseString();\n case '{':\n return this.parseObject();\n case '[':\n return this.parseArray();\n case 't':\n this.consumeKeyword('true');\n return true;\n case 'f':\n this.consumeKeyword('false');\n return false;\n case 'n':\n this.consumeKeyword('null');\n return null;\n default:\n if (current === '-' || isAsciiDigit(current)) {\n return this.parseNumber();\n }\n this.fail(`Unexpected token ${JSON.stringify(current)}.`);\n }\n }\n\n private consumeKeyword(keyword: string): void {\n if (!this.text.startsWith(keyword, this.index)) {\n this.fail(`Expected ${keyword}.`);\n }\n this.index += keyword.length;\n }\n\n private parseString(): string {\n let result = '';\n this.index += 1;\n\n while (!this.isAtEnd()) {\n const current = this.text[this.index]!;\n if (current === '\"') {\n this.index += 1;\n return result;\n }\n if (current === '\\\\') {\n this.index += 1;\n if (this.isAtEnd()) {\n this.fail('Unexpected end of escape sequence.');\n }\n result += this.parseEscapeSequence();\n continue;\n }\n result += current;\n this.index += 1;\n }\n\n this.fail('Unterminated string literal.');\n }\n\n private parseEscapeSequence(): string {\n const current = this.text[this.index]!;\n this.index += 1;\n switch (current) {\n case '\"':\n case '\\\\':\n case '/':\n return current;\n case 'b':\n return '\\b';\n case 'f':\n return '\\f';\n case 'n':\n return '\\n';\n case 'r':\n return '\\r';\n case 't':\n return '\\t';\n case 'u': {\n const hex = this.text.slice(this.index, this.index + 4);\n if (!/^[0-9A-Fa-f]{4}$/u.test(hex)) {\n this.fail('Invalid unicode escape.');\n }\n this.index += 4;\n return String.fromCharCode(Number.parseInt(hex, 16));\n }\n default:\n this.fail(`Invalid escape sequence \\\\${current}.`);\n }\n }\n\n private parseArray(): LosslessJsonArray {\n const result: LosslessJsonArray = [];\n this.index += 1;\n this.skipWhitespace();\n if (this.text[this.index] === ']') {\n this.index += 1;\n return result;\n }\n\n while (true) {\n result.push(this.parseValue());\n this.skipWhitespace();\n const current = this.text[this.index];\n if (current === ']') {\n this.index += 1;\n return result;\n }\n if (current !== ',') {\n this.fail('Expected , or ] in array literal.');\n }\n this.index += 1;\n }\n }\n\n private parseObject(): LosslessJsonObject {\n const result: LosslessJsonObject = {};\n this.index += 1;\n this.skipWhitespace();\n if (this.text[this.index] === '}') {\n this.index += 1;\n return result;\n }\n\n while (true) {\n this.skipWhitespace();\n if (this.text[this.index] !== '\"') {\n this.fail('Expected string key in object literal.');\n }\n const key = this.parseString();\n this.skipWhitespace();\n if (this.text[this.index] !== ':') {\n this.fail('Expected : after object key.');\n }\n this.index += 1;\n result[key] = this.parseValue();\n this.skipWhitespace();\n const current = this.text[this.index];\n if (current === '}') {\n this.index += 1;\n return result;\n }\n if (current !== ',') {\n this.fail('Expected , or } in object literal.');\n }\n this.index += 1;\n }\n }\n\n private parseNumber(): number | bigint {\n const start = this.index;\n if (this.text[this.index] === '-') {\n this.index += 1;\n }\n\n if (this.text[this.index] === '0') {\n this.index += 1;\n } else {\n this.consumeDigits();\n }\n\n let isInteger = true;\n if (this.text[this.index] === '.') {\n isInteger = false;\n this.index += 1;\n this.consumeDigits();\n }\n\n const exponentMarker = this.text[this.index];\n if (exponentMarker === 'e' || exponentMarker === 'E') {\n isInteger = false;\n this.index += 1;\n const sign = this.text[this.index];\n if (sign === '+' || sign === '-') {\n this.index += 1;\n }\n this.consumeDigits();\n }\n\n const token = this.text.slice(start, this.index);\n if (!isInteger) {\n return Number(token);\n }\n if (token === '-0') {\n return -0;\n }\n\n const bigintValue = BigInt(token);\n return bigintValue <= MAX_SAFE_INTEGER_BIGINT && bigintValue >= MIN_SAFE_INTEGER_BIGINT\n ? Number(token)\n : bigintValue;\n }\n\n private consumeDigits(): void {\n const start = this.index;\n while (!this.isAtEnd() && isAsciiDigit(this.text[this.index]!)) {\n this.index += 1;\n }\n if (start === this.index) {\n this.fail('Expected digits.');\n }\n }\n}\n\nclass JsonLikeParser {\n #index = 0;\n readonly #text: string;\n\n constructor(text: string) {\n this.#text = text;\n }\n\n finish(): void {\n this.#skipWhitespace();\n if (this.#index !== this.#text.length) {\n this.#error('Unexpected trailing JSON input');\n }\n }\n\n parseValue(): JsonLikeValue {\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n switch (current) {\n case '{':\n return this.#parseObject();\n case '[':\n return this.#parseArray();\n case '\"':\n return this.#parseString();\n case 't':\n this.#consumeKeyword('true');\n return true;\n case 'f':\n this.#consumeKeyword('false');\n return false;\n case 'n':\n this.#consumeKeyword('null');\n return null;\n default:\n if (current === '-' || this.#isDigit(current)) {\n return this.#parseNumber();\n }\n this.#error('Unexpected token in JSON input');\n }\n }\n\n #consumeKeyword(keyword: string): void {\n if (this.#text.slice(this.#index, this.#index + keyword.length) !== keyword) {\n this.#error(`Expected ${keyword}`);\n }\n this.#index += keyword.length;\n }\n\n #parseArray(): JsonLikeArray {\n const values: JsonLikeValue[] = [];\n this.#index += 1;\n this.#skipWhitespace();\n if (this.#text[this.#index] === ']') {\n this.#index += 1;\n return values;\n }\n\n while (true) {\n values.push(this.parseValue());\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n if (current === ']') {\n this.#index += 1;\n return values;\n }\n if (current !== ',') {\n this.#error('Expected , or ] in JSON array');\n }\n this.#index += 1;\n }\n }\n\n #parseNumber(): number | bigint {\n const start = this.#index;\n if (this.#text[this.#index] === '-') {\n this.#index += 1;\n }\n\n if (this.#text[this.#index] === '0') {\n this.#index += 1;\n } else {\n this.#consumeDigits();\n }\n\n let isInteger = true;\n if (this.#text[this.#index] === '.') {\n isInteger = false;\n this.#index += 1;\n this.#consumeDigits();\n }\n\n const exponent = this.#text[this.#index];\n if (exponent === 'e' || exponent === 'E') {\n isInteger = false;\n this.#index += 1;\n const sign = this.#text[this.#index];\n if (sign === '+' || sign === '-') {\n this.#index += 1;\n }\n this.#consumeDigits();\n }\n\n const token = this.#text.slice(start, this.#index);\n if (!isInteger) {\n return Number(token);\n }\n\n const bigintValue = BigInt(token);\n const numberValue = Number(token);\n return Number.isSafeInteger(numberValue) && BigInt(numberValue) === bigintValue\n ? numberValue\n : bigintValue;\n }\n\n #parseObject(): JsonLikeObject {\n const object: Record<string, JsonLikeValue> = {};\n this.#index += 1;\n this.#skipWhitespace();\n if (this.#text[this.#index] === '}') {\n this.#index += 1;\n return object;\n }\n\n while (true) {\n this.#skipWhitespace();\n if (this.#text[this.#index] !== '\"') {\n this.#error('Expected string key in JSON object');\n }\n const key = this.#parseString();\n this.#skipWhitespace();\n if (this.#text[this.#index] !== ':') {\n this.#error('Expected : in JSON object');\n }\n this.#index += 1;\n object[key] = this.parseValue();\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n if (current === '}') {\n this.#index += 1;\n return object;\n }\n if (current !== ',') {\n this.#error('Expected , or } in JSON object');\n }\n this.#index += 1;\n }\n }\n\n #parseString(): string {\n const start = this.#index;\n this.#index += 1;\n while (this.#index < this.#text.length) {\n const current = this.#text[this.#index];\n if (current === '\"') {\n this.#index += 1;\n return JSON.parse(this.#text.slice(start, this.#index));\n }\n if (current === '\\\\') {\n this.#index += 1;\n const escaped = this.#text[this.#index];\n if (escaped === undefined) {\n this.#error('Unterminated string escape');\n }\n if (escaped === 'u') {\n for (let index = 0; index < 4; index += 1) {\n this.#index += 1;\n if (!/[0-9A-Fa-f]/u.test(this.#text[this.#index] ?? '')) {\n this.#error('Invalid unicode escape');\n }\n }\n }\n } else if (current <= '\\u001F') {\n this.#error('Invalid control character in string literal');\n }\n this.#index += 1;\n }\n this.#error('Unterminated string literal');\n }\n\n #consumeDigits(): void {\n const start = this.#index;\n while (this.#isDigit(this.#text[this.#index])) {\n this.#index += 1;\n }\n if (start === this.#index) {\n this.#error('Expected digit in JSON number');\n }\n }\n\n #skipWhitespace(): void {\n while (/\\s/u.test(this.#text[this.#index] ?? '')) {\n this.#index += 1;\n }\n }\n\n #isDigit(value: string | undefined): boolean {\n return value !== undefined && value >= '0' && value <= '9';\n }\n\n #error(message: string): never {\n throw new SyntaxError(`${message} at position ${this.#index}.`);\n }\n}\n\nfunction isAsciiDigit(text: string): boolean {\n return text >= '0' && text <= '9';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["./soundscript/json.sts"],"names":[],"mappings":"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","sourcesContent":["import type { Decoder } from '@soundscript/soundscript/decode';\nimport type { Encoder } from '@soundscript/soundscript/encode';\nimport { Failure } from '@soundscript/soundscript/failures';\nimport { isErr, type Result, resultOf } from '@soundscript/soundscript/result';\nimport {\n F32,\n F64,\n format as formatNumeric,\n I8,\n I16,\n I32,\n I64,\n isNumeric,\n toHostNumber,\n type Numeric,\n U8,\n U16,\n U32,\n U64,\n} from './numerics.sts';\n\nexport type JsonArray = JsonValue[];\nexport type JsonObject = {\n [key: string]: JsonValue;\n};\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\ntype LosslessJsonArray = LosslessJsonValue[];\ntype LosslessJsonObject = {\n [key: string]: LosslessJsonValue;\n};\nexport type LosslessJsonValue =\n | string\n | number\n | bigint\n | boolean\n | null\n | LosslessJsonObject\n | LosslessJsonArray;\n\nexport type JsonLikeArray = JsonLikeValue[];\nexport type JsonLikeObject = {\n [key: string]: JsonLikeValue;\n};\nexport type JsonLikeValue =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | JsonLikeObject\n | JsonLikeArray;\n\nexport type MachineJsonArray = MachineJsonLikeValue[];\nexport type MachineJsonObject = {\n [key: string]: MachineJsonLikeValue;\n};\nexport type MachineJsonLikeValue =\n | string\n | number\n | boolean\n | bigint\n | null\n | undefined\n | Numeric\n | MachineJsonObject\n | MachineJsonArray;\n\nexport type MachineJsonNumericMode = 'tagged' | 'decimal-string' | 'json-number';\n\nexport interface JsonParseOptions {\n int64?: 'default' | 'lossless';\n numerics?: 'tagged';\n}\n\nexport type JsonStringifyBigintMode = 'number' | 'reject' | 'string';\n\nexport interface JsonStringifyOptions {\n int64?: 'default' | 'string' | 'lossless';\n readonly bigint?: JsonStringifyBigintMode;\n numerics?: MachineJsonNumericMode;\n}\n\nconst MAX_SAFE_INTEGER_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_INTEGER_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nexport class JsonParseFailure extends Failure {\n constructor(cause?: unknown) {\n super('Failed to parse JSON.', { cause });\n }\n}\n\nexport class JsonStringifyFailure extends Failure {\n constructor(cause?: unknown) {\n super('Failed to stringify JSON.', { cause });\n }\n}\n\nexport function parseJson(text: string): Result<JsonValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions & { int64: 'lossless' },\n): Result<LosslessJsonValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions & { numerics: 'tagged' },\n): Result<MachineJsonLikeValue, JsonParseFailure>;\nexport function parseJson(\n text: string,\n options: JsonParseOptions = {},\n): Result<JsonValue | LosslessJsonValue | MachineJsonLikeValue, JsonParseFailure> {\n return resultOf(\n () => {\n const parsed = options.int64 === 'lossless' ? parseLosslessJson(text) : JSON.parse(text);\n return options.numerics === 'tagged'\n ? decodeTaggedMachineJsonValue(parsed as JsonValue | LosslessJsonValue)\n : parsed;\n },\n (cause) => new JsonParseFailure(cause),\n );\n}\n\nexport function stringifyJson(value: JsonValue): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: LosslessJsonValue,\n options: JsonStringifyOptions & { int64: 'string' | 'lossless' },\n): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: MachineJsonLikeValue,\n options: JsonStringifyOptions & { numerics: MachineJsonNumericMode },\n): Result<string, JsonStringifyFailure>;\nexport function stringifyJson(\n value: JsonValue | LosslessJsonValue | MachineJsonLikeValue,\n options: JsonStringifyOptions = {},\n): Result<string, JsonStringifyFailure> {\n return resultOf(\n () => {\n if (options.numerics) {\n const normalized = normalizeMachineJsonLikeValue(\n value as MachineJsonLikeValue,\n new Set<object>(),\n options.numerics,\n 'root',\n );\n const encoded = stringifyJsonLikeInternal(\n normalized,\n new Set<object>(),\n options.bigint ?? 'reject',\n 'root',\n );\n if (encoded === undefined) {\n throw new TypeError('JSON stringification produced no top-level value.');\n }\n return encoded;\n }\n\n if (options.int64 === 'string') {\n return stringifyJsonWithInt64Mode(value as LosslessJsonValue, 'string');\n }\n if (options.int64 === 'lossless') {\n return stringifyJsonWithInt64Mode(value as LosslessJsonValue, 'lossless');\n }\n\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError(\n 'JSON.stringify returned undefined for a JsonValue input.',\n );\n }\n return encoded;\n },\n (cause) => new JsonStringifyFailure(cause),\n );\n}\n\nexport function parseAndDecode<T, E>(\n text: string,\n decoder: Decoder<T, E>,\n): Result<T, JsonParseFailure | E> {\n const parsed = parseJson(text);\n return isErr(parsed) ? parsed : decoder.decode(parsed.value);\n}\n\nexport function encodeAndStringify<T, E>(\n value: T,\n encoder: Encoder<T, JsonValue, E>,\n): Result<string, E | JsonStringifyFailure> {\n const encoded = encoder.encode(value);\n return isErr(encoded) ? encoded : stringifyJson(encoded.value);\n}\n\nexport function isJsonValue(value: unknown): value is JsonValue {\n return isJsonValueInternal(value, new Set<object>());\n}\n\nexport function parseJsonLike(text: string): Result<JsonLikeValue, JsonParseFailure> {\n return resultOf(\n () => {\n const parser = new JsonLikeParser(text);\n const value = parser.parseValue();\n parser.finish();\n return value;\n },\n (cause) => new JsonParseFailure(cause),\n );\n}\n\nexport function stringifyJsonLike(\n value: JsonLikeValue,\n options: JsonStringifyOptions = {},\n): Result<string, JsonStringifyFailure> {\n return resultOf(\n () => {\n const encoded = stringifyJsonLikeInternal(\n value,\n new Set<object>(),\n options.bigint ?? 'reject',\n 'root',\n );\n if (encoded === undefined) {\n throw new TypeError('JSON-like stringification produced no top-level value.');\n }\n return encoded;\n },\n (cause) => new JsonStringifyFailure(cause),\n );\n}\n\nexport function decodeJson<T, E>(\n text: string,\n decoder: Decoder<T, E>,\n): Result<T, E | JsonParseFailure> {\n const parsed = parseJsonLike(text);\n return isErr(parsed) ? parsed : decoder.decode(parsed.value);\n}\n\nexport function encodeJson<T, E>(\n value: T,\n encoder: Encoder<T, JsonLikeValue, E>,\n options: JsonStringifyOptions = {},\n): Result<string, E | JsonStringifyFailure> {\n const encoded = encoder.encode(value);\n return isErr(encoded) ? encoded : stringifyJsonLike(encoded.value, options);\n}\n\nexport function isJsonLikeValue(value: unknown): value is JsonLikeValue {\n return isJsonLikeValueInternal(value, new Set<object>());\n}\n\nfunction stringifyJsonWithInt64Mode(\n value: LosslessJsonValue,\n int64Mode: 'string' | 'lossless',\n): string {\n return stringifyJsonWithInt64ModeInternal(value, int64Mode, new Set<object>());\n}\n\nfunction stringifyJsonWithInt64ModeInternal(\n value: LosslessJsonValue,\n int64Mode: 'string' | 'lossless',\n visited: Set<object>,\n): string {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n case 'number': {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError('JSON.stringify returned undefined for a numeric input.');\n }\n return encoded;\n }\n case 'bigint':\n return int64Mode === 'string'\n ? JSON.stringify(value.toString())\n : value.toString();\n case 'boolean':\n return value ? 'true' : 'false';\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n if (visited.has(value)) {\n throw new TypeError('Could not stringify cyclic JSON value.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stringifyJsonWithInt64ModeInternal(entry, int64Mode, visited)).join(',')}]`;\n }\n\n const fields = Object.keys(value).map((key) =>\n `${JSON.stringify(key)}:${stringifyJsonWithInt64ModeInternal(value[key]!, int64Mode, visited)}`\n );\n return `{${fields.join(',')}}`;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError(`Unsupported JSON value kind: ${typeof value}`);\n }\n}\n\nfunction parseLosslessJson(text: string): LosslessJsonValue {\n const parser = new LosslessJsonParser(text);\n const value = parser.parseValue();\n parser.skipWhitespace();\n if (!parser.isAtEnd()) {\n parser.fail('Unexpected trailing characters.');\n }\n return value;\n}\n\nfunction isJsonValueInternal(value: unknown, visited: Set<object>): value is JsonValue {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n return true;\n case 'object':\n if (value === null) {\n return true;\n }\n\n if (visited.has(value)) {\n return true;\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.every((entry) => isJsonValueInternal(entry, visited));\n }\n\n for (const key of Object.keys(value)) {\n if (!isJsonValueInternal((value as Record<string, unknown>)[key], visited)) {\n return false;\n }\n }\n\n return true;\n } finally {\n visited.delete(value);\n }\n default:\n return false;\n }\n}\n\nfunction isJsonLikeValueInternal(\n value: unknown,\n visited: Set<object>,\n): value is JsonLikeValue {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'undefined':\n return true;\n case 'object':\n if (value === null) {\n return true;\n }\n\n if (visited.has(value)) {\n return true;\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.every((entry) => isJsonLikeValueInternal(entry, visited));\n }\n\n for (const key of Object.keys(value)) {\n if (!isJsonLikeValueInternal((value as Record<string, unknown>)[key], visited)) {\n return false;\n }\n }\n\n return true;\n } finally {\n visited.delete(value);\n }\n default:\n return false;\n }\n}\n\nfunction normalizeMachineJsonLikeValue(\n value: MachineJsonLikeValue,\n visited: Set<object>,\n numericMode: MachineJsonNumericMode,\n position: 'array' | 'object' | 'root',\n): JsonLikeValue {\n if (isNumeric(value)) {\n return normalizeMachineNumericJsonValue(value, numericMode);\n }\n\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n return value;\n case 'undefined':\n return position === 'array' ? null : undefined;\n case 'object':\n if (value === null) {\n return null;\n }\n\n if (visited.has(value)) {\n throw new TypeError('Converting circular structure to machine JSON text.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return value.map((entry) =>\n normalizeMachineJsonLikeValue(entry, visited, numericMode, 'array') ?? null\n );\n }\n\n const result: Record<string, JsonLikeValue> = {};\n for (const key of Object.keys(value)) {\n const normalized = normalizeMachineJsonLikeValue(\n (value as MachineJsonObject)[key]!,\n visited,\n numericMode,\n 'object',\n );\n if (normalized !== undefined) {\n result[key] = normalized;\n }\n }\n return result;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError(`Unsupported machine JSON value kind: ${typeof value}`);\n }\n}\n\nfunction normalizeMachineNumericJsonValue(\n value: Numeric,\n numericMode: MachineJsonNumericMode,\n): JsonLikeValue {\n switch (numericMode) {\n case 'tagged':\n return value.toJSON();\n case 'decimal-string':\n return formatNumeric(value);\n case 'json-number':\n switch (value.__soundscript_numeric_kind) {\n case 'i64':\n case 'u64':\n throw new TypeError('json-number machine JSON mode does not support bigint-backed machine numerics.');\n default:\n return toHostNumber(value);\n }\n }\n}\n\nfunction decodeTaggedMachineJsonValue(value: JsonValue | LosslessJsonValue): MachineJsonLikeValue {\n if (Array.isArray(value)) {\n return value.map((entry) => decodeTaggedMachineJsonValue(entry));\n }\n\n if (value && typeof value === 'object') {\n const taggedNumeric = decodeTaggedMachineNumeric(value);\n if (taggedNumeric) {\n return taggedNumeric;\n }\n\n const result: Record<string, MachineJsonLikeValue> = {};\n for (const key of Object.keys(value)) {\n result[key] = decodeTaggedMachineJsonValue(value[key]!);\n }\n return result;\n }\n\n return value;\n}\n\nfunction decodeTaggedMachineNumeric(\n value: Record<string, JsonValue | LosslessJsonValue>,\n): Numeric | undefined {\n const numericKind = value['$numeric'];\n const numericValue = value['value'];\n const keys = Object.keys(value);\n if (\n typeof numericKind !== 'string' ||\n typeof numericValue !== 'string' ||\n keys.length !== 2 ||\n !keys.includes('$numeric') ||\n !keys.includes('value')\n ) {\n return undefined;\n }\n\n switch (numericKind) {\n case 'f64':\n return F64.parse(numericValue);\n case 'f32':\n return F32.parse(numericValue);\n case 'i8':\n return I8.parse(numericValue);\n case 'i16':\n return I16.parse(numericValue);\n case 'i32':\n return I32.parse(numericValue);\n case 'i64':\n return I64.parse(numericValue);\n case 'u8':\n return U8.parse(numericValue);\n case 'u16':\n return U16.parse(numericValue);\n case 'u32':\n return U32.parse(numericValue);\n case 'u64':\n return U64.parse(numericValue);\n default:\n return undefined;\n }\n}\n\nfunction stringifyJsonLikeInternal(\n value: JsonLikeValue,\n visited: Set<object>,\n bigintMode: JsonStringifyBigintMode,\n position: 'array' | 'object' | 'root',\n): string | undefined {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n case 'number':\n return Number.isFinite(value) ? JSON.stringify(value) : 'null';\n case 'boolean':\n return value ? 'true' : 'false';\n case 'bigint':\n switch (bigintMode) {\n case 'string':\n return JSON.stringify(value.toString());\n case 'number':\n return value.toString();\n case 'reject':\n throw new TypeError('Encountered bigint while stringifying JSON-like data.');\n }\n case 'undefined':\n return position === 'array' ? 'null' : undefined;\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n if (visited.has(value)) {\n throw new TypeError('Converting circular structure to JSON-like text.');\n }\n\n visited.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) =>\n stringifyJsonLikeInternal(entry, visited, bigintMode, 'array') ?? 'null'\n ).join(',')}]`;\n }\n\n const encodedProperties: string[] = [];\n for (const key of Object.keys(value)) {\n const encodedValue = stringifyJsonLikeInternal(\n (value as Record<string, JsonLikeValue>)[key],\n visited,\n bigintMode,\n 'object',\n );\n if (encodedValue === undefined) {\n continue;\n }\n encodedProperties.push(`${JSON.stringify(key)}:${encodedValue}`);\n }\n return `{${encodedProperties.join(',')}}`;\n } finally {\n visited.delete(value);\n }\n default:\n throw new TypeError('Encountered an unsupported JSON-like value.');\n }\n}\n\nclass LosslessJsonParser {\n private readonly text: string;\n private index = 0;\n\n constructor(text: string) {\n this.text = text;\n }\n\n fail(message: string): never {\n throw new SyntaxError(`${message} At character ${this.index}.`);\n }\n\n isAtEnd(): boolean {\n return this.index >= this.text.length;\n }\n\n skipWhitespace(): void {\n while (!this.isAtEnd() && /\\s/u.test(this.text[this.index]!)) {\n this.index += 1;\n }\n }\n\n parseValue(): LosslessJsonValue {\n this.skipWhitespace();\n if (this.isAtEnd()) {\n this.fail('Unexpected end of JSON input.');\n }\n\n const current = this.text[this.index]!;\n switch (current) {\n case '\"':\n return this.parseString();\n case '{':\n return this.parseObject();\n case '[':\n return this.parseArray();\n case 't':\n this.consumeKeyword('true');\n return true;\n case 'f':\n this.consumeKeyword('false');\n return false;\n case 'n':\n this.consumeKeyword('null');\n return null;\n default:\n if (current === '-' || isAsciiDigit(current)) {\n return this.parseNumber();\n }\n this.fail(`Unexpected token ${JSON.stringify(current)}.`);\n }\n }\n\n private consumeKeyword(keyword: string): void {\n if (!this.text.startsWith(keyword, this.index)) {\n this.fail(`Expected ${keyword}.`);\n }\n this.index += keyword.length;\n }\n\n private parseString(): string {\n let result = '';\n this.index += 1;\n\n while (!this.isAtEnd()) {\n const current = this.text[this.index]!;\n if (current === '\"') {\n this.index += 1;\n return result;\n }\n if (current === '\\\\') {\n this.index += 1;\n if (this.isAtEnd()) {\n this.fail('Unexpected end of escape sequence.');\n }\n result += this.parseEscapeSequence();\n continue;\n }\n result += current;\n this.index += 1;\n }\n\n this.fail('Unterminated string literal.');\n }\n\n private parseEscapeSequence(): string {\n const current = this.text[this.index]!;\n this.index += 1;\n switch (current) {\n case '\"':\n case '\\\\':\n case '/':\n return current;\n case 'b':\n return '\\b';\n case 'f':\n return '\\f';\n case 'n':\n return '\\n';\n case 'r':\n return '\\r';\n case 't':\n return '\\t';\n case 'u': {\n const hex = this.text.slice(this.index, this.index + 4);\n if (!/^[0-9A-Fa-f]{4}$/u.test(hex)) {\n this.fail('Invalid unicode escape.');\n }\n this.index += 4;\n return String.fromCharCode(Number.parseInt(hex, 16));\n }\n default:\n this.fail(`Invalid escape sequence \\\\${current}.`);\n }\n }\n\n private parseArray(): LosslessJsonArray {\n const result: LosslessJsonArray = [];\n this.index += 1;\n this.skipWhitespace();\n if (this.text[this.index] === ']') {\n this.index += 1;\n return result;\n }\n\n while (true) {\n result.push(this.parseValue());\n this.skipWhitespace();\n const current = this.text[this.index];\n if (current === ']') {\n this.index += 1;\n return result;\n }\n if (current !== ',') {\n this.fail('Expected , or ] in array literal.');\n }\n this.index += 1;\n }\n }\n\n private parseObject(): LosslessJsonObject {\n const result: LosslessJsonObject = {};\n this.index += 1;\n this.skipWhitespace();\n if (this.text[this.index] === '}') {\n this.index += 1;\n return result;\n }\n\n while (true) {\n this.skipWhitespace();\n if (this.text[this.index] !== '\"') {\n this.fail('Expected string key in object literal.');\n }\n const key = this.parseString();\n this.skipWhitespace();\n if (this.text[this.index] !== ':') {\n this.fail('Expected : after object key.');\n }\n this.index += 1;\n result[key] = this.parseValue();\n this.skipWhitespace();\n const current = this.text[this.index];\n if (current === '}') {\n this.index += 1;\n return result;\n }\n if (current !== ',') {\n this.fail('Expected , or } in object literal.');\n }\n this.index += 1;\n }\n }\n\n private parseNumber(): number | bigint {\n const start = this.index;\n if (this.text[this.index] === '-') {\n this.index += 1;\n }\n\n if (this.text[this.index] === '0') {\n this.index += 1;\n } else {\n this.consumeDigits();\n }\n\n let isInteger = true;\n if (this.text[this.index] === '.') {\n isInteger = false;\n this.index += 1;\n this.consumeDigits();\n }\n\n const exponentMarker = this.text[this.index];\n if (exponentMarker === 'e' || exponentMarker === 'E') {\n isInteger = false;\n this.index += 1;\n const sign = this.text[this.index];\n if (sign === '+' || sign === '-') {\n this.index += 1;\n }\n this.consumeDigits();\n }\n\n const token = this.text.slice(start, this.index);\n if (!isInteger) {\n return Number(token);\n }\n if (token === '-0') {\n return -0;\n }\n\n const bigintValue = BigInt(token);\n return bigintValue <= MAX_SAFE_INTEGER_BIGINT && bigintValue >= MIN_SAFE_INTEGER_BIGINT\n ? Number(token)\n : bigintValue;\n }\n\n private consumeDigits(): void {\n const start = this.index;\n while (!this.isAtEnd() && isAsciiDigit(this.text[this.index]!)) {\n this.index += 1;\n }\n if (start === this.index) {\n this.fail('Expected digits.');\n }\n }\n}\n\nclass JsonLikeParser {\n #index = 0;\n readonly #text: string;\n\n constructor(text: string) {\n this.#text = text;\n }\n\n finish(): void {\n this.#skipWhitespace();\n if (this.#index !== this.#text.length) {\n this.#error('Unexpected trailing JSON input');\n }\n }\n\n parseValue(): JsonLikeValue {\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n switch (current) {\n case '{':\n return this.#parseObject();\n case '[':\n return this.#parseArray();\n case '\"':\n return this.#parseString();\n case 't':\n this.#consumeKeyword('true');\n return true;\n case 'f':\n this.#consumeKeyword('false');\n return false;\n case 'n':\n this.#consumeKeyword('null');\n return null;\n default:\n if (current === '-' || this.#isDigit(current)) {\n return this.#parseNumber();\n }\n this.#error('Unexpected token in JSON input');\n }\n }\n\n #consumeKeyword(keyword: string): void {\n if (this.#text.slice(this.#index, this.#index + keyword.length) !== keyword) {\n this.#error(`Expected ${keyword}`);\n }\n this.#index += keyword.length;\n }\n\n #parseArray(): JsonLikeArray {\n const values: JsonLikeValue[] = [];\n this.#index += 1;\n this.#skipWhitespace();\n if (this.#text[this.#index] === ']') {\n this.#index += 1;\n return values;\n }\n\n while (true) {\n values.push(this.parseValue());\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n if (current === ']') {\n this.#index += 1;\n return values;\n }\n if (current !== ',') {\n this.#error('Expected , or ] in JSON array');\n }\n this.#index += 1;\n }\n }\n\n #parseNumber(): number | bigint {\n const start = this.#index;\n if (this.#text[this.#index] === '-') {\n this.#index += 1;\n }\n\n if (this.#text[this.#index] === '0') {\n this.#index += 1;\n } else {\n this.#consumeDigits();\n }\n\n let isInteger = true;\n if (this.#text[this.#index] === '.') {\n isInteger = false;\n this.#index += 1;\n this.#consumeDigits();\n }\n\n const exponent = this.#text[this.#index];\n if (exponent === 'e' || exponent === 'E') {\n isInteger = false;\n this.#index += 1;\n const sign = this.#text[this.#index];\n if (sign === '+' || sign === '-') {\n this.#index += 1;\n }\n this.#consumeDigits();\n }\n\n const token = this.#text.slice(start, this.#index);\n if (!isInteger) {\n return Number(token);\n }\n\n const bigintValue = BigInt(token);\n const numberValue = Number(token);\n return Number.isSafeInteger(numberValue) && BigInt(numberValue) === bigintValue\n ? numberValue\n : bigintValue;\n }\n\n #parseObject(): JsonLikeObject {\n const object: Record<string, JsonLikeValue> = {};\n this.#index += 1;\n this.#skipWhitespace();\n if (this.#text[this.#index] === '}') {\n this.#index += 1;\n return object;\n }\n\n while (true) {\n this.#skipWhitespace();\n if (this.#text[this.#index] !== '\"') {\n this.#error('Expected string key in JSON object');\n }\n const key = this.#parseString();\n this.#skipWhitespace();\n if (this.#text[this.#index] !== ':') {\n this.#error('Expected : in JSON object');\n }\n this.#index += 1;\n object[key] = this.parseValue();\n this.#skipWhitespace();\n const current = this.#text[this.#index];\n if (current === '}') {\n this.#index += 1;\n return object;\n }\n if (current !== ',') {\n this.#error('Expected , or } in JSON object');\n }\n this.#index += 1;\n }\n }\n\n #parseString(): string {\n const start = this.#index;\n this.#index += 1;\n while (this.#index < this.#text.length) {\n const current = this.#text[this.#index];\n if (current === '\"') {\n this.#index += 1;\n const parsed = JSON.parse(this.#text.slice(start, this.#index));\n if (typeof parsed !== 'string') {\n this.#error('Expected string literal.');\n }\n return parsed;\n }\n if (current === '\\\\') {\n this.#index += 1;\n const escaped = this.#text[this.#index];\n if (escaped === undefined) {\n this.#error('Unterminated string escape');\n }\n if (escaped === 'u') {\n for (let index = 0; index < 4; index += 1) {\n this.#index += 1;\n if (!/[0-9A-Fa-f]/u.test(this.#text[this.#index] ?? '')) {\n this.#error('Invalid unicode escape');\n }\n }\n }\n } else if (current !== undefined && current <= '\\u001F') {\n this.#error('Invalid control character in string literal');\n }\n this.#index += 1;\n }\n this.#error('Unterminated string literal');\n }\n\n #consumeDigits(): void {\n const start = this.#index;\n while (this.#isDigit(this.#text[this.#index])) {\n this.#index += 1;\n }\n if (start === this.#index) {\n this.#error('Expected digit in JSON number');\n }\n }\n\n #skipWhitespace(): void {\n while (/\\s/u.test(this.#text[this.#index] ?? '')) {\n this.#index += 1;\n }\n }\n\n #isDigit(value: string | undefined): boolean {\n return value !== undefined && value >= '0' && value <= '9';\n }\n\n #error(message: string): never {\n throw new SyntaxError(`${message} at position ${this.#index}.`);\n }\n}\n\nfunction isAsciiDigit(text: string): boolean {\n return text >= '0' && text <= '9';\n}\n"]}
|
package/numerics.js
CHANGED
|
@@ -10,10 +10,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _MachineNumericBox_key, _MachineNumericBox_payload;
|
|
13
|
-
import { fromCompare } from './compare.
|
|
14
|
-
import { Failure } from './failures.
|
|
15
|
-
import { fromHashEq, stringHash } from './hash.
|
|
16
|
-
import { err, ok } from './result.
|
|
13
|
+
import { fromCompare } from './compare.sts';
|
|
14
|
+
import { Failure } from './failures.sts';
|
|
15
|
+
import { fromHashEq, stringHash } from './hash.sts';
|
|
16
|
+
import { err, ok } from './result.sts';
|
|
17
17
|
export class NumericOverflowFailure extends Failure {
|
|
18
18
|
constructor(leaf, operation) {
|
|
19
19
|
super(`Checked ${operation} overflowed for ${leaf}.`);
|
package/numerics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numerics.js","sourceRoot":"","sources":["./soundscript/numerics.sts"],"names":[],"mappings":"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","sourcesContent":["import { fromCompare, type Eq, type Order } from './compare.js';\nimport { Failure } from './failures.js';\nimport { fromHashEq, stringHash, type HashEq } from './hash.js';\nimport { err, ok, type Result } from './result.js';\n\ntype MachineNumericKind =\n | 'f64'\n | 'f32'\n | 'i8'\n | 'i16'\n | 'i32'\n | 'i64'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64';\n\ntype HostKind =\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined';\n\ntype NumericLikeInput = Numeric | number | bigint;\ntype NumericPayload = number | bigint;\ntype IntegerLeafKind = 'i8' | 'i16' | 'i32' | 'i64' | 'u8' | 'u16' | 'u32' | 'u64';\ntype FloatLeafKind = 'f32' | 'f64';\ntype NumberLeafKind = Exclude<MachineNumericKind, 'i64' | 'u64'>;\ntype BigIntLeafKind = Extract<MachineNumericKind, 'i64' | 'u64'>;\ntype BinaryNumericOperator =\n | '+'\n | '-'\n | '*'\n | '/'\n | '%'\n | '**'\n | '&'\n | '|'\n | '^'\n | '<<'\n | '>>'\n | '>>>';\ntype UnaryNumericOperator = '+' | '-' | '~';\n\nexport interface MachineNumericValue<Leaf extends MachineNumericKind> {\n readonly __soundscript_numeric_kind: Leaf;\n toJSON(): { $numeric: Leaf; value: string };\n toString(): string;\n valueOf(): never;\n [Symbol.toPrimitive](hint: string): string;\n}\n\nexport type f64 = MachineNumericValue<'f64'>;\nexport type f32 = MachineNumericValue<'f32'>;\nexport type i8 = MachineNumericValue<'i8'>;\nexport type i16 = MachineNumericValue<'i16'>;\nexport type i32 = MachineNumericValue<'i32'>;\nexport type i64 = MachineNumericValue<'i64'>;\nexport type u8 = MachineNumericValue<'u8'>;\nexport type u16 = MachineNumericValue<'u16'>;\nexport type u32 = MachineNumericValue<'u32'>;\nexport type u64 = MachineNumericValue<'u64'>;\n\nexport type Numeric = f64 | f32 | i8 | i16 | i32 | i64 | u8 | u16 | u32 | u64;\nexport type Int = i8 | i16 | i32 | i64 | u8 | u16 | u32 | u64;\nexport type Float = f32 | f64;\ntype NumericByKind<Leaf extends MachineNumericKind> = Extract<\n Numeric,\n MachineNumericValue<Leaf>\n>;\n\nexport type MachineNumericOrHostKind = MachineNumericKind | HostKind;\n\nexport interface NumericFactory<T extends Numeric> {\n (value: NumericLikeInput): T;\n readonly MAX_VALUE: T;\n readonly MIN_VALUE: T;\n compare(left: T, right: T): number;\n format(value: T): string;\n parse(text: string): T;\n tryParse(text: string): T | undefined;\n}\n\nexport interface FloatFactory<T extends Float> extends NumericFactory<T> {\n isFinite(value: T): boolean;\n isNaN(value: T): boolean;\n}\n\nexport interface IntegerFactory<T extends Int> extends NumericFactory<T> {\n checkedAdd(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedSub(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedMul(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedDiv(left: T, right: T): Result<T, NumericOverflowFailure | NumericDivisionByZeroFailure>;\n checkedRem(left: T, right: T): Result<T, NumericDivisionByZeroFailure>;\n checkedNeg(value: T): Result<T, NumericOverflowFailure>;\n}\n\nexport class NumericOverflowFailure extends Failure {\n readonly leaf: IntegerLeafKind;\n readonly operation: 'add' | 'sub' | 'mul' | 'div' | 'rem' | 'neg';\n\n constructor(\n leaf: IntegerLeafKind,\n operation: 'add' | 'sub' | 'mul' | 'div' | 'rem' | 'neg',\n ) {\n super(`Checked ${operation} overflowed for ${leaf}.`);\n this.leaf = leaf;\n this.operation = operation;\n }\n}\n\nexport class NumericDivisionByZeroFailure extends Failure {\n readonly leaf: IntegerLeafKind;\n readonly operation: 'div' | 'rem';\n\n constructor(leaf: IntegerLeafKind, operation: 'div' | 'rem') {\n super(`Checked ${operation} divided ${leaf} by zero.`);\n this.leaf = leaf;\n this.operation = operation;\n }\n}\n\nconst MACHINE_KIND_PROPERTY = '__soundscript_numeric_kind';\n\nclass MachineNumericBox<Leaf extends MachineNumericKind>\n implements MachineNumericValue<Leaf> {\n readonly __soundscript_numeric_kind: Leaf;\n readonly #key: string;\n readonly #payload: NumericPayload;\n\n constructor(kind: Leaf, payload: NumericPayload, key: string) {\n this.__soundscript_numeric_kind = kind;\n this.#key = key;\n this.#payload = payload;\n Object.freeze(this);\n }\n\n payload(): NumericPayload {\n return this.#payload;\n }\n\n toJSON(): { $numeric: Leaf; value: string } {\n return {\n $numeric: this.__soundscript_numeric_kind,\n value: formatPayload(this.#payload),\n };\n }\n\n toString(): string {\n return this.#key;\n }\n\n valueOf(): never {\n throw new TypeError('Machine numerics do not support host numeric coercion.');\n }\n\n [Symbol.toPrimitive](hint: string): string {\n if (hint === 'string') {\n return this.#key;\n }\n throw new TypeError('Machine numerics do not support host numeric coercion.');\n }\n}\n\nconst MACHINE_NUMERIC_KINDS = new Set<MachineNumericKind>([\n 'f64',\n 'f32',\n 'i8',\n 'i16',\n 'i32',\n 'i64',\n 'u8',\n 'u16',\n 'u32',\n 'u64',\n]);\nconst INTEGER_LEAF_KINDS = new Set<IntegerLeafKind>([\n 'i8',\n 'i16',\n 'i32',\n 'i64',\n 'u8',\n 'u16',\n 'u32',\n 'u64',\n]);\nconst FLOAT_LEAF_KINDS = new Set<FloatLeafKind>(['f32', 'f64']);\nconst BIGINT_LEAF_KINDS = new Set<BigIntLeafKind>(['i64', 'u64']);\nconst NUMBER_LEAF_KINDS = new Set<NumberLeafKind>([\n 'f64',\n 'f32',\n 'i8',\n 'i16',\n 'i32',\n 'u8',\n 'u16',\n 'u32',\n]);\n\nconst MACHINE_NUMERIC_CACHES: Record<MachineNumericKind, Map<string, Numeric>> = {\n f64: new Map(),\n f32: new Map(),\n i8: new Map(),\n i16: new Map(),\n i32: new Map(),\n i64: new Map(),\n u8: new Map(),\n u16: new Map(),\n u32: new Map(),\n u64: new Map(),\n};\n\nfunction isMachineNumericBox(\n value: unknown,\n): value is MachineNumericBox<MachineNumericKind> {\n return value instanceof MachineNumericBox;\n}\n\nfunction assertMachineNumeric(\n value: unknown,\n): MachineNumericBox<MachineNumericKind> {\n if (!isMachineNumericBox(value)) {\n throw new TypeError('Expected a machine numeric value.');\n }\n return value;\n}\n\nfunction formatNumberPayload(value: number): string {\n if (Number.isNaN(value)) {\n return 'NaN';\n }\n if (value === Infinity) {\n return 'Infinity';\n }\n if (value === -Infinity) {\n return '-Infinity';\n }\n return String(value);\n}\n\nfunction formatPayload(value: NumericPayload): string {\n return typeof value === 'bigint' ? value.toString() : formatNumberPayload(value);\n}\n\nfunction keyForLeaf(kind: MachineNumericKind, value: NumericPayload): string {\n return `${kind}:${formatPayload(value)}`;\n}\n\nfunction canonicalizeFloat(value: number): number {\n if (Number.isNaN(value)) {\n return Number.NaN;\n }\n if (Object.is(value, -0)) {\n return 0;\n }\n return value;\n}\n\nfunction truncatedNumber(value: number): number {\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n\nfunction payloadFromInput(value: NumericLikeInput): NumericPayload {\n return isMachineNumericBox(value) ? value.payload() : value as number | bigint;\n}\n\nfunction numberFromInput(value: NumericLikeInput): number {\n const payload = payloadFromInput(value);\n return typeof payload === 'bigint' ? Number(payload) : payload;\n}\n\nfunction bigintFromInput(value: NumericLikeInput): bigint {\n const payload = payloadFromInput(value);\n if (typeof payload === 'bigint') {\n return payload;\n }\n return BigInt(truncatedNumber(payload));\n}\n\nfunction exactIntegralBigIntFromInput(value: unknown): bigint | undefined {\n if (isMachineNumericBox(value)) {\n const payload = value.payload();\n if (typeof payload === 'bigint') {\n return payload;\n }\n if (Number.isInteger(payload)) {\n return BigInt(payload);\n }\n return undefined;\n }\n\n if (typeof value === 'bigint') {\n return value;\n }\n\n if (typeof value === 'number' && Number.isInteger(value)) {\n return BigInt(value);\n }\n\n return undefined;\n}\n\nfunction canonicalizePayload(\n kind: MachineNumericKind,\n value: NumericLikeInput,\n): NumericPayload {\n switch (kind) {\n case 'f64':\n return canonicalizeFloat(numberFromInput(value));\n case 'f32':\n return canonicalizeFloat(Math.fround(numberFromInput(value)));\n case 'i8':\n return (truncatedNumber(numberFromInput(value)) << 24) >> 24;\n case 'i16':\n return (truncatedNumber(numberFromInput(value)) << 16) >> 16;\n case 'i32':\n return truncatedNumber(numberFromInput(value)) | 0;\n case 'i64':\n return BigInt.asIntN(64, bigintFromInput(value));\n case 'u8':\n return truncatedNumber(numberFromInput(value)) & 0xff;\n case 'u16':\n return truncatedNumber(numberFromInput(value)) & 0xffff;\n case 'u32':\n return truncatedNumber(numberFromInput(value)) >>> 0;\n case 'u64':\n return BigInt.asUintN(64, bigintFromInput(value));\n }\n}\n\nfunction internMachineNumeric<Leaf extends MachineNumericKind>(\n kind: Leaf,\n value: NumericLikeInput,\n): MachineNumericValue<Leaf> {\n const payload = canonicalizePayload(kind, value);\n const key = keyForLeaf(kind, payload);\n const existing = MACHINE_NUMERIC_CACHES[kind].get(key);\n if (existing) {\n return existing as MachineNumericValue<Leaf>;\n }\n\n const created = new MachineNumericBox(kind, payload, key) as Numeric;\n MACHINE_NUMERIC_CACHES[kind].set(key, created);\n return created as MachineNumericValue<Leaf>;\n}\n\nfunction numberLeafCompare<Leaf extends NumberLeafKind>(\n left: MachineNumericValue<Leaf>,\n right: MachineNumericValue<Leaf>,\n): number {\n const leftValue = (left as MachineNumericBox<Leaf>).payload() as number;\n const rightValue = (right as MachineNumericBox<Leaf>).payload() as number;\n\n const leftNaN = Number.isNaN(leftValue);\n const rightNaN = Number.isNaN(rightValue);\n if (leftNaN || rightNaN) {\n return leftNaN === rightNaN ? 0 : (leftNaN ? 1 : -1);\n }\n if (leftValue === rightValue) {\n return 0;\n }\n if (leftValue === -Infinity) {\n return -1;\n }\n if (rightValue === -Infinity) {\n return 1;\n }\n if (leftValue === Infinity) {\n return 1;\n }\n if (rightValue === Infinity) {\n return -1;\n }\n return leftValue < rightValue ? -1 : 1;\n}\n\nfunction bigintLeafCompare<Leaf extends BigIntLeafKind>(\n left: MachineNumericValue<Leaf>,\n right: MachineNumericValue<Leaf>,\n): number {\n const leftValue = (left as MachineNumericBox<Leaf>).payload() as bigint;\n const rightValue = (right as MachineNumericBox<Leaf>).payload() as bigint;\n if (leftValue === rightValue) {\n return 0;\n }\n return leftValue < rightValue ? -1 : 1;\n}\n\nfunction parseNumberText(text: string): number | undefined {\n const value = Number(text);\n return Number.isNaN(value) && text.trim() !== 'NaN' ? undefined : value;\n}\n\nfunction parseBigIntText(text: string): bigint | undefined {\n try {\n return BigInt(text);\n } catch {\n return undefined;\n }\n}\n\nfunction createIntegerFactory<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n minValue: NumericLikeInput,\n maxValue: NumericLikeInput,\n): IntegerFactory<NumericByKind<Leaf>> {\n const factory = ((value: NumericLikeInput) =>\n internMachineNumeric(kind, value)) as IntegerFactory<NumericByKind<Leaf>>;\n Object.assign(factory, {\n MAX_VALUE: internMachineNumeric(kind, maxValue),\n MIN_VALUE: internMachineNumeric(kind, minValue),\n compare(left: NumericByKind<Leaf>, right: NumericByKind<Leaf>): number {\n return BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? bigintLeafCompare(left as MachineNumericValue<BigIntLeafKind>, right as MachineNumericValue<BigIntLeafKind>)\n : numberLeafCompare(left as MachineNumericValue<NumberLeafKind>, right as MachineNumericValue<NumberLeafKind>);\n },\n format(value: NumericByKind<Leaf>): string {\n return formatPayload((value as MachineNumericBox<Leaf>).payload());\n },\n parse(text: string): NumericByKind<Leaf> {\n const parsed = BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? parseBigIntText(text)\n : parseNumberText(text);\n if (parsed === undefined) {\n throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);\n }\n return internMachineNumeric(kind, parsed as NumericLikeInput) as NumericByKind<Leaf>;\n },\n tryParse(text: string): NumericByKind<Leaf> | undefined {\n const parsed = BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? parseBigIntText(text)\n : parseNumberText(text);\n return parsed === undefined\n ? undefined\n : internMachineNumeric(kind, parsed as NumericLikeInput) as NumericByKind<Leaf>;\n },\n checkedAdd(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'add', left, right);\n },\n checkedSub(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'sub', left, right);\n },\n checkedMul(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'mul', left, right);\n },\n checkedDiv(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure | NumericDivisionByZeroFailure> {\n return checkedIntegerBinary(kind, 'div', left, right);\n },\n checkedRem(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericDivisionByZeroFailure> {\n return checkedIntegerRemainder(kind, left, right);\n },\n checkedNeg(value: NumericByKind<Leaf>): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerNegation(kind, value);\n },\n });\n return factory;\n}\n\nfunction createFloatFactory<Leaf extends FloatLeafKind>(\n kind: Leaf,\n minValue: number,\n maxValue: number,\n): FloatFactory<NumericByKind<Leaf>> {\n const factory = ((value: NumericLikeInput) =>\n internMachineNumeric(kind, value)) as FloatFactory<NumericByKind<Leaf>>;\n Object.assign(factory, {\n MAX_VALUE: internMachineNumeric(kind, maxValue),\n MIN_VALUE: internMachineNumeric(kind, minValue),\n compare(left: NumericByKind<Leaf>, right: NumericByKind<Leaf>): number {\n return numberLeafCompare(\n left as MachineNumericValue<NumberLeafKind>,\n right as MachineNumericValue<NumberLeafKind>,\n );\n },\n format(value: NumericByKind<Leaf>): string {\n return formatPayload((value as MachineNumericBox<Leaf>).payload());\n },\n isFinite(value: NumericByKind<Leaf>): boolean {\n return Number.isFinite((value as MachineNumericBox<Leaf>).payload() as number);\n },\n isNaN(value: NumericByKind<Leaf>): boolean {\n return Number.isNaN((value as MachineNumericBox<Leaf>).payload() as number);\n },\n parse(text: string): NumericByKind<Leaf> {\n const parsed = parseNumberText(text);\n if (parsed === undefined) {\n throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);\n }\n return internMachineNumeric(kind, parsed) as NumericByKind<Leaf>;\n },\n tryParse(text: string): NumericByKind<Leaf> | undefined {\n const parsed = parseNumberText(text);\n return parsed === undefined\n ? undefined\n : internMachineNumeric(kind, parsed) as NumericByKind<Leaf>;\n },\n });\n return factory;\n}\n\nfunction exactKindGuard<Leaf extends MachineNumericKind>(kind: Leaf) {\n return (value: unknown): value is MachineNumericValue<Leaf> =>\n isMachineNumericBox(value) && value.__soundscript_numeric_kind === kind;\n}\n\nfunction fitsIntegerKind(kind: IntegerLeafKind, value: unknown): boolean {\n const integral = exactIntegralBigIntFromInput(value);\n if (integral === undefined) {\n return false;\n }\n\n switch (kind) {\n case 'i8':\n return integral >= -128n && integral <= 127n;\n case 'i16':\n return integral >= -32768n && integral <= 32767n;\n case 'i32':\n return integral >= -2147483648n && integral <= 2147483647n;\n case 'i64':\n return BigInt.asIntN(64, integral) === integral;\n case 'u8':\n return integral >= 0n && integral <= 255n;\n case 'u16':\n return integral >= 0n && integral <= 65535n;\n case 'u32':\n return integral >= 0n && integral <= 4294967295n;\n case 'u64':\n return integral >= 0n && BigInt.asUintN(64, integral) === integral;\n }\n}\n\nfunction fitsFloat32(value: unknown): boolean {\n const payload = isMachineNumericBox(value) ? value.payload() : value;\n return typeof payload === 'number' && Number.isFinite(payload) && Math.fround(payload) === payload;\n}\n\nfunction assertIntegerLeafValue<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n value: NumericByKind<Leaf>,\n): MachineNumericBox<Leaf> {\n const numeric = assertMachineNumeric(value);\n if (numeric.__soundscript_numeric_kind !== kind) {\n throw new TypeError(`Expected ${kind} machine numeric value.`);\n }\n return numeric as MachineNumericBox<Leaf>;\n}\n\nfunction integerPayloadToBigInt<Leaf extends IntegerLeafKind>(numeric: MachineNumericBox<Leaf>): bigint {\n const payload = numeric.payload();\n return typeof payload === 'bigint' ? payload : BigInt(payload);\n}\n\nfunction checkedIntegerResult<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n operation: 'add' | 'sub' | 'mul' | 'div' | 'neg',\n value: bigint,\n): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n if (!fitsIntegerKind(kind, value)) {\n return err(new NumericOverflowFailure(kind, operation));\n }\n return ok(internMachineNumeric(kind, value) as NumericByKind<Leaf>);\n}\n\nfunction checkedIntegerBinary<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n operation: 'add' | 'sub' | 'mul' | 'div',\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n): Result<\n NumericByKind<Leaf>,\n NumericOverflowFailure | NumericDivisionByZeroFailure\n> {\n const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));\n const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));\n\n if (operation === 'div' && rightValue === 0n) {\n return err(new NumericDivisionByZeroFailure(kind, operation));\n }\n\n switch (operation) {\n case 'add':\n return checkedIntegerResult(kind, operation, leftValue + rightValue);\n case 'sub':\n return checkedIntegerResult(kind, operation, leftValue - rightValue);\n case 'mul':\n return checkedIntegerResult(kind, operation, leftValue * rightValue);\n case 'div':\n return checkedIntegerResult(kind, operation, leftValue / rightValue);\n }\n}\n\nfunction checkedIntegerRemainder<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n): Result<NumericByKind<Leaf>, NumericDivisionByZeroFailure> {\n const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));\n const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));\n\n if (rightValue === 0n) {\n return err(new NumericDivisionByZeroFailure(kind, 'rem'));\n }\n return ok(internMachineNumeric(kind, leftValue % rightValue) as NumericByKind<Leaf>);\n}\n\nfunction checkedIntegerNegation<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n value: NumericByKind<Leaf>,\n): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n const payload = integerPayloadToBigInt(assertIntegerLeafValue(kind, value));\n return checkedIntegerResult(kind, 'neg', -payload);\n}\n\nfunction exactShiftCount(value: NumericLikeInput): bigint {\n return BigInt.asUintN(6, bigintFromInput(value));\n}\n\nfunction applyBigIntBinaryOperator(\n kind: BigIntLeafKind,\n operator: BinaryNumericOperator,\n left: bigint,\n right: bigint,\n): bigint {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n case '&':\n return left & right;\n case '|':\n return left | right;\n case '^':\n return left ^ right;\n case '<<':\n return left << exactShiftCount(right);\n case '>>':\n return left >> exactShiftCount(right);\n case '>>>': {\n const shifted = BigInt.asUintN(64, left) >> exactShiftCount(right);\n return kind === 'u64' ? shifted : BigInt.asIntN(64, shifted);\n }\n }\n}\n\nfunction applyNumberBinaryOperator(\n operator: BinaryNumericOperator,\n left: number,\n right: number,\n): number {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n case '&':\n return left & right;\n case '|':\n return left | right;\n case '^':\n return left ^ right;\n case '<<':\n return left << right;\n case '>>':\n return left >> right;\n case '>>>':\n return left >>> right;\n }\n}\n\nfunction applyNumberUnaryOperator(operator: UnaryNumericOperator, value: number): number {\n switch (operator) {\n case '+':\n return +value;\n case '-':\n return -value;\n case '~':\n return ~value;\n }\n}\n\nfunction applyBigIntUnaryOperator(operator: Exclude<UnaryNumericOperator, '+'>, value: bigint): bigint {\n switch (operator) {\n case '-':\n return -value;\n case '~':\n return ~value;\n }\n}\n\nexport const F64 = createFloatFactory('f64', -Number.MAX_VALUE, Number.MAX_VALUE);\nexport const F32 = createFloatFactory('f32', -3.4028234663852886e38, 3.4028234663852886e38);\nexport const I8 = createIntegerFactory('i8', -128, 127);\nexport const I16 = createIntegerFactory('i16', -32768, 32767);\nexport const I32 = createIntegerFactory('i32', -2147483648, 2147483647);\nexport const I64 = createIntegerFactory('i64', -9223372036854775808n, 9223372036854775807n);\nexport const U8 = createIntegerFactory('u8', 0, 255);\nexport const U16 = createIntegerFactory('u16', 0, 65535);\nexport const U32 = createIntegerFactory('u32', 0, 4294967295);\nexport const U64 = createIntegerFactory('u64', 0n, 18446744073709551615n);\n\nconst FACTORY_BY_KIND: Record<MachineNumericKind, NumericFactory<Numeric>> = {\n f64: F64 as NumericFactory<Numeric>,\n f32: F32 as NumericFactory<Numeric>,\n i8: I8 as NumericFactory<Numeric>,\n i16: I16 as NumericFactory<Numeric>,\n i32: I32 as NumericFactory<Numeric>,\n i64: I64 as NumericFactory<Numeric>,\n u8: U8 as NumericFactory<Numeric>,\n u16: U16 as NumericFactory<Numeric>,\n u32: U32 as NumericFactory<Numeric>,\n u64: U64 as NumericFactory<Numeric>,\n};\n\nexport function kindOf(value: unknown): MachineNumericOrHostKind {\n if (isMachineNumericBox(value)) {\n return value.__soundscript_numeric_kind;\n }\n return (typeof value) as HostKind;\n}\n\nexport function isNumeric(value: unknown): value is Numeric {\n return isMachineNumericBox(value);\n}\n\nexport function isInt(value: unknown): value is Int {\n return isMachineNumericBox(value) &&\n INTEGER_LEAF_KINDS.has(value.__soundscript_numeric_kind as IntegerLeafKind);\n}\n\nexport function isFloat(value: unknown): value is Float {\n return isMachineNumericBox(value) &&\n FLOAT_LEAF_KINDS.has(value.__soundscript_numeric_kind as FloatLeafKind);\n}\n\nexport const isF64 = exactKindGuard('f64');\nexport const isF32 = exactKindGuard('f32');\nexport const isI8 = exactKindGuard('i8');\nexport const isI16 = exactKindGuard('i16');\nexport const isI32 = exactKindGuard('i32');\nexport const isI64 = exactKindGuard('i64');\nexport const isU8 = exactKindGuard('u8');\nexport const isU16 = exactKindGuard('u16');\nexport const isU32 = exactKindGuard('u32');\nexport const isU64 = exactKindGuard('u64');\n\nexport function fitsF32(value: unknown): boolean {\n return fitsFloat32(value);\n}\n\nexport function fitsI8(value: unknown): boolean {\n return fitsIntegerKind('i8', value);\n}\n\nexport function fitsI16(value: unknown): boolean {\n return fitsIntegerKind('i16', value);\n}\n\nexport function fitsI32(value: unknown): boolean {\n return fitsIntegerKind('i32', value);\n}\n\nexport function fitsI64(value: unknown): boolean {\n return fitsIntegerKind('i64', value);\n}\n\nexport function fitsU8(value: unknown): boolean {\n return fitsIntegerKind('u8', value);\n}\n\nexport function fitsU16(value: unknown): boolean {\n return fitsIntegerKind('u16', value);\n}\n\nexport function fitsU32(value: unknown): boolean {\n return fitsIntegerKind('u32', value);\n}\n\nexport function fitsU64(value: unknown): boolean {\n return fitsIntegerKind('u64', value);\n}\n\nexport function toHostNumber(value: Numeric): number {\n const payload = assertMachineNumeric(value).payload();\n return typeof payload === 'bigint' ? Number(payload) : payload;\n}\n\nexport function toHostBigInt(value: Int): bigint {\n const payload = assertMachineNumeric(value).payload();\n return typeof payload === 'bigint' ? payload : BigInt(payload);\n}\n\nexport function format(value: Numeric | number | bigint): string {\n return isMachineNumericBox(value)\n ? formatPayload(value.payload())\n : formatPayload(value as number | bigint);\n}\n\nexport function keyOf(value: Numeric): string {\n return assertMachineNumeric(value).toString();\n}\n\nfunction readNumericFromDataView<Leaf extends MachineNumericKind>(\n kind: Leaf,\n view: DataView,\n byteOffset: number,\n littleEndian?: boolean,\n): NumericByKind<Leaf> {\n switch (kind) {\n case 'f64':\n return F64(view.getFloat64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'f32':\n return F32(view.getFloat32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i8':\n return I8(view.getInt8(byteOffset)) as NumericByKind<Leaf>;\n case 'i16':\n return I16(view.getInt16(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i32':\n return I32(view.getInt32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i64':\n return I64(view.getBigInt64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u8':\n return U8(view.getUint8(byteOffset)) as NumericByKind<Leaf>;\n case 'u16':\n return U16(view.getUint16(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u32':\n return U32(view.getUint32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u64':\n return U64(view.getBigUint64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n }\n}\n\nfunction writeNumericToDataView<Leaf extends MachineNumericKind>(\n kind: Leaf,\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n const numeric = FACTORY_BY_KIND[kind](value) as NumericByKind<Leaf>;\n const payload = assertMachineNumeric(numeric).payload();\n\n switch (kind) {\n case 'f64':\n view.setFloat64(byteOffset, payload as number, littleEndian);\n return;\n case 'f32':\n view.setFloat32(byteOffset, payload as number, littleEndian);\n return;\n case 'i8':\n view.setInt8(byteOffset, payload as number);\n return;\n case 'i16':\n view.setInt16(byteOffset, payload as number, littleEndian);\n return;\n case 'i32':\n view.setInt32(byteOffset, payload as number, littleEndian);\n return;\n case 'i64':\n view.setBigInt64(byteOffset, payload as bigint, littleEndian);\n return;\n case 'u8':\n view.setUint8(byteOffset, payload as number);\n return;\n case 'u16':\n view.setUint16(byteOffset, payload as number, littleEndian);\n return;\n case 'u32':\n view.setUint32(byteOffset, payload as number, littleEndian);\n return;\n case 'u64':\n view.setBigUint64(byteOffset, payload as bigint, littleEndian);\n return;\n }\n}\n\nexport function readF64(view: DataView, byteOffset: number, littleEndian?: boolean): f64 {\n return readNumericFromDataView('f64', view, byteOffset, littleEndian);\n}\n\nexport function readF32(view: DataView, byteOffset: number, littleEndian?: boolean): f32 {\n return readNumericFromDataView('f32', view, byteOffset, littleEndian);\n}\n\nexport function readI8(view: DataView, byteOffset: number): i8 {\n return readNumericFromDataView('i8', view, byteOffset);\n}\n\nexport function readI16(view: DataView, byteOffset: number, littleEndian?: boolean): i16 {\n return readNumericFromDataView('i16', view, byteOffset, littleEndian);\n}\n\nexport function readI32(view: DataView, byteOffset: number, littleEndian?: boolean): i32 {\n return readNumericFromDataView('i32', view, byteOffset, littleEndian);\n}\n\nexport function readI64(view: DataView, byteOffset: number, littleEndian?: boolean): i64 {\n return readNumericFromDataView('i64', view, byteOffset, littleEndian);\n}\n\nexport function readU8(view: DataView, byteOffset: number): u8 {\n return readNumericFromDataView('u8', view, byteOffset);\n}\n\nexport function readU16(view: DataView, byteOffset: number, littleEndian?: boolean): u16 {\n return readNumericFromDataView('u16', view, byteOffset, littleEndian);\n}\n\nexport function readU32(view: DataView, byteOffset: number, littleEndian?: boolean): u32 {\n return readNumericFromDataView('u32', view, byteOffset, littleEndian);\n}\n\nexport function readU64(view: DataView, byteOffset: number, littleEndian?: boolean): u64 {\n return readNumericFromDataView('u64', view, byteOffset, littleEndian);\n}\n\nexport function writeF64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('f64', view, byteOffset, value, littleEndian);\n}\n\nexport function writeF32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('f32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI8(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeNumericToDataView('i8', view, byteOffset, value);\n}\n\nexport function writeI16(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i16', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i64', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU8(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeNumericToDataView('u8', view, byteOffset, value);\n}\n\nexport function writeU16(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u16', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u64', view, byteOffset, value, littleEndian);\n}\n\nfunction isCanonicalArrayIndexProperty(property: PropertyKey): number | undefined {\n if (typeof property !== 'string' || property === '') {\n return undefined;\n }\n const numeric = Number(property);\n if (!Number.isInteger(numeric) || numeric < 0 || String(numeric) !== property) {\n return undefined;\n }\n return numeric;\n}\n\nfunction normalizeViewIndex(index: number, length: number): number | undefined {\n return Number.isInteger(index) && index >= 0 && index < length ? index : undefined;\n}\n\nfunction resolveSubarrayIndex(index: number | undefined, length: number): number {\n if (index === undefined) {\n return length;\n }\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n}\n\nfunction resolveSliceIndex(index: number | undefined, length: number): number {\n if (index === undefined) {\n return 0;\n }\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n}\n\nfunction resolveLastSearchIndex(index: number | undefined, length: number): number {\n if (length === 0) {\n return -1;\n }\n if (index === undefined) {\n return length - 1;\n }\n if (index < 0) {\n return length + index;\n }\n return Math.min(index, length - 1);\n}\n\nfunction materializeNumericLikeSource(\n source: ArrayLike<NumericLikeInput> | Iterable<NumericLikeInput>,\n): NumericLikeInput[] {\n if (Symbol.iterator in Object(source)) {\n return Array.from(source as Iterable<NumericLikeInput>);\n }\n const arrayLike = source as ArrayLike<NumericLikeInput>;\n const values: NumericLikeInput[] = [];\n for (let index = 0; index < arrayLike.length; index += 1) {\n values.push(arrayLike[index]);\n }\n return values;\n}\n\nabstract class MachineNumericArrayView<Leaf extends MachineNumericKind>\n implements Iterable<NumericByKind<Leaf>> {\n [index: number]: NumericByKind<Leaf>;\n readonly BYTES_PER_ELEMENT: number;\n readonly buffer: ArrayBufferLike;\n readonly byteLength: number;\n readonly byteOffset: number;\n readonly length: number;\n protected readonly _view: DataView;\n\n protected constructor(\n buffer: ArrayBufferLike,\n bytesPerElement: number,\n byteOffset = 0,\n length?: number,\n ) {\n if (byteOffset < 0 || !Number.isInteger(byteOffset)) {\n throw new RangeError('byteOffset must be a non-negative integer.');\n }\n if (byteOffset % bytesPerElement !== 0) {\n throw new RangeError('byteOffset must align to BYTES_PER_ELEMENT.');\n }\n if (byteOffset > buffer.byteLength) {\n throw new RangeError('byteOffset is out of range for the provided buffer.');\n }\n\n const remaining = buffer.byteLength - byteOffset;\n const computedLength = length ?? remaining / bytesPerElement;\n if (!Number.isInteger(computedLength) || computedLength < 0) {\n throw new RangeError('length must describe a whole number of elements.');\n }\n if (computedLength * bytesPerElement > remaining) {\n throw new RangeError('length is out of range for the provided buffer.');\n }\n if (length === undefined && remaining % bytesPerElement !== 0) {\n throw new RangeError('buffer byte length must align to BYTES_PER_ELEMENT.');\n }\n\n this.BYTES_PER_ELEMENT = bytesPerElement;\n this.buffer = buffer;\n this.byteOffset = byteOffset;\n this.length = computedLength;\n this.byteLength = computedLength * bytesPerElement;\n this._view = new DataView(buffer, byteOffset, this.byteLength);\n\n return new Proxy(this, {\n get: (target, property, receiver) => {\n const index = isCanonicalArrayIndexProperty(property);\n if (index !== undefined) {\n return target.at(index);\n }\n const value = Reflect.get(target, property, receiver);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n set: (target, property, value, receiver) => {\n const index = isCanonicalArrayIndexProperty(property);\n if (index !== undefined) {\n target.setAt(index, value as NumericLikeInput);\n return true;\n }\n return Reflect.set(target, property, value, receiver);\n },\n });\n }\n\n protected dataView(): DataView {\n return this._view;\n }\n\n protected abstract leafKind(): Leaf;\n protected abstract readFromView(view: DataView, byteOffset: number): NumericByKind<Leaf>;\n protected abstract writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void;\n protected abstract constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): MachineNumericArrayView<Leaf>;\n\n protected coerceToLeaf(value: NumericLikeInput): NumericByKind<Leaf> {\n return FACTORY_BY_KIND[this.leafKind()](value) as NumericByKind<Leaf>;\n }\n\n at(index: number): NumericByKind<Leaf> | undefined {\n const normalized = normalizeViewIndex(index, this.length);\n if (normalized === undefined) {\n return undefined;\n }\n return this.readFromView(this._view, normalized * this.BYTES_PER_ELEMENT);\n }\n\n setAt(index: number, value: NumericLikeInput): void {\n const normalized = normalizeViewIndex(index, this.length);\n if (normalized === undefined) {\n throw new RangeError('Index out of range for machine numeric view.');\n }\n this.writeToView(this._view, normalized * this.BYTES_PER_ELEMENT, value);\n }\n\n fill(value: NumericLikeInput, start = 0, end = this.length): this {\n const startIndex = resolveSliceIndex(start, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalEnd = Math.max(endIndex, startIndex);\n for (let index = startIndex; index < finalEnd; index += 1) {\n this.writeToView(this._view, index * this.BYTES_PER_ELEMENT, value);\n }\n return this;\n }\n\n set(\n source: ArrayLike<NumericLikeInput> | Iterable<NumericLikeInput>,\n offset = 0,\n ): void {\n if (!Number.isInteger(offset) || offset < 0 || offset > this.length) {\n throw new RangeError('Offset out of range for machine numeric view.');\n }\n const snapshot = materializeNumericLikeSource(source);\n if (offset + snapshot.length > this.length) {\n throw new RangeError('Source is too large for machine numeric view.');\n }\n for (let index = 0; index < snapshot.length; index += 1) {\n this.writeToView(\n this._view,\n (offset + index) * this.BYTES_PER_ELEMENT,\n snapshot[index],\n );\n }\n }\n\n copyWithin(target: number, start: number, end?: number): this {\n const targetIndex = resolveSliceIndex(target, this.length);\n const startIndex = resolveSliceIndex(start, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const available = Math.max(endIndex - startIndex, 0);\n const count = Math.min(available, this.length - targetIndex);\n const snapshot: NumericLikeInput[] = [];\n for (let index = 0; index < count; index += 1) {\n snapshot.push(\n this.readFromView(\n this._view,\n (startIndex + index) * this.BYTES_PER_ELEMENT,\n ),\n );\n }\n for (let index = 0; index < snapshot.length; index += 1) {\n this.writeToView(\n this._view,\n (targetIndex + index) * this.BYTES_PER_ELEMENT,\n snapshot[index],\n );\n }\n return this;\n }\n\n *keys(): IterableIterator<number> {\n for (let index = 0; index < this.length; index += 1) {\n yield index;\n }\n }\n\n values(): IterableIterator<NumericByKind<Leaf>> {\n return this[Symbol.iterator]();\n }\n\n *entries(): IterableIterator<[number, NumericByKind<Leaf>]> {\n for (let index = 0; index < this.length; index += 1) {\n yield [index, this.readFromView(this._view, index * this.BYTES_PER_ELEMENT)];\n }\n }\n\n includes(searchElement: NumericLikeInput, fromIndex = 0): boolean {\n return this.indexOf(searchElement, fromIndex) !== -1;\n }\n\n indexOf(searchElement: NumericLikeInput, fromIndex = 0): number {\n const startIndex = resolveSliceIndex(fromIndex, this.length);\n const searchValue = this.coerceToLeaf(searchElement);\n for (let index = startIndex; index < this.length; index += 1) {\n if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {\n return index;\n }\n }\n return -1;\n }\n\n lastIndexOf(searchElement: NumericLikeInput, fromIndex?: number): number {\n const startIndex = resolveLastSearchIndex(fromIndex, this.length);\n if (startIndex < 0) {\n return -1;\n }\n const searchValue = this.coerceToLeaf(searchElement);\n for (let index = startIndex; index >= 0; index -= 1) {\n if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {\n return index;\n }\n }\n return -1;\n }\n\n slice(begin?: number, end?: number): MachineNumericArrayView<Leaf> {\n const startIndex = resolveSliceIndex(begin, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalLength = Math.max(endIndex - startIndex, 0);\n const sliced = this.constructSubarray(\n new ArrayBuffer(finalLength * this.BYTES_PER_ELEMENT),\n 0,\n finalLength,\n );\n for (let index = 0; index < finalLength; index += 1) {\n const value = this.readFromView(\n this._view,\n (startIndex + index) * this.BYTES_PER_ELEMENT,\n );\n sliced.setAt(index, value);\n }\n return sliced;\n }\n\n subarray(begin?: number, end?: number): MachineNumericArrayView<Leaf> {\n const startIndex = resolveSubarrayIndex(begin ?? 0, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalLength = Math.max(endIndex - startIndex, 0);\n return this.constructSubarray(\n this.buffer,\n this.byteOffset + startIndex * this.BYTES_PER_ELEMENT,\n finalLength,\n );\n }\n\n *[Symbol.iterator](): IterableIterator<NumericByKind<Leaf>> {\n for (let index = 0; index < this.length; index += 1) {\n yield this.readFromView(this._view, index * this.BYTES_PER_ELEMENT);\n }\n }\n}\n\nfunction assertLittleEndianNativeViewBridge(\n littleEndian: boolean,\n hostViewName: string,\n): void {\n if (!littleEndian) {\n throw new TypeError(\n `Native ${hostViewName} views require little-endian machine storage.`,\n );\n }\n}\n\nexport class I8Array extends MachineNumericArrayView<'i8'> {\n static readonly BYTES_PER_ELEMENT = 1;\n\n static fromHostView(view: Int8Array): I8Array {\n return new I8Array(view.buffer, view.byteOffset, view.length);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number) {\n super(buffer, I8Array.BYTES_PER_ELEMENT, byteOffset, length);\n }\n\n protected leafKind(): 'i8' {\n return 'i8';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i8 {\n return readI8(view, byteOffset);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI8(view, byteOffset, value);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I8Array {\n return new I8Array(buffer, byteOffset, length);\n }\n\n override subarray(begin?: number, end?: number): I8Array {\n return super.subarray(begin, end) as I8Array;\n }\n\n override slice(begin?: number, end?: number): I8Array {\n return super.slice(begin, end) as I8Array;\n }\n\n toHostView(): Int8Array {\n return new Int8Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U8Array extends MachineNumericArrayView<'u8'> {\n static readonly BYTES_PER_ELEMENT = 1;\n\n static fromHostView(view: Uint8Array): U8Array {\n return new U8Array(view.buffer, view.byteOffset, view.length);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number) {\n super(buffer, U8Array.BYTES_PER_ELEMENT, byteOffset, length);\n }\n\n protected leafKind(): 'u8' {\n return 'u8';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u8 {\n return readU8(view, byteOffset);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU8(view, byteOffset, value);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U8Array {\n return new U8Array(buffer, byteOffset, length);\n }\n\n override subarray(begin?: number, end?: number): U8Array {\n return super.subarray(begin, end) as U8Array;\n }\n\n override slice(begin?: number, end?: number): U8Array {\n return super.slice(begin, end) as U8Array;\n }\n\n toHostView(): Uint8Array {\n return new Uint8Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I16Array extends MachineNumericArrayView<'i16'> {\n static readonly BYTES_PER_ELEMENT = 2;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Int16Array): I16Array {\n return new I16Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I16Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i16' {\n return 'i16';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i16 {\n return readI16(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI16(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I16Array {\n return new I16Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I16Array {\n return super.subarray(begin, end) as I16Array;\n }\n\n override slice(begin?: number, end?: number): I16Array {\n return super.slice(begin, end) as I16Array;\n }\n\n toHostView(): Int16Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Int16Array');\n return new Int16Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U16Array extends MachineNumericArrayView<'u16'> {\n static readonly BYTES_PER_ELEMENT = 2;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Uint16Array): U16Array {\n return new U16Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U16Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u16' {\n return 'u16';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u16 {\n return readU16(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU16(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U16Array {\n return new U16Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U16Array {\n return super.subarray(begin, end) as U16Array;\n }\n\n override slice(begin?: number, end?: number): U16Array {\n return super.slice(begin, end) as U16Array;\n }\n\n toHostView(): Uint16Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint16Array');\n return new Uint16Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I32Array extends MachineNumericArrayView<'i32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Int32Array): I32Array {\n return new I32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i32' {\n return 'i32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i32 {\n return readI32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I32Array {\n return new I32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I32Array {\n return super.subarray(begin, end) as I32Array;\n }\n\n override slice(begin?: number, end?: number): I32Array {\n return super.slice(begin, end) as I32Array;\n }\n\n toHostView(): Int32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Int32Array');\n return new Int32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U32Array extends MachineNumericArrayView<'u32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Uint32Array): U32Array {\n return new U32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u32' {\n return 'u32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u32 {\n return readU32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U32Array {\n return new U32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U32Array {\n return super.subarray(begin, end) as U32Array;\n }\n\n override slice(begin?: number, end?: number): U32Array {\n return super.slice(begin, end) as U32Array;\n }\n\n toHostView(): Uint32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint32Array');\n return new Uint32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I64Array extends MachineNumericArrayView<'i64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n\n static fromHostView(view: BigInt64Array): I64Array {\n return new I64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n protected readonly _littleEndian: boolean;\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i64' {\n return 'i64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i64 {\n return readI64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I64Array {\n return new I64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I64Array {\n return super.subarray(begin, end) as I64Array;\n }\n\n override slice(begin?: number, end?: number): I64Array {\n return super.slice(begin, end) as I64Array;\n }\n\n toHostView(): BigInt64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'BigInt64Array');\n return new BigInt64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U64Array extends MachineNumericArrayView<'u64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: BigUint64Array): U64Array {\n return new U64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u64' {\n return 'u64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u64 {\n return readU64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U64Array {\n return new U64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U64Array {\n return super.subarray(begin, end) as U64Array;\n }\n\n override slice(begin?: number, end?: number): U64Array {\n return super.slice(begin, end) as U64Array;\n }\n\n toHostView(): BigUint64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'BigUint64Array');\n return new BigUint64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class F32Array extends MachineNumericArrayView<'f32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n\n static fromHostView(view: Float32Array): F32Array {\n return new F32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n protected readonly _littleEndian: boolean;\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, F32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'f32' {\n return 'f32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): f32 {\n return readF32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeF32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): F32Array {\n return new F32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): F32Array {\n return super.subarray(begin, end) as F32Array;\n }\n\n override slice(begin?: number, end?: number): F32Array {\n return super.slice(begin, end) as F32Array;\n }\n\n toHostView(): Float32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Float32Array');\n return new Float32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class F64Array extends MachineNumericArrayView<'f64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Float64Array): F64Array {\n return new F64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, F64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'f64' {\n return 'f64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): f64 {\n return readF64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeF64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): F64Array {\n return new F64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): F64Array {\n return super.subarray(begin, end) as F64Array;\n }\n\n override slice(begin?: number, end?: number): F64Array {\n return super.slice(begin, end) as F64Array;\n }\n\n toHostView(): Float64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Float64Array');\n return new Float64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport function equalAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n left: NumericLikeInput,\n right: NumericLikeInput,\n): boolean {\n return leaf(left) === leaf(right);\n}\n\nexport function compareAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n left: NumericLikeInput,\n right: NumericLikeInput,\n): number {\n return leaf.compare(leaf(left), leaf(right));\n}\n\nexport function eqAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): Eq<NumericLikeInput> {\n return {\n equals(left, right) {\n return equalAs(leaf, left, right);\n },\n };\n}\n\nexport function orderAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): Order<NumericLikeInput> {\n return fromCompare((left, right) => compareAs(leaf, left, right));\n}\n\nexport function hashEqAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): HashEq<NumericLikeInput> {\n return fromHashEq(\n (value) => stringHash.hash(keyOf(leaf(value))),\n (left, right) => equalAs(leaf, left, right),\n );\n}\n\nexport function minAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: Iterable<NumericLikeInput>,\n): T | undefined {\n let smallest: T | undefined;\n for (const value of values) {\n const coerced = leaf(value);\n if (!smallest || leaf.compare(coerced, smallest) < 0) {\n smallest = coerced;\n }\n }\n return smallest;\n}\n\nexport function maxAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: Iterable<NumericLikeInput>,\n): T | undefined {\n let largest: T | undefined;\n for (const value of values) {\n const coerced = leaf(value);\n if (!largest || leaf.compare(coerced, largest) > 0) {\n largest = coerced;\n }\n }\n return largest;\n}\n\nexport function clampAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n value: NumericLikeInput,\n minimum: NumericLikeInput,\n maximum: NumericLikeInput,\n): T {\n const minValue = leaf(minimum);\n const maxValue = leaf(maximum);\n if (leaf.compare(minValue, maxValue) > 0) {\n throw new RangeError('Expected clamp minimum to be less than or equal to clamp maximum.');\n }\n\n const coerced = leaf(value);\n if (leaf.compare(coerced, minValue) < 0) {\n return minValue;\n }\n if (leaf.compare(coerced, maxValue) > 0) {\n return maxValue;\n }\n return coerced;\n}\n\nexport function binarySearchAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: ArrayLike<NumericLikeInput>,\n target: NumericLikeInput,\n): number {\n const targetValue = leaf(target);\n let low = 0;\n let high = values.length - 1;\n let foundIndex = -1;\n\n while (low <= high) {\n const mid = (low + high) >> 1;\n const midValue = leaf(values[mid]!);\n const ordering = leaf.compare(midValue, targetValue);\n if (ordering < 0) {\n low = mid + 1;\n continue;\n }\n if (ordering > 0) {\n high = mid - 1;\n continue;\n }\n foundIndex = mid;\n high = mid - 1;\n }\n\n return foundIndex;\n}\n\nexport function __numericBinary<T extends Numeric>(\n operator: BinaryNumericOperator,\n left: T,\n right: T,\n): T {\n const leftValue = assertMachineNumeric(left);\n const rightValue = assertMachineNumeric(right);\n const kind = leftValue.__soundscript_numeric_kind;\n if (kind !== rightValue.__soundscript_numeric_kind) {\n throw new TypeError('Mixed machine numeric operators require explicit coercion.');\n }\n\n if (BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)) {\n const result = applyBigIntBinaryOperator(\n kind as BigIntLeafKind,\n operator,\n leftValue.payload() as bigint,\n rightValue.payload() as bigint,\n );\n return internMachineNumeric(kind, result) as T;\n }\n\n const result = applyNumberBinaryOperator(\n operator,\n leftValue.payload() as number,\n rightValue.payload() as number,\n );\n return internMachineNumeric(kind, result) as T;\n}\n\nexport function __numericUnary<T extends Numeric>(\n operator: UnaryNumericOperator,\n value: T,\n): T {\n const numeric = assertMachineNumeric(value);\n const kind = numeric.__soundscript_numeric_kind;\n\n if (BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)) {\n if (operator === '+') {\n throw new TypeError('Unary plus is not supported on bigint-backed machine numerics.');\n }\n return internMachineNumeric(\n kind,\n applyBigIntUnaryOperator(operator, numeric.payload() as bigint),\n ) as T;\n }\n\n return internMachineNumeric(\n kind,\n applyNumberUnaryOperator(operator, numeric.payload() as number),\n ) as T;\n}\n\nexport function __numericWasmLeaf<T>(value: unknown): T {\n return value as T;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"numerics.js","sourceRoot":"","sources":["./soundscript/numerics.sts"],"names":[],"mappings":"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","sourcesContent":["import { fromCompare, type Eq, type Order } from './compare.sts';\nimport { Failure } from './failures.sts';\nimport { fromHashEq, stringHash, type HashEq } from './hash.sts';\nimport { err, ok, type Result } from './result.sts';\n\ntype MachineNumericKind =\n | 'f64'\n | 'f32'\n | 'i8'\n | 'i16'\n | 'i32'\n | 'i64'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64';\n\ntype HostKind =\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined';\n\ntype NumericLikeInput = Numeric | number | bigint;\ntype NumericPayload = number | bigint;\ntype IntegerLeafKind = 'i8' | 'i16' | 'i32' | 'i64' | 'u8' | 'u16' | 'u32' | 'u64';\ntype FloatLeafKind = 'f32' | 'f64';\ntype NumberLeafKind = Exclude<MachineNumericKind, 'i64' | 'u64'>;\ntype BigIntLeafKind = Extract<MachineNumericKind, 'i64' | 'u64'>;\ntype BinaryNumericOperator =\n | '+'\n | '-'\n | '*'\n | '/'\n | '%'\n | '**'\n | '&'\n | '|'\n | '^'\n | '<<'\n | '>>'\n | '>>>';\ntype UnaryNumericOperator = '+' | '-' | '~';\n\nexport interface MachineNumericValue<Leaf extends MachineNumericKind> {\n readonly __soundscript_numeric_kind: Leaf;\n toJSON(): { $numeric: Leaf; value: string };\n toString(): string;\n valueOf(): never;\n [Symbol.toPrimitive](hint: string): string;\n}\n\nexport type f64 = MachineNumericValue<'f64'>;\nexport type f32 = MachineNumericValue<'f32'>;\nexport type i8 = MachineNumericValue<'i8'>;\nexport type i16 = MachineNumericValue<'i16'>;\nexport type i32 = MachineNumericValue<'i32'>;\nexport type i64 = MachineNumericValue<'i64'>;\nexport type u8 = MachineNumericValue<'u8'>;\nexport type u16 = MachineNumericValue<'u16'>;\nexport type u32 = MachineNumericValue<'u32'>;\nexport type u64 = MachineNumericValue<'u64'>;\n\nexport type Numeric = f64 | f32 | i8 | i16 | i32 | i64 | u8 | u16 | u32 | u64;\nexport type Int = i8 | i16 | i32 | i64 | u8 | u16 | u32 | u64;\nexport type Float = f32 | f64;\ntype NumericByKind<Leaf extends MachineNumericKind> = Extract<\n Numeric,\n MachineNumericValue<Leaf>\n>;\n\nexport type MachineNumericOrHostKind = MachineNumericKind | HostKind;\n\nexport interface NumericFactory<T extends Numeric> {\n (value: NumericLikeInput): T;\n readonly MAX_VALUE: T;\n readonly MIN_VALUE: T;\n compare(left: T, right: T): number;\n format(value: T): string;\n parse(text: string): T;\n tryParse(text: string): T | undefined;\n}\n\nexport interface FloatFactory<T extends Float> extends NumericFactory<T> {\n isFinite(value: T): boolean;\n isNaN(value: T): boolean;\n}\n\nexport interface IntegerFactory<T extends Int> extends NumericFactory<T> {\n checkedAdd(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedSub(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedMul(left: T, right: T): Result<T, NumericOverflowFailure>;\n checkedDiv(left: T, right: T): Result<T, NumericOverflowFailure | NumericDivisionByZeroFailure>;\n checkedRem(left: T, right: T): Result<T, NumericDivisionByZeroFailure>;\n checkedNeg(value: T): Result<T, NumericOverflowFailure>;\n}\n\nexport class NumericOverflowFailure extends Failure {\n readonly leaf: IntegerLeafKind;\n readonly operation: 'add' | 'sub' | 'mul' | 'div' | 'rem' | 'neg';\n\n constructor(\n leaf: IntegerLeafKind,\n operation: 'add' | 'sub' | 'mul' | 'div' | 'rem' | 'neg',\n ) {\n super(`Checked ${operation} overflowed for ${leaf}.`);\n this.leaf = leaf;\n this.operation = operation;\n }\n}\n\nexport class NumericDivisionByZeroFailure extends Failure {\n readonly leaf: IntegerLeafKind;\n readonly operation: 'div' | 'rem';\n\n constructor(leaf: IntegerLeafKind, operation: 'div' | 'rem') {\n super(`Checked ${operation} divided ${leaf} by zero.`);\n this.leaf = leaf;\n this.operation = operation;\n }\n}\n\nconst MACHINE_KIND_PROPERTY = '__soundscript_numeric_kind';\n\nclass MachineNumericBox<Leaf extends MachineNumericKind>\n implements MachineNumericValue<Leaf> {\n readonly __soundscript_numeric_kind: Leaf;\n readonly #key: string;\n readonly #payload: NumericPayload;\n\n constructor(kind: Leaf, payload: NumericPayload, key: string) {\n this.__soundscript_numeric_kind = kind;\n this.#key = key;\n this.#payload = payload;\n Object.freeze(this);\n }\n\n payload(): NumericPayload {\n return this.#payload;\n }\n\n toJSON(): { $numeric: Leaf; value: string } {\n return {\n $numeric: this.__soundscript_numeric_kind,\n value: formatPayload(this.#payload),\n };\n }\n\n toString(): string {\n return this.#key;\n }\n\n valueOf(): never {\n throw new TypeError('Machine numerics do not support host numeric coercion.');\n }\n\n [Symbol.toPrimitive](hint: string): string {\n if (hint === 'string') {\n return this.#key;\n }\n throw new TypeError('Machine numerics do not support host numeric coercion.');\n }\n}\n\nconst MACHINE_NUMERIC_KINDS = new Set<MachineNumericKind>([\n 'f64',\n 'f32',\n 'i8',\n 'i16',\n 'i32',\n 'i64',\n 'u8',\n 'u16',\n 'u32',\n 'u64',\n]);\nconst INTEGER_LEAF_KINDS = new Set<IntegerLeafKind>([\n 'i8',\n 'i16',\n 'i32',\n 'i64',\n 'u8',\n 'u16',\n 'u32',\n 'u64',\n]);\nconst FLOAT_LEAF_KINDS = new Set<FloatLeafKind>(['f32', 'f64']);\nconst BIGINT_LEAF_KINDS = new Set<BigIntLeafKind>(['i64', 'u64']);\nconst NUMBER_LEAF_KINDS = new Set<NumberLeafKind>([\n 'f64',\n 'f32',\n 'i8',\n 'i16',\n 'i32',\n 'u8',\n 'u16',\n 'u32',\n]);\n\nconst MACHINE_NUMERIC_CACHES: Record<MachineNumericKind, Map<string, Numeric>> = {\n f64: new Map(),\n f32: new Map(),\n i8: new Map(),\n i16: new Map(),\n i32: new Map(),\n i64: new Map(),\n u8: new Map(),\n u16: new Map(),\n u32: new Map(),\n u64: new Map(),\n};\n\nfunction isMachineNumericBox(\n value: unknown,\n): value is MachineNumericBox<MachineNumericKind> {\n return value instanceof MachineNumericBox;\n}\n\nfunction assertMachineNumeric(\n value: unknown,\n): MachineNumericBox<MachineNumericKind> {\n if (!isMachineNumericBox(value)) {\n throw new TypeError('Expected a machine numeric value.');\n }\n return value;\n}\n\nfunction formatNumberPayload(value: number): string {\n if (Number.isNaN(value)) {\n return 'NaN';\n }\n if (value === Infinity) {\n return 'Infinity';\n }\n if (value === -Infinity) {\n return '-Infinity';\n }\n return String(value);\n}\n\nfunction formatPayload(value: NumericPayload): string {\n return typeof value === 'bigint' ? value.toString() : formatNumberPayload(value);\n}\n\nfunction keyForLeaf(kind: MachineNumericKind, value: NumericPayload): string {\n return `${kind}:${formatPayload(value)}`;\n}\n\nfunction canonicalizeFloat(value: number): number {\n if (Number.isNaN(value)) {\n return Number.NaN;\n }\n if (Object.is(value, -0)) {\n return 0;\n }\n return value;\n}\n\nfunction truncatedNumber(value: number): number {\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n\nfunction payloadFromInput(value: NumericLikeInput): NumericPayload {\n return isMachineNumericBox(value) ? value.payload() : value as number | bigint;\n}\n\nfunction numberFromInput(value: NumericLikeInput): number {\n const payload = payloadFromInput(value);\n return typeof payload === 'bigint' ? Number(payload) : payload;\n}\n\nfunction bigintFromInput(value: NumericLikeInput): bigint {\n const payload = payloadFromInput(value);\n if (typeof payload === 'bigint') {\n return payload;\n }\n return BigInt(truncatedNumber(payload));\n}\n\nfunction exactIntegralBigIntFromInput(value: unknown): bigint | undefined {\n if (isMachineNumericBox(value)) {\n const payload = value.payload();\n if (typeof payload === 'bigint') {\n return payload;\n }\n if (Number.isInteger(payload)) {\n return BigInt(payload);\n }\n return undefined;\n }\n\n if (typeof value === 'bigint') {\n return value;\n }\n\n if (typeof value === 'number' && Number.isInteger(value)) {\n return BigInt(value);\n }\n\n return undefined;\n}\n\nfunction canonicalizePayload(\n kind: MachineNumericKind,\n value: NumericLikeInput,\n): NumericPayload {\n switch (kind) {\n case 'f64':\n return canonicalizeFloat(numberFromInput(value));\n case 'f32':\n return canonicalizeFloat(Math.fround(numberFromInput(value)));\n case 'i8':\n return (truncatedNumber(numberFromInput(value)) << 24) >> 24;\n case 'i16':\n return (truncatedNumber(numberFromInput(value)) << 16) >> 16;\n case 'i32':\n return truncatedNumber(numberFromInput(value)) | 0;\n case 'i64':\n return BigInt.asIntN(64, bigintFromInput(value));\n case 'u8':\n return truncatedNumber(numberFromInput(value)) & 0xff;\n case 'u16':\n return truncatedNumber(numberFromInput(value)) & 0xffff;\n case 'u32':\n return truncatedNumber(numberFromInput(value)) >>> 0;\n case 'u64':\n return BigInt.asUintN(64, bigintFromInput(value));\n }\n}\n\nfunction internMachineNumeric<Leaf extends MachineNumericKind>(\n kind: Leaf,\n value: NumericLikeInput,\n): MachineNumericValue<Leaf> {\n const payload = canonicalizePayload(kind, value);\n const key = keyForLeaf(kind, payload);\n const existing = MACHINE_NUMERIC_CACHES[kind].get(key);\n if (existing) {\n return existing as MachineNumericValue<Leaf>;\n }\n\n const created = new MachineNumericBox(kind, payload, key) as Numeric;\n MACHINE_NUMERIC_CACHES[kind].set(key, created);\n return created as MachineNumericValue<Leaf>;\n}\n\nfunction numberLeafCompare<Leaf extends NumberLeafKind>(\n left: MachineNumericValue<Leaf>,\n right: MachineNumericValue<Leaf>,\n): number {\n const leftValue = (left as MachineNumericBox<Leaf>).payload() as number;\n const rightValue = (right as MachineNumericBox<Leaf>).payload() as number;\n\n const leftNaN = Number.isNaN(leftValue);\n const rightNaN = Number.isNaN(rightValue);\n if (leftNaN || rightNaN) {\n return leftNaN === rightNaN ? 0 : (leftNaN ? 1 : -1);\n }\n if (leftValue === rightValue) {\n return 0;\n }\n if (leftValue === -Infinity) {\n return -1;\n }\n if (rightValue === -Infinity) {\n return 1;\n }\n if (leftValue === Infinity) {\n return 1;\n }\n if (rightValue === Infinity) {\n return -1;\n }\n return leftValue < rightValue ? -1 : 1;\n}\n\nfunction bigintLeafCompare<Leaf extends BigIntLeafKind>(\n left: MachineNumericValue<Leaf>,\n right: MachineNumericValue<Leaf>,\n): number {\n const leftValue = (left as MachineNumericBox<Leaf>).payload() as bigint;\n const rightValue = (right as MachineNumericBox<Leaf>).payload() as bigint;\n if (leftValue === rightValue) {\n return 0;\n }\n return leftValue < rightValue ? -1 : 1;\n}\n\nfunction parseNumberText(text: string): number | undefined {\n const value = Number(text);\n return Number.isNaN(value) && text.trim() !== 'NaN' ? undefined : value;\n}\n\nfunction parseBigIntText(text: string): bigint | undefined {\n try {\n return BigInt(text);\n } catch {\n return undefined;\n }\n}\n\nfunction createIntegerFactory<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n minValue: NumericLikeInput,\n maxValue: NumericLikeInput,\n): IntegerFactory<NumericByKind<Leaf>> {\n const factory = ((value: NumericLikeInput) =>\n internMachineNumeric(kind, value)) as IntegerFactory<NumericByKind<Leaf>>;\n Object.assign(factory, {\n MAX_VALUE: internMachineNumeric(kind, maxValue),\n MIN_VALUE: internMachineNumeric(kind, minValue),\n compare(left: NumericByKind<Leaf>, right: NumericByKind<Leaf>): number {\n return BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? bigintLeafCompare(left as MachineNumericValue<BigIntLeafKind>, right as MachineNumericValue<BigIntLeafKind>)\n : numberLeafCompare(left as MachineNumericValue<NumberLeafKind>, right as MachineNumericValue<NumberLeafKind>);\n },\n format(value: NumericByKind<Leaf>): string {\n return formatPayload((value as MachineNumericBox<Leaf>).payload());\n },\n parse(text: string): NumericByKind<Leaf> {\n const parsed = BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? parseBigIntText(text)\n : parseNumberText(text);\n if (parsed === undefined) {\n throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);\n }\n return internMachineNumeric(kind, parsed as NumericLikeInput) as NumericByKind<Leaf>;\n },\n tryParse(text: string): NumericByKind<Leaf> | undefined {\n const parsed = BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)\n ? parseBigIntText(text)\n : parseNumberText(text);\n return parsed === undefined\n ? undefined\n : internMachineNumeric(kind, parsed as NumericLikeInput) as NumericByKind<Leaf>;\n },\n checkedAdd(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'add', left, right);\n },\n checkedSub(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'sub', left, right);\n },\n checkedMul(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerBinary(kind, 'mul', left, right);\n },\n checkedDiv(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericOverflowFailure | NumericDivisionByZeroFailure> {\n return checkedIntegerBinary(kind, 'div', left, right);\n },\n checkedRem(\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n ): Result<NumericByKind<Leaf>, NumericDivisionByZeroFailure> {\n return checkedIntegerRemainder(kind, left, right);\n },\n checkedNeg(value: NumericByKind<Leaf>): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n return checkedIntegerNegation(kind, value);\n },\n });\n return factory;\n}\n\nfunction createFloatFactory<Leaf extends FloatLeafKind>(\n kind: Leaf,\n minValue: number,\n maxValue: number,\n): FloatFactory<NumericByKind<Leaf>> {\n const factory = ((value: NumericLikeInput) =>\n internMachineNumeric(kind, value)) as FloatFactory<NumericByKind<Leaf>>;\n Object.assign(factory, {\n MAX_VALUE: internMachineNumeric(kind, maxValue),\n MIN_VALUE: internMachineNumeric(kind, minValue),\n compare(left: NumericByKind<Leaf>, right: NumericByKind<Leaf>): number {\n return numberLeafCompare(\n left as MachineNumericValue<NumberLeafKind>,\n right as MachineNumericValue<NumberLeafKind>,\n );\n },\n format(value: NumericByKind<Leaf>): string {\n return formatPayload((value as MachineNumericBox<Leaf>).payload());\n },\n isFinite(value: NumericByKind<Leaf>): boolean {\n return Number.isFinite((value as MachineNumericBox<Leaf>).payload() as number);\n },\n isNaN(value: NumericByKind<Leaf>): boolean {\n return Number.isNaN((value as MachineNumericBox<Leaf>).payload() as number);\n },\n parse(text: string): NumericByKind<Leaf> {\n const parsed = parseNumberText(text);\n if (parsed === undefined) {\n throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);\n }\n return internMachineNumeric(kind, parsed) as NumericByKind<Leaf>;\n },\n tryParse(text: string): NumericByKind<Leaf> | undefined {\n const parsed = parseNumberText(text);\n return parsed === undefined\n ? undefined\n : internMachineNumeric(kind, parsed) as NumericByKind<Leaf>;\n },\n });\n return factory;\n}\n\nfunction exactKindGuard<Leaf extends MachineNumericKind>(kind: Leaf) {\n return (value: unknown): value is MachineNumericValue<Leaf> =>\n isMachineNumericBox(value) && value.__soundscript_numeric_kind === kind;\n}\n\nfunction fitsIntegerKind(kind: IntegerLeafKind, value: unknown): boolean {\n const integral = exactIntegralBigIntFromInput(value);\n if (integral === undefined) {\n return false;\n }\n\n switch (kind) {\n case 'i8':\n return integral >= -128n && integral <= 127n;\n case 'i16':\n return integral >= -32768n && integral <= 32767n;\n case 'i32':\n return integral >= -2147483648n && integral <= 2147483647n;\n case 'i64':\n return BigInt.asIntN(64, integral) === integral;\n case 'u8':\n return integral >= 0n && integral <= 255n;\n case 'u16':\n return integral >= 0n && integral <= 65535n;\n case 'u32':\n return integral >= 0n && integral <= 4294967295n;\n case 'u64':\n return integral >= 0n && BigInt.asUintN(64, integral) === integral;\n }\n}\n\nfunction fitsFloat32(value: unknown): boolean {\n const payload = isMachineNumericBox(value) ? value.payload() : value;\n return typeof payload === 'number' && Number.isFinite(payload) && Math.fround(payload) === payload;\n}\n\nfunction assertIntegerLeafValue<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n value: NumericByKind<Leaf>,\n): MachineNumericBox<Leaf> {\n const numeric = assertMachineNumeric(value);\n if (numeric.__soundscript_numeric_kind !== kind) {\n throw new TypeError(`Expected ${kind} machine numeric value.`);\n }\n return numeric as MachineNumericBox<Leaf>;\n}\n\nfunction integerPayloadToBigInt<Leaf extends IntegerLeafKind>(numeric: MachineNumericBox<Leaf>): bigint {\n const payload = numeric.payload();\n return typeof payload === 'bigint' ? payload : BigInt(payload);\n}\n\nfunction checkedIntegerResult<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n operation: 'add' | 'sub' | 'mul' | 'div' | 'neg',\n value: bigint,\n): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n if (!fitsIntegerKind(kind, value)) {\n return err(new NumericOverflowFailure(kind, operation));\n }\n return ok(internMachineNumeric(kind, value) as NumericByKind<Leaf>);\n}\n\nfunction checkedIntegerBinary<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n operation: 'add' | 'sub' | 'mul' | 'div',\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n): Result<\n NumericByKind<Leaf>,\n NumericOverflowFailure | NumericDivisionByZeroFailure\n> {\n const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));\n const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));\n\n if (operation === 'div' && rightValue === 0n) {\n return err(new NumericDivisionByZeroFailure(kind, operation));\n }\n\n switch (operation) {\n case 'add':\n return checkedIntegerResult(kind, operation, leftValue + rightValue);\n case 'sub':\n return checkedIntegerResult(kind, operation, leftValue - rightValue);\n case 'mul':\n return checkedIntegerResult(kind, operation, leftValue * rightValue);\n case 'div':\n return checkedIntegerResult(kind, operation, leftValue / rightValue);\n }\n}\n\nfunction checkedIntegerRemainder<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n left: NumericByKind<Leaf>,\n right: NumericByKind<Leaf>,\n): Result<NumericByKind<Leaf>, NumericDivisionByZeroFailure> {\n const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));\n const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));\n\n if (rightValue === 0n) {\n return err(new NumericDivisionByZeroFailure(kind, 'rem'));\n }\n return ok(internMachineNumeric(kind, leftValue % rightValue) as NumericByKind<Leaf>);\n}\n\nfunction checkedIntegerNegation<Leaf extends IntegerLeafKind>(\n kind: Leaf,\n value: NumericByKind<Leaf>,\n): Result<NumericByKind<Leaf>, NumericOverflowFailure> {\n const payload = integerPayloadToBigInt(assertIntegerLeafValue(kind, value));\n return checkedIntegerResult(kind, 'neg', -payload);\n}\n\nfunction exactShiftCount(value: NumericLikeInput): bigint {\n return BigInt.asUintN(6, bigintFromInput(value));\n}\n\nfunction applyBigIntBinaryOperator(\n kind: BigIntLeafKind,\n operator: BinaryNumericOperator,\n left: bigint,\n right: bigint,\n): bigint {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n case '&':\n return left & right;\n case '|':\n return left | right;\n case '^':\n return left ^ right;\n case '<<':\n return left << exactShiftCount(right);\n case '>>':\n return left >> exactShiftCount(right);\n case '>>>': {\n const shifted = BigInt.asUintN(64, left) >> exactShiftCount(right);\n return kind === 'u64' ? shifted : BigInt.asIntN(64, shifted);\n }\n }\n}\n\nfunction applyNumberBinaryOperator(\n operator: BinaryNumericOperator,\n left: number,\n right: number,\n): number {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n case '&':\n return left & right;\n case '|':\n return left | right;\n case '^':\n return left ^ right;\n case '<<':\n return left << right;\n case '>>':\n return left >> right;\n case '>>>':\n return left >>> right;\n }\n}\n\nfunction applyNumberUnaryOperator(operator: UnaryNumericOperator, value: number): number {\n switch (operator) {\n case '+':\n return +value;\n case '-':\n return -value;\n case '~':\n return ~value;\n }\n}\n\nfunction applyBigIntUnaryOperator(operator: Exclude<UnaryNumericOperator, '+'>, value: bigint): bigint {\n switch (operator) {\n case '-':\n return -value;\n case '~':\n return ~value;\n }\n}\n\nexport const F64 = createFloatFactory('f64', -Number.MAX_VALUE, Number.MAX_VALUE);\nexport const F32 = createFloatFactory('f32', -3.4028234663852886e38, 3.4028234663852886e38);\nexport const I8 = createIntegerFactory('i8', -128, 127);\nexport const I16 = createIntegerFactory('i16', -32768, 32767);\nexport const I32 = createIntegerFactory('i32', -2147483648, 2147483647);\nexport const I64 = createIntegerFactory('i64', -9223372036854775808n, 9223372036854775807n);\nexport const U8 = createIntegerFactory('u8', 0, 255);\nexport const U16 = createIntegerFactory('u16', 0, 65535);\nexport const U32 = createIntegerFactory('u32', 0, 4294967295);\nexport const U64 = createIntegerFactory('u64', 0n, 18446744073709551615n);\n\nconst FACTORY_BY_KIND: Record<MachineNumericKind, NumericFactory<Numeric>> = {\n f64: F64 as NumericFactory<Numeric>,\n f32: F32 as NumericFactory<Numeric>,\n i8: I8 as NumericFactory<Numeric>,\n i16: I16 as NumericFactory<Numeric>,\n i32: I32 as NumericFactory<Numeric>,\n i64: I64 as NumericFactory<Numeric>,\n u8: U8 as NumericFactory<Numeric>,\n u16: U16 as NumericFactory<Numeric>,\n u32: U32 as NumericFactory<Numeric>,\n u64: U64 as NumericFactory<Numeric>,\n};\n\nexport function kindOf(value: unknown): MachineNumericOrHostKind {\n if (isMachineNumericBox(value)) {\n return value.__soundscript_numeric_kind;\n }\n return (typeof value) as HostKind;\n}\n\nexport function isNumeric(value: unknown): value is Numeric {\n return isMachineNumericBox(value);\n}\n\nexport function isInt(value: unknown): value is Int {\n return isMachineNumericBox(value) &&\n INTEGER_LEAF_KINDS.has(value.__soundscript_numeric_kind as IntegerLeafKind);\n}\n\nexport function isFloat(value: unknown): value is Float {\n return isMachineNumericBox(value) &&\n FLOAT_LEAF_KINDS.has(value.__soundscript_numeric_kind as FloatLeafKind);\n}\n\nexport const isF64 = exactKindGuard('f64');\nexport const isF32 = exactKindGuard('f32');\nexport const isI8 = exactKindGuard('i8');\nexport const isI16 = exactKindGuard('i16');\nexport const isI32 = exactKindGuard('i32');\nexport const isI64 = exactKindGuard('i64');\nexport const isU8 = exactKindGuard('u8');\nexport const isU16 = exactKindGuard('u16');\nexport const isU32 = exactKindGuard('u32');\nexport const isU64 = exactKindGuard('u64');\n\nexport function fitsF32(value: unknown): boolean {\n return fitsFloat32(value);\n}\n\nexport function fitsI8(value: unknown): boolean {\n return fitsIntegerKind('i8', value);\n}\n\nexport function fitsI16(value: unknown): boolean {\n return fitsIntegerKind('i16', value);\n}\n\nexport function fitsI32(value: unknown): boolean {\n return fitsIntegerKind('i32', value);\n}\n\nexport function fitsI64(value: unknown): boolean {\n return fitsIntegerKind('i64', value);\n}\n\nexport function fitsU8(value: unknown): boolean {\n return fitsIntegerKind('u8', value);\n}\n\nexport function fitsU16(value: unknown): boolean {\n return fitsIntegerKind('u16', value);\n}\n\nexport function fitsU32(value: unknown): boolean {\n return fitsIntegerKind('u32', value);\n}\n\nexport function fitsU64(value: unknown): boolean {\n return fitsIntegerKind('u64', value);\n}\n\nexport function toHostNumber(value: Numeric): number {\n const payload = assertMachineNumeric(value).payload();\n return typeof payload === 'bigint' ? Number(payload) : payload;\n}\n\nexport function toHostBigInt(value: Int): bigint {\n const payload = assertMachineNumeric(value).payload();\n return typeof payload === 'bigint' ? payload : BigInt(payload);\n}\n\nexport function format(value: Numeric | number | bigint): string {\n return isMachineNumericBox(value)\n ? formatPayload(value.payload())\n : formatPayload(value as number | bigint);\n}\n\nexport function keyOf(value: Numeric): string {\n return assertMachineNumeric(value).toString();\n}\n\nfunction readNumericFromDataView<Leaf extends MachineNumericKind>(\n kind: Leaf,\n view: DataView,\n byteOffset: number,\n littleEndian?: boolean,\n): NumericByKind<Leaf> {\n switch (kind) {\n case 'f64':\n return F64(view.getFloat64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'f32':\n return F32(view.getFloat32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i8':\n return I8(view.getInt8(byteOffset)) as NumericByKind<Leaf>;\n case 'i16':\n return I16(view.getInt16(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i32':\n return I32(view.getInt32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'i64':\n return I64(view.getBigInt64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u8':\n return U8(view.getUint8(byteOffset)) as NumericByKind<Leaf>;\n case 'u16':\n return U16(view.getUint16(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u32':\n return U32(view.getUint32(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n case 'u64':\n return U64(view.getBigUint64(byteOffset, littleEndian)) as NumericByKind<Leaf>;\n }\n}\n\nfunction writeNumericToDataView<Leaf extends MachineNumericKind>(\n kind: Leaf,\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n const numeric = FACTORY_BY_KIND[kind](value) as NumericByKind<Leaf>;\n const payload = assertMachineNumeric(numeric).payload();\n\n switch (kind) {\n case 'f64':\n view.setFloat64(byteOffset, payload as number, littleEndian);\n return;\n case 'f32':\n view.setFloat32(byteOffset, payload as number, littleEndian);\n return;\n case 'i8':\n view.setInt8(byteOffset, payload as number);\n return;\n case 'i16':\n view.setInt16(byteOffset, payload as number, littleEndian);\n return;\n case 'i32':\n view.setInt32(byteOffset, payload as number, littleEndian);\n return;\n case 'i64':\n view.setBigInt64(byteOffset, payload as bigint, littleEndian);\n return;\n case 'u8':\n view.setUint8(byteOffset, payload as number);\n return;\n case 'u16':\n view.setUint16(byteOffset, payload as number, littleEndian);\n return;\n case 'u32':\n view.setUint32(byteOffset, payload as number, littleEndian);\n return;\n case 'u64':\n view.setBigUint64(byteOffset, payload as bigint, littleEndian);\n return;\n }\n}\n\nexport function readF64(view: DataView, byteOffset: number, littleEndian?: boolean): f64 {\n return readNumericFromDataView('f64', view, byteOffset, littleEndian);\n}\n\nexport function readF32(view: DataView, byteOffset: number, littleEndian?: boolean): f32 {\n return readNumericFromDataView('f32', view, byteOffset, littleEndian);\n}\n\nexport function readI8(view: DataView, byteOffset: number): i8 {\n return readNumericFromDataView('i8', view, byteOffset);\n}\n\nexport function readI16(view: DataView, byteOffset: number, littleEndian?: boolean): i16 {\n return readNumericFromDataView('i16', view, byteOffset, littleEndian);\n}\n\nexport function readI32(view: DataView, byteOffset: number, littleEndian?: boolean): i32 {\n return readNumericFromDataView('i32', view, byteOffset, littleEndian);\n}\n\nexport function readI64(view: DataView, byteOffset: number, littleEndian?: boolean): i64 {\n return readNumericFromDataView('i64', view, byteOffset, littleEndian);\n}\n\nexport function readU8(view: DataView, byteOffset: number): u8 {\n return readNumericFromDataView('u8', view, byteOffset);\n}\n\nexport function readU16(view: DataView, byteOffset: number, littleEndian?: boolean): u16 {\n return readNumericFromDataView('u16', view, byteOffset, littleEndian);\n}\n\nexport function readU32(view: DataView, byteOffset: number, littleEndian?: boolean): u32 {\n return readNumericFromDataView('u32', view, byteOffset, littleEndian);\n}\n\nexport function readU64(view: DataView, byteOffset: number, littleEndian?: boolean): u64 {\n return readNumericFromDataView('u64', view, byteOffset, littleEndian);\n}\n\nexport function writeF64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('f64', view, byteOffset, value, littleEndian);\n}\n\nexport function writeF32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('f32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI8(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeNumericToDataView('i8', view, byteOffset, value);\n}\n\nexport function writeI16(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i16', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeI64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('i64', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU8(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeNumericToDataView('u8', view, byteOffset, value);\n}\n\nexport function writeU16(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u16', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU32(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u32', view, byteOffset, value, littleEndian);\n}\n\nexport function writeU64(\n view: DataView,\n byteOffset: number,\n value: NumericLikeInput,\n littleEndian?: boolean,\n): void {\n writeNumericToDataView('u64', view, byteOffset, value, littleEndian);\n}\n\nfunction isCanonicalArrayIndexProperty(property: PropertyKey): number | undefined {\n if (typeof property !== 'string' || property === '') {\n return undefined;\n }\n const numeric = Number(property);\n if (!Number.isInteger(numeric) || numeric < 0 || String(numeric) !== property) {\n return undefined;\n }\n return numeric;\n}\n\nfunction normalizeViewIndex(index: number, length: number): number | undefined {\n return Number.isInteger(index) && index >= 0 && index < length ? index : undefined;\n}\n\nfunction resolveSubarrayIndex(index: number | undefined, length: number): number {\n if (index === undefined) {\n return length;\n }\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n}\n\nfunction resolveSliceIndex(index: number | undefined, length: number): number {\n if (index === undefined) {\n return 0;\n }\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n}\n\nfunction resolveLastSearchIndex(index: number | undefined, length: number): number {\n if (length === 0) {\n return -1;\n }\n if (index === undefined) {\n return length - 1;\n }\n if (index < 0) {\n return length + index;\n }\n return Math.min(index, length - 1);\n}\n\nfunction materializeNumericLikeSource(\n source: ArrayLike<NumericLikeInput> | Iterable<NumericLikeInput>,\n): NumericLikeInput[] {\n if (Symbol.iterator in Object(source)) {\n return Array.from(source as Iterable<NumericLikeInput>);\n }\n const arrayLike = source as ArrayLike<NumericLikeInput>;\n const values: NumericLikeInput[] = [];\n for (let index = 0; index < arrayLike.length; index += 1) {\n values.push(arrayLike[index]);\n }\n return values;\n}\n\nabstract class MachineNumericArrayView<Leaf extends MachineNumericKind>\n implements Iterable<NumericByKind<Leaf>> {\n [index: number]: NumericByKind<Leaf>;\n readonly BYTES_PER_ELEMENT: number;\n readonly buffer: ArrayBufferLike;\n readonly byteLength: number;\n readonly byteOffset: number;\n readonly length: number;\n protected readonly _view: DataView;\n\n protected constructor(\n buffer: ArrayBufferLike,\n bytesPerElement: number,\n byteOffset = 0,\n length?: number,\n ) {\n if (byteOffset < 0 || !Number.isInteger(byteOffset)) {\n throw new RangeError('byteOffset must be a non-negative integer.');\n }\n if (byteOffset % bytesPerElement !== 0) {\n throw new RangeError('byteOffset must align to BYTES_PER_ELEMENT.');\n }\n if (byteOffset > buffer.byteLength) {\n throw new RangeError('byteOffset is out of range for the provided buffer.');\n }\n\n const remaining = buffer.byteLength - byteOffset;\n const computedLength = length ?? remaining / bytesPerElement;\n if (!Number.isInteger(computedLength) || computedLength < 0) {\n throw new RangeError('length must describe a whole number of elements.');\n }\n if (computedLength * bytesPerElement > remaining) {\n throw new RangeError('length is out of range for the provided buffer.');\n }\n if (length === undefined && remaining % bytesPerElement !== 0) {\n throw new RangeError('buffer byte length must align to BYTES_PER_ELEMENT.');\n }\n\n this.BYTES_PER_ELEMENT = bytesPerElement;\n this.buffer = buffer;\n this.byteOffset = byteOffset;\n this.length = computedLength;\n this.byteLength = computedLength * bytesPerElement;\n this._view = new DataView(buffer, byteOffset, this.byteLength);\n\n return new Proxy(this, {\n get: (target, property, receiver) => {\n const index = isCanonicalArrayIndexProperty(property);\n if (index !== undefined) {\n return target.at(index);\n }\n const value = Reflect.get(target, property, receiver);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n set: (target, property, value, receiver) => {\n const index = isCanonicalArrayIndexProperty(property);\n if (index !== undefined) {\n target.setAt(index, value as NumericLikeInput);\n return true;\n }\n return Reflect.set(target, property, value, receiver);\n },\n });\n }\n\n protected dataView(): DataView {\n return this._view;\n }\n\n protected abstract leafKind(): Leaf;\n protected abstract readFromView(view: DataView, byteOffset: number): NumericByKind<Leaf>;\n protected abstract writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void;\n protected abstract constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): MachineNumericArrayView<Leaf>;\n\n protected coerceToLeaf(value: NumericLikeInput): NumericByKind<Leaf> {\n return FACTORY_BY_KIND[this.leafKind()](value) as NumericByKind<Leaf>;\n }\n\n at(index: number): NumericByKind<Leaf> | undefined {\n const normalized = normalizeViewIndex(index, this.length);\n if (normalized === undefined) {\n return undefined;\n }\n return this.readFromView(this._view, normalized * this.BYTES_PER_ELEMENT);\n }\n\n setAt(index: number, value: NumericLikeInput): void {\n const normalized = normalizeViewIndex(index, this.length);\n if (normalized === undefined) {\n throw new RangeError('Index out of range for machine numeric view.');\n }\n this.writeToView(this._view, normalized * this.BYTES_PER_ELEMENT, value);\n }\n\n fill(value: NumericLikeInput, start = 0, end = this.length): this {\n const startIndex = resolveSliceIndex(start, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalEnd = Math.max(endIndex, startIndex);\n for (let index = startIndex; index < finalEnd; index += 1) {\n this.writeToView(this._view, index * this.BYTES_PER_ELEMENT, value);\n }\n return this;\n }\n\n set(\n source: ArrayLike<NumericLikeInput> | Iterable<NumericLikeInput>,\n offset = 0,\n ): void {\n if (!Number.isInteger(offset) || offset < 0 || offset > this.length) {\n throw new RangeError('Offset out of range for machine numeric view.');\n }\n const snapshot = materializeNumericLikeSource(source);\n if (offset + snapshot.length > this.length) {\n throw new RangeError('Source is too large for machine numeric view.');\n }\n for (let index = 0; index < snapshot.length; index += 1) {\n this.writeToView(\n this._view,\n (offset + index) * this.BYTES_PER_ELEMENT,\n snapshot[index],\n );\n }\n }\n\n copyWithin(target: number, start: number, end?: number): this {\n const targetIndex = resolveSliceIndex(target, this.length);\n const startIndex = resolveSliceIndex(start, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const available = Math.max(endIndex - startIndex, 0);\n const count = Math.min(available, this.length - targetIndex);\n const snapshot: NumericLikeInput[] = [];\n for (let index = 0; index < count; index += 1) {\n snapshot.push(\n this.readFromView(\n this._view,\n (startIndex + index) * this.BYTES_PER_ELEMENT,\n ),\n );\n }\n for (let index = 0; index < snapshot.length; index += 1) {\n this.writeToView(\n this._view,\n (targetIndex + index) * this.BYTES_PER_ELEMENT,\n snapshot[index],\n );\n }\n return this;\n }\n\n *keys(): IterableIterator<number> {\n for (let index = 0; index < this.length; index += 1) {\n yield index;\n }\n }\n\n values(): IterableIterator<NumericByKind<Leaf>> {\n return this[Symbol.iterator]();\n }\n\n *entries(): IterableIterator<[number, NumericByKind<Leaf>]> {\n for (let index = 0; index < this.length; index += 1) {\n yield [index, this.readFromView(this._view, index * this.BYTES_PER_ELEMENT)];\n }\n }\n\n includes(searchElement: NumericLikeInput, fromIndex = 0): boolean {\n return this.indexOf(searchElement, fromIndex) !== -1;\n }\n\n indexOf(searchElement: NumericLikeInput, fromIndex = 0): number {\n const startIndex = resolveSliceIndex(fromIndex, this.length);\n const searchValue = this.coerceToLeaf(searchElement);\n for (let index = startIndex; index < this.length; index += 1) {\n if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {\n return index;\n }\n }\n return -1;\n }\n\n lastIndexOf(searchElement: NumericLikeInput, fromIndex?: number): number {\n const startIndex = resolveLastSearchIndex(fromIndex, this.length);\n if (startIndex < 0) {\n return -1;\n }\n const searchValue = this.coerceToLeaf(searchElement);\n for (let index = startIndex; index >= 0; index -= 1) {\n if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {\n return index;\n }\n }\n return -1;\n }\n\n slice(begin?: number, end?: number): MachineNumericArrayView<Leaf> {\n const startIndex = resolveSliceIndex(begin, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalLength = Math.max(endIndex - startIndex, 0);\n const sliced = this.constructSubarray(\n new ArrayBuffer(finalLength * this.BYTES_PER_ELEMENT),\n 0,\n finalLength,\n );\n for (let index = 0; index < finalLength; index += 1) {\n const value = this.readFromView(\n this._view,\n (startIndex + index) * this.BYTES_PER_ELEMENT,\n );\n sliced.setAt(index, value);\n }\n return sliced;\n }\n\n subarray(begin?: number, end?: number): MachineNumericArrayView<Leaf> {\n const startIndex = resolveSubarrayIndex(begin ?? 0, this.length);\n const endIndex = resolveSubarrayIndex(end, this.length);\n const finalLength = Math.max(endIndex - startIndex, 0);\n return this.constructSubarray(\n this.buffer,\n this.byteOffset + startIndex * this.BYTES_PER_ELEMENT,\n finalLength,\n );\n }\n\n *[Symbol.iterator](): IterableIterator<NumericByKind<Leaf>> {\n for (let index = 0; index < this.length; index += 1) {\n yield this.readFromView(this._view, index * this.BYTES_PER_ELEMENT);\n }\n }\n}\n\nfunction assertLittleEndianNativeViewBridge(\n littleEndian: boolean,\n hostViewName: string,\n): void {\n if (!littleEndian) {\n throw new TypeError(\n `Native ${hostViewName} views require little-endian machine storage.`,\n );\n }\n}\n\nexport class I8Array extends MachineNumericArrayView<'i8'> {\n static readonly BYTES_PER_ELEMENT = 1;\n\n static fromHostView(view: Int8Array): I8Array {\n return new I8Array(view.buffer, view.byteOffset, view.length);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number) {\n super(buffer, I8Array.BYTES_PER_ELEMENT, byteOffset, length);\n }\n\n protected leafKind(): 'i8' {\n return 'i8';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i8 {\n return readI8(view, byteOffset);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI8(view, byteOffset, value);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I8Array {\n return new I8Array(buffer, byteOffset, length);\n }\n\n override subarray(begin?: number, end?: number): I8Array {\n return super.subarray(begin, end) as I8Array;\n }\n\n override slice(begin?: number, end?: number): I8Array {\n return super.slice(begin, end) as I8Array;\n }\n\n toHostView(): Int8Array {\n return new Int8Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U8Array extends MachineNumericArrayView<'u8'> {\n static readonly BYTES_PER_ELEMENT = 1;\n\n static fromHostView(view: Uint8Array): U8Array {\n return new U8Array(view.buffer, view.byteOffset, view.length);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number) {\n super(buffer, U8Array.BYTES_PER_ELEMENT, byteOffset, length);\n }\n\n protected leafKind(): 'u8' {\n return 'u8';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u8 {\n return readU8(view, byteOffset);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU8(view, byteOffset, value);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U8Array {\n return new U8Array(buffer, byteOffset, length);\n }\n\n override subarray(begin?: number, end?: number): U8Array {\n return super.subarray(begin, end) as U8Array;\n }\n\n override slice(begin?: number, end?: number): U8Array {\n return super.slice(begin, end) as U8Array;\n }\n\n toHostView(): Uint8Array {\n return new Uint8Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I16Array extends MachineNumericArrayView<'i16'> {\n static readonly BYTES_PER_ELEMENT = 2;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Int16Array): I16Array {\n return new I16Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I16Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i16' {\n return 'i16';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i16 {\n return readI16(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI16(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I16Array {\n return new I16Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I16Array {\n return super.subarray(begin, end) as I16Array;\n }\n\n override slice(begin?: number, end?: number): I16Array {\n return super.slice(begin, end) as I16Array;\n }\n\n toHostView(): Int16Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Int16Array');\n return new Int16Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U16Array extends MachineNumericArrayView<'u16'> {\n static readonly BYTES_PER_ELEMENT = 2;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Uint16Array): U16Array {\n return new U16Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U16Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u16' {\n return 'u16';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u16 {\n return readU16(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU16(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U16Array {\n return new U16Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U16Array {\n return super.subarray(begin, end) as U16Array;\n }\n\n override slice(begin?: number, end?: number): U16Array {\n return super.slice(begin, end) as U16Array;\n }\n\n toHostView(): Uint16Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint16Array');\n return new Uint16Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I32Array extends MachineNumericArrayView<'i32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Int32Array): I32Array {\n return new I32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i32' {\n return 'i32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i32 {\n return readI32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I32Array {\n return new I32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I32Array {\n return super.subarray(begin, end) as I32Array;\n }\n\n override slice(begin?: number, end?: number): I32Array {\n return super.slice(begin, end) as I32Array;\n }\n\n toHostView(): Int32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Int32Array');\n return new Int32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U32Array extends MachineNumericArrayView<'u32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Uint32Array): U32Array {\n return new U32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u32' {\n return 'u32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u32 {\n return readU32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U32Array {\n return new U32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U32Array {\n return super.subarray(begin, end) as U32Array;\n }\n\n override slice(begin?: number, end?: number): U32Array {\n return super.slice(begin, end) as U32Array;\n }\n\n toHostView(): Uint32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint32Array');\n return new Uint32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class I64Array extends MachineNumericArrayView<'i64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n\n static fromHostView(view: BigInt64Array): I64Array {\n return new I64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n protected readonly _littleEndian: boolean;\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, I64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'i64' {\n return 'i64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): i64 {\n return readI64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeI64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): I64Array {\n return new I64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): I64Array {\n return super.subarray(begin, end) as I64Array;\n }\n\n override slice(begin?: number, end?: number): I64Array {\n return super.slice(begin, end) as I64Array;\n }\n\n toHostView(): BigInt64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'BigInt64Array');\n return new BigInt64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class U64Array extends MachineNumericArrayView<'u64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: BigUint64Array): U64Array {\n return new U64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, U64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'u64' {\n return 'u64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): u64 {\n return readU64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeU64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): U64Array {\n return new U64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): U64Array {\n return super.subarray(begin, end) as U64Array;\n }\n\n override slice(begin?: number, end?: number): U64Array {\n return super.slice(begin, end) as U64Array;\n }\n\n toHostView(): BigUint64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'BigUint64Array');\n return new BigUint64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class F32Array extends MachineNumericArrayView<'f32'> {\n static readonly BYTES_PER_ELEMENT = 4;\n\n static fromHostView(view: Float32Array): F32Array {\n return new F32Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n protected readonly _littleEndian: boolean;\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, F32Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'f32' {\n return 'f32';\n }\n\n protected readFromView(view: DataView, byteOffset: number): f32 {\n return readF32(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeF32(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): F32Array {\n return new F32Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): F32Array {\n return super.subarray(begin, end) as F32Array;\n }\n\n override slice(begin?: number, end?: number): F32Array {\n return super.slice(begin, end) as F32Array;\n }\n\n toHostView(): Float32Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Float32Array');\n return new Float32Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport class F64Array extends MachineNumericArrayView<'f64'> {\n static readonly BYTES_PER_ELEMENT = 8;\n protected readonly _littleEndian: boolean;\n\n static fromHostView(view: Float64Array): F64Array {\n return new F64Array(view.buffer, view.byteOffset, view.length, true);\n }\n\n constructor(buffer: ArrayBufferLike, byteOffset = 0, length?: number, littleEndian = true) {\n super(buffer, F64Array.BYTES_PER_ELEMENT, byteOffset, length);\n this._littleEndian = littleEndian;\n }\n\n protected leafKind(): 'f64' {\n return 'f64';\n }\n\n protected readFromView(view: DataView, byteOffset: number): f64 {\n return readF64(view, byteOffset, this._littleEndian);\n }\n\n protected writeToView(view: DataView, byteOffset: number, value: NumericLikeInput): void {\n writeF64(view, byteOffset, value, this._littleEndian);\n }\n\n protected constructSubarray(buffer: ArrayBufferLike, byteOffset: number, length: number): F64Array {\n return new F64Array(buffer, byteOffset, length, this._littleEndian);\n }\n\n override subarray(begin?: number, end?: number): F64Array {\n return super.subarray(begin, end) as F64Array;\n }\n\n override slice(begin?: number, end?: number): F64Array {\n return super.slice(begin, end) as F64Array;\n }\n\n toHostView(): Float64Array {\n assertLittleEndianNativeViewBridge(this._littleEndian, 'Float64Array');\n return new Float64Array(this.buffer, this.byteOffset, this.length);\n }\n}\n\nexport function equalAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n left: NumericLikeInput,\n right: NumericLikeInput,\n): boolean {\n return leaf(left) === leaf(right);\n}\n\nexport function compareAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n left: NumericLikeInput,\n right: NumericLikeInput,\n): number {\n return leaf.compare(leaf(left), leaf(right));\n}\n\nexport function eqAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): Eq<NumericLikeInput> {\n return {\n equals(left, right) {\n return equalAs(leaf, left, right);\n },\n };\n}\n\nexport function orderAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): Order<NumericLikeInput> {\n return fromCompare((left, right) => compareAs(leaf, left, right));\n}\n\nexport function hashEqAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n): HashEq<NumericLikeInput> {\n return fromHashEq(\n (value) => stringHash.hash(keyOf(leaf(value))),\n (left, right) => equalAs(leaf, left, right),\n );\n}\n\nexport function minAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: Iterable<NumericLikeInput>,\n): T | undefined {\n let smallest: T | undefined;\n for (const value of values) {\n const coerced = leaf(value);\n if (!smallest || leaf.compare(coerced, smallest) < 0) {\n smallest = coerced;\n }\n }\n return smallest;\n}\n\nexport function maxAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: Iterable<NumericLikeInput>,\n): T | undefined {\n let largest: T | undefined;\n for (const value of values) {\n const coerced = leaf(value);\n if (!largest || leaf.compare(coerced, largest) > 0) {\n largest = coerced;\n }\n }\n return largest;\n}\n\nexport function clampAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n value: NumericLikeInput,\n minimum: NumericLikeInput,\n maximum: NumericLikeInput,\n): T {\n const minValue = leaf(minimum);\n const maxValue = leaf(maximum);\n if (leaf.compare(minValue, maxValue) > 0) {\n throw new RangeError('Expected clamp minimum to be less than or equal to clamp maximum.');\n }\n\n const coerced = leaf(value);\n if (leaf.compare(coerced, minValue) < 0) {\n return minValue;\n }\n if (leaf.compare(coerced, maxValue) > 0) {\n return maxValue;\n }\n return coerced;\n}\n\nexport function binarySearchAs<T extends Numeric>(\n leaf: NumericFactory<T>,\n values: ArrayLike<NumericLikeInput>,\n target: NumericLikeInput,\n): number {\n const targetValue = leaf(target);\n let low = 0;\n let high = values.length - 1;\n let foundIndex = -1;\n\n while (low <= high) {\n const mid = (low + high) >> 1;\n const midValue = leaf(values[mid]!);\n const ordering = leaf.compare(midValue, targetValue);\n if (ordering < 0) {\n low = mid + 1;\n continue;\n }\n if (ordering > 0) {\n high = mid - 1;\n continue;\n }\n foundIndex = mid;\n high = mid - 1;\n }\n\n return foundIndex;\n}\n\nexport function __numericBinary<T extends Numeric>(\n operator: BinaryNumericOperator,\n left: T,\n right: T,\n): T {\n const leftValue = assertMachineNumeric(left);\n const rightValue = assertMachineNumeric(right);\n const kind = leftValue.__soundscript_numeric_kind;\n if (kind !== rightValue.__soundscript_numeric_kind) {\n throw new TypeError('Mixed machine numeric operators require explicit coercion.');\n }\n\n if (BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)) {\n const result = applyBigIntBinaryOperator(\n kind as BigIntLeafKind,\n operator,\n leftValue.payload() as bigint,\n rightValue.payload() as bigint,\n );\n return internMachineNumeric(kind, result) as T;\n }\n\n const result = applyNumberBinaryOperator(\n operator,\n leftValue.payload() as number,\n rightValue.payload() as number,\n );\n return internMachineNumeric(kind, result) as T;\n}\n\nexport function __numericUnary<T extends Numeric>(\n operator: UnaryNumericOperator,\n value: T,\n): T {\n const numeric = assertMachineNumeric(value);\n const kind = numeric.__soundscript_numeric_kind;\n\n if (BIGINT_LEAF_KINDS.has(kind as BigIntLeafKind)) {\n if (operator === '+') {\n throw new TypeError('Unary plus is not supported on bigint-backed machine numerics.');\n }\n return internMachineNumeric(\n kind,\n applyBigIntUnaryOperator(operator, numeric.payload() as bigint),\n ) as T;\n }\n\n return internMachineNumeric(\n kind,\n applyNumberUnaryOperator(operator, numeric.payload() as number),\n ) as T;\n}\n\nexport function __numericWasmLeaf<T>(value: unknown): T {\n return value as T;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soundscript/soundscript",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -223,11 +223,11 @@
|
|
|
223
223
|
"soundscript/**"
|
|
224
224
|
],
|
|
225
225
|
"optionalDependencies": {
|
|
226
|
-
"@soundscript/cli-darwin-arm64": "0.1.
|
|
227
|
-
"@soundscript/cli-darwin-x64": "0.1.
|
|
228
|
-
"@soundscript/cli-linux-arm64": "0.1.
|
|
229
|
-
"@soundscript/cli-linux-x64": "0.1.
|
|
230
|
-
"@soundscript/cli-win32-x64": "0.1.
|
|
226
|
+
"@soundscript/cli-darwin-arm64": "0.1.12",
|
|
227
|
+
"@soundscript/cli-darwin-x64": "0.1.12",
|
|
228
|
+
"@soundscript/cli-linux-arm64": "0.1.12",
|
|
229
|
+
"@soundscript/cli-linux-x64": "0.1.12",
|
|
230
|
+
"@soundscript/cli-win32-x64": "0.1.12"
|
|
231
231
|
},
|
|
232
232
|
"repository": {
|
|
233
233
|
"type": "git",
|
package/soundscript/decode.sts
CHANGED
|
@@ -15,7 +15,10 @@ export class DecodeFailure extends Failure {
|
|
|
15
15
|
trace?: readonly ErrorFrame[];
|
|
16
16
|
} = {},
|
|
17
17
|
) {
|
|
18
|
-
super(message, {
|
|
18
|
+
super(message, {
|
|
19
|
+
...(options.cause === undefined ? {} : { cause: options.cause }),
|
|
20
|
+
...(options.trace === undefined ? {} : { trace: options.trace }),
|
|
21
|
+
});
|
|
19
22
|
this.path = options.path ?? [];
|
|
20
23
|
}
|
|
21
24
|
|
|
@@ -246,6 +249,9 @@ export function object<TShape extends ObjectShape>(
|
|
|
246
249
|
|
|
247
250
|
for (const key of Object.keys(shape)) {
|
|
248
251
|
const decoder = shape[key];
|
|
252
|
+
if (!decoder) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
249
255
|
const hasKey = key in record;
|
|
250
256
|
const rawValue = record[key];
|
|
251
257
|
|
package/soundscript/encode.sts
CHANGED
package/soundscript/json.sts
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
U16,
|
|
18
18
|
U32,
|
|
19
19
|
U64,
|
|
20
|
-
} from './numerics.
|
|
20
|
+
} from './numerics.sts';
|
|
21
21
|
|
|
22
22
|
export type JsonArray = JsonValue[];
|
|
23
23
|
export type JsonObject = {
|
|
@@ -489,8 +489,8 @@ function decodeTaggedMachineJsonValue(value: JsonValue | LosslessJsonValue): Mac
|
|
|
489
489
|
function decodeTaggedMachineNumeric(
|
|
490
490
|
value: Record<string, JsonValue | LosslessJsonValue>,
|
|
491
491
|
): Numeric | undefined {
|
|
492
|
-
const numericKind = value
|
|
493
|
-
const numericValue = value
|
|
492
|
+
const numericKind = value['$numeric'];
|
|
493
|
+
const numericValue = value['value'];
|
|
494
494
|
const keys = Object.keys(value);
|
|
495
495
|
if (
|
|
496
496
|
typeof numericKind !== 'string' ||
|
|
@@ -976,7 +976,11 @@ class JsonLikeParser {
|
|
|
976
976
|
const current = this.#text[this.#index];
|
|
977
977
|
if (current === '"') {
|
|
978
978
|
this.#index += 1;
|
|
979
|
-
|
|
979
|
+
const parsed = JSON.parse(this.#text.slice(start, this.#index));
|
|
980
|
+
if (typeof parsed !== 'string') {
|
|
981
|
+
this.#error('Expected string literal.');
|
|
982
|
+
}
|
|
983
|
+
return parsed;
|
|
980
984
|
}
|
|
981
985
|
if (current === '\\') {
|
|
982
986
|
this.#index += 1;
|
|
@@ -992,7 +996,7 @@ class JsonLikeParser {
|
|
|
992
996
|
}
|
|
993
997
|
}
|
|
994
998
|
}
|
|
995
|
-
} else if (current <= '\u001F') {
|
|
999
|
+
} else if (current !== undefined && current <= '\u001F') {
|
|
996
1000
|
this.#error('Invalid control character in string literal');
|
|
997
1001
|
}
|
|
998
1002
|
this.#index += 1;
|
package/soundscript/numerics.sts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { fromCompare, type Eq, type Order } from './compare.
|
|
2
|
-
import { Failure } from './failures.
|
|
3
|
-
import { fromHashEq, stringHash, type HashEq } from './hash.
|
|
4
|
-
import { err, ok, type Result } from './result.
|
|
1
|
+
import { fromCompare, type Eq, type Order } from './compare.sts';
|
|
2
|
+
import { Failure } from './failures.sts';
|
|
3
|
+
import { fromHashEq, stringHash, type HashEq } from './hash.sts';
|
|
4
|
+
import { err, ok, type Result } from './result.sts';
|
|
5
5
|
|
|
6
6
|
type MachineNumericKind =
|
|
7
7
|
| 'f64'
|