API reference › @evolu/common › local‑first/Query › evoluJsonArrayFrom
function evoluJsonArrayFrom<O>(
expr: SelectQueryBuilderExpression<O>,
): RawBuilder<Simplify<O>[]>;
Defined in: packages/common/src/local-first/Query.ts:163
An improved Evolu version of Kysely's SQLite jsonArrayFrom helper.
Kysely's ParseJSONResultsPlugin heuristically parses any result string that
looks like JSON. Evolu instead prefixes JSON produced by these helpers with a
per-runtime identifier and only parses values carrying that prefix, avoiding
accidental parsing of ordinary string columns that merely happen to start
with { or [.
Example
import {
createQueryBuilder,
evoluJsonArrayFrom,
id,
NonEmptyTrimmedString100,
} from "@evolu/common";
const PersonId = id("Person");
const Schema = {
person: { id: PersonId },
pet: {
id: id("Pet"),
name: NonEmptyTrimmedString100,
personId: PersonId,
},
};
const createQuery = createQueryBuilder(Schema);
const people = createQuery((db) =>
db
.selectFrom("person")
.select(["person.id"])
.select((eb) => [
evoluJsonArrayFrom(
eb
.selectFrom("pet")
.select(["pet.id as petId", "pet.name"])
.whereRef("pet.personId", "=", "person.id")
.orderBy("pet.name"),
).as("pets"),
]),
);
expectTypeOf<(typeof people.Row.pets)[number]>().toEqualTypeOf<{
petId: typeof Schema.pet.id.Output;
name: NonEmptyTrimmedString100 | null;
}>();