{"version":3,"file":"filesystem-CpAldLfc.cjs","names":["VersionedStorageDomain","normalizePerPage","deepEqual","calculatePagination","FilesystemVersionedHelpers"],"sources":["../src/storage/domains/scorer-definitions/base.ts","../src/storage/domains/scorer-definitions/inmemory.ts","../src/storage/domains/scorer-definitions/filesystem.ts"],"sourcesContent":["import type {\n  StorageScorerDefinitionType,\n  StorageScorerDefinitionSnapshotType,\n  StorageResolvedScorerDefinitionType,\n  StorageCreateScorerDefinitionInput,\n  StorageUpdateScorerDefinitionInput,\n  StorageListScorerDefinitionsInput,\n  StorageListScorerDefinitionsOutput,\n  StorageListScorerDefinitionsResolvedOutput,\n} from '../../types';\nimport { VersionedStorageDomain } from '../versioned';\nimport type { VersionBase, CreateVersionInputBase, ListVersionsInputBase, ListVersionsOutputBase } from '../versioned';\n\n// ============================================================================\n// Scorer Definition Version Types\n// ============================================================================\n\n/**\n * Represents a stored version of a scorer definition's content.\n * Config fields are top-level on the version row (no nested snapshot object).\n */\nexport interface ScorerDefinitionVersion extends StorageScorerDefinitionSnapshotType, VersionBase {\n  /** ID of the scorer definition this version belongs to */\n  scorerDefinitionId: string;\n}\n\n/**\n * Input for creating a new scorer definition version.\n * Config fields are top-level (no nested snapshot object).\n */\nexport interface CreateScorerDefinitionVersionInput\n  extends StorageScorerDefinitionSnapshotType, CreateVersionInputBase {\n  /** ID of the scorer definition this version belongs to */\n  scorerDefinitionId: string;\n}\n\n/**\n * Sort direction for version listings.\n */\nexport type ScorerDefinitionVersionSortDirection = 'ASC' | 'DESC';\n\n/**\n * Fields that can be used for ordering version listings.\n */\nexport type ScorerDefinitionVersionOrderBy = 'versionNumber' | 'createdAt';\n\n/**\n * Input for listing scorer definition versions with pagination and sorting.\n */\nexport interface ListScorerDefinitionVersionsInput extends ListVersionsInputBase {\n  /** ID of the scorer definition to list versions for */\n  scorerDefinitionId: string;\n}\n\n/**\n * Output for listing scorer definition versions with pagination info.\n */\nexport interface ListScorerDefinitionVersionsOutput extends ListVersionsOutputBase<ScorerDefinitionVersion> {}\n\n// ============================================================================\n// ScorerDefinitionsStorage Base Class\n// ============================================================================\n\nexport abstract class ScorerDefinitionsStorage extends VersionedStorageDomain<\n  StorageScorerDefinitionType,\n  StorageScorerDefinitionSnapshotType,\n  StorageResolvedScorerDefinitionType,\n  ScorerDefinitionVersion,\n  CreateScorerDefinitionVersionInput,\n  ListScorerDefinitionVersionsInput,\n  ListScorerDefinitionVersionsOutput,\n  { scorerDefinition: StorageCreateScorerDefinitionInput },\n  StorageUpdateScorerDefinitionInput,\n  StorageListScorerDefinitionsInput | undefined,\n  StorageListScorerDefinitionsOutput,\n  StorageListScorerDefinitionsResolvedOutput\n> {\n  protected readonly listKey = 'scorerDefinitions';\n  protected readonly versionMetadataFields = [\n    'id',\n    'scorerDefinitionId',\n    'versionNumber',\n    'changedFields',\n    'changeMessage',\n    'createdAt',\n  ] satisfies (keyof ScorerDefinitionVersion)[];\n\n  constructor() {\n    super({\n      component: 'STORAGE',\n      name: 'SCORER_DEFINITIONS',\n    });\n  }\n}\n","import { deepEqual } from '../../../utils';\nimport { normalizePerPage, calculatePagination } from '../../base';\nimport type {\n  StorageScorerDefinitionType,\n  StorageCreateScorerDefinitionInput,\n  StorageUpdateScorerDefinitionInput,\n  StorageListScorerDefinitionsInput,\n  StorageListScorerDefinitionsOutput,\n  ThreadOrderBy,\n  ThreadSortDirection,\n} from '../../types';\nimport type { InMemoryDB } from '../inmemory-db';\nimport type {\n  ScorerDefinitionVersion,\n  CreateScorerDefinitionVersionInput,\n  ListScorerDefinitionVersionsInput,\n  ListScorerDefinitionVersionsOutput,\n  ScorerDefinitionVersionOrderBy,\n  ScorerDefinitionVersionSortDirection,\n} from './base';\nimport { ScorerDefinitionsStorage } from './base';\n\nexport class InMemoryScorerDefinitionsStorage extends ScorerDefinitionsStorage {\n  private db: InMemoryDB;\n\n  constructor({ db }: { db: InMemoryDB }) {\n    super();\n    this.db = db;\n  }\n\n  async dangerouslyClearAll(): Promise<void> {\n    this.db.scorerDefinitions.clear();\n    this.db.scorerDefinitionVersions.clear();\n  }\n\n  // ==========================================================================\n  // Scorer Definition CRUD Methods\n  // ==========================================================================\n\n  async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n    const scorer = this.db.scorerDefinitions.get(id);\n    return scorer ? this.deepCopyScorer(scorer) : null;\n  }\n\n  async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n    const { scorerDefinition } = input;\n\n    if (this.db.scorerDefinitions.has(scorerDefinition.id)) {\n      throw new Error(`Scorer definition with id ${scorerDefinition.id} already exists`);\n    }\n\n    const now = new Date();\n    const newScorer: StorageScorerDefinitionType = {\n      id: scorerDefinition.id,\n      status: 'draft',\n      activeVersionId: undefined,\n      authorId: scorerDefinition.authorId,\n      organizationId: scorerDefinition.organizationId,\n      projectId: scorerDefinition.projectId,\n      metadata: scorerDefinition.metadata,\n      createdAt: now,\n      updatedAt: now,\n    };\n\n    this.db.scorerDefinitions.set(scorerDefinition.id, newScorer);\n\n    // Extract config fields from the flat input (everything except scorer-record fields)\n    const {\n      id: _id,\n      authorId: _authorId,\n      organizationId: _organizationId,\n      projectId: _projectId,\n      metadata: _metadata,\n      ...snapshotConfig\n    } = scorerDefinition;\n\n    // Create version 1 from the config\n    const versionId = crypto.randomUUID();\n    await this.createVersion({\n      id: versionId,\n      scorerDefinitionId: scorerDefinition.id,\n      versionNumber: 1,\n      ...snapshotConfig,\n      changedFields: Object.keys(snapshotConfig),\n      changeMessage: 'Initial version',\n    });\n\n    // Return the thin scorer record\n    return this.deepCopyScorer(newScorer);\n  }\n\n  async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n    const { id, ...updates } = input;\n\n    const existingScorer = this.db.scorerDefinitions.get(id);\n    if (!existingScorer) {\n      throw new Error(`Scorer definition with id ${id} not found`);\n    }\n\n    // Separate metadata fields from config fields\n    const { authorId, activeVersionId, metadata, status } = updates;\n\n    // Update metadata fields on the scorer record\n    const updatedScorer: StorageScorerDefinitionType = {\n      ...existingScorer,\n      ...(authorId !== undefined && { authorId }),\n      ...(activeVersionId !== undefined && { activeVersionId }),\n      ...(status !== undefined && { status: status as StorageScorerDefinitionType['status'] }),\n      ...(metadata !== undefined && {\n        metadata: { ...existingScorer.metadata, ...metadata },\n      }),\n      updatedAt: new Date(),\n    };\n\n    // Save the updated scorer record\n    this.db.scorerDefinitions.set(id, updatedScorer);\n    return this.deepCopyScorer(updatedScorer);\n  }\n\n  async delete(id: string): Promise<void> {\n    // Idempotent delete\n    this.db.scorerDefinitions.delete(id);\n    // Also delete all versions for this scorer definition\n    await this.deleteVersionsByParentId(id);\n  }\n\n  async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n    const {\n      page = 0,\n      perPage: perPageInput,\n      orderBy,\n      authorId,\n      organizationId,\n      projectId,\n      metadata,\n      status,\n    } = args || {};\n    const { field, direction } = this.parseOrderBy(orderBy);\n\n    // Normalize perPage for query (false → MAX_SAFE_INTEGER, 0 → 0, undefined → 100)\n    const perPage = normalizePerPage(perPageInput, 100);\n\n    if (page < 0) {\n      throw new Error('page must be >= 0');\n    }\n\n    // Prevent unreasonably large page values\n    const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n    if (page * perPage > maxOffset) {\n      throw new Error('page value too large');\n    }\n\n    // Get all scorer definitions and apply filters\n    let scorers = Array.from(this.db.scorerDefinitions.values());\n\n    // Filter by status\n    if (status) {\n      scorers = scorers.filter(scorer => scorer.status === status);\n    }\n\n    // Filter by authorId if provided\n    if (authorId !== undefined) {\n      scorers = scorers.filter(scorer => scorer.authorId === authorId);\n    }\n\n    // Filter by organizationId if provided (multi-tenant scoping)\n    if (organizationId !== undefined) {\n      scorers = scorers.filter(scorer => scorer.organizationId === organizationId);\n    }\n\n    // Filter by projectId if provided (multi-tenant scoping)\n    if (projectId !== undefined) {\n      scorers = scorers.filter(scorer => scorer.projectId === projectId);\n    }\n\n    // Filter by metadata if provided (AND logic)\n    if (metadata && Object.keys(metadata).length > 0) {\n      scorers = scorers.filter(scorer => {\n        if (!scorer.metadata) return false;\n        return Object.entries(metadata).every(([key, value]) => deepEqual(scorer.metadata![key], value));\n      });\n    }\n\n    // Sort filtered scorer definitions\n    const sortedScorers = this.sortScorers(scorers, field, direction);\n\n    // Deep clone scorers to avoid mutation\n    const clonedScorers = sortedScorers.map(scorer => this.deepCopyScorer(scorer));\n\n    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n    return {\n      scorerDefinitions: clonedScorers.slice(offset, offset + perPage),\n      total: clonedScorers.length,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < clonedScorers.length,\n    };\n  }\n\n  // ==========================================================================\n  // Scorer Definition Version Methods\n  // ==========================================================================\n\n  async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n    // Check if version with this ID already exists\n    if (this.db.scorerDefinitionVersions.has(input.id)) {\n      throw new Error(`Version with id ${input.id} already exists`);\n    }\n\n    // Check for duplicate (scorerDefinitionId, versionNumber) pair\n    for (const version of this.db.scorerDefinitionVersions.values()) {\n      if (version.scorerDefinitionId === input.scorerDefinitionId && version.versionNumber === input.versionNumber) {\n        throw new Error(\n          `Version number ${input.versionNumber} already exists for scorer definition ${input.scorerDefinitionId}`,\n        );\n      }\n    }\n\n    const version: ScorerDefinitionVersion = {\n      ...input,\n      createdAt: new Date(),\n    };\n\n    // Deep clone before storing\n    this.db.scorerDefinitionVersions.set(input.id, this.deepCopyVersion(version));\n    return this.deepCopyVersion(version);\n  }\n\n  async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n    const version = this.db.scorerDefinitionVersions.get(id);\n    return version ? this.deepCopyVersion(version) : null;\n  }\n\n  async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n    for (const version of this.db.scorerDefinitionVersions.values()) {\n      if (version.scorerDefinitionId === scorerDefinitionId && version.versionNumber === versionNumber) {\n        return this.deepCopyVersion(version);\n      }\n    }\n    return null;\n  }\n\n  async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n    let latest: ScorerDefinitionVersion | null = null;\n    for (const version of this.db.scorerDefinitionVersions.values()) {\n      if (version.scorerDefinitionId === scorerDefinitionId) {\n        if (!latest || version.versionNumber > latest.versionNumber) {\n          latest = version;\n        }\n      }\n    }\n    return latest ? this.deepCopyVersion(latest) : null;\n  }\n\n  async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n    const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;\n    const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n    // Normalize perPage (false -> MAX_SAFE_INTEGER, 0 -> 0, undefined -> 20)\n    const perPage = normalizePerPage(perPageInput, 20);\n\n    if (page < 0) {\n      throw new Error('page must be >= 0');\n    }\n\n    const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n    if (page * perPage > maxOffset) {\n      throw new Error('page value too large');\n    }\n\n    // Filter versions by scorerDefinitionId\n    let versions = Array.from(this.db.scorerDefinitionVersions.values()).filter(\n      v => v.scorerDefinitionId === scorerDefinitionId,\n    );\n\n    // Sort versions\n    versions = this.sortVersions(versions, field, direction);\n\n    // Deep clone\n    const clonedVersions = versions.map(v => this.deepCopyVersion(v));\n\n    const total = clonedVersions.length;\n    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n    const paginatedVersions = clonedVersions.slice(offset, offset + perPage);\n\n    return {\n      versions: paginatedVersions,\n      total,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < total,\n    };\n  }\n\n  async deleteVersion(id: string): Promise<void> {\n    this.db.scorerDefinitionVersions.delete(id);\n  }\n\n  async deleteVersionsByParentId(entityId: string): Promise<void> {\n    const idsToDelete: string[] = [];\n    for (const [id, version] of this.db.scorerDefinitionVersions.entries()) {\n      if (version.scorerDefinitionId === entityId) {\n        idsToDelete.push(id);\n      }\n    }\n\n    for (const id of idsToDelete) {\n      this.db.scorerDefinitionVersions.delete(id);\n    }\n  }\n\n  async countVersions(scorerDefinitionId: string): Promise<number> {\n    let count = 0;\n    for (const version of this.db.scorerDefinitionVersions.values()) {\n      if (version.scorerDefinitionId === scorerDefinitionId) {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  // ==========================================================================\n  // Private Helper Methods\n  // ==========================================================================\n\n  private deepCopyScorer(scorer: StorageScorerDefinitionType): StorageScorerDefinitionType {\n    return {\n      ...scorer,\n      metadata: scorer.metadata ? { ...scorer.metadata } : scorer.metadata,\n    };\n  }\n\n  private deepCopyVersion(version: ScorerDefinitionVersion): ScorerDefinitionVersion {\n    return {\n      ...version,\n      model: version.model ? JSON.parse(JSON.stringify(version.model)) : version.model,\n      scoreRange: version.scoreRange ? JSON.parse(JSON.stringify(version.scoreRange)) : version.scoreRange,\n      presetConfig: version.presetConfig ? JSON.parse(JSON.stringify(version.presetConfig)) : version.presetConfig,\n      defaultSampling: version.defaultSampling\n        ? JSON.parse(JSON.stringify(version.defaultSampling))\n        : version.defaultSampling,\n      changedFields: version.changedFields ? [...version.changedFields] : version.changedFields,\n    };\n  }\n\n  private sortScorers(\n    scorers: StorageScorerDefinitionType[],\n    field: ThreadOrderBy,\n    direction: ThreadSortDirection,\n  ): StorageScorerDefinitionType[] {\n    return scorers.sort((a, b) => {\n      const aValue = a[field].getTime();\n      const bValue = b[field].getTime();\n\n      return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n    });\n  }\n\n  private sortVersions(\n    versions: ScorerDefinitionVersion[],\n    field: ScorerDefinitionVersionOrderBy,\n    direction: ScorerDefinitionVersionSortDirection,\n  ): ScorerDefinitionVersion[] {\n    return versions.sort((a, b) => {\n      let aVal: number;\n      let bVal: number;\n\n      if (field === 'createdAt') {\n        aVal = a.createdAt.getTime();\n        bVal = b.createdAt.getTime();\n      } else {\n        // versionNumber\n        aVal = a.versionNumber;\n        bVal = b.versionNumber;\n      }\n\n      return direction === 'ASC' ? aVal - bVal : bVal - aVal;\n    });\n  }\n}\n","import type { FilesystemDB } from '../../filesystem-db';\nimport { FilesystemVersionedHelpers } from '../../filesystem-versioned';\nimport type {\n  StorageScorerDefinitionType,\n  StorageCreateScorerDefinitionInput,\n  StorageUpdateScorerDefinitionInput,\n  StorageListScorerDefinitionsInput,\n  StorageListScorerDefinitionsOutput,\n} from '../../types';\nimport type {\n  ScorerDefinitionVersion,\n  CreateScorerDefinitionVersionInput,\n  ListScorerDefinitionVersionsInput,\n  ListScorerDefinitionVersionsOutput,\n} from './base';\nimport { ScorerDefinitionsStorage } from './base';\n\nexport class FilesystemScorerDefinitionsStorage extends ScorerDefinitionsStorage {\n  private helpers: FilesystemVersionedHelpers<StorageScorerDefinitionType, ScorerDefinitionVersion>;\n\n  constructor({ db }: { db: FilesystemDB }) {\n    super();\n    this.helpers = new FilesystemVersionedHelpers({\n      db,\n      entitiesFile: 'scorer-definitions.json',\n      parentIdField: 'scorerDefinitionId',\n      name: 'FilesystemScorerDefinitionsStorage',\n      versionMetadataFields: [\n        'id',\n        'scorerDefinitionId',\n        'versionNumber',\n        'changedFields',\n        'changeMessage',\n        'createdAt',\n      ],\n    });\n  }\n\n  override async init(): Promise<void> {\n    await this.helpers.db.init();\n  }\n\n  async dangerouslyClearAll(): Promise<void> {\n    await this.helpers.dangerouslyClearAll();\n  }\n\n  async getById(id: string): Promise<StorageScorerDefinitionType | null> {\n    return this.helpers.getById(id);\n  }\n\n  async create(input: { scorerDefinition: StorageCreateScorerDefinitionInput }): Promise<StorageScorerDefinitionType> {\n    const { scorerDefinition } = input;\n    const now = new Date();\n    const entity: StorageScorerDefinitionType = {\n      id: scorerDefinition.id,\n      status: 'draft',\n      activeVersionId: undefined,\n      authorId: scorerDefinition.authorId,\n      metadata: scorerDefinition.metadata,\n      createdAt: now,\n      updatedAt: now,\n    };\n\n    await this.helpers.createEntity(scorerDefinition.id, entity);\n\n    const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;\n    const versionId = crypto.randomUUID();\n    await this.createVersion({\n      id: versionId,\n      scorerDefinitionId: scorerDefinition.id,\n      versionNumber: 1,\n      ...snapshotConfig,\n      changedFields: Object.keys(snapshotConfig),\n      changeMessage: 'Initial version',\n    } as CreateScorerDefinitionVersionInput);\n\n    return structuredClone(entity);\n  }\n\n  async update(input: StorageUpdateScorerDefinitionInput): Promise<StorageScorerDefinitionType> {\n    const { id, ...updates } = input;\n    return this.helpers.updateEntity(id, updates);\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.helpers.deleteEntity(id);\n  }\n\n  async list(args?: StorageListScorerDefinitionsInput): Promise<StorageListScorerDefinitionsOutput> {\n    const { page, perPage, orderBy, authorId, metadata, status } = args || {};\n    const result = await this.helpers.listEntities({\n      page,\n      perPage,\n      orderBy,\n      listKey: 'scorerDefinitions',\n      filters: { authorId, metadata, status },\n    });\n    return result as unknown as StorageListScorerDefinitionsOutput;\n  }\n\n  async createVersion(input: CreateScorerDefinitionVersionInput): Promise<ScorerDefinitionVersion> {\n    return this.helpers.createVersion(input as ScorerDefinitionVersion);\n  }\n\n  async getVersion(id: string): Promise<ScorerDefinitionVersion | null> {\n    return this.helpers.getVersion(id);\n  }\n\n  async getVersionByNumber(scorerDefinitionId: string, versionNumber: number): Promise<ScorerDefinitionVersion | null> {\n    return this.helpers.getVersionByNumber(scorerDefinitionId, versionNumber);\n  }\n\n  async getLatestVersion(scorerDefinitionId: string): Promise<ScorerDefinitionVersion | null> {\n    return this.helpers.getLatestVersion(scorerDefinitionId);\n  }\n\n  async listVersions(input: ListScorerDefinitionVersionsInput): Promise<ListScorerDefinitionVersionsOutput> {\n    const result = await this.helpers.listVersions(input, 'scorerDefinitionId');\n    return result as ListScorerDefinitionVersionsOutput;\n  }\n\n  async deleteVersion(id: string): Promise<void> {\n    await this.helpers.deleteVersion(id);\n  }\n\n  async deleteVersionsByParentId(entityId: string): Promise<void> {\n    await this.helpers.deleteVersionsByParentId(entityId);\n  }\n\n  async countVersions(scorerDefinitionId: string): Promise<number> {\n    return this.helpers.countVersions(scorerDefinitionId);\n  }\n}\n"],"mappings":"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"}