Skip to content

Commit a31ac58

Browse files
committed
initial data could be directly stored on cache
1 parent 2fef61b commit a31ac58

2 files changed

Lines changed: 23 additions & 24 deletions

File tree

src/compound.ts

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ErrorOption } from "./misc/misc.ts";
1+
import { ErrorOption, nullableAsArray } from "./misc/misc.ts";
22

33
export class ResultError extends Error {
44
override name = "ArrayResultError";
@@ -16,48 +16,44 @@ export type Result<T> =
1616
export class IterableResult<T> {
1717
#evaluated: Array<Result<T>> = [];
1818
#iterator: Iterator<Result<T>>;
19-
constructor(generator: () => Iterator<Result<T>>) {
19+
constructor(
20+
evaluated: ReadonlyArray<Result<T>>,
21+
generator: () => Iterator<Result<T>>,
22+
) {
23+
this.#evaluated = [...evaluated];
2024
this.#iterator = generator();
2125
}
2226

2327
static fromArray<T>(array: ReadonlyArray<T>): IterableResult<T> {
24-
return new IterableResult(function* () {
25-
for (const value of array) {
26-
yield { type: "value", value };
27-
}
28-
});
28+
return new IterableResult(
29+
array.map((value) => ({ type: "value", value })),
30+
function* () {},
31+
);
2932
}
3033

3134
static fromNullable<T>(value?: T): IterableResult<NonNullable<T>> {
32-
return new IterableResult(function* () {
33-
if (value != null) {
34-
yield { type: "value", value };
35-
}
36-
});
35+
return IterableResult.fromArray(nullableAsArray(value));
3736
}
3837

3938
static single<T>(value: T): IterableResult<T> {
40-
return new IterableResult(function* () {
41-
yield { type: "value", value };
42-
});
39+
return IterableResult.fromArray([value]);
4340
}
4441

4542
static errors(errors: ReadonlyArray<ResultError>): IterableResult<never> {
46-
return new IterableResult(function* () {
47-
for (const error of errors) {
48-
yield { type: "error", error };
49-
}
50-
});
43+
return new IterableResult(
44+
errors.map((error) => ({ type: "error", error })),
45+
function* () {},
46+
);
5147
}
5248

5349
static empty(): IterableResult<never> {
54-
return new IterableResult(function* () {});
50+
return IterableResult.fromArray([]);
5551
}
5652

5753
static concat<T>(
5854
...iterableResults: ReadonlyArray<IterableResult<T>>
5955
): IterableResult<T> {
60-
return new IterableResult(function* () {
56+
return new IterableResult([], function* () {
6157
const errors: Array<ResultError> = [];
6258
let yielded = false;
6359
for (const iterable of iterableResults) {
@@ -89,7 +85,7 @@ export class IterableResult<T> {
8985
// we resorted to using `any` types here, make sure it works properly
9086
return iterableResults.reduce(
9187
(left: IterableResult<any>, right) =>
92-
new IterableResult(function* () {
88+
new IterableResult([], function* () {
9389
let rightAggregate: null | Array<any> = null;
9490
let yielded = false;
9591
for (const leftResult of left) {
@@ -198,6 +194,7 @@ export class IterableResult<T> {
198194

199195
flatMap<U>(mapper: (value: T) => IterableResult<U>): IterableResult<U> {
200196
return new IterableResult(
197+
[],
201198
function* (this: IterableResult<T>): Generator<Result<U>> {
202199
const errors: Array<ResultError> = [];
203200
let yielded = false;
@@ -235,6 +232,7 @@ export class IterableResult<T> {
235232

236233
sort(comparer: (left: T, right: T) => number): IterableResult<T> {
237234
return new IterableResult(
235+
[],
238236
function* (this: IterableResult<T>) {
239237
let hasError = false;
240238
const array: Array<T> = [];
@@ -273,6 +271,7 @@ export class IterableResult<T> {
273271

274272
addErrorWhenNone(error: () => ResultError): IterableResult<T> {
275273
return new IterableResult(
274+
[],
276275
function* (this: IterableResult<T>): Generator<Result<T>> {
277276
let yielded = false;
278277
for (const result of this) {

src/translator/translator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { multipleSentences } from "./sentence.ts";
99
const RANDOMIZATION_LIMIT = 25248;
1010

1111
export function translate(tokiPona: string): IterableResult<string> {
12-
return new IterableResult(function* () {
12+
return new IterableResult([], function* () {
1313
const iterableResult = parser
1414
.parse(tokiPona)
1515
.flatMap(multipleSentences)

0 commit comments

Comments
 (0)