added format command and added trailing commas to reduce conflicts

This commit is contained in:
dswbx
2025-02-26 20:06:03 +01:00
parent 88b5359f1c
commit 7743f71a11
414 changed files with 3622 additions and 3610 deletions

View File

@@ -11,7 +11,7 @@ import {
type EntityData,
type EntityManager,
WhereBuilder,
WithBuilder
WithBuilder,
} from "../index";
import { JoinBuilder } from "./JoinBuilder";
@@ -79,7 +79,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const validated = {
...cloneDeep(defaultQuerySchema),
sort: entity.getDefaultSort(),
select: entity.getSelect()
select: entity.getSelect(),
};
if (!options) return validated;
@@ -101,10 +101,10 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
if (invalid.length > 0) {
throw new InvalidSearchParamsException(
`Invalid select field(s): ${invalid.join(", ")}`
`Invalid select field(s): ${invalid.join(", ")}`,
).context({
entity: entity.name,
valid: validated.select
valid: validated.select,
});
}
@@ -122,7 +122,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const related = this.em.relationOf(entity.name, entry);
if (!related) {
throw new InvalidSearchParamsException(
`JOIN: "${entry}" is not a relation of "${entity.name}"`
`JOIN: "${entry}" is not a relation of "${entity.name}"`,
);
}
@@ -155,7 +155,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
if (invalid.length > 0) {
throw new InvalidSearchParamsException(
`Invalid where field(s): ${invalid.join(", ")}`
`Invalid where field(s): ${invalid.join(", ")}`,
).context({ aliases, entity: entity.name });
}
@@ -189,7 +189,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const [_count, _total, result] = await this.em.connection.batchQuery([
countQuery,
totalQuery,
qb
qb,
]);
//$console.log("result", { _count, _total });
@@ -207,8 +207,8 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
count: _count[0]?.count ?? 0, // @todo: better graceful method
items: result.length,
time,
query: { sql: compiled.sql, parameters: compiled.parameters }
}
query: { sql: compiled.sql, parameters: compiled.parameters },
},
};
} catch (e) {
if (e instanceof Error) {
@@ -221,10 +221,10 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
protected async single(
qb: RepositoryQB,
options: RepoQuery
options: RepoQuery,
): Promise<RepositoryResponse<EntityData>> {
await this.emgr.emit(
new Repository.Events.RepositoryFindOneBefore({ entity: this.entity, options })
new Repository.Events.RepositoryFindOneBefore({ entity: this.entity, options }),
);
const { data, ...response } = await this.performQuery(qb);
@@ -233,8 +233,8 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
new Repository.Events.RepositoryFindOneAfter({
entity: this.entity,
options,
data: data[0]!
})
data: data[0]!,
}),
);
return { ...response, data: data[0]! };
@@ -248,7 +248,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
ignore?: (keyof RepoQuery)[];
alias?: string;
defaults?: Pick<RepoQuery, "limit" | "offset">;
}
},
) {
const entity = this.entity;
let qb = _qb ?? (this.conn.selectFrom(entity.name) as RepositoryQB);
@@ -262,7 +262,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const defaults = {
limit: 10,
offset: 0,
...config?.defaults
...config?.defaults,
};
if (!ignore.includes("select") && options.select) {
@@ -295,7 +295,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
private buildQuery(
_options?: Partial<RepoQuery>,
ignore: (keyof RepoQuery)[] = []
ignore: (keyof RepoQuery)[] = [],
): { qb: RepositoryQB; options: RepoQuery } {
const entity = this.entity;
const options = this.getValidOptions(_options);
@@ -305,23 +305,23 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
ignore,
alias: entity.name,
// already done
validate: false
validate: false,
}),
options
options,
};
}
async findId(
id: PrimaryFieldType,
_options?: Partial<Omit<RepoQuery, "where" | "limit" | "offset">>
_options?: Partial<Omit<RepoQuery, "where" | "limit" | "offset">>,
): Promise<RepositoryResponse<TBD[TB] | undefined>> {
const { qb, options } = this.buildQuery(
{
..._options,
where: { [this.entity.getPrimaryField().name]: id },
limit: 1
limit: 1,
},
["offset", "sort"]
["offset", "sort"],
);
return this.single(qb, options) as any;
@@ -329,12 +329,12 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
async findOne(
where: RepoQuery["where"],
_options?: Partial<Omit<RepoQuery, "where" | "limit" | "offset">>
_options?: Partial<Omit<RepoQuery, "where" | "limit" | "offset">>,
): Promise<RepositoryResponse<TBD[TB] | undefined>> {
const { qb, options } = this.buildQuery({
..._options,
where,
limit: 1
limit: 1,
});
return this.single(qb, options) as any;
@@ -344,7 +344,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const { qb, options } = this.buildQuery(_options);
await this.emgr.emit(
new Repository.Events.RepositoryFindManyBefore({ entity: this.entity, options })
new Repository.Events.RepositoryFindManyBefore({ entity: this.entity, options }),
);
const res = await this.performQuery(qb);
@@ -353,8 +353,8 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
new Repository.Events.RepositoryFindManyAfter({
entity: this.entity,
options,
data: res.data
})
data: res.data,
}),
);
return res as any;
@@ -364,7 +364,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
async findManyByReference(
id: PrimaryFieldType,
reference: string,
_options?: Partial<Omit<RepoQuery, "limit" | "offset">>
_options?: Partial<Omit<RepoQuery, "limit" | "offset">>,
): Promise<RepositoryResponse<EntityData>> {
const entity = this.entity;
const listable_relations = this.em.relations.listableRelationsOf(entity);
@@ -372,7 +372,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
if (!relation) {
throw new Error(
`Relation "${reference}" not found or not listable on entity "${entity.name}"`
`Relation "${reference}" not found or not listable on entity "${entity.name}"`,
);
}
@@ -380,7 +380,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
const refQueryOptions = relation.getReferenceQuery(newEntity, id as number, reference);
if (!("where" in refQueryOptions) || Object.keys(refQueryOptions.where as any).length === 0) {
throw new Error(
`Invalid reference query for "${reference}" on entity "${newEntity.name}"`
`Invalid reference query for "${reference}" on entity "${newEntity.name}"`,
);
}
@@ -389,8 +389,8 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
...refQueryOptions,
where: {
...refQueryOptions.where,
..._options?.where
}
..._options?.where,
},
};
return this.cloneFor(newEntity).findMany(findManyOptions);
@@ -415,7 +415,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
sql: compiled.sql,
parameters: [...compiled.parameters],
result,
count: result[0]?.count ?? 0
count: result[0]?.count ?? 0,
};
}
@@ -441,7 +441,7 @@ export class Repository<TBD extends object = DefaultDB, TB extends keyof TBD = a
sql: compiled.sql,
parameters: [...compiled.parameters],
result,
exists: result[0]!.count > 0
exists: result[0]!.count > 0,
};
}
}

