@everyonesoftware/common 6.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/outputs/{characterWriteStream-DUlG_bx_.d.cts → characterWriteStream-ogvZec-U.d.cts} +25 -22
- package/outputs/{characterWriteStream-DUlG_bx_.d.ts → characterWriteStream-ogvZec-U.d.ts} +25 -22
- package/outputs/{chunk-5Z677JON.js → chunk-MMAX3IZF.js} +7694 -3814
- package/outputs/chunk-MMAX3IZF.js.map +1 -0
- package/outputs/{chunk-CHBOMCYM.js → chunk-VF6FBNAU.js} +444 -227
- package/outputs/chunk-VF6FBNAU.js.map +1 -0
- package/outputs/sourceIndex.cjs +925 -559
- package/outputs/sourceIndex.cjs.map +1 -1
- package/outputs/sourceIndex.d.cts +122 -33
- package/outputs/sourceIndex.d.ts +122 -33
- package/outputs/sourceIndex.js +53 -1094
- package/outputs/sourceIndex.js.map +1 -1
- package/outputs/testIndex.cjs +1816 -1126
- package/outputs/testIndex.cjs.map +1 -1
- package/outputs/testIndex.d.cts +112 -64
- package/outputs/testIndex.d.ts +112 -64
- package/outputs/testIndex.js +2 -2
- package/outputs/tests.cjs +13935 -12780
- package/outputs/tests.cjs.map +1 -1
- package/outputs/tests.js +2795 -2250
- package/outputs/tests.js.map +1 -1
- package/package.json +1 -1
- package/outputs/chunk-5Z677JON.js.map +0 -1
- package/outputs/chunk-6V7JRJ7P.js +0 -2469
- package/outputs/chunk-6V7JRJ7P.js.map +0 -1
- package/outputs/chunk-CHBOMCYM.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../sources/basicDisposable.ts","../sources/byteList.ts","../sources/byteListStream.ts","../sources/stringIterator.ts","../sources/characterList.ts","../sources/characterReadStream.ts","../sources/characterListStream.ts","../sources/luxonDateTime.ts","../sources/dateTime.ts","../sources/listStack.ts","../sources/stack.ts","../sources/depthFirstSearch.ts","../sources/disposable.ts","../sources/generator.ts","../sources/httpClient.ts","../sources/inMemoryCharacterWriteStream.ts","../sources/listQueue.ts","../sources/node.ts","../sources/queue.ts","../sources/recreationDotGovClient.ts","../sources/stringComparer.ts","../sources/wonderlandTrailClient.ts"],"sourcesContent":["import { Disposable } from \"./disposable\";\r\nimport { PreCondition } from \"./preCondition\";\r\nimport { SyncResult } from \"./syncResult\";\r\n\r\n/**\r\n * A {@link Disposable} type that can be configured with a function that will be invoked when the\r\n * object is disposed.\r\n */\r\nexport class SyncDisposable implements Disposable\r\n{\r\n private readonly disposedFunction: () => void;\r\n private disposed: boolean;\r\n\r\n protected constructor(disposedFunction: () => void)\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(disposedFunction, \"disposedFunction\");\r\n\r\n this.disposedFunction = disposedFunction;\r\n this.disposed = false;\r\n }\r\n\r\n /**\r\n * Create a new {@link Disposable} that will invoke the provided {@link Function} when it is\r\n * disposed.\r\n * @param disposedFunction The function to invoke when the returned {@link Disposable} is\r\n * disposed.\r\n */\r\n public static create(disposedFunction: () => void): SyncDisposable\r\n {\r\n return new SyncDisposable(disposedFunction);\r\n }\r\n\r\n public dispose(): SyncResult<boolean>\r\n {\r\n return SyncResult.create(() =>\r\n {\r\n const result: boolean = !this.disposed;\r\n if (result)\r\n {\r\n try\r\n {\r\n this.disposedFunction();\r\n }\r\n finally\r\n {\r\n this.disposed = true;\r\n }\r\n }\r\n return result;\r\n });\r\n }\r\n\r\n public isDisposed(): boolean\r\n {\r\n return this.disposed;\r\n }\r\n}","import { EqualFunctions } from \"./equalFunctions\";\nimport { Iterable } from \"./iterable\";\nimport { Iterator } from \"./iterator\";\nimport { JavascriptIterable, JavascriptIterator } from \"./javascript\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { SyncResult } from \"./syncResult\";\nimport { ToStringFunctions } from \"./toStringFunctions\";\nimport { Type } from \"./types\";\n\n/**\n * A {@link List} of bytes.\n */\nexport class ByteList implements List<number>\n{\n private bytes: Uint8Array;\n private count: number;\n\n private constructor()\n {\n this.bytes = new Uint8Array(0);\n this.count = 0;\n }\n\n public static create(initialValues?: JavascriptIterable<number>): ByteList\n {\n const result: ByteList = new ByteList();\n if (initialValues)\n {\n result.addAll(initialValues);\n }\n return result;\n }\n\n public add(value: number): this\n {\n return List.add(this, value);\n }\n\n public addAll(values: JavascriptIterable<number>): this\n {\n return List.addAll(this, values);\n }\n\n public insert(index: number, value: number): this\n {\n PreCondition.assertInsertIndex(index, this.getCount().await(), \"index\");\n PreCondition.assertByte(value, \"value\");\n\n if (this.count < this.bytes.length)\n {\n if (index < this.count)\n {\n this.bytes.copyWithin(index + 1, index, this.count);\n }\n this.bytes[index] = value;\n }\n else\n {\n const newCapacity: number = (this.bytes.length * 2) + 1;\n const newBytes: Uint8Array = new Uint8Array(newCapacity);\n if (index > 0)\n {\n newBytes.set(this.bytes.subarray(0, index));\n }\n newBytes[index] = value;\n if (index < this.count)\n {\n newBytes.set(this.bytes.subarray(index), index + 1);\n }\n this.bytes = newBytes;\n }\n this.count++;\n\n return this;\n }\n\n public insertAll(index: number, values: JavascriptIterable<number>): this\n {\n return List.insertAll(this, index, values);\n }\n\n public remove(value: number, equalFunctions?: EqualFunctions): SyncResult<number>\n {\n PreCondition.assertByte(value, \"value\");\n\n return List.remove(this, value, equalFunctions);\n }\n\n public removeAt(index: number): SyncResult<number>\n {\n PreCondition.assertAccessIndex(index, this.count, \"index\");\n\n const result: number = this.bytes[index];\n this.bytes.copyWithin(index, index + 1, this.count);\n this.count--;\n\n return SyncResult.value(result);\n }\n\n public removeFirst(): SyncResult<number>\n {\n return List.removeFirst(this);\n }\n\n public removeLast(): SyncResult<number>\n {\n return List.removeLast(this);\n }\n\n public set(index: number, value: number): this\n {\n PreCondition.assertAccessIndex(index, this.getCount().await(), \"index\");\n PreCondition.assertByte(value, \"value\");\n\n this.bytes[index] = value;\n\n return this;\n }\n\n public iterate(): Iterator<number>\n {\n return Iterator.create(this.bytes[Symbol.iterator]().take(this.count));\n }\n\n public get(index: number): SyncResult<number>\n {\n PreCondition.assertAccessIndex(index, this.getCount().await(), \"index\");\n\n return SyncResult.value(this.bytes.at(index)!);\n }\n\n public toArray(): SyncResult<number[]>\n {\n return List.toArray(this);\n }\n\n public any(): SyncResult<boolean>\n {\n return this.getCount().then(count => count > 0);\n }\n\n public getCount(): SyncResult<number>\n {\n return SyncResult.value(this.count);\n }\n\n public equals(right: JavascriptIterable<number>, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return List.equals(this, right, equalFunctions);\n }\n\n public toString(toStringFunctions?: ToStringFunctions): string\n {\n return List.toString(this, toStringFunctions);\n }\n\n public concatenate(...toConcatenate: JavascriptIterable<number>[]): Iterable<number>\n {\n return List.concatenate(this, ...toConcatenate);\n }\n\n public map<TOutput>(mapping: (value: number) => TOutput | SyncResult<TOutput>): Iterable<TOutput>\n {\n return List.map(this, mapping);\n }\n\n public flatMap<TOutput>(mapping: (value: number) => JavascriptIterable<TOutput>): Iterable<TOutput>\n {\n return List.flatMap(this, mapping);\n }\n\n public where(condition: (value: number) => (boolean | SyncResult<boolean>)): Iterable<number>\n {\n return List.where(this, condition);\n }\n\n public instanceOf<TOutput extends number>(typeOrTypeCheck: Type<TOutput> | ((value: number) => value is TOutput)): Iterable<TOutput>\n {\n return List.instanceOf(this, typeOrTypeCheck);\n }\n\n public first(condition?: ((value: number) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<number>\n {\n return List.first(this, condition);\n }\n\n public last(condition?: ((value: number) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<number>\n {\n return List.last(this, condition);\n }\n\n public contains(value: number, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return List.contains(this, value, equalFunctions);\n }\n\n public [Symbol.iterator](): JavascriptIterator<number>\n {\n return List[Symbol.iterator](this);\n }\n}","import { ByteList } from \"./byteList\";\nimport { ByteReadStream } from \"./byteReadStream\";\nimport { ByteWriteStream } from \"./byteWriteStream\";\nimport { EmptyError } from \"./emptyError\";\nimport { PreCondition } from \"./preCondition\";\nimport { SyncResult } from \"./syncResult\";\nimport { isArray, isNumber, isUndefinedOrNull } from \"./types\";\n\n/**\n * A {@link ByteReadStream} and {@link ByteWriteStream} implementation that is implemented using a\n * {@link ByteList}.\n */\nexport class ByteListStream implements ByteReadStream, ByteWriteStream\n{\n private readonly list: ByteList;\n\n private constructor()\n {\n this.list = ByteList.create();\n }\n\n public static create(initialValues?: Uint8Array | number[]): ByteListStream\n {\n const result: ByteListStream = new ByteListStream();\n if (initialValues)\n {\n result.writeBytes(initialValues).await();\n }\n return result;\n }\n\n /**\n * Get the number of bytes that are available to be read.\n */\n public getAvailableByteCount(): number\n {\n return this.list.getCount().await();\n }\n\n public writeBytes(bytes: Uint8Array | number[], startIndex?: number, length?: number): SyncResult<number>\n {\n PreCondition.assertNotUndefinedAndNotNull(bytes, \"bytes\");\n\n if (isArray(bytes))\n {\n bytes = new Uint8Array(bytes);\n }\n if (isUndefinedOrNull(startIndex))\n {\n startIndex = 0;\n }\n if (isUndefinedOrNull(length))\n {\n length = bytes.length - startIndex;\n }\n\n PreCondition.assertInsertIndex(startIndex, bytes.length, \"startIndex\");\n PreCondition.assertBetween(0, length, bytes.length - startIndex, \"length\");\n\n this.list.addAll(bytes.subarray(startIndex, length + startIndex));\n\n return SyncResult.value(length);\n }\n\n public readBytes(count: number): SyncResult<Uint8Array>;\n public readBytes(output: Uint8Array, startIndex?: number, count?: number): SyncResult<number>;\n readBytes(countOrOutput: number | Uint8Array, startIndex?: number, count?: number): SyncResult<number> | SyncResult<Uint8Array>\n {\n let result: SyncResult<number> | SyncResult<Uint8Array>;\n if (isNumber(countOrOutput))\n {\n PreCondition.assertGreaterThanOrEqualTo(countOrOutput, 0, \"count\");\n\n if (!this.list.any().await())\n {\n result = SyncResult.error<Uint8Array>(new EmptyError());\n }\n else\n {\n const bytesReadCount: number = Math.min(countOrOutput, this.list.getCount().await());\n const output: Uint8Array = new Uint8Array(bytesReadCount);\n for (let i = 0; i < bytesReadCount; i++)\n {\n output[i] = this.list.removeFirst().await();\n }\n result = SyncResult.value(output);\n }\n }\n else\n {\n PreCondition.assertNotUndefinedAndNotNull(countOrOutput, \"output\");\n\n if (isUndefinedOrNull(startIndex))\n {\n startIndex = 0;\n }\n if (isUndefinedOrNull(count))\n {\n count = countOrOutput.length - startIndex;\n }\n\n PreCondition.assertInsertIndex(startIndex, countOrOutput.length, \"startIndex\");\n PreCondition.assertBetween(0, count, countOrOutput.length - startIndex, \"count\");\n\n if (!this.list.any().await())\n {\n result = SyncResult.error<number>(new EmptyError());\n }\n else\n {\n const bytesReadCount: number = Math.min(count, this.list.getCount().await());\n for (let i = 0; i < bytesReadCount; i++)\n {\n countOrOutput[startIndex + i] = this.list.removeFirst().await();\n }\n result = SyncResult.value(bytesReadCount);\n }\n }\n return result;\n }\n}","import { Iterator } from \"./iterator\";\r\nimport { JavascriptIterable, JavascriptIterator } from \"./javascript\";\r\nimport { PreCondition } from \"./preCondition\";\r\nimport { SyncResult } from \"./syncResult\";\r\nimport { Type } from \"./types\";\r\n\r\n/**\r\n * An {@link Iterator} that iterates over the characters in a {@link string}.\r\n */\r\nexport class StringIterator implements Iterator<string>\r\n{\r\n private readonly value: string;\r\n private currentIndex: number;\r\n private started: boolean;\r\n\r\n private constructor(value: string)\r\n {\r\n this.value = value;\r\n this.currentIndex = 0;\r\n this.started = false;\r\n }\r\n\r\n public static create(value: string): StringIterator\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(value, \"value\");\r\n\r\n return new StringIterator(value);\r\n }\r\n\r\n public getCurrentIndex(): number\r\n {\r\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\r\n\r\n return this.currentIndex;\r\n }\r\n\r\n public next(): SyncResult<boolean>\r\n {\r\n return SyncResult.create(() =>\r\n {\r\n if (!this.hasStarted())\r\n {\r\n this.started = true;\r\n }\r\n else if (this.hasCurrent())\r\n {\r\n this.currentIndex++;\r\n }\r\n return this.hasCurrent();\r\n });\r\n }\r\n\r\n public hasStarted(): boolean\r\n {\r\n return this.started;\r\n }\r\n\r\n public hasCurrent(): boolean\r\n {\r\n return this.hasStarted() && this.currentIndex < this.value.length;\r\n }\r\n\r\n public getCurrent(): string\r\n {\r\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\r\n\r\n return this.value[this.currentIndex];\r\n }\r\n\r\n public start(): SyncResult<this>\r\n {\r\n return Iterator.start<string, this>(this);\r\n }\r\n\r\n public takeCurrent(): SyncResult<string>\r\n {\r\n return Iterator.takeCurrent(this);\r\n }\r\n\r\n public any(): SyncResult<boolean>\r\n {\r\n return Iterator.any(this);\r\n }\r\n\r\n public getCount(): SyncResult<number>\r\n {\r\n return Iterator.getCount(this);\r\n }\r\n\r\n public toArray(): SyncResult<string[]>\r\n {\r\n return Iterator.toArray(this);\r\n }\r\n\r\n public concatenate(...toConcatenate: JavascriptIterable<string>[]): Iterator<string>\r\n {\r\n return Iterator.concatenate(this, ...toConcatenate);\r\n }\r\n\r\n public map<TOutput>(mapping: (value: string) => (TOutput | SyncResult<TOutput>)): Iterator<TOutput>\r\n {\r\n return Iterator.map(this, mapping);\r\n }\r\n\r\n public flatMap<TOutput>(mapping: (value: string) => JavascriptIterable<TOutput>): Iterator<TOutput>\r\n {\r\n return Iterator.flatMap(this, mapping);\r\n }\r\n\r\n public first(): SyncResult<string>\r\n {\r\n return Iterator.first(this);\r\n }\r\n\r\n public last(): SyncResult<string>\r\n {\r\n return Iterator.last(this);\r\n }\r\n\r\n public where(condition: (value: string) => boolean): Iterator<string>\r\n {\r\n return Iterator.where(this, condition);\r\n }\r\n\r\n public whereInstanceOf<U extends string>(typeCheck: (value: string) => value is U): Iterator<U>\r\n {\r\n return Iterator.whereInstanceOf(this, typeCheck);\r\n }\r\n\r\n public whereInstanceOfType<U extends string>(type: Type<U>): Iterator<U>\r\n {\r\n return Iterator.whereInstanceOfType(this, type);\r\n }\r\n\r\n public take(maximumToTake: number): Iterator<string>\r\n {\r\n return Iterator.take(this, maximumToTake);\r\n }\r\n\r\n public skip(maximumToSkip: number): Iterator<string>\r\n {\r\n return Iterator.skip(this, maximumToSkip);\r\n }\r\n\r\n public [Symbol.iterator](): JavascriptIterator<string>\r\n {\r\n return Iterator[Symbol.iterator](this);\r\n }\r\n}","import { EqualFunctions } from \"./equalFunctions\";\nimport { Iterable } from \"./iterable\";\nimport { Iterator } from \"./iterator\";\nimport { JavascriptIterable, JavascriptIterator } from \"./javascript\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { StringIterator } from \"./stringIterator\";\nimport { join } from \"./strings\";\nimport { SyncResult } from \"./syncResult\";\nimport { ToStringFunctions } from \"./toStringFunctions\";\nimport { isString, Type } from \"./types\";\n\nexport class CharacterList implements List<string>\n{\n private characters: string;\n\n private constructor(values?: JavascriptIterable<string> | string)\n {\n if (isString(values))\n {\n this.characters = values;\n }\n else if (values)\n {\n this.characters = join(\"\", values);\n }\n else\n {\n this.characters = \"\";\n }\n }\n\n public static create(values?: JavascriptIterable<string>): CharacterList\n {\n return new CharacterList(values);\n }\n\n public getCount(): SyncResult<number>\n {\n return SyncResult.value(this.characters.length);\n }\n\n public insert(index: number, value: string): this\n {\n PreCondition.assertInsertIndex(index, this.getCount().await(), \"index\");\n PreCondition.assertCharacter(value, \"value\");\n\n if (index === 0)\n {\n this.characters = value + this.characters;\n }\n else if (index === this.getCount().await())\n {\n this.characters += value;\n }\n else\n {\n this.characters = this.characters.slice(0, index) + value + this.characters.slice(index);\n }\n\n return this;\n }\n\n public removeAt(index: number): SyncResult<string>\n {\n PreCondition.assertAccessIndex(index, this.getCount().await(), \"index\");\n\n const result: string = this.get(index).await();\n this.characters =\n (index === 0 ? \"\" : this.characters.slice(0, index)) +\n (index === this.getCount().await() - 1 ? \"\" : this.characters.slice(index + 1));\n\n return SyncResult.value(result);\n }\n\n public set(index: number, value: string): this\n {\n PreCondition.assertAccessIndex(index, this.getCount().await(), \"index\");\n PreCondition.assertCharacter(value, \"value\");\n\n this.characters =\n (index === 0 ? \"\" : this.characters.slice(0, index)) +\n value +\n (index === this.getCount().await() - 1 ? \"\" : this.characters.slice(index + 1));\n\n return this;\n }\n\n public iterate(): Iterator<string>\n {\n return StringIterator.create(this.characters);\n }\n\n public get(index: number): SyncResult<string>\n {\n PreCondition.assertAccessIndex(index, this.getCount().await(), \"index\");\n\n return SyncResult.value(this.characters.charAt(index));\n }\n\n public add(value: string): this\n {\n return List.add(this, value);\n }\n\n public addAll(values: JavascriptIterable<string>): this\n {\n return List.addAll(this, values);\n }\n\n public insertAll(index: number, values: JavascriptIterable<string>): this\n {\n return List.insertAll(this, index, values);\n }\n\n public remove(value: string, equalFunctions?: EqualFunctions): SyncResult<string>\n {\n return List.remove(this, value, equalFunctions);\n }\n\n public removeFirst(): SyncResult<string>\n {\n return List.removeFirst(this);\n }\n\n public removeLast(): SyncResult<string>\n {\n return List.removeLast(this);\n }\n\n public toArray(): SyncResult<string[]>\n {\n return List.toArray(this);\n }\n\n public any(): SyncResult<boolean>\n {\n return List.any(this);\n }\n\n public equals(right: JavascriptIterable<string>, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return List.equals(this, right, equalFunctions);\n }\n\n public toString(toStringFunctions?: ToStringFunctions): string\n {\n return List.toString(this, toStringFunctions);\n }\n\n public concatenate(...toConcatenate: JavascriptIterable<string>[]): Iterable<string>\n {\n return List.concatenate(this, ...toConcatenate);\n }\n\n public map<TOutput>(mapping: (value: string) => TOutput | SyncResult<TOutput>): Iterable<TOutput>\n {\n return List.map(this, mapping);\n }\n\n public flatMap<TOutput>(mapping: (value: string) => JavascriptIterable<TOutput>): Iterable<TOutput>\n {\n return List.flatMap(this, mapping);\n }\n\n public where(condition: (value: string) => (boolean | SyncResult<boolean>)): Iterable<string>\n {\n return List.where(this, condition);\n }\n\n public instanceOf<TOutput extends string>(typeOrTypeCheck: Type<TOutput> | ((value: string) => value is TOutput)): Iterable<TOutput>\n {\n return List.instanceOf(this, typeOrTypeCheck);\n }\n\n public first(condition?: (value: string) => (boolean | SyncResult<boolean>)): SyncResult<string>\n {\n return List.first(this, condition);\n }\n\n public last(condition?: (value: string) => (boolean | SyncResult<boolean>)): SyncResult<string>\n {\n return List.last(this, condition);\n }\n\n public contains(value: string, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return List.contains(this, value, equalFunctions);\n }\n\n public [Symbol.iterator](): JavascriptIterator<string>\n {\n return List[Symbol.iterator](this);\n }\n}","import { PreCondition } from \"./preCondition\";\nimport { AsyncResult } from \"./asyncResult\";\nimport { SyncResult } from \"./syncResult\";\n\nexport abstract class CharacterReadStream\n{\n /**\n * Read a single character from this stream.\n */\n public abstract readCharacter(): AsyncResult<string>;\n\n public readCharacters(count: number): AsyncResult<string>\n {\n return CharacterReadStream.readCharacters(this, count);\n }\n\n public static readCharacters(readStream: CharacterReadStream, count: number): AsyncResult<string>\n {\n let characters: string = \"\";\n function readUntilCount(countRemaining: number): AsyncResult<string>\n {\n return readStream.readCharacter()\n .then((character: string) =>\n {\n characters += character;\n return countRemaining === 0\n ? SyncResult.value(characters)\n : readUntilCount(countRemaining - 1);\n });\n }\n return readUntilCount(count);\n }\n\n /**\n * Read characters from this stream until the provided {@link searchString} is found or the end\n * of the stream is reached. The {@link searchString} will be included in the returned string if\n * it is found..\n * @param searchString The string to search for.\n */\n public readUntil(searchString: string): AsyncResult<string>\n {\n return CharacterReadStream.readUntil(this, searchString);\n }\n\n public static readUntil(readStream: CharacterReadStream, searchString: string): AsyncResult<string>\n {\n PreCondition.assertNotUndefinedAndNotNull(readStream, \"readStream\");\n PreCondition.assertNotEmpty(searchString, \"searchString\");\n\n let characters: string = \"\";\n function readUntilSearchString(): AsyncResult<string>\n {\n return readStream.readCharacter()\n .then((character: string) =>\n {\n characters += character;\n return characters.endsWith(searchString)\n ? SyncResult.value(characters)\n : readUntilSearchString();\n });\n }\n return readUntilSearchString();\n }\n\n /**\n * Read a sequence of characters from this stream until either a newline character ('\\\\n') or\n * the end of the stream is reached. Terminating newline characters will be included in the\n * returned string.\n */\n public readLine(): AsyncResult<string>\n {\n return CharacterReadStream.readLine(this);\n }\n\n public static readLine(readStream: CharacterReadStream): AsyncResult<string>\n {\n PreCondition.assertNotUndefinedAndNotNull(readStream, \"readStream\");\n\n return readStream.readUntil(\"\\n\");\n }\n}","import { CharacterList } from \"./characterList\";\nimport { CharacterReadStream } from \"./characterReadStream\";\nimport { CharacterWriteStream } from \"./characterWriteStream\";\nimport { EmptyError } from \"./emptyError\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { PreCondition } from \"./preCondition\";\nimport { AsyncResult } from \"./asyncResult\";\nimport { join } from \"./strings\";\nimport { SyncResult } from \"./syncResult\";\nimport { isNumber, isString, isUndefinedOrNull } from \"./types\";\n\n/**\n * A {@link CharacterReadStream} and {@link CharacterWriteStream} implementation that is implemented using a\n * {@link CharacterList}.\n */\nexport class CharacterListStream implements CharacterReadStream, CharacterWriteStream\n{\n private readonly list: CharacterList;\n\n private constructor()\n {\n this.list = CharacterList.create();\n }\n\n public static create(initialValues?: JavascriptIterable<string>): CharacterListStream\n {\n const result: CharacterListStream = new CharacterListStream();\n if (initialValues)\n {\n result.writeCharacters(initialValues).await();\n }\n return result;\n }\n\n public writeCharacters(characters: JavascriptIterable<string>, startIndex?: number, length?: number): SyncResult<number>\n {\n PreCondition.assertNotUndefinedAndNotNull(characters, \"characters\");\n\n const characterString: string = isString(characters) ? characters : join(\"\", characters);\n if (isUndefinedOrNull(startIndex))\n {\n startIndex = 0;\n }\n if (isUndefinedOrNull(length))\n {\n length = characterString.length - startIndex;\n }\n\n PreCondition.assertInsertIndex(startIndex, characterString.length, \"startIndex\");\n PreCondition.assertBetween(0, length, characterString.length - startIndex, \"length\");\n\n this.list.addAll(characterString.slice(startIndex, length + startIndex));\n\n return SyncResult.value(length);\n }\n\n\n public writeString(text: string): AsyncResult<number>\n {\n this.list.addAll(text);\n\n return SyncResult.value(text.length);\n }\n\n public writeLine(text?: string): AsyncResult<number>\n {\n return CharacterWriteStream.writeLine(this, text);\n }\n\n /**\n * Get the number of characters that are available to be read.\n */\n public getAvailableCharacterCount(): number\n {\n return this.list.getCount().await();\n }\n\n public readCharacter(): AsyncResult<string>\n {\n return !this.list.any().await()\n ? SyncResult.error(new EmptyError())\n : SyncResult.value(this.list.removeFirst().await());\n }\n \n public readCharacters(count: number): SyncResult<string>;\n public readCharacters(output: string[], startIndex?: number, count?: number): SyncResult<number>;\n readCharacters(countOrOutput: number | string[], startIndex?: number, count?: number): SyncResult<number> | SyncResult<string>\n {\n let result: SyncResult<number> | SyncResult<string>;\n if (isNumber(countOrOutput))\n {\n PreCondition.assertGreaterThanOrEqualTo(countOrOutput, 0, \"count\");\n\n if (!this.list.any().await())\n {\n result = SyncResult.error<string>(new EmptyError());\n }\n else\n {\n const bytesReadCount: number = Math.min(countOrOutput, this.list.getCount().await());\n let output: string = \"\";\n for (let i = 0; i < bytesReadCount; i++)\n {\n output += this.list.removeFirst().await();\n }\n result = SyncResult.value(output);\n }\n }\n else\n {\n PreCondition.assertNotUndefinedAndNotNull(countOrOutput, \"output\");\n\n if (isUndefinedOrNull(startIndex))\n {\n startIndex = 0;\n }\n if (isUndefinedOrNull(count))\n {\n count = countOrOutput.length - startIndex;\n }\n\n PreCondition.assertInsertIndex(startIndex, countOrOutput.length, \"startIndex\");\n PreCondition.assertBetween(0, count, countOrOutput.length - startIndex, \"count\");\n\n if (!this.list.any().await())\n {\n result = SyncResult.error<number>(new EmptyError());\n }\n else\n {\n const bytesReadCount: number = Math.min(count, this.list.getCount().await());\n for (let i = 0; i < bytesReadCount; i++)\n {\n countOrOutput[startIndex + i] = this.list.removeFirst().await();\n }\n result = SyncResult.value(bytesReadCount);\n }\n }\n return result;\n }\n\n public readUntil(searchString: string): AsyncResult<string>\n {\n return CharacterReadStream.readUntil(this, searchString);\n }\n\n public readLine(): AsyncResult<string>\n {\n return CharacterReadStream.readLine(this);\n }\n}","import * as luxon from \"luxon\";\nimport { DateTime } from \"./dateTime\";\n\nconst pctTimeZone: string = \"America/Los_Angeles\";\n\nexport class LuxonDateTime implements DateTime\n{\n private readonly dateTime: luxon.DateTime;\n\n private constructor(dateTime: luxon.DateTime)\n {\n this.dateTime = dateTime;\n }\n\n private static create(dateTime: luxon.DateTime): LuxonDateTime\n {\n return new LuxonDateTime(dateTime);\n }\n\n public static parse(text: string): LuxonDateTime\n {\n return LuxonDateTime.create(luxon.DateTime.fromISO(text, { zone: pctTimeZone }));\n }\n\n public static now(): LuxonDateTime\n {\n return LuxonDateTime.create(luxon.DateTime.now().setZone(pctTimeZone));\n }\n\n public getYear(): number\n {\n return this.dateTime.year;\n }\n\n public getMonth(): number\n {\n return this.dateTime.month;\n }\n\n public getDay(): number\n {\n return this.dateTime.day;\n }\n\n public getHour(): number\n {\n return this.dateTime.hour;\n }\n\n public getMinute(): number\n {\n return this.dateTime.minute;\n }\n\n public getSecond(): number\n {\n return this.dateTime.second;\n }\n\n public addDays(days: number): LuxonDateTime\n {\n return LuxonDateTime.create(this.dateTime.plus({ days: days }));\n }\n\n public toString(): string\n {\n return this.dateTime.toISO()!;\n }\n\n public toDateString(): string\n {\n return this.dateTime.toISODate()!;\n }\n\n public compareTo(dateTime: DateTime, compareTimes: boolean): number\n {\n return DateTime.compareTo(this, dateTime, compareTimes);\n }\n\n public lessThan(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.lessThan(this, dateTime, compareTimes);\n }\n\n public lessThanOrEqualTo(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.lessThanOrEqualTo(this, dateTime, compareTimes);\n }\n\n public equals(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.equals(this, dateTime, compareTimes);\n }\n\n public greaterThanOrEqualTo(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.greaterThanOrEqualTo(this, dateTime, compareTimes);\n }\n\n public greaterThan(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.greaterThan(this, dateTime, compareTimes);\n }\n\n public get debug(): string\n {\n return DateTime.debug(this);\n }\n}","import { LuxonDateTime } from \"./luxonDateTime\";\n\nexport abstract class DateTime\n{\n public static parse(text: string): DateTime\n {\n return LuxonDateTime.parse(text);\n }\n\n public static now(): DateTime\n {\n return LuxonDateTime.now();\n }\n\n public abstract getYear(): number;\n\n public abstract getMonth(): number;\n\n public abstract getDay(): number;\n\n public abstract getHour(): number;\n\n public abstract getMinute(): number;\n\n public abstract getSecond(): number;\n\n public abstract addDays(days: number): DateTime;\n\n /**\n * Compare this {@link DateTime} to the provided {@link DateTime}. If this {@link DateTime} is\n * less than the provided {@link DateTime}, then a negative number will be returned, 0 if\n * they're equal, or a positive number if this {@link DateTime} is greater than the provided\n * {@link DateTime}.\n * @param dateTime The {@link DateTime} to compare to this {@link DateTime}.\n */\n public compareTo(dateTime: DateTime, compareTimes: boolean): number\n {\n return DateTime.compareTo(this, dateTime, compareTimes);\n }\n\n public static compareTo(left: DateTime, right: DateTime, compareTimes: boolean): number\n {\n let result: number = left.getYear() - right.getYear();\n if (result === 0)\n {\n result = left.getMonth() - right.getMonth();\n if (result === 0)\n {\n result = left.getDay() - right.getDay();\n if (compareTimes && result === 0)\n {\n result = left.getHour() - right.getHour();\n if (result === 0)\n {\n result = left.getMinute() - right.getMinute();\n if (result === 0)\n {\n result = left.getSecond(); - right.getSecond();\n }\n }\n }\n }\n }\n return result;\n }\n\n public lessThan(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.lessThan(this, dateTime, compareTimes);\n }\n\n public static lessThan(left: DateTime, right: DateTime, compareTimes: boolean): boolean\n {\n return left.compareTo(right, compareTimes) < 0;\n }\n\n public lessThanOrEqualTo(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.lessThanOrEqualTo(this, dateTime, compareTimes);\n }\n\n public static lessThanOrEqualTo(left: DateTime, right: DateTime, compareTimes: boolean): boolean\n {\n return left.compareTo(right, compareTimes) <= 0;\n }\n\n public equals(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.equals(this, dateTime, compareTimes);\n }\n\n public static equals(left: DateTime, right: DateTime, compareTimes: boolean): boolean\n {\n return left.compareTo(right, compareTimes) === 0;\n }\n\n public greaterThanOrEqualTo(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.greaterThanOrEqualTo(this, dateTime, compareTimes);\n }\n\n public static greaterThanOrEqualTo(left: DateTime, right: DateTime, compareTimes: boolean): boolean\n {\n return left.compareTo(right, compareTimes) >= 0;\n }\n\n public greaterThan(dateTime: DateTime, compareTimes: boolean): boolean\n {\n return DateTime.greaterThan(this, dateTime, compareTimes);\n }\n\n public static greaterThan(left: DateTime, right: DateTime, compareTimes: boolean): boolean\n {\n return left.compareTo(right, compareTimes) > 0;\n }\n\n public get debug(): string\n {\n return DateTime.debug(this);\n }\n\n public static debug(dateTime: DateTime): string\n {\n return dateTime.toString();\n }\n\n public abstract toString(): string;\n\n public abstract toDateString(): string;\n}","import { EmptyError } from \"./emptyError\";\nimport { EqualFunctions } from \"./equalFunctions\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { Stack } from \"./stack\";\nimport { SyncResult } from \"./syncResult\";\n\nexport class ListStack<T> implements Stack<T>\n{\n private readonly list: List<T>;\n\n private constructor(list?: List<T>)\n {\n this.list = list ?? List.create();\n }\n\n public static create<T>(list?: List<T>): ListStack<T>\n {\n return new ListStack<T>(list);\n }\n\n public any(): SyncResult<boolean>\n {\n return this.list.any();\n }\n\n public add(value: T): SyncResult<void>\n {\n return SyncResult.create(() =>\n {\n this.list.add(value);\n });\n }\n\n public addAll(values: JavascriptIterable<T>): SyncResult<void>\n {\n PreCondition.assertNotUndefinedAndNotNull(values, \"values\");\n\n return SyncResult.create(() =>\n {\n this.list.addAll(values);\n });\n }\n\n public remove(): SyncResult<T>\n {\n return SyncResult.create(() =>\n {\n if (!this.any().await())\n {\n throw new EmptyError();\n }\n return this.list.removeLast().await();\n });\n }\n\n public contains(value: T, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return this.list.contains(value, equalFunctions);\n }\n}","import { EqualFunctions } from \"./equalFunctions\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { ListStack } from \"./listStack\";\nimport { AsyncResult } from \"./asyncResult\";\n\n/**\n * A data structure that stores values in a first-in-last-out order.\n */\nexport abstract class Stack<T>\n{\n /**\n * Create an instance of the default {@link Stack} implementation.\n * @returns A new {@link Stack} object.\n */\n public static create<T>(): ListStack<T>\n {\n return ListStack.create();\n }\n\n /**\n * Get whether there are any values in this {@link Stack}.\n */\n public abstract any(): AsyncResult<boolean>;\n\n /**\n * Push the provided value onto the top of this {@link Stack}.\n * @param value The value to push on the top of this {@link Stack}.\n */\n public abstract add(value: T): AsyncResult<void>;\n\n /**\n * Push the provided values onto the top of this {@link Stack}.\n * @param values The values to push onto this {@link Stack}.\n */\n public abstract addAll(values: JavascriptIterable<T>): AsyncResult<void>;\n\n /**\n * Remove the top value off of this {@link Stack}.\n */\n public abstract remove(): AsyncResult<T>;\n\n /**\n * Get whether this {@link Stack} contains the provided value.\n * @param value The value to look for.\n * @param equalFunctions The functions to use to compare values.\n */\n public abstract contains(value: T, equalFunctions?: EqualFunctions): AsyncResult<boolean>;\n}","import { JavascriptIterable, JavascriptIterator } from \"./javascript\";\nimport { List } from \"./list\";\nimport { ListStack } from \"./listStack\";\nimport { PreCondition } from \"./preCondition\";\nimport { SearchControl } from \"./searchControl\";\nimport { Stack } from \"./stack\";\nimport { Set } from \"./set\";\nimport { Iterator } from \"./iterator\";\nimport { SyncResult } from \"./syncResult\";\nimport { isJavascriptIterable, Type } from \"./types\";\n\nclass SearchBreakError extends Error\n{\n}\n\nclass DepthFirstSearch<TVisit,TResult> implements SearchControl<TVisit,TResult>, Iterator<TResult>\n{\n private readonly searchAction: (searchControl: SearchControl<TVisit,TResult>, visiting: TVisit) => void;\n private readonly toVisit: ListStack<TVisit>;\n private readonly visited: Set<TVisit>;\n private readonly results: List<TResult>;\n private started: boolean;\n private done: boolean;\n\n private constructor(initialToVisit: JavascriptIterable<TVisit>, searchAction: (searchControl: SearchControl<TVisit,TResult>, visiting: TVisit) => void)\n {\n PreCondition.assertNotEmpty(initialToVisit, \"initialToVisit\");\n PreCondition.assertNotUndefinedAndNotNull(searchAction, \"searchAction\");\n\n this.searchAction = searchAction;\n this.toVisit = Stack.create();\n this.toVisit.addAll(initialToVisit).await();\n this.visited = Set.create();\n this.results = List.create();\n this.started = false;\n this.done = false;\n }\n\n public static create<TVisit,TResult>(initialToVisit: JavascriptIterable<TVisit>, searchAction: (searchControl: SearchControl<TVisit,TResult>, visiting: TVisit) => void): DepthFirstSearch<TVisit,TResult>\n {\n return new DepthFirstSearch(initialToVisit, searchAction);\n }\n\n public addToVisit(toVisit: TVisit): void\n {\n if (!this.hasVisited(toVisit))\n {\n this.toVisit.add(toVisit);\n }\n }\n\n public addAllToVisit(values: JavascriptIterable<TVisit>): void\n {\n for (const value of values)\n {\n this.addToVisit(value);\n }\n }\n\n public hasVisited(toVisit: TVisit): boolean\n {\n return this.visited.contains(toVisit).await();\n }\n\n public addResult(result: TResult): void\n {\n this.results.add(result);\n }\n\n public addResults(results: JavascriptIterable<TResult>): void\n {\n this.results.addAll(results);\n }\n\n public break(): never\n {\n throw new SearchBreakError();\n }\n\n public next(): SyncResult<boolean>\n {\n return SyncResult.create(() =>\n {\n let result: boolean = false;\n if (!this.done)\n {\n if (!this.started)\n {\n this.started = true;\n }\n else\n {\n this.results.removeFirst().await();\n }\n \n while (!this.hasCurrent() && this.toVisit.any().await())\n {\n const current: TVisit = this.toVisit.remove().await();\n this.visited.add(current);\n this.searchAction(this, current);\n }\n\n result = this.hasCurrent();\n this.done = !result;\n }\n return result;\n });\n }\n\n public hasStarted(): boolean\n {\n return this.started;\n }\n\n public hasCurrent(): boolean\n {\n return this.results.any().await();\n }\n\n public getCurrent(): TResult\n {\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\n\n return this.results.first().await();\n }\n\n public start(): SyncResult<this>\n {\n return Iterator.start<TResult,this>(this);\n }\n\n public takeCurrent(): SyncResult<TResult>\n {\n return Iterator.takeCurrent(this);\n }\n\n public any(): SyncResult<boolean>\n {\n return Iterator.any(this);\n }\n\n public getCount(): SyncResult<number>\n {\n return Iterator.getCount(this);\n }\n\n public toArray(): SyncResult<TResult[]>\n {\n return Iterator.toArray(this);\n }\n\n public concatenate(...toConcatenate: JavascriptIterable<TResult>[]): Iterator<TResult>\n {\n return Iterator.concatenate(this, ...toConcatenate);\n }\n\n public where(condition: (value: TResult) => (boolean | SyncResult<boolean>)): Iterator<TResult>\n {\n return Iterator.where(this, condition);\n }\n\n public map<TOutput>(mapping: (value: TResult) => TOutput | SyncResult<TOutput>): Iterator<TOutput>\n {\n return Iterator.map(this, mapping);\n }\n\n public flatMap<TOutput>(mapping: (value: TResult) => JavascriptIterable<TOutput>): Iterator<TOutput>\n {\n return Iterator.flatMap(this, mapping);\n }\n\n public whereInstanceOf<U extends TResult>(typeCheck: (value: TResult) => value is U): Iterator<U>\n {\n return Iterator.whereInstanceOf(this, typeCheck);\n }\n\n public whereInstanceOfType<U extends TResult>(type: Type<U>): Iterator<U>\n {\n return Iterator.whereInstanceOfType(this, type);\n }\n\n public first(condition?: ((value: TResult) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<TResult>\n {\n return Iterator.first(this, condition);\n }\n\n public last(condition?: ((value: TResult) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<TResult>\n {\n return Iterator.last(this, condition);\n }\n\n public take(maximumToTake: number): Iterator<TResult>\n {\n return Iterator.take(this, maximumToTake);\n }\n\n public skip(maximumToSkip: number): Iterator<TResult>\n {\n return Iterator.skip(this, maximumToSkip);\n }\n\n public [Symbol.iterator](): JavascriptIterator<TResult>\n {\n return Iterator[Symbol.iterator](this);\n }\n}\n\nexport function depthFirstSearch<TVisit,TResult>(initialToVisit: JavascriptIterable<TVisit>, searchAction: (searchControl: SearchControl<TVisit,TResult>, current: TVisit) => void): Iterator<TResult>;\nexport function depthFirstSearch<TVisit,TResult>(parameters: { initialToVisit: JavascriptIterable<TVisit>, searchAction: (searchControl: SearchControl<TVisit,TResult>, current: TVisit) => void }): Iterator<TResult>;\nexport function depthFirstSearch<TVisit,TResult>(parametersOrInitialToVisit: JavascriptIterable<TVisit> | { initialToVisit: JavascriptIterable<TVisit>, searchAction: (searchControl: SearchControl<TVisit,TResult>, current: TVisit) => void }, searchAction?: (searchControl: SearchControl<TVisit,TResult>, current: TVisit) => void): Iterator<TResult>\n{\n let initialToVisit: JavascriptIterable<TVisit>;\n if (isJavascriptIterable(parametersOrInitialToVisit))\n {\n initialToVisit = parametersOrInitialToVisit;\n searchAction = searchAction!;\n }\n else\n {\n PreCondition.assertNotUndefinedAndNotNull(parametersOrInitialToVisit, \"parameters\");\n\n initialToVisit = parametersOrInitialToVisit.initialToVisit;\n searchAction = parametersOrInitialToVisit.searchAction;\n }\n\n PreCondition.assertNotUndefinedAndNotNull(initialToVisit, \"initialToVisit\");\n PreCondition.assertNotUndefinedAndNotNull(searchAction, \"searchAction\");\n\n return DepthFirstSearch.create(initialToVisit, searchAction);\n}","import { SyncDisposable } from \"./basicDisposable\";\r\nimport { AsyncResult } from \"./asyncResult\";\r\n\r\n/**\r\n * An object that can be disposed.\r\n */\r\nexport abstract class Disposable\r\n{\r\n /**\r\n * Create a new {@link Disposable} that will invoke the provided {@link Function} when it is\r\n * disposed.\r\n * @param disposedFunction The function to invoke when the returned {@link Disposable} is\r\n * disposed.\r\n */\r\n public static create(disposedFunction: () => void): SyncDisposable\r\n {\r\n return SyncDisposable.create(disposedFunction);\r\n }\r\n\r\n /**\r\n * Synchronously clean up any resources that this object is using. This function will return\r\n * true if this invocation disposed of the object. Subsequent calls to dispose() will return\r\n * false.\r\n */\r\n public abstract dispose(): AsyncResult<boolean>;\r\n\r\n /**\r\n * Get whether this {@link Disposable} has been disposed yet.\r\n */\r\n public abstract isDisposed(): boolean;\r\n}","import { Iterator } from \"./iterator\";\nimport { JavascriptIterable, JavascriptIterator } from \"./javascript\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { SyncResult } from \"./syncResult\";\nimport { Type } from \"./types\";\n\n/**\n * A control that can be used to interact with a {@link Generator} while it is generating values.\n */\nexport interface GeneratorControl<T>\n{\n /**\n * Add the provided value to the list of values that the {@link Generator} will return.\n * @param value The value to add to the {@link Generator}'s list of values.\n */\n addValue(value: T): void;\n\n /**\n * Add the provided values to the list of values that the {@link Generator} will return.\n * @param returnValues The values to add to the {@link Generator}'s list of values.\n */\n addValues(returnValues: JavascriptIterable<T>): void;\n\n /**\n * Get whether the {@link Generator} currently has a value.\n */\n hasCurrent(): boolean;\n\n /**\n * Get the current value of the {@link Generator}.\n */\n getCurrent(): T;\n}\n\nclass InnerGeneratorControl<T> implements GeneratorControl<T>\n{\n private readonly returnValues: List<T>;\n private done: boolean;\n\n private constructor()\n {\n this.returnValues = List.create();\n this.done = false;\n }\n\n public static create<T>(): InnerGeneratorControl<T>\n {\n return new InnerGeneratorControl<T>();\n }\n\n public addValue(returnValue: T): void\n {\n PreCondition.assertFalse(this.isDone(), \"this.isDone()\");\n\n this.returnValues.add(returnValue);\n }\n\n public addValues(returnValues: JavascriptIterable<T>): void\n {\n PreCondition.assertFalse(this.isDone(), \"this.isDone()\");\n\n this.returnValues.addAll(returnValues);\n }\n\n public hasCurrent(): boolean\n {\n return this.returnValues.any().await();\n }\n\n public getCurrent(): T\n {\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\n PreCondition.assertFalse(this.isDone(), \"this.isDone()\");\n\n return this.returnValues.first().await();\n }\n\n public removeCurrent(): void\n {\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\n PreCondition.assertFalse(this.isDone(), \"this.isDone()\");\n\n this.returnValues.removeFirst().await();\n }\n\n public setDone(): void\n {\n PreCondition.assertFalse(this.hasCurrent(), \"this.hasCurrent()\");\n PreCondition.assertFalse(this.isDone(), \"this.isDone()\");\n\n this.done = true;\n }\n\n public isDone(): boolean\n {\n return this.done;\n }\n}\n\nexport class Generator<T> implements Iterator<T>\n{\n private readonly control: InnerGeneratorControl<T>;\n private readonly generatorAction: (control: GeneratorControl<T>) => (void | T);\n private started: boolean;\n\n private constructor(generatorAction: (control: GeneratorControl<T>) => (void | T))\n {\n PreCondition.assertNotUndefinedAndNotNull(generatorAction, \"generatorAction\");\n\n this.control = InnerGeneratorControl.create();\n this.generatorAction = generatorAction;\n this.started = false;\n }\n\n public static create<T>(generatorAction: (control: GeneratorControl<T>) => (void | T)): Generator<T>\n {\n return new Generator<T>(generatorAction);\n }\n\n public next(): SyncResult<boolean>\n {\n return SyncResult.create(() =>\n {\n if (!this.control.isDone())\n {\n if (!this.hasStarted())\n {\n this.started = true;\n }\n else\n {\n this.control.removeCurrent();\n }\n\n if (!this.control.hasCurrent())\n {\n const actionResult: void | T = this.generatorAction(this.control);\n if (actionResult !== undefined)\n {\n this.control.addValue(actionResult);\n }\n\n if (!this.control.hasCurrent())\n {\n this.control.setDone();\n }\n }\n }\n\n return this.hasCurrent();\n });\n }\n\n public hasStarted(): boolean\n {\n return this.started;\n }\n\n public hasCurrent(): boolean\n {\n return this.control.hasCurrent();\n }\n\n public getCurrent(): T\n {\n PreCondition.assertTrue(this.hasCurrent(), \"this.hasCurrent()\");\n\n return this.control.getCurrent();\n }\n\n public start(): SyncResult<this>\n {\n return Iterator.start<T, this>(this);\n }\n\n public takeCurrent(): SyncResult<T>\n {\n return Iterator.takeCurrent(this);\n }\n\n public any(): SyncResult<boolean>\n {\n return Iterator.any(this);\n }\n\n public getCount(): SyncResult<number>\n {\n return Iterator.getCount(this);\n }\n\n public toArray(): SyncResult<T[]>\n {\n return Iterator.toArray(this);\n }\n\n public concatenate(...toConcatenate: JavascriptIterable<T>[]): Iterator<T>\n {\n return Iterator.concatenate(this, ...toConcatenate);\n }\n\n public where(condition: (value: T) => (boolean | SyncResult<boolean>)): Iterator<T>\n {\n return Iterator.where(this, condition);\n }\n\n public map<TOutput>(mapping: (value: T) => TOutput | SyncResult<TOutput>): Iterator<TOutput>\n {\n return Iterator.map(this, mapping);\n }\n\n public flatMap<TOutput>(mapping: (value: T) => JavascriptIterable<TOutput>): Iterator<TOutput>\n {\n return Iterator.flatMap(this, mapping);\n }\n\n public whereInstanceOf<U extends T>(typeCheck: (value: T) => value is U): Iterator<U>\n {\n return Iterator.whereInstanceOf(this, typeCheck);\n }\n\n public whereInstanceOfType<U extends T>(type: Type<U>): Iterator<U>\n {\n return Iterator.whereInstanceOfType(this, type);\n }\n\n public first(condition?: ((value: T) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<T>\n {\n return Iterator.first(this, condition);\n }\n\n public last(condition?: ((value: T) => (boolean | SyncResult<boolean>)) | undefined): SyncResult<T>\n {\n return Iterator.last(this, condition);\n }\n\n public take(maximumToTake: number): Iterator<T>\n {\n return Iterator.take(this, maximumToTake);\n }\n\n public skip(maximumToSkip: number): Iterator<T>\n {\n return Iterator.skip(this, maximumToSkip);\n }\n\n public [Symbol.iterator](): JavascriptIterator<T>\n {\n return Iterator[Symbol.iterator](this);\n }\n}","import { FetchHttpClient } from \"./fetchHttpClient\";\r\nimport { HttpOutgoingRequest } from \"./httpOutgoingRequest\";\r\nimport { HttpIncomingResponse } from \"./httpIncomingResponse\";\r\nimport { HttpMethod } from \"./httpMethod\";\r\nimport { AsyncResult } from \"./asyncResult\";\r\n\r\n/**\r\n * An object that can make HTTP network requests.\r\n */\r\nexport abstract class HttpClient\r\n{\r\n public static create(): HttpClient\r\n {\r\n return FetchHttpClient.create();\r\n }\r\n\r\n /**\r\n * Send the provided {@link HttpOutgoingRequest}.\r\n * @param request The {@link HttpOutgoingRequest} to send.\r\n */\r\n public abstract sendRequest(request: HttpOutgoingRequest): AsyncResult<HttpIncomingResponse>;\r\n\r\n /**\r\n * Send a GET {@link HttpOutgoingRequest} to the provided URL.\r\n * @param url The URL to send the GET {@link HttpOutgoingRequest} to.\r\n */\r\n public sendGetRequest(url: string): AsyncResult<HttpIncomingResponse>\r\n {\r\n return HttpClient.sendGetRequest(this, url);\r\n }\r\n\r\n public static sendGetRequest(httpClient: HttpClient, url: string): AsyncResult<HttpIncomingResponse>\r\n {\r\n return httpClient.sendRequest(HttpOutgoingRequest.create(HttpMethod.GET, url));\r\n }\r\n}","import { CharacterWriteStream } from \"./characterWriteStream\";\r\nimport { PreCondition } from \"./preCondition\";\r\nimport { getLength } from \"./strings\";\r\nimport { SyncResult } from \"./syncResult\";\r\n\r\nexport class InMemoryCharacterWriteStream extends CharacterWriteStream\r\n{\r\n private writtenText: string;\r\n private newlineSequence: string;\r\n\r\n private constructor()\r\n {\r\n super();\r\n\r\n this.writtenText = \"\";\r\n this.newlineSequence = \"\\n\";\r\n }\r\n\r\n public static create(): InMemoryCharacterWriteStream\r\n {\r\n return new InMemoryCharacterWriteStream();\r\n }\r\n\r\n public getNewlineSequence(): string\r\n {\r\n return this.newlineSequence;\r\n }\r\n\r\n public setNewlineSequence(newlineSequence: string): this\r\n {\r\n PreCondition.assertNotUndefinedAndNotNull(newlineSequence, \"newlineSequence\");\r\n\r\n this.newlineSequence = newlineSequence;\r\n\r\n return this;\r\n }\r\n\r\n public getWrittenText(): string\r\n {\r\n return this.writtenText;\r\n }\r\n\r\n public clearWrittenText(): this\r\n {\r\n this.writtenText = \"\";\r\n\r\n return this;\r\n }\r\n\r\n public writeString(text: string): SyncResult<number>\r\n {\r\n return SyncResult.create(() =>\r\n {\r\n if (text)\r\n {\r\n this.writtenText += text;\r\n }\r\n return getLength(text);\r\n });\r\n }\r\n\r\n public writeLine(text?: string): SyncResult<number>\r\n {\r\n return SyncResult.create(() =>\r\n {\r\n let result: number = 0;\r\n if (text)\r\n {\r\n result += this.writeString(text).await();\r\n }\r\n if (this.newlineSequence)\r\n {\r\n result += this.writeString(this.newlineSequence).await();\r\n }\r\n return result;\r\n });\r\n }\r\n}","import { EmptyError } from \"./emptyError\";\nimport { EqualFunctions } from \"./equalFunctions\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { Queue } from \"./queue\";\nimport { SyncResult } from \"./syncResult\";\n\nexport class ListQueue<T> implements Queue<T>\n{\n private readonly list: List<T>;\n\n private constructor(list?: List<T>)\n {\n this.list = list ?? List.create();\n }\n\n public static create<T>(list?: List<T>): ListQueue<T>\n {\n return new ListQueue<T>(list);\n }\n\n public any(): SyncResult<boolean>\n {\n return this.list.any();\n }\n\n public add(value: T): SyncResult<void>\n {\n return SyncResult.create(() =>\n {\n this.list.add(value);\n });\n }\n\n public addAll(values: JavascriptIterable<T>): SyncResult<void>\n {\n PreCondition.assertNotUndefinedAndNotNull(values, \"values\");\n\n return SyncResult.create(() =>\n {\n this.list.addAll(values);\n });\n }\n\n public remove(): SyncResult<T>\n {\n return SyncResult.create(() =>\n {\n if (!this.any().await())\n {\n throw new EmptyError();\n }\n return this.list.removeLast().await();\n });\n }\n\n public contains(value: T, equalFunctions?: EqualFunctions): SyncResult<boolean>\n {\n return this.list.contains(value, equalFunctions);\n }\n}","import { Iterator } from \"./iterator\";\nimport { PreCondition } from \"./preCondition\";\nimport { Set } from \"./set\";\n\nexport class Node<T>\n{\n private readonly value: T;\n private connectedNodes: Set<Node<T>>;\n\n private constructor(value: T)\n {\n this.value = value;\n this.connectedNodes = Set.create();\n }\n\n public static create<T>(value: T): Node<T>\n {\n return new Node<T>(value);\n }\n\n public getValue(): T\n {\n return this.value;\n }\n\n public iterateConnectedNodes(): Iterator<Node<T>>\n {\n return this.connectedNodes.iterate();\n }\n\n public addConnectedNode(node: Node<T>): void\n {\n PreCondition.assertNotUndefinedAndNotNull(node, \"node\");\n\n this.connectedNodes.add(node);\n }\n}","import { EqualFunctions } from \"./equalFunctions\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { ListQueue } from \"./listQueue\";\nimport { ListStack } from \"./listStack\";\nimport { AsyncResult } from \"./asyncResult\";\n\n/**\n * A data structure that stores values in a first-in-first-out order.\n */\nexport abstract class Queue<T>\n{\n /**\n * Create an instance of the default {@link Queue} implementation.\n * @returns A new {@link Queue} object.\n */\n public static create<T>(): ListQueue<T>\n {\n return ListQueue.create();\n }\n\n /**\n * Get whether there are any values in this {@link Stack}.\n */\n public abstract any(): AsyncResult<boolean>;\n\n /**\n * Add the provided value onto the end of this {@link Queue}.\n * @param value The value to add to the end of this {@link Queue}.\n */\n public abstract add(value: T): AsyncResult<void>;\n\n /**\n * Add the provided values to the end of this {@link Queue}.\n * @param values The values to add to the end of this {@link Queue}.\n */\n public abstract addAll(values: JavascriptIterable<T>): AsyncResult<void>;\n\n /**\n * Remove the next value off of this {@link Queue}.\n */\n public abstract remove(): AsyncResult<T>;\n\n /**\n * Get whether this {@link Stack} contains the provided value.\n * @param value The value to look for.\n * @param equalFunctions The functions to use to compare values.\n */\n public abstract contains(value: T, equalFunctions?: EqualFunctions): AsyncResult<boolean>;\n}","import { PromiseAsyncResult } from \"./promiseAsyncResult\";\nimport { DateTime } from \"./dateTime\";\nimport { HttpClient } from \"./httpClient\";\nimport { HttpIncomingResponse } from \"./httpIncomingResponse\";\nimport { HttpOutgoingRequest } from \"./httpOutgoingRequest\";\nimport { Iterable } from \"./iterable\";\nimport { List } from \"./list\";\nimport { PreCondition } from \"./preCondition\";\nimport { AsyncResult } from \"./asyncResult\";\n\nexport interface RecreationDotGovDivisionDayAvailability\n{\n readonly date: DateTime;\n\n readonly walkup: boolean;\n\n readonly reservationsRemaining: number;\n\n readonly totalSpots: number;\n}\n\nexport interface RecreationDotGovDivisionAvailabilityJson\n{\n readonly bools: { [date: string]: boolean };\n\n readonly rules: {\n readonly name: string;\n readonly value: number;\n }[];\n\n readonly quota_type_maps: {\n readonly ConstantQuotaUsageDaily?: {\n [date: string]: {\n readonly is_hidden: boolean;\n readonly remaining: number;\n readonly season_type: string;\n readonly show_walkup: boolean;\n readonly total: number;\n };\n };\n readonly QuotaUsageByMemberDaily?: {\n [date: string]: {\n readonly is_hidden: boolean;\n readonly remaining: number;\n readonly season_type: string;\n readonly show_walkup: boolean;\n readonly total: number;\n };\n };\n };\n}\n\nexport class RecreationDotGovDivisionAvailability\n{\n public readonly json: RecreationDotGovDivisionAvailabilityJson;\n\n public readonly minimumGroupSize?: number;\n public readonly maximumGroupSize?: number;\n public readonly dayAvailabilities: Iterable<RecreationDotGovDivisionDayAvailability>;\n\n private constructor(json: RecreationDotGovDivisionAvailabilityJson)\n {\n PreCondition.assertNotUndefinedAndNotNull(json, \"json\");\n\n this.json = json;\n\n const minGroupSize: string = \"MinGroupSize\".toLowerCase();\n const maxGroupSize: string = \"MaxGroupSize\".toLowerCase();\n for (const rule of json.rules)\n {\n switch (rule.name.toLowerCase())\n {\n case minGroupSize:\n this.minimumGroupSize = rule.value;\n break;\n\n case maxGroupSize:\n this.maximumGroupSize = rule.value;\n break;\n }\n }\n\n const dayAvailabilities = List.create<RecreationDotGovDivisionDayAvailability>();\n const quotaUsageByMemberDaily = json.quota_type_maps?.QuotaUsageByMemberDaily;\n if (quotaUsageByMemberDaily)\n {\n for (const quotaUsage of Object.entries(quotaUsageByMemberDaily))\n {\n const dateString: string = quotaUsage[0];\n\n const usageData = quotaUsage[1];\n\n let walkup: boolean = false;\n let reservationsRemaining: number = 0;\n const boolsEntry: boolean = json.bools[dateString];\n if (boolsEntry)\n {\n walkup = usageData.show_walkup;\n reservationsRemaining = usageData.remaining;\n }\n\n dayAvailabilities.add({\n date: DateTime.parse(dateString),\n totalSpots: usageData.total,\n walkup,\n reservationsRemaining,\n });\n }\n }\n this.dayAvailabilities = dayAvailabilities;\n }\n\n public static create(json: RecreationDotGovDivisionAvailabilityJson): RecreationDotGovDivisionAvailability\n {\n return new RecreationDotGovDivisionAvailability(json);\n }\n}\n\ninterface RecreationDotGovPayloadResponse<T>\n{\n readonly payload: T;\n}\n\nexport interface RecreationDotGovDivisionJson\n{\n readonly id: string;\n\n readonly name: string;\n\n readonly type: string;\n\n readonly district: string;\n}\n\nexport interface RecreationDotGovPermitItineraryJson\n{\n readonly id: string;\n\n readonly name: string;\n\n readonly divisions: { [divisionId: number]: RecreationDotGovDivisionJson };\n}\n\nexport class RecreationDotGovError extends Error\n{\n public constructor(message: string)\n {\n super(message);\n }\n}\n\nexport interface RecreationDotGovErrorResponse\n{\n readonly error: string;\n}\n\nexport class RecreationDotGovClient implements HttpClient\n{\n private readonly httpClient: HttpClient;\n\n private constructor(httpClient: HttpClient)\n {\n PreCondition.assertNotUndefinedAndNotNull(httpClient, \"httpClient\");\n\n this.httpClient = httpClient;\n }\n\n public static create(httpClient: HttpClient): RecreationDotGovClient\n {\n return new RecreationDotGovClient(httpClient);\n }\n\n public sendRequest(request: HttpOutgoingRequest): AsyncResult<HttpIncomingResponse>\n {\n return this.httpClient.sendRequest(request);\n }\n\n public sendGetRequest(url: string): AsyncResult<HttpIncomingResponse>\n {\n return HttpClient.sendGetRequest(this, url);\n }\n\n public getPermitItinerary(permitItineraryId: string): PromiseAsyncResult<RecreationDotGovPermitItineraryJson>\n {\n PreCondition.assertNotEmpty(permitItineraryId, \"permitItineraryId\");\n\n return PromiseAsyncResult.create(async () =>\n {\n const response: HttpIncomingResponse = await this.sendGetRequest(`https://www.recreation.gov/api/permitcontent/${permitItineraryId}`);\n\n const responseBody: string = await response.getBody();\n\n const statusCode: number = response.getStatusCode();\n if (statusCode < 200 || 300 <= statusCode)\n {\n const responseBodyJson: RecreationDotGovErrorResponse = JSON.parse(responseBody);\n const errorMessage: string = responseBodyJson.error;\n switch (errorMessage.toLowerCase())\n {\n case \"permit not found\":\n throw new RecreationDotGovError(`No permit itinerary found for id: ${JSON.stringify(permitItineraryId)}`);\n \n default:\n throw new RecreationDotGovError(`Unrecognized error: ${JSON.stringify(errorMessage)}`);\n }\n }\n\n const responseBodyJson: RecreationDotGovPayloadResponse<RecreationDotGovPermitItineraryJson> = JSON.parse(responseBody);\n return responseBodyJson.payload;\n });\n }\n\n public getDivisionAvailability(permitItineraryId: string, divisionId: string, month: number, year: number, earlyAccessPermitLotteryId?: string): PromiseAsyncResult<RecreationDotGovDivisionAvailability>\n {\n PreCondition.assertNotEmpty(permitItineraryId, \"permitItineraryId\");\n PreCondition.assertNotEmpty(divisionId, \"divisionId\");\n PreCondition.assertBetween(1, month, 12, \"month\");\n\n return PromiseAsyncResult.create(async () =>\n {\n const url: string = earlyAccessPermitLotteryId\n ? `https://www.recreation.gov/api/permititinerary/${permitItineraryId}/division/${divisionId}/eapavailability/month/${earlyAccessPermitLotteryId}?month=${month}&year=${year}`\n : `https://www.recreation.gov/api/permititinerary/${permitItineraryId}/division/${divisionId}/availability/month?month=${month}&year=${year}`\n const response: HttpIncomingResponse = await this.sendGetRequest(url);\n\n let responseBody: string = await response.getBody();\n\n const statusCode: number = response.getStatusCode();\n if (statusCode < 200 || 300 <= statusCode)\n {\n const responseBodyJson: RecreationDotGovErrorResponse = JSON.parse(responseBody) as RecreationDotGovErrorResponse;\n const errorMessage: string = responseBodyJson.error;\n switch (errorMessage.toLowerCase())\n {\n case \"invalid permit id\":\n throw new RecreationDotGovError(`No permit itinerary found for id: ${JSON.stringify(permitItineraryId)}`);\n\n case \"request year is missing or invalid\":\n // Ignore this error and just return an empty availability.\n const emptyResponseBody: RecreationDotGovPayloadResponse<RecreationDotGovDivisionAvailabilityJson> = {\n payload: {\n bools: {},\n rules: [],\n quota_type_maps: {},\n },\n };\n responseBody = JSON.stringify(emptyResponseBody);\n break;\n \n default:\n throw new RecreationDotGovError(`Unrecognized error: ${JSON.stringify(errorMessage)}`);\n }\n }\n\n const responseBodyJson: RecreationDotGovPayloadResponse<RecreationDotGovDivisionAvailabilityJson> = JSON.parse(responseBody);\n return RecreationDotGovDivisionAvailability.create(responseBodyJson.payload);\n });\n }\n}","import { Comparer } from \"./comparer\";\r\nimport { Comparison } from \"./comparison\";\r\n\r\n/**\r\n * A {@link Comparer} that performs {@link string} comparisons.\r\n */\r\nexport class StringComparer extends Comparer<string>\r\n{\r\n protected constructor()\r\n {\r\n super();\r\n }\r\n\r\n public static create(): StringComparer\r\n {\r\n return new StringComparer();\r\n }\r\n\r\n public override compare(left: string, right: string): Comparison\r\n {\r\n return StringComparer.compare(left, right);\r\n }\r\n\r\n public static compare(left: string, right: string): Comparison\r\n {\r\n let result: Comparison | undefined = Comparer.compareSameUndefinedNull(left, right);\r\n if (result === undefined)\r\n {\r\n result = (left < right ? Comparison.LessThan : Comparison.GreaterThan);\r\n }\r\n return result;\r\n }\r\n}","import { DateTime } from \"./dateTime\";\nimport { HttpClient } from \"./httpClient\";\nimport { HttpIncomingResponse } from \"./httpIncomingResponse\";\nimport { HttpOutgoingRequest } from \"./httpOutgoingRequest\";\nimport { Iterable } from \"./iterable\";\nimport { PreCondition } from \"./preCondition\";\nimport { RecreationDotGovClient, RecreationDotGovDivisionAvailability, RecreationDotGovDivisionDayAvailability } from \"./recreationDotGovClient\";\nimport { AsyncResult } from \"./asyncResult\";\nimport { Map } from \"./map\";\nimport { List } from \"./list\";\nimport { JavascriptIterable } from \"./javascript\";\nimport { hasProperty, isNumber, isObject, isUndefinedOrNull } from \"./types\";\nimport { MutableMap } from \"./mutableMap\";\nimport { NotFoundError } from \"./notFoundError\";\nimport { Iterator } from \"./iterator\";\nimport { Stack } from \"./stack\";\nimport { ListStack } from \"./listStack\";\nimport { PromiseAsyncResult } from \"./promiseAsyncResult\";\nimport { SyncResult } from \"./syncResult\";\n\nexport interface WonderlandTrailLocation\n{\n readonly name: string;\n readonly trailhead: boolean;\n readonly foodCacheStorage: boolean;\n readonly divisionId: string;\n readonly groupSiteDivisionId: string;\n readonly latitude: number;\n readonly longitude: number;\n readonly elevationFeet: number;\n}\n\nexport function isWonderlandTrailLocation(value: unknown): value is WonderlandTrailLocation\n{\n return isObject(value) &&\n hasProperty(value, \"name\") &&\n hasProperty(value, \"trailhead\") &&\n hasProperty(value, \"foodCacheStorage\") &&\n hasProperty(value, \"divisionId\") &&\n hasProperty(value, \"groupSiteDivisionId\");\n}\n\nexport abstract class WonderlandTrailLocations\n{\n public static readonly graniteCreek: WonderlandTrailLocation = {\n name: \"Granite Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170009\",\n groupSiteDivisionId: \"46753170010\",\n latitude: 46.92058,\n longitude: -121.70800,\n elevationFeet: 5851,\n };\n\n public static readonly sunriseCamp: WonderlandTrailLocation = {\n name: \"Sunrise Camp\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170058\",\n groupSiteDivisionId: \"46753170059\",\n latitude: 46.91129,\n longitude: -121.66002,\n elevationFeet: 6258,\n };\n\n public static readonly sunriseVisitorCenter: WonderlandTrailLocation = {\n name: \"Sunrise Visitor Center\",\n trailhead: true,\n foodCacheStorage: true,\n divisionId: \"\",\n groupSiteDivisionId: \"\",\n latitude: 46.91448,\n longitude: -121.64337,\n elevationFeet: 6410,\n };\n\n public static readonly whiteRiver: WonderlandTrailLocation = {\n name: \"White River\",\n trailhead: true,\n foodCacheStorage: true,\n divisionId: \"46753170066\",\n groupSiteDivisionId: \"46753170067\",\n latitude: 46.90255,\n longitude: -121.63869,\n elevationFeet: 4229,\n };\n\n public static readonly fryingPanCreek: WonderlandTrailLocation = {\n name: \"Fryingpan Creek\",\n trailhead: true,\n foodCacheStorage: false,\n divisionId: \"\",\n groupSiteDivisionId: \"\",\n latitude: 46.88809,\n longitude: -121.61019,\n elevationFeet: 3835,\n };\n\n public static readonly summerland: WonderlandTrailLocation = {\n name: \"Summerland\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170056\",\n groupSiteDivisionId: \"46753170057\",\n latitude: 46.86616,\n longitude: -121.65843,\n elevationFeet: 5988,\n };\n\n public static readonly indianBar: WonderlandTrailLocation = {\n name: \"Indian Bar\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170046\",\n groupSiteDivisionId: \"46753170047\",\n latitude: 46.82593,\n longitude: -121.63942,\n elevationFeet: 5101,\n };\n\n public static readonly nickelCreek: WonderlandTrailLocation = {\n name: \"Nickel Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170051\",\n groupSiteDivisionId: \"46753170052\",\n latitude: 46.77204,\n longitude: -121.62402,\n elevationFeet: 3383,\n };\n\n public static readonly boxCanyon: WonderlandTrailLocation = {\n name: \"Box Canyon\",\n trailhead: true,\n foodCacheStorage: false,\n divisionId: \"\",\n groupSiteDivisionId: \"\",\n latitude: 46.76570,\n longitude: -121.63517,\n elevationFeet: 3025,\n };\n\n public static readonly mapleCreek: WonderlandTrailLocation = {\n name: \"Maple Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170027\",\n groupSiteDivisionId: \"46753170028\",\n latitude: 46.75745,\n longitude: -121.65764,\n elevationFeet: 2806,\n };\n\n public static readonly reflectionLakes: WonderlandTrailLocation = {\n name: \"Reflection Lakes\",\n trailhead: true,\n foodCacheStorage: false,\n divisionId: \"\",\n groupSiteDivisionId: \"\",\n latitude: 46.76824,\n longitude: -121.72890,\n elevationFeet: 4862,\n };\n\n public static readonly paradiseRiver: WonderlandTrailLocation = {\n name: \"Paradise River\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170031\",\n groupSiteDivisionId: \"46753170032\",\n latitude: 46.77076,\n longitude: -121.75909,\n elevationFeet: 3960,\n };\n\n public static readonly longmire: WonderlandTrailLocation = {\n name: \"Longmire\",\n trailhead: true,\n foodCacheStorage: true,\n divisionId: \"\",\n groupSiteDivisionId: \"\",\n latitude: 46.75011,\n longitude: -121.81253,\n elevationFeet: 2750,\n };\n\n public static readonly pyramidCreek: WonderlandTrailLocation = {\n name: \"Pyramid Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170033\",\n groupSiteDivisionId: \"\",\n latitude: 46.77832,\n longitude: -121.80963,\n elevationFeet: 3721,\n };\n\n public static readonly devilsDream: WonderlandTrailLocation = {\n name: \"Devil's Dream\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170040\",\n groupSiteDivisionId: \"46753170041\",\n latitude: 46.78196,\n longitude: -121.83297,\n elevationFeet: 4929,\n };\n\n public static readonly southPuyallupRiver: WonderlandTrailLocation = {\n name: \"South Puyallup River\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170035\",\n groupSiteDivisionId: \"46753170036\",\n latitude: 46.81331,\n longitude: -121.86445,\n elevationFeet: 4183,\n };\n\n public static readonly klapatchePark: WonderlandTrailLocation = {\n name: \"Klapatche Park\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170024\",\n groupSiteDivisionId: \"\",\n latitude: 46.83571,\n longitude: -121.87752,\n elevationFeet: 5496,\n };\n\n public static readonly northPuyallupRiver: WonderlandTrailLocation = {\n name: \"North Puyallup River\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170029\",\n groupSiteDivisionId: \"46753170030\",\n latitude: 46.84751,\n longitude: -121.87005,\n elevationFeet: 3733,\n };\n\n public static readonly goldenLakes: WonderlandTrailLocation = {\n name: \"Golden Lakes\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170022\",\n groupSiteDivisionId: \"46753170023\",\n latitude: 46.88327,\n longitude: -121.89919,\n elevationFeet: 4927,\n };\n\n public static readonly southMowichRiver: WonderlandTrailLocation = {\n name: \"South Mowich River\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170019\",\n groupSiteDivisionId: \"46753170020\",\n latitude: 46.91146,\n longitude: -121.89314,\n elevationFeet: 2686,\n };\n\n public static readonly mowichLake: WonderlandTrailLocation = {\n name: \"Mowich Lake\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170015\",\n groupSiteDivisionId: \"46753170016\",\n latitude: 46.93204,\n longitude: -121.86351,\n elevationFeet: 4868,\n };\n\n public static readonly eaglesRoost: WonderlandTrailLocation = {\n name: \"Eagle's Roost\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170006\",\n groupSiteDivisionId: \"\",\n latitude: 46.91529,\n longitude: -121.84816,\n elevationFeet: 4834,\n };\n\n public static readonly cataractValley: WonderlandTrailLocation = {\n name: \"Cataract Valley\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170003\",\n groupSiteDivisionId: \"46753170004\",\n latitude: 46.94049,\n longitude: -121.80486,\n elevationFeet: 4488,\n };\n\n public static readonly ipsutCreek: WonderlandTrailLocation = {\n name: \"Ipsut Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170011\",\n groupSiteDivisionId: \"46753170012\",\n latitude: 46.97615,\n longitude: -121.83022,\n elevationFeet: 2359,\n };\n\n public static readonly carbonRiver: WonderlandTrailLocation = {\n name: \"Carbon River\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170001\",\n groupSiteDivisionId: \"46753170002\",\n latitude: 46.95063,\n longitude: -121.79991,\n elevationFeet: 3255,\n };\n\n public static readonly dickCreek: WonderlandTrailLocation = {\n name: \"Dick Creek\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170005\",\n groupSiteDivisionId: \"\",\n latitude: 46.94071,\n longitude: -121.78431,\n elevationFeet: 4114,\n };\n\n public static readonly mysticLake: WonderlandTrailLocation = {\n name: \"Mystic Lake\",\n trailhead: false,\n foodCacheStorage: false,\n divisionId: \"46753170017\",\n groupSiteDivisionId: \"46753170018\",\n latitude: 46.91570,\n longitude: -121.75045,\n elevationFeet: 5538,\n };\n\n public static getLocations(): Iterable<WonderlandTrailLocation>\n {\n return Iterable.create([\n this.graniteCreek,\n this.sunriseCamp,\n this.sunriseVisitorCenter,\n this.whiteRiver,\n this.fryingPanCreek,\n this.summerland,\n this.indianBar,\n this.nickelCreek,\n this.boxCanyon,\n this.mapleCreek,\n this.reflectionLakes,\n this.paradiseRiver,\n this.longmire,\n this.pyramidCreek,\n this.devilsDream,\n this.southPuyallupRiver,\n this.klapatchePark,\n this.northPuyallupRiver,\n this.goldenLakes,\n this.southMowichRiver,\n this.mowichLake,\n this.eaglesRoost,\n this.cataractValley,\n this.ipsutCreek,\n this.carbonRiver,\n this.dickCreek,\n this.mysticLake,\n ]);\n }\n\n public static getTrailheads(): Iterable<WonderlandTrailLocation>\n {\n return this.getLocations().where(location => location.trailhead);\n }\n}\n\nexport enum WonderlandTrailReservationType\n{\n Reserved,\n Walkup,\n}\n\nexport interface WonderlandTrailAvailabilityType\n{\n readonly individualSite?: WonderlandTrailReservationType;\n readonly groupSite?: WonderlandTrailReservationType;\n}\n\nexport class WonderlandTrailAvailability\n{\n private readonly availabilityMap: MutableMap<WonderlandTrailLocation, MutableMap<string, WonderlandTrailAvailabilityType>>;\n\n private constructor()\n {\n this.availabilityMap = Map.create();\n }\n\n public static create(): WonderlandTrailAvailability\n {\n return new WonderlandTrailAvailability();\n }\n\n public any(): boolean\n {\n return this.availabilityMap.any().await();\n }\n\n public addAvailability(location: WonderlandTrailLocation, date: DateTime, individualSite?: WonderlandTrailReservationType, groupSite?: WonderlandTrailReservationType): void\n {\n PreCondition.assertNotUndefinedAndNotNull(location, \"location\");\n PreCondition.assertNotUndefinedAndNotNull(date, \"date\");\n\n const locationAvailability: MutableMap<string, WonderlandTrailAvailabilityType> | undefined = this.getAvailability(location);\n\n const dateString: string = date.toDateString();\n const locationDayAvailability: WonderlandTrailAvailabilityType = locationAvailability.getOrSet(dateString, () => { return {}; }).await();\n locationAvailability.set(dateString, {\n individualSite: individualSite ?? locationDayAvailability.individualSite,\n groupSite: groupSite ?? locationDayAvailability.groupSite,\n });\n }\n\n public getAvailability(location: WonderlandTrailLocation): MutableMap<string, WonderlandTrailAvailabilityType>\n {\n PreCondition.assertNotUndefinedAndNotNull(location, \"location\");\n\n return this.availabilityMap.getOrSet(location, () => MutableMap.create()).await();\n }\n\n public getDayAvailability(location: WonderlandTrailLocation, date: DateTime): SyncResult<WonderlandTrailAvailabilityType>\n {\n PreCondition.assertNotUndefinedAndNotNull(location, \"location\");\n PreCondition.assertNotUndefinedAndNotNull(date, \"date\");\n\n return this.getAvailability(location).get(date.toDateString())\n .convertError(NotFoundError, () => new NotFoundError(`No availability was found for ${location.name} on ${date.toDateString()}.`));\n }\n}\n\nexport class WonderlandTrailDirection\n{\n private readonly value: string;\n\n private constructor(value: string)\n {\n PreCondition.assertNotEmpty(value, \"value\");\n\n this.value = value;\n }\n\n public static readonly clockwise = new WonderlandTrailDirection(\"Clockwise\");\n public static readonly counterClockwise = new WonderlandTrailDirection(\"CounterClockwise\");\n\n public toString(): string\n {\n return this.value;\n }\n\n public reverse(): WonderlandTrailDirection\n {\n return this === WonderlandTrailDirection.clockwise ? WonderlandTrailDirection.counterClockwise : WonderlandTrailDirection.clockwise;\n }\n}\n\nexport class WonderlandTrailConnection\n{\n public readonly startLocation: WonderlandTrailLocation;\n public readonly endLocation: WonderlandTrailLocation;\n public readonly distanceMiles: number;\n public readonly ascentFeet: number;\n public readonly descentFeet: number;\n public readonly direction: WonderlandTrailDirection;\n public readonly intermediateLocations: Iterable<WonderlandTrailLocation>;\n\n private constructor(startLocation: WonderlandTrailLocation, endLocation: WonderlandTrailLocation, distanceMiles: number, ascentFeet: number, descentFeet: number, direction: WonderlandTrailDirection, intermediateLocations: Iterable<WonderlandTrailLocation>)\n {\n PreCondition.assertNotUndefinedAndNotNull(startLocation, \"startLocation\");\n PreCondition.assertNotUndefinedAndNotNull(endLocation, \"endLocation\");\n PreCondition.assertGreaterThanOrEqualTo(distanceMiles, 0, \"distanceMiles\");\n PreCondition.assertGreaterThanOrEqualTo(ascentFeet, 0, \"ascentFeet\");\n PreCondition.assertGreaterThanOrEqualTo(descentFeet, 0, \"descentFeet\");\n PreCondition.assertNotUndefinedAndNotNull(intermediateLocations, \"intermediateLocations\");\n\n this.startLocation = startLocation;\n this.endLocation = endLocation;\n this.distanceMiles = distanceMiles;\n this.ascentFeet = ascentFeet;\n this.descentFeet = descentFeet;\n this.direction = direction;\n this.intermediateLocations = intermediateLocations;\n }\n\n public static create(startLocation: WonderlandTrailLocation, endLocation: WonderlandTrailLocation, distanceMiles: number, ascentFeet: number, descentFeet: number, direction: WonderlandTrailDirection, intermediateLocations: Iterable<WonderlandTrailLocation>): WonderlandTrailConnection\n {\n return new WonderlandTrailConnection(startLocation, endLocation, distanceMiles, ascentFeet, descentFeet, direction, intermediateLocations);\n }\n\n public getLocations(): Iterable<WonderlandTrailLocation>\n {\n const result: List<WonderlandTrailLocation> = List.create();\n WonderlandTrailConnection.ensureExists(result, this.startLocation);\n WonderlandTrailConnection.ensureAllExist(result, this.intermediateLocations);\n WonderlandTrailConnection.ensureExists(result, this.endLocation);\n return result;\n }\n\n private static ensureExists(list: List<WonderlandTrailLocation>, location: WonderlandTrailLocation): void\n {\n if (!list.contains(location).await())\n {\n list.add(location);\n }\n }\n\n private static ensureAllExist(list: List<WonderlandTrailLocation>, locations: JavascriptIterable<WonderlandTrailLocation>): void\n {\n for (const location of locations)\n {\n WonderlandTrailConnection.ensureExists(list, location);\n }\n }\n\n public reverseDirection(): WonderlandTrailConnection\n {\n return WonderlandTrailConnection.create(\n this.endLocation,\n this.startLocation,\n this.distanceMiles,\n this.descentFeet,\n this.ascentFeet,\n this.direction.reverse(),\n this.intermediateLocations,\n )\n }\n\n public join(connection: WonderlandTrailConnection): WonderlandTrailConnection\n {\n const intermediateLocations: List<WonderlandTrailLocation> = List.create();\n WonderlandTrailConnection.ensureAllExist(intermediateLocations, this.intermediateLocations);\n WonderlandTrailConnection.ensureExists(intermediateLocations, this.endLocation);\n WonderlandTrailConnection.ensureExists(intermediateLocations, connection.startLocation);\n WonderlandTrailConnection.ensureAllExist(intermediateLocations, connection.intermediateLocations);\n\n return WonderlandTrailConnection.create(\n this.startLocation,\n connection.endLocation,\n this.distanceMiles + connection.distanceMiles,\n this.ascentFeet + connection.ascentFeet,\n this.descentFeet + connection.descentFeet,\n this.direction,\n intermediateLocations,\n );\n }\n\n public containsLocation(location: WonderlandTrailLocation): boolean\n {\n return this.getLocations().contains(location).await();\n }\n\n public isLoop(): boolean\n {\n return this.startLocation === this.endLocation;\n }\n}\n\nexport class WonderlandTrailConnections\n{\n private connections: MutableMap<WonderlandTrailLocation, List<WonderlandTrailConnection>>;\n public readonly addReverseConnectionDefault: boolean;\n\n private constructor(addReverseConnectionDefault: boolean)\n {\n this.connections = Map.create();\n this.addReverseConnectionDefault = addReverseConnectionDefault;\n }\n\n public static create(addReverseConnectionDefault?: boolean): WonderlandTrailConnections\n {\n return new WonderlandTrailConnections(!!addReverseConnectionDefault);\n }\n\n public static createDefault(): WonderlandTrailConnections\n {\n return WonderlandTrailConnections.create(true)\n .addConnection({\n startLocation: WonderlandTrailLocations.whiteRiver,\n endLocation: WonderlandTrailLocations.fryingPanCreek,\n distanceMiles: 2.7,\n ascentFeet: 100,\n descentFeet: 600,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.fryingPanCreek,\n endLocation: WonderlandTrailLocations.summerland,\n distanceMiles: 4.3,\n ascentFeet: 2200,\n descentFeet: 100,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.summerland,\n endLocation: WonderlandTrailLocations.indianBar,\n distanceMiles: 4.7,\n ascentFeet: 1200,\n descentFeet: 2100,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.indianBar,\n endLocation: WonderlandTrailLocations.nickelCreek,\n distanceMiles: 6.8,\n ascentFeet: 1400,\n descentFeet: 3200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.nickelCreek,\n endLocation: WonderlandTrailLocations.boxCanyon,\n distanceMiles: 0.9,\n ascentFeet: 100,\n descentFeet: 400,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.boxCanyon,\n endLocation: WonderlandTrailLocations.mapleCreek,\n distanceMiles: 2.7,\n ascentFeet: 500,\n descentFeet: 700,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.mapleCreek,\n endLocation: WonderlandTrailLocations.reflectionLakes,\n distanceMiles: 4.7,\n ascentFeet: 2300,\n descentFeet: 200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.reflectionLakes,\n endLocation: WonderlandTrailLocations.paradiseRiver,\n distanceMiles: 2.6,\n ascentFeet: 200,\n descentFeet: 1200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.paradiseRiver,\n endLocation: WonderlandTrailLocations.longmire,\n distanceMiles: 3.6,\n ascentFeet: 100,\n descentFeet: 1200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.longmire,\n endLocation: WonderlandTrailLocations.pyramidCreek,\n distanceMiles: 3.3,\n ascentFeet: 1400,\n descentFeet: 400,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.pyramidCreek,\n endLocation: WonderlandTrailLocations.devilsDream,\n distanceMiles: 2.5,\n ascentFeet: 1400,\n descentFeet: 100,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.devilsDream,\n endLocation: WonderlandTrailLocations.southPuyallupRiver,\n distanceMiles: 6.5,\n ascentFeet: 1900,\n descentFeet: 2700,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.southPuyallupRiver,\n endLocation: WonderlandTrailLocations.klapatchePark,\n distanceMiles: 4.1,\n ascentFeet: 2100,\n descentFeet: 800,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.klapatchePark,\n endLocation: WonderlandTrailLocations.northPuyallupRiver,\n distanceMiles: 2.6,\n ascentFeet: 100,\n descentFeet: 1900,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.northPuyallupRiver,\n endLocation: WonderlandTrailLocations.goldenLakes,\n distanceMiles: 5.1,\n ascentFeet: 1900,\n descentFeet: 600,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.goldenLakes,\n endLocation: WonderlandTrailLocations.southMowichRiver,\n distanceMiles: 5.8,\n ascentFeet: 200,\n descentFeet: 2400,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.southMowichRiver,\n endLocation: WonderlandTrailLocations.mowichLake,\n distanceMiles: 4.4,\n ascentFeet: 2400,\n descentFeet: 300,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.mowichLake,\n endLocation: WonderlandTrailLocations.ipsutCreek,\n distanceMiles: 5.6,\n ascentFeet: 400,\n descentFeet: 3000,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.ipsutCreek,\n endLocation: WonderlandTrailLocations.carbonRiver,\n distanceMiles: 4,\n ascentFeet: 1300,\n descentFeet: 400,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.mowichLake,\n endLocation: WonderlandTrailLocations.eaglesRoost,\n distanceMiles: 2,\n ascentFeet: 500,\n descentFeet: 600,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.eaglesRoost,\n endLocation: WonderlandTrailLocations.cataractValley,\n distanceMiles: 12.4,\n ascentFeet: 3300,\n descentFeet: 3700,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.cataractValley,\n endLocation: WonderlandTrailLocations.carbonRiver,\n distanceMiles: 1.6,\n ascentFeet: 100,\n descentFeet: 1300,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.carbonRiver,\n endLocation: WonderlandTrailLocations.dickCreek,\n distanceMiles: 1.3,\n ascentFeet: 1000,\n descentFeet: 100,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.dickCreek,\n endLocation: WonderlandTrailLocations.mysticLake,\n distanceMiles: 3.7,\n ascentFeet: 2100,\n descentFeet: 600,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.mysticLake,\n endLocation: WonderlandTrailLocations.graniteCreek,\n distanceMiles: 4.1,\n ascentFeet: 1500,\n descentFeet: 1200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.graniteCreek,\n endLocation: WonderlandTrailLocations.sunriseCamp,\n distanceMiles: 4.6,\n ascentFeet: 1400,\n descentFeet: 1000,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.sunriseCamp,\n endLocation: WonderlandTrailLocations.whiteRiver,\n distanceMiles: 3.5,\n ascentFeet: 100,\n descentFeet: 2100,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.sunriseCamp,\n endLocation: WonderlandTrailLocations.sunriseVisitorCenter,\n distanceMiles: 1.4,\n ascentFeet: 400,\n descentFeet: 200,\n })\n .addConnection({\n startLocation: WonderlandTrailLocations.sunriseVisitorCenter,\n endLocation: WonderlandTrailLocations.whiteRiver,\n distanceMiles: 3.1,\n ascentFeet: 0,\n descentFeet: 2200,\n });\n }\n\n public iterateConnections(startLocation?: WonderlandTrailLocation, endLocation?: WonderlandTrailLocation, direction?: WonderlandTrailDirection): Iterator<WonderlandTrailConnection>;\n public iterateConnections(properties: { startLocation?: WonderlandTrailLocation, endLocation?: WonderlandTrailLocation, direction?: WonderlandTrailDirection }): Iterator<WonderlandTrailConnection>;\n iterateConnections(startLocationOrProperties?: WonderlandTrailLocation | { startLocation?: WonderlandTrailLocation, endLocation?: WonderlandTrailLocation, direction?: WonderlandTrailDirection }, endLocation?: WonderlandTrailLocation, direction?: WonderlandTrailDirection): Iterator<WonderlandTrailConnection>\n {\n let startLocation: WonderlandTrailLocation | undefined;\n if (isWonderlandTrailLocation(startLocationOrProperties))\n {\n startLocation = startLocationOrProperties;\n }\n else if (startLocationOrProperties)\n {\n startLocation = startLocationOrProperties.startLocation;\n endLocation = startLocationOrProperties.endLocation;\n direction = startLocationOrProperties.direction;\n }\n\n let result: Iterator<WonderlandTrailConnection>;\n if (!startLocation)\n {\n result = this.connections.iterateValues().flatMap(x => x);\n }\n else\n {\n result = this.connections.get(startLocation)\n .catch(NotFoundError, () => Iterable.create<WonderlandTrailConnection>())\n .await()\n .iterate();\n }\n\n if (endLocation)\n {\n result = result.where(connection => connection.endLocation == endLocation);\n }\n\n if (direction != null)\n {\n result = result.where(connection => connection.direction == direction);\n }\n\n return result;\n }\n\n private addConnectionInner(connection: WonderlandTrailConnection): void\n {\n const startLocationConnections: List<WonderlandTrailConnection> = this.connections.getOrSet(connection.startLocation, () => List.create()).await();\n startLocationConnections.add(connection);\n }\n\n public addConnection(connection: WonderlandTrailConnection, addReverseConnection?: boolean): this;\n public addConnection(startLocation: WonderlandTrailLocation, endLocation: WonderlandTrailLocation, distanceMiles: number, ascentFeet: number, descentFeet: number, direction?: WonderlandTrailDirection, intermediateLocations?: Iterable<WonderlandTrailLocation>, addReverseConnection?: boolean): this\n public addConnection(properties: { startLocation: WonderlandTrailLocation, endLocation: WonderlandTrailLocation, distanceMiles: number, ascentFeet: number, descentFeet: number, direction?: WonderlandTrailDirection, intermediateLocations?: Iterable<WonderlandTrailLocation>, addReverseConnection?: boolean }): this\n addConnection(connectionStartLocationOrProperties: WonderlandTrailLocation | { startLocation: WonderlandTrailLocation, endLocation: WonderlandTrailLocation, distanceMiles: number, ascentFeet: number, descentFeet: number, direction?: WonderlandTrailDirection, intermediateLocations?: Iterable<WonderlandTrailLocation>, addReverseConnection?: boolean }, addReverseConnectionOrEndLocation?: boolean | WonderlandTrailLocation, distanceMiles?: number, ascentFeet?: number, descentFeet?: number, direction?: WonderlandTrailDirection, intermediateLocations?: Iterable<WonderlandTrailLocation>, addReverseConnection?: boolean): this\n {\n let startLocation: WonderlandTrailLocation;\n let endLocation: WonderlandTrailLocation;\n if (isWonderlandTrailLocation(connectionStartLocationOrProperties))\n {\n startLocation = connectionStartLocationOrProperties;\n }\n else if (connectionStartLocationOrProperties instanceof WonderlandTrailConnection)\n {\n startLocation = connectionStartLocationOrProperties.startLocation;\n endLocation = connectionStartLocationOrProperties.endLocation;\n distanceMiles = connectionStartLocationOrProperties.distanceMiles;\n ascentFeet = connectionStartLocationOrProperties.ascentFeet;\n descentFeet = connectionStartLocationOrProperties.descentFeet;\n direction = connectionStartLocationOrProperties.direction;\n intermediateLocations = connectionStartLocationOrProperties.intermediateLocations;\n addReverseConnection = !!addReverseConnectionOrEndLocation;\n }\n else\n {\n startLocation = connectionStartLocationOrProperties.startLocation;\n endLocation = connectionStartLocationOrProperties.endLocation;\n distanceMiles = connectionStartLocationOrProperties.distanceMiles;\n ascentFeet = connectionStartLocationOrProperties.ascentFeet;\n descentFeet = connectionStartLocationOrProperties.descentFeet;\n direction = connectionStartLocationOrProperties.direction;\n intermediateLocations = connectionStartLocationOrProperties.intermediateLocations;\n addReverseConnection = connectionStartLocationOrProperties.addReverseConnection;\n }\n\n const connection: WonderlandTrailConnection = WonderlandTrailConnection.create(\n startLocation,\n endLocation!,\n distanceMiles!,\n ascentFeet!,\n descentFeet!,\n direction ?? WonderlandTrailDirection.clockwise,\n intermediateLocations ?? Iterable.create(),\n );\n\n this.addConnectionInner(connection);\n if (addReverseConnection ?? this.addReverseConnectionDefault)\n {\n this.addConnectionInner(connection.reverseDirection());\n }\n\n return this;\n }\n\n public containsConnection(connection: WonderlandTrailConnection): boolean\n {\n PreCondition.assertNotUndefinedAndNotNull(connection, \"connection\");\n\n const startLocationConnections: Iterable<WonderlandTrailConnection> | undefined = this.connections.get(connection.startLocation).catch(() => undefined).await();\n return startLocationConnections?.contains(connection)?.await() === true;\n }\n\n public reverseDirection(): WonderlandTrailConnections\n {\n const result: WonderlandTrailConnections = WonderlandTrailConnections.create(this.addReverseConnectionDefault);\n for (const connection of this.iterateConnections())\n {\n result.addConnection(connection.reverseDirection());\n }\n return result;\n }\n\n public expandConnections(startLocation?: WonderlandTrailLocation, endLocation?: WonderlandTrailLocation, direction?: WonderlandTrailDirection): WonderlandTrailConnections\n {\n if (isUndefinedOrNull(direction))\n {\n direction = WonderlandTrailDirection.clockwise;\n }\n\n const result: WonderlandTrailConnections = WonderlandTrailConnections.create(this.addReverseConnectionDefault);\n\n const toVisit: ListStack<WonderlandTrailConnection> = Stack.create();\n toVisit.addAll(this.iterateConnections(startLocation, undefined, direction));\n\n while (toVisit.any().await())\n {\n const currentConnection: WonderlandTrailConnection = toVisit.remove().await();\n result.addConnection(currentConnection, false);\n\n if (!currentConnection.isLoop() && currentConnection.endLocation !== endLocation)\n {\n for (const endLocationConnection of this.iterateConnections(currentConnection.endLocation, undefined, direction))\n {\n if (!result.containsConnection(endLocationConnection) &&\n !toVisit.contains(endLocationConnection))\n {\n toVisit.add(endLocationConnection);\n }\n\n if (!currentConnection.intermediateLocations.contains(endLocationConnection.endLocation))\n {\n toVisit.add(currentConnection.join(endLocationConnection));\n }\n }\n }\n }\n\n return result;\n }\n}\n\nexport class WonderlandTrailItinerary\n{\n public readonly startDay: DateTime;\n private readonly connections: List<WonderlandTrailConnection>;\n private readonly availabilityTypes: List<WonderlandTrailAvailabilityType>;\n\n private constructor(startDay: DateTime)\n {\n PreCondition.assertNotUndefinedAndNotNull(startDay, \"startDay\");\n\n this.startDay = startDay;\n this.connections = List.create();\n this.availabilityTypes = List.create();\n }\n\n public static create(startDay: DateTime): WonderlandTrailItinerary\n {\n return new WonderlandTrailItinerary(startDay);\n }\n\n public clone(): WonderlandTrailItinerary\n {\n return WonderlandTrailItinerary.create(this.startDay)\n .addConnections(this.connections)\n .addAvailabilityTypes(this.availabilityTypes);\n }\n\n public getConnections(): Iterable<WonderlandTrailConnection>\n {\n return this.connections;\n }\n\n public getEndDay(): DateTime\n {\n return this.startDay.addDays(this.getDayCount() - 1);\n }\n\n public getDayCount(): number\n {\n return this.connections.getCount().await();\n }\n\n public getStartLocation(): SyncResult<WonderlandTrailLocation>\n {\n return this.connections.first().then(firstConnection => firstConnection.startLocation);\n }\n\n public getIntermediateLocations(): Iterable<WonderlandTrailLocation>\n {\n const result: List<WonderlandTrailLocation> = List.create();\n for (const connection of this.connections)\n {\n if (result.any().await())\n {\n result.add(connection.startLocation);\n }\n result.addAll(connection.intermediateLocations);\n }\n return result;\n }\n\n public getEndLocation(): SyncResult<WonderlandTrailLocation>\n {\n return this.connections.last().then(lastConnection => lastConnection.endLocation);\n }\n\n public getPath(): Iterable<WonderlandTrailLocation>\n {\n const result: List<WonderlandTrailLocation> = List.create();\n for (const connection of this.connections)\n {\n if (!result.any().await())\n {\n result.add(connection.startLocation);\n }\n result.add(connection.endLocation);\n }\n return result;\n }\n\n public getPathStrings(includeAvailabilityTypes?: boolean): Iterable<string>\n {\n includeAvailabilityTypes = includeAvailabilityTypes ?? true;\n\n const result: List<string> = List.create();\n let availabilityTypeIndex: number = 0;\n const availabilityTypeCount: number = this.availabilityTypes.getCount().await();\n\n for (const connection of this.connections)\n {\n if (!result.any().await())\n {\n result.add(connection.startLocation.name);\n }\n\n let pathString: string = connection.endLocation.name;\n if (includeAvailabilityTypes && availabilityTypeIndex < availabilityTypeCount)\n {\n pathString += \" \";\n\n const availabilityType: WonderlandTrailAvailabilityType = this.availabilityTypes.get(availabilityTypeIndex).await();\n availabilityTypeIndex++;\n\n if (availabilityType.individualSite !== undefined)\n {\n if (availabilityType.groupSite !== undefined)\n {\n pathString += `(Individual ${availabilityType.individualSite}/Group ${availabilityType.groupSite})`;\n }\n else\n {\n pathString += `(Individual ${availabilityType.individualSite})`;\n }\n }\n else\n {\n pathString += `(Group ${availabilityType.groupSite})`;\n }\n }\n\n result.add(pathString);\n }\n\n return result;\n }\n\n public contains(parameters: {\n location: WonderlandTrailLocation,\n checkItineraryStartLocation?: boolean,\n checkItineraryIntermediateLocations?: boolean,\n checkItineraryEndLocation?: boolean,\n }): boolean\n {\n PreCondition.assertNotUndefinedAndNotNull(parameters, \"parameters\");\n\n const location: WonderlandTrailLocation = parameters.location;\n const checkItineraryStartLocation: boolean = parameters.checkItineraryStartLocation ?? true;\n const checkItineraryIntermediateLocations: boolean = parameters.checkItineraryIntermediateLocations ?? true;\n const checkItineraryEndLocation: boolean = parameters.checkItineraryEndLocation ?? true;\n\n PreCondition.assertNotUndefinedAndNotNull(location, \"location\");\n\n let result: boolean = false;\n\n const connectionCount: number = this.connections.getCount().await();\n for (let i = 0; i < connectionCount; i++)\n {\n if (i !== 0 || checkItineraryStartLocation)\n {\n result = (this.connections.get(i).await().startLocation === location);\n if (result)\n {\n break;\n }\n }\n\n if (checkItineraryIntermediateLocations)\n {\n result = this.connections.get(i).await().intermediateLocations.contains(location).await();\n if (result)\n {\n break;\n }\n }\n\n if (i === connectionCount - 1 && checkItineraryEndLocation)\n {\n result = (this.connections.get(i).await().endLocation === location);\n if (result)\n {\n break;\n }\n }\n }\n\n return result;\n }\n\n public containsAny(parameters: {\n connection: WonderlandTrailConnection,\n checkConnectionStartLocation?: boolean,\n checkConnectionIntermediateLocations?: boolean,\n checkConnectionEndLocation?: boolean,\n checkItineraryStartLocation?: boolean,\n checkItineraryIntermediateLocations?: boolean,\n checkItineraryEndLocation?: boolean,\n }): boolean\n {\n PreCondition.assertNotUndefinedAndNotNull(parameters, \"parameters\");\n\n const connection: WonderlandTrailConnection = parameters.connection;\n const checkConnectionStartLocation: boolean = parameters.checkConnectionStartLocation ?? true;\n const checkConnectionIntermediateLocations: boolean = parameters.checkConnectionIntermediateLocations ?? true;\n const checkConnectionEndLocation: boolean = parameters.checkConnectionEndLocation ?? true;\n const checkItineraryStartLocation: boolean = parameters.checkItineraryStartLocation ?? true;\n const checkItineraryIntermediateLocations: boolean = parameters.checkItineraryIntermediateLocations ?? true;\n const checkItineraryEndLocation: boolean = parameters.checkItineraryEndLocation ?? true;\n\n PreCondition.assertNotUndefinedAndNotNull(connection, \"connection\");\n\n let result: boolean = false;\n\n if (!result && checkConnectionStartLocation)\n {\n result = this.contains({\n location: connection.startLocation,\n checkItineraryStartLocation,\n checkItineraryIntermediateLocations,\n checkItineraryEndLocation,\n });\n }\n\n if (!result && checkConnectionIntermediateLocations)\n {\n for (const connectionIntermediateLocation of connection.intermediateLocations)\n {\n result = this.contains({\n location: connectionIntermediateLocation,\n checkItineraryStartLocation,\n checkItineraryIntermediateLocations,\n checkItineraryEndLocation,\n });\n if (result)\n {\n break;\n }\n }\n }\n\n if (!result && checkConnectionEndLocation)\n {\n result = this.contains({\n location: connection.endLocation,\n checkItineraryStartLocation,\n checkItineraryIntermediateLocations,\n checkItineraryEndLocation,\n });\n }\n\n return result;\n }\n\n public addConnection(connection: WonderlandTrailConnection): this\n {\n PreCondition.assertNotUndefinedAndNotNull(connection, \"connection\");\n\n this.connections.add(connection);\n\n return this;\n }\n\n public addConnections(connections: JavascriptIterable<WonderlandTrailConnection>): this\n {\n PreCondition.assertNotUndefinedAndNotNull(connections, \"connections\");\n\n this.connections.addAll(connections);\n\n return this;\n }\n\n public addAvailabilityType(availabilityType: WonderlandTrailAvailabilityType): this\n {\n PreCondition.assertNotUndefinedAndNotNull(availabilityType, \"availabilityType\");\n\n this.availabilityTypes.add(availabilityType);\n\n return this;\n }\n\n public addAvailabilityTypes(availabilityTypes: JavascriptIterable<WonderlandTrailAvailabilityType>): this\n {\n PreCondition.assertNotUndefinedAndNotNull(availabilityTypes, \"availabilityTypes\");\n\n this.availabilityTypes.addAll(availabilityTypes);\n\n return this;\n }\n\n public toString(includeAvailabilityTypes?: boolean): string\n {\n includeAvailabilityTypes = includeAvailabilityTypes ?? true;\n return `startDay:${this.startDay.toDateString()},path:${this.getPathStrings(includeAvailabilityTypes)}`;\n }\n}\n\nexport class WonderlandTrailClient implements HttpClient\n{\n public static readonly permitItineraryId: string = \"4675317\";\n\n private readonly httpClient: HttpClient;\n private readonly recreationDotGovClient: RecreationDotGovClient;\n\n private constructor(httpClient: HttpClient)\n {\n PreCondition.assertNotUndefinedAndNotNull(httpClient, \"httpClient\");\n\n this.httpClient = httpClient;\n this.recreationDotGovClient = RecreationDotGovClient.create(httpClient);\n }\n\n public static create(httpClient: HttpClient): WonderlandTrailClient\n {\n return new WonderlandTrailClient(httpClient);\n }\n\n public sendRequest(request: HttpOutgoingRequest): AsyncResult<HttpIncomingResponse>\n {\n return this.httpClient.sendRequest(request);\n }\n\n public sendGetRequest(url: string): AsyncResult<HttpIncomingResponse>\n {\n return HttpClient.sendGetRequest(this, url);\n }\n\n public getAvailability(month: number, year: number, allowWalkupPermits: boolean, allowIndividualSites: boolean, allowGroupSites: boolean, earlyAccessPermitLotteryId?: string): PromiseAsyncResult<WonderlandTrailAvailability>;\n public getAvailability(options: { month: number, year: number, allowWalkupPermits: boolean, allowIndividualSites: boolean, allowGroupSites: boolean, earlyAccessPermitLotteryId?: string }): PromiseAsyncResult<WonderlandTrailAvailability>;\n getAvailability(monthOrOptions: number | { month: number, year: number, allowWalkupPermits: boolean, allowIndividualSites: boolean, allowGroupSites: boolean, earlyAccessPermitLotteryId?: string }, year?: number, allowWalkupPermits?: boolean, allowIndividualSites?: boolean, allowGroupSites?: boolean, earlyAccessPermitLotteryId?: string): PromiseAsyncResult<WonderlandTrailAvailability>\n {\n let month: number;\n if (isNumber(monthOrOptions))\n {\n month = monthOrOptions;\n year = year!;\n allowWalkupPermits = allowWalkupPermits!;\n allowIndividualSites = allowIndividualSites!;\n allowGroupSites = allowGroupSites!;\n }\n else\n {\n month = monthOrOptions.month;\n year = monthOrOptions.year;\n allowWalkupPermits = monthOrOptions.allowWalkupPermits;\n allowIndividualSites = monthOrOptions.allowIndividualSites;\n allowGroupSites = monthOrOptions.allowGroupSites;\n earlyAccessPermitLotteryId = monthOrOptions.earlyAccessPermitLotteryId;\n }\n return PromiseAsyncResult.create(async () =>\n {\n const result = WonderlandTrailAvailability.create();\n\n for (const location of WonderlandTrailLocations.getLocations())\n {\n if (allowIndividualSites && location.divisionId)\n {\n const divisionAvailability: RecreationDotGovDivisionAvailability = await this.recreationDotGovClient.getDivisionAvailability(\n WonderlandTrailClient.permitItineraryId,\n location.divisionId,\n month,\n year,\n earlyAccessPermitLotteryId,\n );\n const divisionDayAvailabilities: Iterable<RecreationDotGovDivisionDayAvailability> = divisionAvailability.dayAvailabilities;\n if (divisionDayAvailabilities)\n {\n for (const divisionDayAvailability of divisionDayAvailabilities)\n {\n const hasWalkupPermits: boolean = (allowWalkupPermits && divisionDayAvailability.walkup);\n const hasReservationPermits: boolean = (divisionDayAvailability.reservationsRemaining > 0);\n if (hasWalkupPermits || hasReservationPermits)\n {\n result.addAvailability(\n location,\n divisionDayAvailability.date,\n hasWalkupPermits ? WonderlandTrailReservationType.Walkup : WonderlandTrailReservationType.Reserved,\n undefined,\n );\n }\n }\n }\n }\n\n if (allowGroupSites && location.groupSiteDivisionId)\n {\n const groupSiteDivisionAvailability: RecreationDotGovDivisionAvailability = await this.recreationDotGovClient.getDivisionAvailability(\n WonderlandTrailClient.permitItineraryId,\n location.groupSiteDivisionId,\n month,\n year,\n earlyAccessPermitLotteryId,\n );\n const groupSiteDivisionDayAvailabilities: Iterable<RecreationDotGovDivisionDayAvailability> = groupSiteDivisionAvailability.dayAvailabilities;\n if (groupSiteDivisionDayAvailabilities)\n {\n for (const groupSiteDayAvailability of groupSiteDivisionDayAvailabilities)\n {\n const hasWalkupPermits: boolean = (allowWalkupPermits && groupSiteDayAvailability.walkup);\n const hasReservationPermits: boolean = (groupSiteDayAvailability.reservationsRemaining > 0);\n if (hasWalkupPermits || hasReservationPermits)\n {\n result.addAvailability(\n location,\n groupSiteDayAvailability.date,\n undefined,\n hasWalkupPermits ? WonderlandTrailReservationType.Walkup : WonderlandTrailReservationType.Reserved,\n );\n }\n }\n }\n }\n }\n\n return result;\n });\n }\n\n public findItineraries(parameters: {\n availability: WonderlandTrailAvailability,\n startDate: DateTime,\n startLocation: WonderlandTrailLocation,\n endLocation: WonderlandTrailLocation,\n direction: WonderlandTrailDirection,\n maximumDayDistanceMiles?: number,\n maximumItineraryDays?: number,\n campsitesToAvoid?: JavascriptIterable<WonderlandTrailLocation>,\n }): Iterable<WonderlandTrailItinerary>\n {\n PreCondition.assertNotUndefinedAndNotNull(parameters, \"parameters\");\n\n const availability: WonderlandTrailAvailability = parameters.availability;\n const startDate: DateTime = parameters.startDate;\n const startLocation: WonderlandTrailLocation = parameters.startLocation;\n const endLocation: WonderlandTrailLocation = parameters.endLocation;\n const direction: WonderlandTrailDirection = parameters.direction;\n const maximumDayDistanceMiles: number | undefined = parameters.maximumDayDistanceMiles;\n const maximumItineraryDays: number | undefined = parameters.maximumItineraryDays;\n const campsitesToAvoid: Iterable<WonderlandTrailLocation> = Iterable.create(parameters.campsitesToAvoid ?? []);\n\n const result: List<WonderlandTrailItinerary> = List.create();\n\n const connections: WonderlandTrailConnections = WonderlandTrailConnections.createDefault()\n .expandConnections(startLocation, endLocation, direction);\n\n let startLocationConnections: Iterator<WonderlandTrailConnection> = connections.iterateConnections(startLocation, undefined, direction);\n if (!isUndefinedOrNull(maximumDayDistanceMiles))\n {\n startLocationConnections = startLocationConnections.where(connection => connection.distanceMiles <= maximumDayDistanceMiles);\n }\n\n const possibleItineraries: ListStack<WonderlandTrailItinerary> = Stack.create();\n possibleItineraries.addAll(startLocationConnections.map(c => WonderlandTrailItinerary.create(startDate).addConnection(c)));\n\n while (possibleItineraries.any().await())\n {\n const currentItinerary: WonderlandTrailItinerary = possibleItineraries.remove().await();\n const currentItineraryEndLocation: WonderlandTrailLocation = currentItinerary.getEndLocation().await();\n\n if ((maximumItineraryDays === undefined || currentItinerary.getDayCount() <= maximumItineraryDays) &&\n (startLocation === currentItineraryEndLocation || endLocation === currentItineraryEndLocation || !campsitesToAvoid.contains(currentItineraryEndLocation).await()))\n {\n if (currentItineraryEndLocation === endLocation)\n {\n result.add(currentItinerary);\n }\n else\n {\n const dayAvailability: WonderlandTrailAvailabilityType | undefined = availability.getDayAvailability(currentItineraryEndLocation, currentItinerary.getEndDay())\n .catch(() => undefined)\n .await();\n if (dayAvailability)\n {\n currentItinerary.addAvailabilityType(dayAvailability);\n\n for (const nextDayConnection of connections.iterateConnections(currentItineraryEndLocation, undefined, direction))\n {\n if (!currentItinerary.containsAny({\n connection: nextDayConnection,\n checkConnectionStartLocation: false,\n checkItineraryStartLocation: false,\n checkItineraryEndLocation: false,\n }))\n {\n if (maximumDayDistanceMiles === undefined || nextDayConnection.distanceMiles <= maximumDayDistanceMiles)\n {\n possibleItineraries.add(currentItinerary.clone().addConnection(nextDayConnection));\n }\n }\n }\n }\n }\n }\n }\n\n return result;\n }\n\n public findItinerariesAsync(parameters: {\n startDay: DateTime,\n startLocation?: WonderlandTrailLocation,\n endLocation?: WonderlandTrailLocation,\n direction?: WonderlandTrailDirection,\n maximumDayDistanceMiles?: number,\n maximumItineraryDays?: number,\n allowWalkupPermits?: boolean,\n allowIndividualSites?: boolean,\n allowGroupSites?: boolean,\n campsitesToAvoid?: JavascriptIterable<WonderlandTrailLocation>,\n }): PromiseAsyncResult<Iterable<WonderlandTrailItinerary>>\n {\n PreCondition.assertNotUndefinedAndNotNull(parameters, \"parameters\");\n\n const startDay: DateTime = parameters.startDay;\n const startLocation: WonderlandTrailLocation | undefined = parameters.startLocation;\n const endLocation: WonderlandTrailLocation | undefined = parameters.endLocation;\n const direction: WonderlandTrailDirection | undefined = parameters.direction;\n const maximumDayDistanceMiles: number | undefined = parameters.maximumDayDistanceMiles;\n const maximumItineraryDays: number | undefined = parameters.maximumItineraryDays;\n const allowWalkupPermits: boolean = parameters.allowWalkupPermits ?? true;\n const allowIndividualSites: boolean = parameters.allowIndividualSites ?? true;\n const allowGroupSites: boolean = parameters.allowGroupSites ?? false;\n const campsitesToAvoid: JavascriptIterable<WonderlandTrailLocation> = parameters.campsitesToAvoid ?? [];\n\n PreCondition.assertNotUndefinedAndNotNull(startDay, \"startDay\");\n\n return PromiseAsyncResult.create(async () =>\n {\n const result: List<WonderlandTrailItinerary> = List.create();\n\n const startLocationsToCheck: Iterable<WonderlandTrailLocation> =\n (!isUndefinedOrNull(startLocation) ? Iterable.create([startLocation]) : WonderlandTrailLocations.getTrailheads());\n const directionsToCheck: Iterable<WonderlandTrailDirection> =\n (!isUndefinedOrNull(direction) ? Iterable.create([direction]) : Iterable.create([WonderlandTrailDirection.clockwise, WonderlandTrailDirection.counterClockwise]));\n\n const availability: WonderlandTrailAvailability = await this.getAvailability(\n startDay.getMonth(),\n startDay.getYear(),\n allowWalkupPermits,\n allowIndividualSites,\n allowGroupSites,\n );\n\n for (const startLocationToCheck of startLocationsToCheck)\n {\n for (const directionToCheck of directionsToCheck)\n {\n result.addAll(this.findItineraries({\n availability,\n startDate: startDay,\n startLocation: startLocationToCheck,\n endLocation: endLocation ?? startLocationToCheck,\n direction: directionToCheck,\n maximumDayDistanceMiles,\n maximumItineraryDays,\n campsitesToAvoid,\n }))\n }\n }\n\n return result;\n });\n }\n}"],"mappings":"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","names":["responseBodyJson","WonderlandTrailReservationType"]}
|