@soundscript/soundscript 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +10 -0
  3. package/async.d.ts +81 -0
  4. package/async.js +214 -0
  5. package/async.js.map +1 -0
  6. package/bin/soundscript.js +54 -0
  7. package/codec.d.ts +31 -0
  8. package/codec.js +31 -0
  9. package/codec.js.map +1 -0
  10. package/compare.d.ts +28 -0
  11. package/compare.js +121 -0
  12. package/compare.js.map +1 -0
  13. package/decode.d.ts +84 -0
  14. package/decode.js +249 -0
  15. package/decode.js.map +1 -0
  16. package/encode.d.ts +98 -0
  17. package/encode.js +128 -0
  18. package/encode.js.map +1 -0
  19. package/experimental/component.d.ts +40 -0
  20. package/experimental/component.js +46 -0
  21. package/experimental/component.js.map +1 -0
  22. package/experimental/css.d.ts +16 -0
  23. package/experimental/css.js +10 -0
  24. package/experimental/css.js.map +1 -0
  25. package/experimental/debug.d.ts +2 -0
  26. package/experimental/debug.js +10 -0
  27. package/experimental/debug.js.map +1 -0
  28. package/experimental/graphql.d.ts +16 -0
  29. package/experimental/graphql.js +10 -0
  30. package/experimental/graphql.js.map +1 -0
  31. package/experimental/sql.d.ts +22 -0
  32. package/experimental/sql.js +24 -0
  33. package/experimental/sql.js.map +1 -0
  34. package/failures.d.ts +23 -0
  35. package/failures.js +42 -0
  36. package/failures.js.map +1 -0
  37. package/hash.d.ts +34 -0
  38. package/hash.js +116 -0
  39. package/hash.js.map +1 -0
  40. package/hkt.d.ts +40 -0
  41. package/hkt.js +4 -0
  42. package/hkt.js.map +1 -0
  43. package/index.d.ts +9 -0
  44. package/index.js +16 -0
  45. package/index.js.map +1 -0
  46. package/json.d.ts +98 -0
  47. package/json.js +638 -0
  48. package/json.js.map +1 -0
  49. package/match.d.ts +11 -0
  50. package/match.js +14 -0
  51. package/match.js.map +1 -0
  52. package/package.json +153 -0
  53. package/result.d.ts +52 -0
  54. package/result.js +104 -0
  55. package/result.js.map +1 -0
  56. package/soundscript/async.sts +315 -0
  57. package/soundscript/codec.sts +75 -0
  58. package/soundscript/compare.sts +159 -0
  59. package/soundscript/decode.sts +382 -0
  60. package/soundscript/encode.sts +254 -0
  61. package/soundscript/experimental/component.sts +69 -0
  62. package/soundscript/experimental/css.sts +28 -0
  63. package/soundscript/experimental/debug.sts +10 -0
  64. package/soundscript/experimental/graphql.sts +28 -0
  65. package/soundscript/experimental/sql.sts +53 -0
  66. package/soundscript/failures.sts +64 -0
  67. package/soundscript/hash.sts +196 -0
  68. package/soundscript/hkt.sts +41 -0
  69. package/soundscript/index.sts +23 -0
  70. package/soundscript/json.sts +824 -0
  71. package/soundscript/match.sts +26 -0
  72. package/soundscript/result.sts +179 -0
  73. package/soundscript/thunk.sts +15 -0
  74. package/soundscript/typeclasses.sts +167 -0
  75. package/thunk.d.ts +2 -0
  76. package/thunk.js +10 -0
  77. package/thunk.js.map +1 -0
  78. package/typeclasses.d.ts +57 -0
  79. package/typeclasses.js +78 -0
  80. package/typeclasses.js.map +1 -0