View File

@@ -6,14 +6,14 @@ import {
exp,
isBooleanLike,
isPrimitive,
makeValidator
makeValidator,
} from "core";
import type {
DeleteQueryBuilder,
ExpressionBuilder,
ExpressionWrapper,
SelectQueryBuilder,
UpdateQueryBuilder
UpdateQueryBuilder,
} from "kysely";
type Builder = ExpressionBuilder<any, any>;
@@ -34,58 +34,58 @@ const expressions = [
exp(
"$eq",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), "=", v)
(v, k, eb: Builder) => eb(key(k), "=", v),
),
exp(
"$ne",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), "!=", v)
(v, k, eb: Builder) => eb(key(k), "!=", v),
),
exp(
"$gt",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), ">", v)
(v, k, eb: Builder) => eb(key(k), ">", v),
),
exp(
"$gte",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), ">=", v)
(v, k, eb: Builder) => eb(key(k), ">=", v),
),
exp(
"$lt",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), "<", v)
(v, k, eb: Builder) => eb(key(k), "<", v),
),
exp(
"$lte",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), "<=", v)
(v, k, eb: Builder) => eb(key(k), "<=", v),
),
exp(
"$isnull",
(v: BooleanLike) => isBooleanLike(v),
(v, k, eb: Builder) => eb(key(k), v ? "is" : "is not", null)
(v, k, eb: Builder) => eb(key(k), v ? "is" : "is not", null),
),
exp(
"$in",
(v: any[]) => Array.isArray(v),
(v, k, eb: Builder) => eb(key(k), "in", v)
(v, k, eb: Builder) => eb(key(k), "in", v),
),
exp(
"$notin",
(v: any[]) => Array.isArray(v),
(v, k, eb: Builder) => eb(key(k), "not in", v)
(v, k, eb: Builder) => eb(key(k), "not in", v),
),
exp(
"$between",
(v: [number, number]) => Array.isArray(v) && v.length === 2,
(v, k, eb: Builder) => eb.between(key(k), v[0], v[1])
(v, k, eb: Builder) => eb.between(key(k), v[0], v[1]),
),
exp(
"$like",
(v: Primitive) => isPrimitive(v),
(v, k, eb: Builder) => eb(key(k), "like", String(v).replace(/\*/g, "%"))
)
(v, k, eb: Builder) => eb(key(k), "like", String(v).replace(/\*/g, "%")),
),
];
export type WhereQuery = FilterQuery<typeof expressions>;
@@ -103,7 +103,7 @@ export class WhereBuilder {
const fns = validator.build(query, {
value_is_kv: true,
exp_ctx: eb,
convert: true
convert: true,
});
if (fns.$or.length > 0 && fns.$and.length > 0) {
@@ -124,7 +124,7 @@ export class WhereBuilder {
const { keys } = validator.build(query, {
value_is_kv: true,
exp_ctx: () => null,
convert: true
convert: true,
});
return Array.from(keys);
}

View File

@@ -8,7 +8,7 @@ export class WithBuilder {
em: EntityManager<any>,
qb: RepositoryQB,
entity: Entity,
withs: RepoQuery["with"]
withs: RepoQuery["with"],
) {
if (!withs || !isObject(withs)) {
console.warn(`'withs' undefined or invalid, given: ${JSON.stringify(withs)}`);
@@ -36,8 +36,8 @@ export class WithBuilder {
if (query) {
subQuery = em.repo(other.entity).addOptionsToQueryBuilder(subQuery, query as any, {
ignore: ["with", "join", cardinality === 1 ? "limit" : undefined].filter(
Boolean
) as any
Boolean,
) as any,
});
}
@@ -64,7 +64,7 @@ export class WithBuilder {
const related = em.relationOf(entity, ref);
if (!related) {
throw new InvalidSearchParamsException(
`WITH: "${ref}" is not a relation of "${entity}"`
`WITH: "${ref}" is not a relation of "${entity}"`,
);
}
depth++;