diff --git a/packages/orm/src/client/client-impl.ts b/packages/orm/src/client/client-impl.ts index f8331a81..834aef79 100644 --- a/packages/orm/src/client/client-impl.ts +++ b/packages/orm/src/client/client-impl.ts @@ -11,6 +11,7 @@ import { type KyselyProps, } from 'kysely'; import type { GetModels, ProcedureDef, SchemaDef } from '../schema'; +import type { AnyKysely } from '../utils/kysely-utils'; import type { UnwrapTuplePromises } from '../utils/type-utils'; import type { AuthType, @@ -53,7 +54,7 @@ export const ZenStackClient = function ( export class ClientImpl { private kysely: ToKysely; - private kyselyRaw: ToKysely; + private kyselyRaw: AnyKysely; public readonly $options: ClientOptions; public readonly $schema: Schema; readonly kyselyProps: KyselyProps; @@ -192,7 +193,7 @@ export class ClientImpl { arg: ZenStackPromise[], options?: { isolationLevel?: TransactionIsolationLevel }, ) { - const execute = async (tx: Kysely) => { + const execute = async (tx: AnyKysely) => { const txClient = new ClientImpl(this.schema, this.$options, this); txClient.kysely = tx; const result: any[] = []; @@ -210,7 +211,7 @@ export class ClientImpl { if (options?.isolationLevel) { txBuilder = txBuilder.setIsolationLevel(options.isolationLevel); } - return txBuilder.execute((tx) => execute(tx as Kysely)); + return txBuilder.execute((tx) => execute(tx as AnyKysely)); } } diff --git a/packages/orm/src/client/contract.ts b/packages/orm/src/client/contract.ts index 8e30795a..e9383162 100644 --- a/packages/orm/src/client/contract.ts +++ b/packages/orm/src/client/contract.ts @@ -1,5 +1,6 @@ import type Decimal from 'decimal.js'; import { type GetModels, type IsDelegateModel, type ProcedureDef, type SchemaDef } from '../schema'; +import type { AnyKysely } from '../utils/kysely-utils'; import type { OrUndefinedIf, Simplify, UnwrapTuplePromises } from '../utils/type-utils'; import type { TRANSACTION_UNSUPPORTED_METHODS } from './constants'; import type { @@ -116,7 +117,7 @@ export type ClientContract = { /** * The raw Kysely query builder without any ZenStack enhancements. */ - readonly $qbRaw: ToKysely; + readonly $qbRaw: AnyKysely; /** * Starts an interactive transaction. diff --git a/packages/orm/src/client/crud/dialects/base-dialect.ts b/packages/orm/src/client/crud/dialects/base-dialect.ts index 6099d4cd..e0e3cb18 100644 --- a/packages/orm/src/client/crud/dialects/base-dialect.ts +++ b/packages/orm/src/client/crud/dialects/base-dialect.ts @@ -64,7 +64,7 @@ export abstract class BaseCrudDialect { } buildFilterSortTake( - model: GetModels, + model: string, args: FindArgs, true>, query: SelectQueryBuilder, modelAlias: string, @@ -767,7 +767,7 @@ export abstract class BaseCrudDialect { invariant(v === 'asc' || v === 'desc', `invalid orderBy value for field "${field}"`); result = result.orderBy( (eb) => aggregate(eb, buildFieldRef(model, k, modelAlias), field as AGGREGATE_OPERATORS), - sql.raw(this.negateSort(v, negated)), + this.negateSort(v, negated), ); } continue; @@ -780,7 +780,7 @@ export abstract class BaseCrudDialect { invariant(v === 'asc' || v === 'desc', `invalid orderBy value for field "${field}"`); result = result.orderBy( (eb) => eb.fn.count(buildFieldRef(model, k, modelAlias)), - sql.raw(this.negateSort(v, negated)), + this.negateSort(v, negated), ); } continue; @@ -803,10 +803,12 @@ export abstract class BaseCrudDialect { (value.sort === 'asc' || value.sort === 'desc') && (value.nulls === 'first' || value.nulls === 'last') ) { - result = result.orderBy( - fieldRef, - sql.raw(`${this.negateSort(value.sort, negated)} nulls ${value.nulls}`), - ); + result = result.orderBy(fieldRef, (ob) => { + const dir = this.negateSort(value.sort, negated); + ob = dir === 'asc' ? ob.asc() : ob.desc(); + ob = value.nulls === 'first' ? ob.nullsFirst() : ob.nullsLast(); + return ob; + }); } } else { // order by relation diff --git a/packages/orm/src/client/crud/operations/base.ts b/packages/orm/src/client/crud/operations/base.ts index a51a2557..ce788831 100644 --- a/packages/orm/src/client/crud/operations/base.ts +++ b/packages/orm/src/client/crud/operations/base.ts @@ -1,6 +1,7 @@ import { createId } from '@paralleldrive/cuid2'; import { clone, enumerate, invariant, isPlainObject } from '@zenstackhq/common-helpers'; import { + createQueryId, DeleteResult, expressionBuilder, sql, @@ -16,6 +17,7 @@ import { ulid } from 'ulid'; import * as uuid from 'uuid'; import type { BuiltinType, Expression, FieldDef } from '../../../schema'; import { ExpressionUtils, type GetModels, type ModelDef, type SchemaDef } from '../../../schema'; +import type { AnyKysely } from '../../../utils/kysely-utils'; import { extractFields, fieldsToSelectObject } from '../../../utils/object-utils'; import { NUMERIC_FIELD_TYPES } from '../../constants'; import { TransactionIsolationLevel, type ClientContract, type CRUD } from '../../contract'; @@ -71,9 +73,9 @@ export type CoreCrudOperation = export type AllCrudOperation = CoreCrudOperation | 'findUniqueOrThrow' | 'findFirstOrThrow'; // context for nested relation operations -export type FromRelationContext = { +export type FromRelationContext = { // the model where the relation field is defined - model: GetModels; + model: string; // the relation field name field: string; // the parent entity's id fields and values @@ -101,7 +103,7 @@ export abstract class BaseOperationHandler { return this.client.$options; } - protected get kysely() { + protected get kysely(): AnyKysely { return this.client.$qb; } @@ -144,8 +146,8 @@ export abstract class BaseOperationHandler { } protected async read( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, args: FindArgs, true> | undefined, ): Promise { // table @@ -173,10 +175,9 @@ export abstract class BaseOperationHandler { query = query.modifyEnd(this.makeContextComment({ model, operation: 'read' })); let result: any[] = []; - const queryId = { queryId: `zenstack-${createId()}` }; - const compiled = kysely.getExecutor().compileQuery(query.toOperationNode(), queryId); + const compiled = kysely.getExecutor().compileQuery(query.toOperationNode(), createQueryId()); try { - const r = await kysely.getExecutor().executeQuery(compiled, queryId); + const r = await kysely.getExecutor().executeQuery(compiled); result = r.rows; } catch (err) { throw createDBQueryError('Failed to execute query', err, compiled.sql, compiled.parameters); @@ -185,11 +186,7 @@ export abstract class BaseOperationHandler { return result; } - protected async readUnique( - kysely: ToKysely, - model: GetModels, - args: FindArgs, true>, - ) { + protected async readUnique(kysely: AnyKysely, model: string, args: FindArgs, true>) { const result = await this.read(kysely, model, { ...args, take: 1 }); return result[0] ?? null; } @@ -248,10 +245,10 @@ export abstract class BaseOperationHandler { } protected async create( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, data: any, - fromRelation?: FromRelationContext, + fromRelation?: FromRelationContext, creatingForDelegate = false, returnFields?: string[], ): Promise { @@ -426,12 +423,7 @@ export abstract class BaseOperationHandler { return { baseEntity, remainingFields }; } - private async buildFkAssignments( - kysely: ToKysely, - model: GetModels, - relationField: string, - entity: any, - ) { + private async buildFkAssignments(kysely: AnyKysely, model: string, relationField: string, entity: any) { const parentFkFields: any = {}; invariant(relationField, 'parentField must be defined if parentModel is defined'); @@ -462,7 +454,7 @@ export abstract class BaseOperationHandler { } private async handleManyToManyRelation( - kysely: ToKysely, + kysely: AnyKysely, action: Action, leftModel: string, leftField: string, @@ -517,7 +509,7 @@ export abstract class BaseOperationHandler { } } - private resetManyToManyRelation(kysely: ToKysely, model: GetModels, field: string, parentIds: any) { + private resetManyToManyRelation(kysely: AnyKysely, model: string, field: string, parentIds: any) { invariant(Object.keys(parentIds).length === 1, 'parentIds must have exactly one field'); const parentId = Object.values(parentIds)[0]!; @@ -598,15 +590,15 @@ export abstract class BaseOperationHandler { } private async processNoneOwnedRelationForCreate( - kysely: ToKysely, - contextModel: GetModels, + kysely: AnyKysely, + contextModel: string, relationFieldName: string, payload: any, parentEntity: any, ) { const relationFieldDef = this.requireField(contextModel, relationFieldName); const relationModel = relationFieldDef.type as GetModels; - const fromRelationContext: FromRelationContext = { + const fromRelationContext: FromRelationContext = { model: contextModel, field: relationFieldName, ids: parentEntity, @@ -669,7 +661,7 @@ export abstract class BaseOperationHandler { model: GetModels, input: { data: any; skipDuplicates?: boolean }, returnData: ReturnData, - fromRelation?: FromRelationContext, + fromRelation?: FromRelationContext, fieldsToReturn?: string[], ): Promise { if (!input.data || (Array.isArray(input.data) && input.data.length === 0)) { @@ -902,11 +894,11 @@ export abstract class BaseOperationHandler { } protected async update( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, where: any, data: any, - fromRelation?: FromRelationContext, + fromRelation?: FromRelationContext, allowRelationUpdate = true, throwIfNotFound = true, fieldsToReturn?: string[], @@ -1081,7 +1073,7 @@ export abstract class BaseOperationHandler { } } - private processScalarFieldUpdateData(model: GetModels, field: string, data: any): any { + private processScalarFieldUpdateData(model: string, field: string, data: any): any { const fieldDef = this.requireField(model, field); if (this.isNumericIncrementalUpdate(fieldDef, data[field])) { // numeric fields incremental updates @@ -1106,7 +1098,7 @@ export abstract class BaseOperationHandler { return ['increment', 'decrement', 'multiply', 'divide', 'set'].some((key) => key in value); } - private isIdFilter(model: GetModels, filter: any) { + private isIdFilter(model: string, filter: any) { if (!filter || typeof filter !== 'object') { return false; } @@ -1147,7 +1139,7 @@ export abstract class BaseOperationHandler { } private transformIncrementalUpdate( - model: GetModels, + model: string, field: string, fieldDef: FieldDef, payload: Record, @@ -1174,7 +1166,7 @@ export abstract class BaseOperationHandler { } private transformScalarListUpdate( - model: GetModels, + model: string, field: string, fieldDef: FieldDef, payload: Record, @@ -1199,7 +1191,7 @@ export abstract class BaseOperationHandler { return NUMERIC_FIELD_TYPES.includes(fieldDef.type) && !fieldDef.array; } - private makeContextComment(_context: { model: GetModels; operation: CRUD }) { + private makeContextComment(_context: { model: string; operation: CRUD }) { return sql``; // return sql.raw(`${CONTEXT_COMMENT_PREFIX}${JSON.stringify(context)}`); } @@ -1208,13 +1200,13 @@ export abstract class BaseOperationHandler { ReturnData extends boolean, Result = ReturnData extends true ? unknown[] : { count: number }, >( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, where: any, data: any, limit: number | undefined, returnData: ReturnData, - filterModel?: GetModels, + filterModel?: string, fieldsToReturn?: string[], ): Promise { if (typeof data !== 'object') { @@ -1312,11 +1304,11 @@ export abstract class BaseOperationHandler { } private async processBaseModelUpdateMany( - kysely: ToKysely, + kysely: AnyKysely, model: string, where: any, updateFields: any, - filterModel: GetModels, + filterModel: string, ) { const thisUpdateFields: any = {}; const remainingFields: any = {}; @@ -1343,14 +1335,14 @@ export abstract class BaseOperationHandler { return { baseResult, remainingFields }; } - private buildIdFieldRefs(kysely: ToKysely, model: GetModels) { + private buildIdFieldRefs(kysely: AnyKysely, model: string) { const idFields = requireIdFields(this.schema, model); return idFields.map((f) => kysely.dynamic.ref(`${model}.${f}`)); } private async processRelationUpdates( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, field: string, fieldDef: FieldDef, parentIds: any, @@ -1358,7 +1350,7 @@ export abstract class BaseOperationHandler { throwIfNotFound: boolean, ) { const fieldModel = fieldDef.type as GetModels; - const fromRelationContext: FromRelationContext = { + const fromRelationContext: FromRelationContext = { model, field, ids: parentIds, @@ -1481,12 +1473,7 @@ export abstract class BaseOperationHandler { // #region relation manipulation - protected async connectRelation( - kysely: ToKysely, - model: GetModels, - data: any, - fromRelation: FromRelationContext, - ) { + protected async connectRelation(kysely: AnyKysely, model: string, data: any, fromRelation: FromRelationContext) { const _data = this.normalizeRelationManipulationInput(model, data); if (_data.length === 0) { return; @@ -1593,7 +1580,7 @@ export abstract class BaseOperationHandler { kysely: ToKysely, model: GetModels, data: any, - fromRelation: FromRelationContext, + fromRelation: FromRelationContext, ) { const _data = enumerate(data); if (_data.length === 0) { @@ -1610,12 +1597,7 @@ export abstract class BaseOperationHandler { } } - protected async disconnectRelation( - kysely: ToKysely, - model: GetModels, - data: any, - fromRelation: FromRelationContext, - ) { + protected async disconnectRelation(kysely: AnyKysely, model: string, data: any, fromRelation: FromRelationContext) { let disconnectConditions: any[] = []; if (typeof data === 'boolean') { if (data === false) { @@ -1727,12 +1709,7 @@ export abstract class BaseOperationHandler { } } - protected async setRelation( - kysely: ToKysely, - model: GetModels, - data: any, - fromRelation: FromRelationContext, - ) { + protected async setRelation(kysely: AnyKysely, model: string, data: any, fromRelation: FromRelationContext) { const _data = this.normalizeRelationManipulationInput(model, data); const m2m = getManyToManyRelation(this.schema, fromRelation.model, fromRelation.field); @@ -1843,7 +1820,7 @@ export abstract class BaseOperationHandler { kysely: ToKysely, model: GetModels, data: any, - fromRelation: FromRelationContext, + fromRelation: FromRelationContext, throwForNotFound: boolean, ) { let deleteConditions: any[] = []; @@ -1864,7 +1841,7 @@ export abstract class BaseOperationHandler { } let deleteResult: QueryResult; - let deleteFromModel: GetModels; + let deleteFromModel: string; const m2m = getManyToManyRelation(this.schema, fromRelation.model, fromRelation.field); if (m2m) { @@ -1934,18 +1911,18 @@ export abstract class BaseOperationHandler { } } - private normalizeRelationManipulationInput(model: GetModels, data: any) { + private normalizeRelationManipulationInput(model: string, data: any) { return enumerate(data).map((item) => flattenCompoundUniqueFilters(this.schema, model, item)); } // #endregion protected async delete( - kysely: ToKysely, - model: GetModels, + kysely: AnyKysely, + model: string, where: any, limit?: number, - filterModel?: GetModels, + filterModel?: string, fieldsToReturn?: string[], ): Promise> { filterModel ??= model; @@ -2036,13 +2013,13 @@ export abstract class BaseOperationHandler { } private async processBaseModelDelete( - kysely: ToKysely, + kysely: AnyKysely, model: string, where: any, limit: number | undefined, - filterModel: GetModels, + filterModel: string, ) { - return this.delete(kysely, model as GetModels, where, limit, filterModel); + return this.delete(kysely, model, where, limit, filterModel); } protected makeIdSelect(model: string) { @@ -2077,10 +2054,7 @@ export abstract class BaseOperationHandler { return returnRelation; } - protected async safeTransaction( - callback: (tx: ToKysely) => Promise, - isolationLevel?: IsolationLevel, - ) { + protected async safeTransaction(callback: (tx: AnyKysely) => Promise, isolationLevel?: IsolationLevel) { if (this.kysely.isTransaction) { // proceed directly if already in a transaction return callback(this.kysely); @@ -2093,7 +2067,7 @@ export abstract class BaseOperationHandler { } // Given a unique filter of a model, load the entity and return its id fields - private getEntityIds(kysely: ToKysely, model: GetModels, uniqueFilter: any) { + private getEntityIds(kysely: AnyKysely, model: string, uniqueFilter: any) { return this.readUnique(kysely, model, { where: uniqueFilter, select: this.makeIdSelect(model), @@ -2124,21 +2098,17 @@ export abstract class BaseOperationHandler { } } - protected makeQueryId(operation: string) { - return { queryId: `${operation}-${createId()}` }; - } - - protected executeQuery(kysely: ToKysely, query: Compilable, operation: string) { - return kysely.executeQuery(query.compile(), this.makeQueryId(operation)); + protected executeQuery(kysely: ToKysely, query: Compilable, _operation: string) { + return kysely.executeQuery(query.compile()); } - protected async executeQueryTakeFirst(kysely: ToKysely, query: Compilable, operation: string) { - const result = await kysely.executeQuery(query.compile(), this.makeQueryId(operation)); + protected async executeQueryTakeFirst(kysely: ToKysely, query: Compilable, _operation: string) { + const result = await kysely.executeQuery(query.compile()); return result.rows[0]; } - protected async executeQueryTakeFirstOrThrow(kysely: ToKysely, query: Compilable, operation: string) { - const result = await kysely.executeQuery(query.compile(), this.makeQueryId(operation)); + protected async executeQueryTakeFirstOrThrow(kysely: ToKysely, query: Compilable, _operation: string) { + const result = await kysely.executeQuery(query.compile()); if (result.rows.length === 0) { throw new ORMError(ORMErrorReason.NOT_FOUND, 'No rows found'); } diff --git a/packages/orm/src/client/crud/operations/group-by.ts b/packages/orm/src/client/crud/operations/group-by.ts index 44829ee2..cae9f65f 100644 --- a/packages/orm/src/client/crud/operations/group-by.ts +++ b/packages/orm/src/client/crud/operations/group-by.ts @@ -12,7 +12,7 @@ export class GroupByOperationHandler extends BaseOpera const parsedArgs = this.inputValidator.validateGroupByArgs(this.model, normalizedArgs); let query = this.kysely - .selectFrom(this.model) + .selectFrom(this.model as string) .where(() => this.dialect.buildFilter(this.model, this.model, parsedArgs?.where)); const fieldRef = (field: string) => this.dialect.fieldRef(this.model, field); diff --git a/packages/orm/src/client/executor/zenstack-query-executor.ts b/packages/orm/src/client/executor/zenstack-query-executor.ts index 622c3238..e53552c5 100644 --- a/packages/orm/src/client/executor/zenstack-query-executor.ts +++ b/packages/orm/src/client/executor/zenstack-query-executor.ts @@ -1,7 +1,9 @@ import { invariant } from '@zenstackhq/common-helpers'; +import type { QueryId } from 'kysely'; import { AndNode, CompiledQuery, + createQueryId, DefaultQueryExecutor, DeleteQueryNode, InsertQueryNode, @@ -31,8 +33,6 @@ import { stripAlias } from '../query-utils'; import { QueryNameMapper } from './name-mapper'; import type { ZenStackDriver } from './zenstack-driver'; -type QueryId = { queryId: string }; - type MutationQueryNode = InsertQueryNode | UpdateQueryNode | DeleteQueryNode; type MutationInfo = { @@ -79,7 +79,7 @@ export class ZenStackQueryExecutor extends DefaultQuer return this.client.$options; } - override executeQuery(compiledQuery: CompiledQuery, queryId: QueryId) { + override executeQuery(compiledQuery: CompiledQuery) { // proceed with the query with kysely interceptors // if the query is a raw query, we need to carry over the parameters const queryParams = (compiledQuery as any).$raw ? compiledQuery.parameters : undefined; @@ -98,7 +98,7 @@ export class ZenStackQueryExecutor extends DefaultQuer connection, compiledQuery.query, queryParams, - queryId.queryId, + compiledQuery.queryId, ); if (startedTx) { await this.driver.commitTransaction(connection); @@ -127,7 +127,7 @@ export class ZenStackQueryExecutor extends DefaultQuer connection: DatabaseConnection, queryNode: RootOperationNode, parameters: readonly unknown[] | undefined, - queryId: string, + queryId: QueryId, ) { let proceed = (q: RootOperationNode) => this.proceedQuery(connection, q, parameters, queryId); @@ -182,14 +182,16 @@ export class ZenStackQueryExecutor extends DefaultQuer connection: DatabaseConnection, query: RootOperationNode, parameters: readonly unknown[] | undefined, - queryId: string, + queryId: QueryId, ) { let compiled: CompiledQuery | undefined; if (this.suppressMutationHooks || !this.isMutationNode(query) || !this.hasEntityMutationPlugins) { // no need to handle mutation hooks, just proceed const finalQuery = this.processNameMapping(query); - compiled = this.compileQuery(finalQuery); + + // inherit the original queryId + compiled = this.compileQuery(finalQuery, queryId); if (parameters) { compiled = { ...compiled, parameters }; } @@ -208,7 +210,9 @@ export class ZenStackQueryExecutor extends DefaultQuer }; } const finalQuery = this.processNameMapping(query); - compiled = this.compileQuery(finalQuery); + + // inherit the original queryId + compiled = this.compileQuery(finalQuery, queryId); if (parameters) { compiled = { ...compiled, parameters }; } @@ -374,7 +378,7 @@ export class ZenStackQueryExecutor extends DefaultQuer mutationInfo: MutationInfo, loadBeforeMutationEntities: () => Promise[] | undefined>, client: ClientContract, - queryId: string, + queryId: QueryId, ) { if (this.options.plugins) { for (const plugin of this.options.plugins) { @@ -401,7 +405,7 @@ export class ZenStackQueryExecutor extends DefaultQuer mutationInfo: MutationInfo, client: ClientContract, filterFor: 'inTx' | 'outTx' | 'all', - queryId: string, + queryId: QueryId, ) { const hooks: AfterEntityMutationCallback[] = []; @@ -460,7 +464,7 @@ export class ZenStackQueryExecutor extends DefaultQuer ...selectQueryNode, where: this.andNodes(selectQueryNode.where, where), }; - const compiled = this.compileQuery(selectQueryNode); + const compiled = this.compileQuery(selectQueryNode, createQueryId()); // execute the query directly with the given connection to avoid triggering // any other side effects const result = await connection.executeQuery(compiled); diff --git a/packages/orm/src/client/plugin.ts b/packages/orm/src/client/plugin.ts index eda9e4a7..edf5c86a 100644 --- a/packages/orm/src/client/plugin.ts +++ b/packages/orm/src/client/plugin.ts @@ -1,4 +1,4 @@ -import type { OperationNode, QueryResult, RootOperationNode, UnknownRow } from 'kysely'; +import type { OperationNode, QueryId, QueryResult, RootOperationNode, UnknownRow } from 'kysely'; import type { ClientContract } from '.'; import type { GetModels, SchemaDef } from '../schema'; import type { MaybePromise } from '../utils/type-utils'; @@ -138,7 +138,7 @@ type MutationHooksArgs = { * A query ID that uniquely identifies the mutation operation. You can use it to correlate * data between the before and after mutation hooks. */ - queryId: string; + queryId: QueryId; }; export type BeforeEntityMutationCallback = ( diff --git a/packages/orm/src/utils/kysely-utils.ts b/packages/orm/src/utils/kysely-utils.ts index 404b33a1..140cb6a8 100644 --- a/packages/orm/src/utils/kysely-utils.ts +++ b/packages/orm/src/utils/kysely-utils.ts @@ -11,6 +11,7 @@ import { CaseNode, CastNode, CheckConstraintNode, + CollateNode, ColumnDefinitionNode, ColumnNode, ColumnUpdateNode, @@ -48,6 +49,7 @@ import { JSONPathLegNode, JSONPathNode, JSONReferenceNode, + Kysely, LimitNode, ListNode, MatchedNode, @@ -59,6 +61,7 @@ import { OnNode, OperationNodeVisitor, OperatorNode, + OrActionNode, OrderByItemNode, OrderByNode, OrNode, @@ -71,7 +74,9 @@ import { RawNode, ReferenceNode, ReferencesNode, + RefreshMaterializedViewNode, RenameColumnNode, + RenameConstraintNode, ReturningNode, SchemableIdentifierNode, SelectAllNode, @@ -390,4 +395,18 @@ export class DefaultOperationNodeVisitor extends OperationNodeVisitor { protected override visitOutput(node: OutputNode): void { this.defaultVisit(node); } + protected override visitRenameConstraint(node: RenameConstraintNode): void { + this.defaultVisit(node); + } + protected override visitRefreshMaterializedView(node: RefreshMaterializedViewNode): void { + this.defaultVisit(node); + } + protected override visitOrAction(node: OrActionNode): void { + this.defaultVisit(node); + } + protected override visitCollate(node: CollateNode): void { + this.defaultVisit(node); + } } + +export type AnyKysely = Kysely; diff --git a/packages/plugins/policy/src/expression-transformer.ts b/packages/plugins/policy/src/expression-transformer.ts index a86f793f..8036eb16 100644 --- a/packages/plugins/policy/src/expression-transformer.ts +++ b/packages/plugins/policy/src/expression-transformer.ts @@ -50,8 +50,8 @@ import { trueNode, } from './utils'; -export type ExpressionTransformerContext = { - model: GetModels; +export type ExpressionTransformerContext = { + model: string; alias?: string; operation: CRUD_EXT; memberFilter?: OperationNode; @@ -97,7 +97,7 @@ export class ExpressionTransformer { return this.schema.authType!; } - transform(expression: Expression, context: ExpressionTransformerContext): OperationNode { + transform(expression: Expression, context: ExpressionTransformerContext): OperationNode { const handler = expressionHandlers.get(expression.kind); if (!handler) { throw new Error(`Unsupported expression kind: ${expression.kind}`); @@ -116,12 +116,12 @@ export class ExpressionTransformer { @expr('array') // @ts-expect-error - private _array(expr: ArrayExpression, context: ExpressionTransformerContext) { + private _array(expr: ArrayExpression, context: ExpressionTransformerContext) { return ValueListNode.create(expr.items.map((item) => this.transform(item, context))); } @expr('field') - private _field(expr: FieldExpression, context: ExpressionTransformerContext) { + private _field(expr: FieldExpression, context: ExpressionTransformerContext) { const fieldDef = QueryUtils.requireField(this.schema, context.model, expr.field); if (!fieldDef.relation) { return this.createColumnRef(expr.field, context); @@ -154,7 +154,7 @@ export class ExpressionTransformer { @expr('binary') // @ts-ignore - private _binary(expr: BinaryExpression, context: ExpressionTransformerContext) { + private _binary(expr: BinaryExpression, context: ExpressionTransformerContext) { if (expr.op === '&&') { return conjunction(this.dialect, [this.transform(expr.left, context), this.transform(expr.right, context)]); } else if (expr.op === '||') { @@ -216,7 +216,7 @@ export class ExpressionTransformer { } } - private normalizeBinaryOperationOperands(expr: BinaryExpression, context: ExpressionTransformerContext) { + private normalizeBinaryOperationOperands(expr: BinaryExpression, context: ExpressionTransformerContext) { // if relation fields are used directly in comparison, it can only be compared with null, // so we normalize the args with the id field (use the first id field if multiple) let normalizedLeft: Expression = expr.left; @@ -238,7 +238,7 @@ export class ExpressionTransformer { return { normalizedLeft, normalizedRight }; } - private transformCollectionPredicate(expr: BinaryExpression, context: ExpressionTransformerContext) { + private transformCollectionPredicate(expr: BinaryExpression, context: ExpressionTransformerContext) { invariant(expr.op === '?' || expr.op === '!' || expr.op === '^', 'expected "?" or "!" or "^" operator'); if (this.isAuthCall(expr.left) || this.isAuthMember(expr.left)) { @@ -273,7 +273,7 @@ export class ExpressionTransformer { let predicateFilter = this.transform(expr.right, { ...context, - model: newContextModel as GetModels, + model: newContextModel, alias: undefined, }); @@ -296,7 +296,7 @@ export class ExpressionTransformer { }); } - private transformAuthBinary(expr: BinaryExpression, context: ExpressionTransformerContext) { + private transformAuthBinary(expr: BinaryExpression, context: ExpressionTransformerContext) { if (expr.op !== '==' && expr.op !== '!=') { throw createUnsupportedError( `Unsupported operator for \`auth()\` in policy of model "${context.model}": ${expr.op}`, @@ -364,7 +364,7 @@ export class ExpressionTransformer { @expr('unary') // @ts-ignore - private _unary(expr: UnaryExpression, context: ExpressionTransformerContext) { + private _unary(expr: UnaryExpression, context: ExpressionTransformerContext) { // only '!' operator for now invariant(expr.op === '!', 'only "!" operator is supported'); return logicalNot(this.dialect, this.transform(expr.operand, context)); @@ -379,12 +379,12 @@ export class ExpressionTransformer { @expr('call') // @ts-ignore - private _call(expr: CallExpression, context: ExpressionTransformerContext) { + private _call(expr: CallExpression, context: ExpressionTransformerContext) { const result = this.transformCall(expr, context); return result.toOperationNode(); } - private transformCall(expr: CallExpression, context: ExpressionTransformerContext) { + private transformCall(expr: CallExpression, context: ExpressionTransformerContext) { const func = this.getFunctionImpl(expr.function); if (!func) { throw createUnsupportedError(`Function not implemented: ${expr.function}`); @@ -396,7 +396,7 @@ export class ExpressionTransformer { { client: this.client, dialect: this.dialect, - model: context.model, + model: context.model as GetModels, modelAlias: context.alias ?? context.model, operation: context.operation, }, @@ -421,7 +421,7 @@ export class ExpressionTransformer { private transformCallArg( eb: ExpressionBuilder, arg: Expression, - context: ExpressionTransformerContext, + context: ExpressionTransformerContext, ): OperandExpression { if (ExpressionUtils.isLiteral(arg)) { return eb.val(arg.value); @@ -449,7 +449,7 @@ export class ExpressionTransformer { @expr('member') // @ts-ignore - private _member(expr: MemberExpression, context: ExpressionTransformerContext) { + private _member(expr: MemberExpression, context: ExpressionTransformerContext) { // `auth()` member access if (this.isAuthCall(expr.receiver)) { return this.valueMemberAccess(this.auth, expr, this.authType); @@ -516,7 +516,7 @@ export class ExpressionTransformer { if (fieldDef.relation) { const relation = this.transformRelationAccess(member, fieldDef.type, { ...restContext, - model: fromModel as GetModels, + model: fromModel, alias: undefined, }); @@ -567,7 +567,7 @@ export class ExpressionTransformer { private transformRelationAccess( field: string, relationModel: string, - context: ExpressionTransformerContext, + context: ExpressionTransformerContext, ): SelectQueryNode { const m2m = QueryUtils.getManyToManyRelation(this.schema, context.model, field); if (m2m) { @@ -627,7 +627,7 @@ export class ExpressionTransformer { private transformManyToManyRelationAccess( m2m: NonNullable>, - context: ExpressionTransformerContext, + context: ExpressionTransformerContext, ) { const eb = expressionBuilder(); const relationQuery = eb @@ -647,7 +647,7 @@ export class ExpressionTransformer { return relationQuery.toOperationNode(); } - private createColumnRef(column: string, context: ExpressionTransformerContext) { + private createColumnRef(column: string, context: ExpressionTransformerContext) { // if field comes from a delegate base model, we need to use the join alias // of that base model @@ -716,12 +716,12 @@ export class ExpressionTransformer { } } - private isRelationField(expr: Expression, model: GetModels) { + private isRelationField(expr: Expression, model: string) { const fieldDef = this.getFieldDefFromFieldRef(expr, model); return !!fieldDef?.relation; } - private getFieldDefFromFieldRef(expr: Expression, model: GetModels): FieldDef | undefined { + private getFieldDefFromFieldRef(expr: Expression, model: string): FieldDef | undefined { if (ExpressionUtils.isField(expr)) { return QueryUtils.requireField(this.schema, model, expr.field); } else if ( diff --git a/packages/plugins/policy/src/policy-handler.ts b/packages/plugins/policy/src/policy-handler.ts index 36c2da21..e1c24d6c 100644 --- a/packages/plugins/policy/src/policy-handler.ts +++ b/packages/plugins/policy/src/policy-handler.ts @@ -5,7 +5,6 @@ import { ExpressionUtils, type BuiltinType, type Expression, - type GetModels, type MemberExpression, type SchemaDef, } from '@zenstackhq/orm/schema'; @@ -237,13 +236,13 @@ export class PolicyHandler extends OperationNodeTransf } } - hasPostUpdatePolicies(model: GetModels) { + hasPostUpdatePolicies(model: string) { const policies = this.getModelPolicies(model, 'post-update'); return policies.length > 0; } private async loadBeforeUpdateEntities( - model: GetModels, + model: string, where: WhereNode | undefined, proceed: ProceedKyselyQueryFunction, ) { @@ -266,7 +265,7 @@ export class PolicyHandler extends OperationNodeTransf return { fields: beforeUpdateAccessFields, rows: result.rows }; } - private getFieldsAccessForBeforeUpdatePolicies(model: GetModels) { + private getFieldsAccessForBeforeUpdatePolicies(model: string) { const policies = this.getModelPolicies(model, 'post-update'); if (policies.length === 0) { return undefined; @@ -471,7 +470,7 @@ export class PolicyHandler extends OperationNodeTransf private async enforcePreCreatePolicy( node: InsertQueryNode, - mutationModel: GetModels, + mutationModel: string, isManyToManyJoinTable: boolean, proceed: ProceedKyselyQueryFunction, ) { @@ -499,7 +498,7 @@ export class PolicyHandler extends OperationNodeTransf } private async enforcePreCreatePolicyForManyToManyJoinTable( - tableName: GetModels, + tableName: string, fields: string[], values: OperationNode[], proceed: ProceedKyselyQueryFunction, @@ -523,13 +522,13 @@ export class PolicyHandler extends OperationNodeTransf const eb = expressionBuilder(); - const filterA = this.buildPolicyFilter(m2m.firstModel as GetModels, undefined, 'update'); + const filterA = this.buildPolicyFilter(m2m.firstModel, undefined, 'update'); const queryA = eb .selectFrom(m2m.firstModel) .where(eb(eb.ref(`${m2m.firstModel}.${m2m.firstIdField}`), '=', aValue)) .select(() => new ExpressionWrapper(filterA).as('$t')); - const filterB = this.buildPolicyFilter(m2m.secondModel as GetModels, undefined, 'update'); + const filterB = this.buildPolicyFilter(m2m.secondModel, undefined, 'update'); const queryB = eb .selectFrom(m2m.secondModel) .where(eb(eb.ref(`${m2m.secondModel}.${m2m.secondIdField}`), '=', bValue)) @@ -547,14 +546,14 @@ export class PolicyHandler extends OperationNodeTransf const result = await proceed(queryNode); if (!result.rows[0]?.$conditionA) { throw createRejectedByPolicyError( - m2m.firstModel as GetModels, + m2m.firstModel, RejectedByPolicyReason.CANNOT_READ_BACK, `many-to-many relation participant model "${m2m.firstModel}" not updatable`, ); } if (!result.rows[0]?.$conditionB) { throw createRejectedByPolicyError( - m2m.secondModel as GetModels, + m2m.secondModel, RejectedByPolicyReason.NO_ACCESS, `many-to-many relation participant model "${m2m.secondModel}" not updatable`, ); @@ -562,7 +561,7 @@ export class PolicyHandler extends OperationNodeTransf } private async enforcePreCreatePolicyForOne( - model: GetModels, + model: string, fields: string[], values: OperationNode[], proceed: ProceedKyselyQueryFunction, @@ -630,7 +629,7 @@ export class PolicyHandler extends OperationNodeTransf private unwrapCreateValueRows( node: OperationNode, - model: GetModels, + model: string, fields: string[], isManyToManyJoinTable: boolean, ) { @@ -645,7 +644,7 @@ export class PolicyHandler extends OperationNodeTransf private unwrapCreateValueRow( data: readonly unknown[], - model: GetModels, + model: string, fields: string[], isImplicitManyToManyJoinTable: boolean, ) { @@ -689,7 +688,7 @@ export class PolicyHandler extends OperationNodeTransf return result; } - private tryGetConstantPolicy(model: GetModels, operation: PolicyOperation) { + private tryGetConstantPolicy(model: string, operation: PolicyOperation) { const policies = this.getModelPolicies(model, operation); if (!policies.some((p) => p.kind === 'allow')) { // no allow -> unconditional deny @@ -760,7 +759,7 @@ export class PolicyHandler extends OperationNodeTransf private getMutationModel(node: InsertQueryNode | UpdateQueryNode | DeleteQueryNode) { const r = match(node) .when(InsertQueryNode.is, (node) => ({ - mutationModel: getTableName(node.into) as GetModels, + mutationModel: getTableName(node.into)!, alias: undefined, })) .when(UpdateQueryNode.is, (node) => { @@ -794,7 +793,7 @@ export class PolicyHandler extends OperationNodeTransf return InsertQueryNode.is(node) || UpdateQueryNode.is(node) || DeleteQueryNode.is(node); } - buildPolicyFilter(model: GetModels, alias: string | undefined, operation: CRUD_EXT): OperationNode { + buildPolicyFilter(model: string, alias: string | undefined, operation: CRUD_EXT): OperationNode { // first check if it's a many-to-many join table, and if so, handle specially const m2mFilter = this.getModelPolicyFilterForManyToManyJoinTable(model, alias, operation); if (m2mFilter) { @@ -841,9 +840,9 @@ export class PolicyHandler extends OperationNodeTransf return combinedPolicy; } - private extractTableName(node: OperationNode): { model: GetModels; alias?: string } | undefined { + private extractTableName(node: OperationNode): { model: string; alias?: string } | undefined { if (TableNode.is(node)) { - return { model: node.table.identifier.name as GetModels }; + return { model: node.table.identifier.name }; } if (AliasNode.is(node)) { const inner = this.extractTableName(node.node); @@ -880,12 +879,7 @@ export class PolicyHandler extends OperationNodeTransf }, undefined); } - private compilePolicyCondition( - model: GetModels, - alias: string | undefined, - operation: CRUD_EXT, - policy: Policy, - ) { + private compilePolicyCondition(model: string, alias: string | undefined, operation: CRUD_EXT, policy: Policy) { return new ExpressionTransformer(this.client).transform(policy.condition, { model, alias, @@ -998,18 +992,18 @@ export class PolicyHandler extends OperationNodeTransf .selectFrom(m2m.firstModel) .whereRef(`${m2m.firstModel}.${m2m.firstIdField}`, '=', `${joinTable}.A`) .select(() => - new ExpressionWrapper( - this.buildPolicyFilter(m2m.firstModel as GetModels, undefined, checkForOperation), - ).as('$conditionA'), + new ExpressionWrapper(this.buildPolicyFilter(m2m.firstModel, undefined, checkForOperation)).as( + '$conditionA', + ), ); const bQuery = eb .selectFrom(m2m.secondModel) .whereRef(`${m2m.secondModel}.${m2m.secondIdField}`, '=', `${joinTable}.B`) .select(() => - new ExpressionWrapper( - this.buildPolicyFilter(m2m.secondModel as GetModels, undefined, checkForOperation), - ).as('$conditionB'), + new ExpressionWrapper(this.buildPolicyFilter(m2m.secondModel, undefined, checkForOperation)).as( + '$conditionB', + ), ); return eb.and([aQuery, bQuery]).toOperationNode(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b36a2e6a..23f034f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,8 +13,8 @@ catalogs: specifier: ^7.6.13 version: 7.6.13 '@types/node': - specifier: ^20.17.24 - version: 20.17.24 + specifier: ^20.19.0 + version: 20.19.24 '@types/react': specifier: 19.2.0 version: 19.2.0 @@ -31,8 +31,8 @@ catalogs: specifier: ^10.4.3 version: 10.6.0 kysely: - specifier: ^0.27.6 - version: 0.27.6 + specifier: ~0.28.8 + version: 0.28.8 langium: specifier: 3.5.0 version: 3.5.0 @@ -82,7 +82,7 @@ importers: version: 9.29.0 '@types/node': specifier: 'catalog:' - version: 20.17.24 + version: 20.19.24 eslint: specifier: ~9.29.0 version: 9.29.0(jiti@2.6.1) @@ -112,7 +112,7 @@ importers: version: 8.34.1(eslint@9.29.0(jiti@2.6.1))(typescript@5.8.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@20.17.24)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@20.19.24)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) yaml: specifier: ^2.8.0 version: 2.8.0 @@ -304,7 +304,7 @@ importers: version: link:../../config/vitest-config kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 sql.js: specifier: ^1.13.0 version: 1.13.0 @@ -399,7 +399,7 @@ importers: version: 1.3.0 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 nanoid: specifier: ^5.0.9 version: 5.0.9 @@ -457,7 +457,7 @@ importers: version: link:../../orm kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 ts-pattern: specifier: 'catalog:' version: 5.7.1 @@ -520,7 +520,7 @@ importers: version: 10.6.0 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 packages/server: dependencies: @@ -551,7 +551,7 @@ importers: devDependencies: '@sveltejs/kit': specifier: ^2.48.3 - version: 2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) '@types/body-parser': specifier: ^1.19.6 version: 1.19.6 @@ -599,7 +599,7 @@ importers: version: 16.0.1(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) nuxt: specifier: ^4.2.0 - version: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) + version: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) supertest: specifier: ^7.1.4 version: 7.1.4 @@ -635,7 +635,7 @@ importers: version: 11.0.2 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 pg: specifier: 'catalog:' version: 8.16.3 @@ -654,7 +654,7 @@ importers: version: 7.6.13 '@types/node': specifier: 'catalog:' - version: 20.17.24 + version: 20.19.24 '@types/pg': specifier: ^8.11.11 version: 8.11.11 @@ -709,7 +709,7 @@ importers: version: 12.2.0 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 lorem-ipsum: specifier: ^2.0.8 version: 2.0.8 @@ -730,8 +730,8 @@ importers: specifier: 'catalog:' version: 7.6.13 '@types/node': - specifier: ^20 - version: 20.17.24 + specifier: 'catalog:' + version: 20.19.24 '@types/react': specifier: 'catalog:' version: 19.2.0 @@ -767,7 +767,7 @@ importers: version: 12.2.0 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 devDependencies: '@types/better-sqlite3': specifier: 'catalog:' @@ -816,7 +816,7 @@ importers: version: 10.6.0 kysely: specifier: 'catalog:' - version: 0.27.6 + version: 0.28.8 ulid: specifier: ^3.0.0 version: 3.0.0 @@ -2807,6 +2807,9 @@ packages: '@types/node@20.17.24': resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} + '@types/node@20.19.24': + resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==} + '@types/parse-path@7.1.0': resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. @@ -5022,9 +5025,9 @@ packages: knitwork@1.2.0: resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} - kysely@0.27.6: - resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==} - engines: {node: '>=14.0.0'} + kysely@0.28.8: + resolution: {integrity: sha512-QUOgl5ZrS9IRuhq5FvOKFSsD/3+IA6MLE81/bOOTRA/YQpKDza2sFdN5g6JCB9BOpqMJDGefLCQ9F12hRS13TA==} + engines: {node: '>=20.0.0'} langium-cli@3.5.0: resolution: {integrity: sha512-TPIzIiMAQwTPPphtHGSrFXo4t0orx3aRh0syg9jnOihvBkBDvsQdJP9fBo9hp5Qaosklpc2CfbH0wh/dkgZcJA==} @@ -6946,6 +6949,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@7.16.0: resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} engines: {node: '>=20.18.1'} @@ -8291,11 +8297,11 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.7.0(magicast@0.3.5)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@nuxt/devtools-kit@2.7.0(magicast@0.3.5)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: '@nuxt/kit': 3.20.0(magicast@0.3.5) execa: 8.0.1 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) transitivePeerDependencies: - magicast @@ -8310,12 +8316,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@2.7.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@nuxt/devtools@2.7.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: - '@nuxt/devtools-kit': 2.7.0(magicast@0.3.5)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@nuxt/devtools-kit': 2.7.0(magicast@0.3.5)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) '@nuxt/devtools-wizard': 2.7.0 '@nuxt/kit': 3.20.0(magicast@0.3.5) - '@vue/devtools-core': 7.7.7(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vue/devtools-core': 7.7.7(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) '@vue/devtools-kit': 7.7.7 birpc: 2.6.1 consola: 3.4.2 @@ -8340,9 +8346,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-plugin-inspect: 11.3.3(@nuxt/kit@3.20.0(magicast@0.3.5))(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) - vite-plugin-vue-tracer: 1.0.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite-plugin-inspect: 11.3.3(@nuxt/kit@3.20.0(magicast@0.3.5))(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite-plugin-vue-tracer: 1.0.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -8428,7 +8434,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.2.0(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(ioredis@5.8.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.8.3)': + '@nuxt/nitro-server@4.2.0(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(ioredis@5.8.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.8.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.2.0(magicast@0.5.0) @@ -8446,7 +8452,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.12.9(better-sqlite3@12.2.0) - nuxt: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) + nuxt: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) pathe: 2.0.3 pkg-types: 2.3.0 radix3: 1.1.2 @@ -8517,12 +8523,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.2.0(@types/node@20.17.24)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1)': + '@nuxt/vite-builder@4.2.0(@types/node@20.19.24)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1)': dependencies: '@nuxt/kit': 4.2.0(magicast@0.5.0) '@rollup/plugin-replace': 6.0.3(rollup@4.52.5) - '@vitejs/plugin-vue': 6.0.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vitejs/plugin-vue': 6.0.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) autoprefixer: 10.4.21(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -8537,7 +8543,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) + nuxt: 4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -8546,9 +8552,9 @@ snapshots: std-env: 3.10.0 ufo: 1.6.1 unenv: 2.0.0-rc.24 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-plugin-checker: 0.11.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite-plugin-checker: 0.11.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) vue: 3.5.22(typescript@5.8.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -9057,11 +9063,11 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/kit@2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/kit@2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -9074,26 +9080,26 @@ snapshots: set-cookie-parser: 2.7.2 sirv: 3.0.2 svelte: 5.43.3 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) debug: 4.4.1 svelte: 5.43.3 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) debug: 4.4.1 deepmerge: 4.3.1 magic-string: 0.30.21 svelte: 5.43.3 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) transitivePeerDependencies: - supports-color @@ -9343,6 +9349,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@20.19.24': + dependencies: + undici-types: 6.21.0 + '@types/parse-path@7.1.0': dependencies: parse-path: 7.1.0 @@ -9684,22 +9694,22 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.45 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) '@vitest/expect@3.2.4': @@ -9710,13 +9720,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -9821,14 +9831,14 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.7.7(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vue/devtools-core@7.7.7(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite-hot-client: 2.1.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) vue: 3.5.22(typescript@5.8.3) transitivePeerDependencies: - vite @@ -11974,7 +11984,7 @@ snapshots: knitwork@1.2.0: {} - kysely@0.27.6: {} + kysely@0.28.8: {} langium-cli@3.5.0: dependencies: @@ -12490,16 +12500,16 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1): + nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1): dependencies: '@dxup/nuxt': 0.2.0(magicast@0.5.0) '@nuxt/cli': 3.29.3(magicast@0.5.0) - '@nuxt/devtools': 2.7.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@nuxt/devtools': 2.7.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) '@nuxt/kit': 4.2.0(magicast@0.5.0) - '@nuxt/nitro-server': 4.2.0(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(ioredis@5.8.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.8.3) + '@nuxt/nitro-server': 4.2.0(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(ioredis@5.8.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.8.3) '@nuxt/schema': 4.2.0 '@nuxt/telemetry': 2.6.6(magicast@0.5.0) - '@nuxt/vite-builder': 4.2.0(@types/node@20.17.24)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.17.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1) + '@nuxt/vite-builder': 4.2.0(@types/node@20.19.24)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.0)(nuxt@4.2.0(@parcel/watcher@2.5.1)(@types/node@20.19.24)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.2.0)(db0@0.3.4(better-sqlite3@12.2.0))(eslint@9.29.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.5.0)(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.52.5)(terser@5.44.0)(tsx@4.20.3)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1) '@unhead/vue': 2.0.19(vue@3.5.22(typescript@5.8.3)) '@vue/shared': 3.5.22 c12: 3.3.1(magicast@0.5.0) @@ -12551,7 +12561,7 @@ snapshots: vue-router: 4.6.3(vue@3.5.22(typescript@5.8.3)) optionalDependencies: '@parcel/watcher': 2.5.1 - '@types/node': 20.17.24 + '@types/node': 20.19.24 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -14251,6 +14261,8 @@ snapshots: undici-types@6.19.8: {} + undici-types@6.21.0: {} + undici@7.16.0: {} unenv@2.0.0-rc.24: @@ -14408,23 +14420,23 @@ snapshots: vary@1.1.2: {} - vite-dev-rpc@1.1.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): + vite-dev-rpc@1.1.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): dependencies: birpc: 2.6.1 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-hot-client: 2.1.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite-hot-client: 2.1.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) - vite-hot-client@2.1.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): dependencies: - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-node@3.2.4(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + vite-node@3.2.4(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14439,13 +14451,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): + vite-node@3.2.4(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -14460,7 +14472,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.11.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): + vite-plugin-checker@0.11.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -14469,14 +14481,14 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.29.0(jiti@2.6.1) optionator: 0.9.4 typescript: 5.8.3 - vite-plugin-inspect@11.3.3(@nuxt/kit@3.20.0(magicast@0.3.5))(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): + vite-plugin-inspect@11.3.3(@nuxt/kit@3.20.0(magicast@0.3.5))(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): dependencies: ansis: 4.2.0 debug: 4.4.1 @@ -14486,24 +14498,24 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vite-dev-rpc: 1.1.0(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite-dev-rpc: 1.1.0(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) optionalDependencies: '@nuxt/kit': 3.20.0(magicast@0.3.5) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.0.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)): + vite-plugin-vue-tracer@1.0.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.7 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) - vite@6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + vite@6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -14512,7 +14524,7 @@ snapshots: rollup: 4.44.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.19.24 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 @@ -14520,7 +14532,7 @@ snapshots: tsx: 4.20.3 yaml: 2.8.0 - vite@6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): + vite@6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -14529,7 +14541,7 @@ snapshots: rollup: 4.44.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.19.24 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 @@ -14537,7 +14549,7 @@ snapshots: tsx: 4.20.3 yaml: 2.8.1 - vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): + vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -14546,7 +14558,7 @@ snapshots: rollup: 4.44.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.19.24 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 @@ -14554,15 +14566,15 @@ snapshots: tsx: 4.20.3 yaml: 2.8.1 - vitefu@1.1.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)): optionalDependencies: - vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.12(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - vitest@3.2.4(@types/node@20.17.24)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + vitest@3.2.4(@types/node@20.19.24)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -14580,11 +14592,11 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.19.24 happy-dom: 20.0.10 jsdom: 27.1.0 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 85916fa7..50f3e3fb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,14 +3,14 @@ packages: - samples/** - tests/** catalog: - kysely: ^0.27.6 + kysely: ~0.28.8 zod: ^4.0.0 prisma: ^6.10.0 langium: 3.5.0 langium-cli: 3.5.0 ts-pattern: ^5.7.1 typescript: ^5.8.0 - '@types/node': ^20.17.24 + '@types/node': ^20.19.0 tmp: ^0.2.3 '@types/tmp': ^0.2.6 'zod-validation-error': ^4.0.1 diff --git a/samples/next.js/package.json b/samples/next.js/package.json index 690215fd..a3cefe12 100644 --- a/samples/next.js/package.json +++ b/samples/next.js/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@tailwindcss/postcss": "^4", "@types/better-sqlite3": "catalog:", - "@types/node": "^20", + "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", "@zenstackhq/cli": "workspace:*", diff --git a/tests/e2e/orm/client-api/name-mapping.test.ts b/tests/e2e/orm/client-api/name-mapping.test.ts index d95616d5..5d9151e7 100644 --- a/tests/e2e/orm/client-api/name-mapping.test.ts +++ b/tests/e2e/orm/client-api/name-mapping.test.ts @@ -121,7 +121,7 @@ describe('Name mapping tests', () => { .selectFrom('User') .select(['email']) .whereRef('email', '=', 'email') - .orderBy(['email']) + .orderBy('email') .executeTakeFirst(), ).resolves.toMatchObject({ email: 'u1@test.com', diff --git a/tests/e2e/orm/plugin-infra/entity-mutation-hooks.test.ts b/tests/e2e/orm/plugin-infra/entity-mutation-hooks.test.ts index 6a64b3de..1b0eea2f 100644 --- a/tests/e2e/orm/plugin-infra/entity-mutation-hooks.test.ts +++ b/tests/e2e/orm/plugin-infra/entity-mutation-hooks.test.ts @@ -77,12 +77,12 @@ describe('Entity mutation hooks tests', () => { email: args.action === 'update' ? 'u1@test.com' : 'u3@test.com', }), ]); - queryIds[args.action].before = args.queryId; + queryIds[args.action].before = args.queryId.queryId; } }, async afterEntityMutation(args) { if (args.action === 'update' || args.action === 'delete') { - queryIds[args.action].after = args.queryId; + queryIds[args.action].after = args.queryId.queryId; } }, }, diff --git a/tests/e2e/orm/validation/toplevel.test.ts b/tests/e2e/orm/validation/toplevel.test.ts index f4204b62..fab16d63 100644 --- a/tests/e2e/orm/validation/toplevel.test.ts +++ b/tests/e2e/orm/validation/toplevel.test.ts @@ -21,7 +21,6 @@ describe('Toplevel field validation tests', () => { await db.foo.create({ data: { id: 100 } }); for (const action of ['create', 'update', 'upsert', 'updateMany']) { - console.log(`Testing action: ${action}`); const _t = action === 'create' ? (data: any) => db.foo.create({ data }) diff --git a/tests/regression/test/issue-204/regression.test.ts b/tests/regression/test/issue-204/regression.test.ts index d7d78948..48ae4cc1 100644 --- a/tests/regression/test/issue-204/regression.test.ts +++ b/tests/regression/test/issue-204/regression.test.ts @@ -3,7 +3,9 @@ import { type Configuration, ShirtColor } from './models'; it('tests issue 204', () => { const config: Configuration = { teamColors: [ShirtColor.Black, ShirtColor.Blue] }; - console.log(config.teamColors?.[0]); + check(config.teamColors?.[0]); const config1: Configuration = {}; - console.log(config1); + check(config1); }); + +function check(_arg: unknown) {} diff --git a/tests/regression/test/v2-migrated/issue-1271.test.ts b/tests/regression/test/v2-migrated/issue-1271.test.ts index 8c264a36..c8e5ef8a 100644 --- a/tests/regression/test/v2-migrated/issue-1271.test.ts +++ b/tests/regression/test/v2-migrated/issue-1271.test.ts @@ -123,7 +123,6 @@ model AnotherTest { locale: 'locale3', }, }); - console.log('test3 created:', test3); const updated2 = await db.linkingTable.update({ where: { test_id_another_test_id: { diff --git a/tests/regression/test/v2-migrated/issue-1698.test.ts b/tests/regression/test/v2-migrated/issue-1698.test.ts index 3df2e823..b5cea267 100644 --- a/tests/regression/test/v2-migrated/issue-1698.test.ts +++ b/tests/regression/test/v2-migrated/issue-1698.test.ts @@ -42,31 +42,25 @@ describe('Regression for issue #1698', () => { const door1 = await db.ironDoor.create({ data: { strength: 100, color: 'blue' }, }); - console.log(door1); const door2 = await db.woodenDoor.create({ data: { texture: 'pine', color: 'red' }, }); - console.log(door2); - const house1 = await db.privateHouse.create({ + await db.privateHouse.create({ data: { size: 5000, door: { connect: { id: door1.id } } }, }); - console.log(house1); - const house2 = await db.skyscraper.create({ + await db.skyscraper.create({ data: { height: 3000, door: { connect: { id: door2.id } } }, }); - console.log(house2); const r1 = await db.privateHouse.findFirst({ include: { door: true } }); - console.log(r1); expect(r1).toMatchObject({ door: { color: 'blue', strength: 100 }, }); const r2 = (await db.skyscraper.findMany({ include: { door: true } }))[0]; - console.log(r2); expect(r2).toMatchObject({ door: { color: 'red', texture: 'pine' }, });