{"version":3,"sources":["../../../src/chat-config/value-objects/_screen-rule.ts","../../../src/chat-config/builders/_screen-rule.ts"],"sourcesContent":["import type { CreateScreenRuleDTO } from '../contracts';\n\nconst clonePayload = (payload: CreateScreenRuleDTO): CreateScreenRuleDTO => ({\n  name: payload.name,\n  action: 'screen',\n  settings: {\n    ...(payload.settings.header !== undefined ? { header: { ...payload.settings.header } } : {}),\n    ...(payload.settings.body !== undefined ? { body: { ...payload.settings.body } } : {}),\n  },\n});\n\n/** Value object representing a complete screen-rule payload. */\nexport class ScreenRuleVO {\n  readonly payload: CreateScreenRuleDTO;\n\n  /**\n   * Creates a screen-rule value object from a complete payload.\n   * @param payload - The screen-rule payload to snapshot.\n   */\n  constructor(payload: CreateScreenRuleDTO) {\n    this.payload = clonePayload(payload);\n  }\n\n  /**\n   * Creates a value object from its JSON representation.\n   * @param payload - The screen-rule JSON payload.\n   * @returns A screen-rule value object containing a defensive snapshot.\n   */\n  static fromJSON(payload: CreateScreenRuleDTO): ScreenRuleVO {\n    return new ScreenRuleVO(payload);\n  }\n\n  /**\n   * Converts a screen-rule value object to JSON.\n   * @param screenRuleVO - The screen-rule value object to serialize.\n   * @returns A defensive copy of the screen-rule payload.\n   */\n  static toJSON(screenRuleVO: ScreenRuleVO): CreateScreenRuleDTO {\n    return clonePayload(screenRuleVO.payload);\n  }\n}\n","import type { CreateScreenRuleDTO, ScreenRuleBodyComponent, ScreenRuleHeaderComponent } from '../contracts';\nimport { ScreenRuleVO } from '../value-objects';\n\nconst clonePartialPayload = (payload: Partial<CreateScreenRuleDTO>): Partial<CreateScreenRuleDTO> => ({\n  ...payload,\n  ...(payload.settings !== undefined\n    ? {\n        settings: {\n          ...payload.settings,\n          ...(payload.settings.header !== undefined ? { header: { ...payload.settings.header } } : {}),\n          ...(payload.settings.body !== undefined ? { body: { ...payload.settings.body } } : {}),\n        },\n      }\n    : {}),\n});\n\n/** Fluent builder for creating validated screen-rule value objects. */\nexport class ScreenRuleBuilder {\n  private payload: Partial<CreateScreenRuleDTO> = {\n    action: 'screen',\n    settings: {},\n  };\n\n  private constructor(payload?: Partial<CreateScreenRuleDTO>) {\n    if (payload !== undefined) this.withRule(payload);\n  }\n\n  /**\n   * Creates a screen-rule builder.\n   * @param payload - Optional initial screen-rule values.\n   * @returns A new screen-rule builder.\n   */\n  static create(payload?: Partial<CreateScreenRuleDTO>): ScreenRuleBuilder {\n    return new ScreenRuleBuilder(payload);\n  }\n\n  /**\n   * Merges partial screen-rule values into the builder.\n   * @param payload - Screen-rule values to merge.\n   * @returns This builder instance.\n   */\n  withRule(payload: Partial<CreateScreenRuleDTO>): this {\n    const snapshot = clonePartialPayload(payload);\n\n    this.payload = {\n      ...this.payload,\n      ...snapshot,\n      action: 'screen',\n      settings: {\n        ...this.payload.settings,\n        ...snapshot.settings,\n      },\n    };\n\n    return this;\n  }\n\n  /**\n   * Sets the screen-rule name.\n   * @param name - The screen-rule name.\n   * @returns This builder instance.\n   */\n  withName(name: string): this {\n    this.payload.name = name;\n    return this;\n  }\n\n  /**\n   * Sets the screen-rule header.\n   * @param header - The header component.\n   * @returns This builder instance.\n   */\n  withHeader(header: ScreenRuleHeaderComponent): this {\n    this.payload.settings = {\n      ...this.payload.settings,\n      header: { ...header },\n    };\n    return this;\n  }\n\n  /**\n   * Sets the screen-rule body.\n   * @param body - The body component.\n   * @returns This builder instance.\n   */\n  withBody(body: ScreenRuleBodyComponent): this {\n    this.payload.settings = {\n      ...this.payload.settings,\n      body: { ...body },\n    };\n    return this;\n  }\n\n  /**\n   * Builds a validated screen-rule value object.\n   * @returns The completed screen-rule value object.\n   * @throws {Error} If required screen-rule fields are missing or invalid.\n   */\n  build(): ScreenRuleVO {\n    this.assertValidPayload(this.payload);\n\n    return ScreenRuleVO.fromJSON({\n      name: this.payload.name,\n      action: 'screen',\n      settings: {\n        ...(this.payload.settings.header !== undefined ? { header: { ...this.payload.settings.header } } : {}),\n        ...(this.payload.settings.body !== undefined ? { body: { ...this.payload.settings.body } } : {}),\n      },\n    });\n  }\n\n  private assertValidPayload(payload: Partial<CreateScreenRuleDTO>): asserts payload is CreateScreenRuleDTO {\n    const invalidFields: string[] = [];\n    const settings = payload.settings;\n    const hasHeader = settings?.header !== undefined;\n    const hasBody = settings?.body !== undefined;\n\n    if (typeof payload.name !== 'string' || payload.name.trim().length === 0) invalidFields.push('name');\n    if (!hasHeader && !hasBody) invalidFields.push('settings.header or settings.body');\n    if (\n      hasBody &&\n      (settings?.body === null || typeof settings?.body !== 'object' || typeof settings.body.content !== 'string')\n    )\n      invalidFields.push('settings.body.content');\n\n    if (invalidFields.length > 0)\n      throw new Error(`Cannot build screen rule. Invalid or missing fields: ${invalidFields.join(', ')}`);\n  }\n}\n"],"mappings":"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","names":[]}