package/json.js.map ADDED
@@ -0,0 +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';\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 interface JsonParseOptions {\n int64?: 'default' | 'lossless';\n}\n\nexport type JsonStringifyBigintMode = 'number' | 'reject' | 'string';\n\nexport interface JsonStringifyOptions {\n int64?: 'default' | 'string' | 'lossless';\n readonly bigint?: JsonStringifyBigintMode;\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 = {},\n): Result<JsonValue | LosslessJsonValue, JsonParseFailure> {\n return resultOf(\n () => options.int64 === 'lossless' ? parseLosslessJson(text) : JSON.parse(text),\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: JsonValue | LosslessJsonValue,\n options: JsonStringifyOptions = {},\n): Result<string, JsonStringifyFailure> {\n return resultOf(\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 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"]}
package/match.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export type MatchArm<TValue = unknown, TResult = unknown> = (value: TValue) => TResult;
2
+
3
+ export function where<TValue, TResult>(
4
+ arm: (value: TValue) => TResult,
5
+ predicate: (value: TValue) => unknown,
6
+ ): (value: TValue) => TResult;
7
+
8
+ export function Match<TArm extends MatchArm<any, any>>(
9
+ value: unknown,
10
+ arms: readonly [TArm, ...TArm[]],
11
+ ): ReturnType<TArm>;
package/match.js ADDED
@@ -0,0 +1,14 @@
1
+ // `where(...)` is an ordinary helper value so TS/Deno consumers have a concrete implementation.
2
+ // In the supported Soundscript pipeline, `Match(...)` consumes and strips it during macro expansion.
3
+ export function where(arm, predicate) {
4
+ return (value) => {
5
+ if (!predicate(value)) {
6
+ throw new Error('where(...) is intended for Match(...) guard arms and should be removed during Soundscript expansion.');
7
+ }
8
+ return arm(value);
9
+ };
10
+ }
11
+ export function Match(_value, _arms) {
12
+ throw new Error('Match(...) is a Soundscript macro and should be removed during Soundscript expansion.');
13
+ }
14
+ //# sourceMappingURL=match.js.map
package/match.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match.js","sourceRoot":"","sources":["./soundscript/match.sts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,qGAAqG;AACrG,MAAM,UAAU,KAAK,CACnB,GAA+B,EAC/B,SAAqC;IAErC,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,MAAe,EACf,KAAiC;IAEjC,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;AACJ,CAAC","sourcesContent":["export type MatchArm<TValue = unknown, TResult = unknown> = (value: TValue) => TResult;\n\n// `where(...)` is an ordinary helper value so TS/Deno consumers have a concrete implementation.\n// In the supported Soundscript pipeline, `Match(...)` consumes and strips it during macro expansion.\nexport function where<TValue, TResult>(\n arm: (value: TValue) => TResult,\n predicate: (value: TValue) => unknown,\n): (value: TValue) => TResult {\n return (value) => {\n if (!predicate(value)) {\n throw new Error(\n 'where(...) is intended for Match(...) guard arms and should be removed during Soundscript expansion.',\n );\n }\n return arm(value);\n };\n}\n\nexport function Match<TArm extends MatchArm<any, any>>(\n _value: unknown,\n _arms: readonly [TArm, ...TArm[]],\n): ReturnType<TArm> {\n throw new Error(\n 'Match(...) is a Soundscript macro and should be removed during Soundscript expansion.',\n );\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,153 @@
1
+ {
2
+ "name": "@soundscript/soundscript",
3
+ "version": "0.1.0",
4
+ "license": "ISC",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "types": "./index.d.ts",
8
+ "bin": {
9
+ "soundscript": "./bin/soundscript.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./index.d.ts",
14
+ "import": "./index.js"
15
+ },
16
+ "./hkt": {
17
+ "types": "./hkt.d.ts",
18
+ "import": "./hkt.js"
19
+ },
20
+ "./typeclasses": {
21
+ "types": "./typeclasses.d.ts",
22
+ "import": "./typeclasses.js"
23
+ },
24
+ "./result": {
25
+ "types": "./result.d.ts",
26
+ "import": "./result.js"
27
+ },
28
+ "./match": {
29
+ "types": "./match.d.ts",
30
+ "import": "./match.js"
31
+ },
32
+ "./failures": {
33
+ "types": "./failures.d.ts",
34
+ "import": "./failures.js"
35
+ },
36
+ "./json": {
37
+ "types": "./json.d.ts",
38
+ "import": "./json.js"
39
+ },
40
+ "./compare": {
41
+ "types": "./compare.d.ts",
42
+ "import": "./compare.js"
43
+ },
44
+ "./hash": {
45
+ "types": "./hash.d.ts",
46
+ "import": "./hash.js"
47
+ },
48
+ "./decode": {
49
+ "types": "./decode.d.ts",
50
+ "import": "./decode.js"
51
+ },
52
+ "./encode": {
53
+ "types": "./encode.d.ts",
54
+ "import": "./encode.js"
55
+ },
56
+ "./codec": {
57
+ "types": "./codec.d.ts",
58
+ "import": "./codec.js"
59
+ },
60
+ "./async": {
61
+ "types": "./async.d.ts",
62
+ "import": "./async.js"
63
+ },
64
+ "./thunk": {
65
+ "types": "./thunk.d.ts",
66
+ "import": "./thunk.js"
67
+ },
68
+ "./experimental/sql": {
69
+ "types": "./experimental/sql.d.ts",
70
+ "import": "./experimental/sql.js"
71
+ },
72
+ "./experimental/css": {
73
+ "types": "./experimental/css.d.ts",
74
+ "import": "./experimental/css.js"
75
+ },
76
+ "./experimental/graphql": {
77
+ "types": "./experimental/graphql.d.ts",
78
+ "import": "./experimental/graphql.js"
79
+ },
80
+ "./experimental/component": {
81
+ "types": "./experimental/component.d.ts",
82
+ "import": "./experimental/component.js"
83
+ },
84
+ "./experimental/debug": {
85
+ "types": "./experimental/debug.d.ts",
86
+ "import": "./experimental/debug.js"
87
+ }
88
+ },
89
+ "files": [
90
+ "LICENSE",
91
+ "README.md",
92
+ "bin/**",
93
+ "experimental/**",
94
+ "index.js",
95
+ "index.js.map",
96
+ "index.d.ts",
97
+ "hkt.js",
98
+ "hkt.js.map",
99
+ "hkt.d.ts",
100
+ "typeclasses.js",
101
+ "typeclasses.js.map",
102
+ "typeclasses.d.ts",
103
+ "result.js",
104
+ "result.js.map",
105
+ "result.d.ts",
106
+ "match.js",
107
+ "match.js.map",
108
+ "match.d.ts",
109
+ "failures.js",
110
+ "failures.js.map",
111
+ "failures.d.ts",
112
+ "json.js",
113
+ "json.js.map",
114
+ "json.d.ts",
115
+ "compare.js",
116
+ "compare.js.map",
117
+ "compare.d.ts",
118
+ "hash.js",
119
+ "hash.js.map",
120
+ "hash.d.ts",
121
+ "decode.js",
122
+ "decode.js.map",
123
+ "decode.d.ts",
124
+ "encode.js",
125
+ "encode.js.map",
126
+ "encode.d.ts",
127
+ "codec.js",
128
+ "codec.js.map",
129
+ "codec.d.ts",
130
+ "async.js",
131
+ "async.js.map",
132
+ "async.d.ts",
133
+ "thunk.js",
134
+ "thunk.js.map",
135
+ "thunk.d.ts",
136
+ "soundscript/**"
137
+ ],
138
+ "optionalDependencies": {
139
+ "@soundscript/cli-darwin-arm64": "0.1.0",
140
+ "@soundscript/cli-darwin-x64": "0.1.0",
141
+ "@soundscript/cli-linux-arm64": "0.1.0",
142
+ "@soundscript/cli-linux-x64": "0.1.0",
143
+ "@soundscript/cli-win32-x64": "0.1.0"
144
+ },
145
+ "repository": {
146
+ "type": "git",
147
+ "url": "https://github.com/jakemccloskey/soundscript.git"
148
+ },
149
+ "homepage": "https://github.com/jakemccloskey/soundscript",
150
+ "bugs": {
151
+ "url": "https://github.com/jakemccloskey/soundscript/issues"
152
+ }
153
+ }
package/result.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import type { Bind, Kind, Kind2, TypeLambda } from '@soundscript/soundscript/hkt';
2
+ import type { Applicative, Functor, Monad } from '@soundscript/soundscript/typeclasses';
3
+
4
+ // #[variance(T: out)]
5
+ export type Ok<T> = { readonly tag: 'ok'; readonly value: T };
6
+ // #[variance(E: out)]
7
+ export type Err<E> = { readonly tag: 'err'; readonly error: E };
8
+
9
+ // #[variance(T: out, E: out)]
10
+ export type Result<T, E> = Ok<T> | Err<E>;
11
+ // #[variance(T: out)]
12
+ export type Some<T> = Ok<T>;
13
+ export type None = Err<void>;
14
+ // #[variance(T: out)]
15
+ export type Option<T> = Result<T, void>;
16
+
17
+ export interface OptionF extends TypeLambda {
18
+ readonly type: Option<this['Args'][0]>;
19
+ }
20
+
21
+ export interface ResultF extends TypeLambda {
22
+ readonly type: Result<this['Args'][1], this['Args'][0]>;
23
+ }
24
+
25
+ export type OptionKind<T> = Kind<OptionF, T>;
26
+ export type ResultKind<E, T> = Kind2<ResultF, E, T>;
27
+
28
+ export function ok<T>(value: T): Result<T, never>;
29
+ export function err(): Result<never, void>;
30
+ export function err<E>(error: E): Result<never, E>;
31
+ export function some<T>(value: T): Option<T>;
32
+ export function none(): Option<never>;
33
+ export function isOk<T, E>(value: Result<T, E>): value is Ok<T>;
34
+ export function isErr<T, E>(value: Result<T, E>): value is Err<E>;
35
+ export function isSome<T>(value: Option<T>): value is Some<T>;
36
+ export function isNone<T>(value: Option<T>): value is None;
37
+ export function resultOf<T>(fn: () => Promise<T>): Promise<Result<T, Error>>;
38
+ export function resultOf<T, E>(
39
+ fn: () => Promise<T>,
40
+ mapError: (error: Error) => E,
41
+ ): Promise<Result<T, E>>;
42
+ export function resultOf<T>(fn: () => T): Result<T, Error>;
43
+ export function resultOf<T, E>(fn: () => T, mapError: (error: Error) => E): Result<T, E>;
44
+
45
+ export const optionFunctor: Functor<OptionF>;
46
+ export const optionApplicative: Applicative<OptionF>;
47
+ export const optionMonad: Monad<OptionF>;
48
+ export function resultFunctor<E>(): Functor<Bind<ResultF, [E]>>;
49
+ export function resultApplicative<E>(): Applicative<Bind<ResultF, [E]>>;
50
+ export function resultMonad<E>(): Monad<Bind<ResultF, [E]>>;
51
+
52
+ export function Try<T, E>(value: Result<T, E>): T;
package/result.js ADDED
@@ -0,0 +1,104 @@
1
+ import { normalizeThrown } from '@soundscript/soundscript/failures';
2
+ export function ok(value) {
3
+ return { tag: 'ok', value };
4
+ }
5
+ export function err(error) {
6
+ return { tag: 'err', error };
7
+ }
8
+ export function some(value) {
9
+ return ok(value);
10
+ }
11
+ export function none() {
12
+ return err();
13
+ }
14
+ export function isOk(value) {
15
+ return value.tag === 'ok';
16
+ }
17
+ export function isErr(value) {
18
+ return value.tag === 'err';
19
+ }
20
+ export function isSome(value) {
21
+ return isOk(value);
22
+ }
23
+ export function isNone(value) {
24
+ return isErr(value);
25
+ }
26
+ function isPromiseLike(value) {
27
+ return (typeof value === 'object' || typeof value === 'function') &&
28
+ value !== null &&
29
+ 'then' in value &&
30
+ typeof value.then === 'function';
31
+ }
32
+ export function resultOf(fn, mapError) {
33
+ try {
34
+ const value = fn();
35
+ if (isPromiseLike(value)) {
36
+ return Promise.resolve(value).then((resolved) => ok(resolved), (error) => {
37
+ const normalized = normalizeThrown(error);
38
+ return err(mapError ? mapError(normalized) : normalized);
39
+ });
40
+ }
41
+ return ok(value);
42
+ }
43
+ catch (error) {
44
+ const normalized = normalizeThrown(error);
45
+ return err(mapError ? mapError(normalized) : normalized);
46
+ }
47
+ }
48
+ function mapOption(value, f) {
49
+ return isOk(value) ? ok(f(value.value)) : value;
50
+ }
51
+ function apOption(fn, value) {
52
+ if (!isOk(fn)) {
53
+ return fn;
54
+ }
55
+ return isOk(value) ? ok(fn.value(value.value)) : value;
56
+ }
57
+ function flatMapOption(value, f) {
58
+ return isOk(value) ? f(value.value) : value;
59
+ }
60
+ const optionMonadImpl = {
61
+ ap: apOption,
62
+ flatMap: flatMapOption,
63
+ map: mapOption,
64
+ pure: some,
65
+ };
66
+ export const optionFunctor = optionMonadImpl;
67
+ export const optionApplicative = optionMonadImpl;
68
+ export const optionMonad = optionMonadImpl;
69
+ function mapResult(value, f) {
70
+ return isOk(value) ? ok(f(value.value)) : value;
71
+ }
72
+ function apResult(fn, value) {
73
+ if (!isOk(fn)) {
74
+ return fn;
75
+ }
76
+ return isOk(value) ? ok(fn.value(value.value)) : value;
77
+ }
78
+ function flatMapResult(value, f) {
79
+ return isOk(value) ? f(value.value) : value;
80
+ }
81
+ function createResultMonad() {
82
+ return {
83
+ ap: apResult,
84
+ flatMap: flatMapResult,
85
+ map: mapResult,
86
+ pure: ok,
87
+ };
88
+ }
89
+ export function resultFunctor() {
90
+ return createResultMonad();
91
+ }
92
+ export function resultApplicative() {
93
+ return createResultMonad();
94
+ }
95
+ export function resultMonad() {
96
+ return createResultMonad();
97
+ }
98
+ function macroRuntimeError(name) {
99
+ throw new Error(`${name}(...) is a Soundscript macro and should be removed during Soundscript expansion.`);
100
+ }
101
+ export function Try(_value) {
102
+ return macroRuntimeError('Try');
103
+ }
104
+ //# sourceMappingURL=result.js.map
package/result.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["./soundscript/result.sts"],"names":[],"mappings":"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","sourcesContent":["import { normalizeThrown } from '@soundscript/soundscript/failures';\nimport { type Bind, type Kind, type Kind2, type TypeLambda } from '@soundscript/soundscript/hkt';\nimport { type Applicative, type Functor, type Monad } from '@soundscript/soundscript/typeclasses';\n\n// #[variance(T: out)]\nexport type Ok<T> = { readonly tag: 'ok'; readonly value: T };\n// #[variance(E: out)]\nexport type Err<E> = { readonly tag: 'err'; readonly error: E };\n\n// #[variance(T: out, E: out)]\nexport type Result<T, E> = Ok<T> | Err<E>;\n// #[variance(T: out)]\nexport type Some<T> = Ok<T>;\nexport type None = Err<void>;\n// #[variance(T: out)]\nexport type Option<T> = Result<T, void>;\n\nexport interface OptionF extends TypeLambda {\n readonly type: Option<this['Args'][0]>;\n}\n\nexport interface ResultF extends TypeLambda {\n readonly type: Result<this['Args'][1], this['Args'][0]>;\n}\n\nexport type OptionKind<T> = Kind<OptionF, T>;\nexport type ResultKind<E, T> = Kind2<ResultF, E, T>;\n\nexport function ok<T>(value: T): Result<T, never> {\n return { tag: 'ok', value };\n}\n\nexport function err(): Result<never, void>;\nexport function err<E>(error: E): Result<never, E>;\nexport function err<E>(error?: E): Result<never, E | void> {\n return { tag: 'err', error };\n}\n\nexport function some<T>(value: T): Option<T> {\n return ok(value);\n}\n\nexport function none(): Option<never> {\n return err();\n}\n\nexport function isOk<T, E>(value: Result<T, E>): value is Ok<T> {\n return value.tag === 'ok';\n}\n\nexport function isErr<T, E>(value: Result<T, E>): value is Err<E> {\n return value.tag === 'err';\n}\n\nexport function isSome<T>(value: Option<T>): value is Some<T> {\n return isOk(value);\n}\n\nexport function isNone<T>(value: Option<T>): value is None {\n return isErr(value);\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (typeof value === 'object' || typeof value === 'function') &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function';\n}\n\nexport function resultOf<T>(fn: () => Promise<T>): Promise<Result<T, Error>>;\nexport function resultOf<T, E>(\n fn: () => Promise<T>,\n mapError: (error: Error) => E,\n): Promise<Result<T, E>>;\nexport function resultOf<T>(fn: () => T): Result<T, Error>;\nexport function resultOf<T, E>(fn: () => T, mapError: (error: Error) => E): Result<T, E>;\nexport function resultOf<T, E>(\n fn: () => T | Promise<T>,\n mapError?: (error: Error) => E,\n): Result<T, E | Error> | Promise<Result<T, E | Error>> {\n try {\n const value = fn();\n if (isPromiseLike(value)) {\n return Promise.resolve(value as PromiseLike<T>).then(\n (resolved) => ok(resolved),\n (error) => {\n const normalized = normalizeThrown(error);\n return err(mapError ? mapError(normalized) : normalized);\n },\n );\n }\n return ok(value);\n } catch (error) {\n const normalized = normalizeThrown(error);\n return err(mapError ? mapError(normalized) : normalized);\n }\n}\n\nfunction mapOption<A, B>(value: Option<A>, f: (value: A) => B): Option<B> {\n return isOk(value) ? ok(f(value.value)) : value;\n}\n\nfunction apOption<A, B>(\n fn: Option<(value: A) => B>,\n value: Option<A>,\n): Option<B> {\n if (!isOk(fn)) {\n return fn;\n }\n return isOk(value) ? ok(fn.value(value.value)) : value;\n}\n\nfunction flatMapOption<A, B>(value: Option<A>, f: (value: A) => Option<B>): Option<B> {\n return isOk(value) ? f(value.value) : value;\n}\n\nconst optionMonadImpl: Monad<OptionF> = {\n ap: apOption,\n flatMap: flatMapOption,\n map: mapOption,\n pure: some,\n};\n\nexport const optionFunctor: Functor<OptionF> = optionMonadImpl;\nexport const optionApplicative: Applicative<OptionF> = optionMonadImpl;\nexport const optionMonad: Monad<OptionF> = optionMonadImpl;\n\nfunction mapResult<E, A, B>(value: Result<A, E>, f: (value: A) => B): Result<B, E> {\n return isOk(value) ? ok(f(value.value)) : value;\n}\n\nfunction apResult<E, A, B>(\n fn: Result<(value: A) => B, E>,\n value: Result<A, E>,\n): Result<B, E> {\n if (!isOk(fn)) {\n return fn;\n }\n return isOk(value) ? ok(fn.value(value.value)) : value;\n}\n\nfunction flatMapResult<E, A, B>(\n value: Result<A, E>,\n f: (value: A) => Result<B, E>,\n): Result<B, E> {\n return isOk(value) ? f(value.value) : value;\n}\n\nfunction createResultMonad<E>(): Monad<Bind<ResultF, [E]>> {\n return {\n ap: apResult,\n flatMap: flatMapResult,\n map: mapResult,\n pure: ok,\n };\n}\n\nexport function resultFunctor<E>(): Functor<Bind<ResultF, [E]>> {\n return createResultMonad<E>();\n}\n\nexport function resultApplicative<E>(): Applicative<Bind<ResultF, [E]>> {\n return createResultMonad<E>();\n}\n\nexport function resultMonad<E>(): Monad<Bind<ResultF, [E]>> {\n return createResultMonad<E>();\n}\n\nfunction macroRuntimeError(name: string): never {\n throw new Error(\n `${name}(...) is a Soundscript macro and should be removed during Soundscript expansion.`,\n );\n}\n\nexport function Try<T, E>(value: Result<T, E>): T;\nexport function Try(_value: unknown): never {\n return macroRuntimeError('Try');\n}\n"]}