{"version":3,"file":"index.mjs","names":["#domainEvents","z","z","z","z","z","z","z","z","z"],"sources":["../src/aggregate-root.ts","../src/envelope.ts","../src/command.ts","../src/event.ts","../src/exception.base.ts","../src/filter/base.filter.ts","../src/filter/conjunction.ts","../src/utils.ts","../src/value-objects/value-object.ts","../src/filter/fields/field-value.base.ts","../src/filter/fields/boolean/boolean-field-value.ts","../src/filter/fields/boolean/boolean-field.type.ts","../src/filter/operators.ts","../src/filter/fields/boolean/boolean.filter.ts","../src/filter/fields/date/date-field-value.ts","../src/filter/fields/date/date-field.type.ts","../src/filter/fields/date/date.filter.ts","../src/filter/fields/number/number-field-value.ts","../src/filter/fields/number/number-field.type.ts","../src/filter/fields/number/number.filter.ts","../src/filter/fields/string/string-field-value.ts","../src/filter/fields/string/string-field.type.ts","../src/filter/fields/string/string.filter.ts","../src/specification.ts","../src/filter/filter-specification.base.ts","../src/filter/specifications/boolean.specification.ts","../src/filter/specifications/date.specification.ts","../src/filter/specifications/number.specification.ts","../src/filter/specifications/string.specification.ts","../src/filter/filter.ts","../src/filter/root-filter.ts","../src/pagination.ts","../src/query.ts","../src/sort.ts","../src/value-objects/boolean.vo.ts","../src/value-objects/date.vo.ts","../src/value-objects/id.vo.ts","../src/value-objects/nanoid.vo.ts","../src/value-objects/integer.vo.ts","../src/value-objects/string.vo.ts","../src/value-objects/uuid.vo.ts","../src/value-objects/email.vo.ts","../src/value-objects/color.vo.ts","../src/classes/is-present.ts"],"sourcesContent":["import { type BaseEnvelope } from \"./envelope\";\n\nexport abstract class AggregateRoot<\n  E extends BaseEnvelope<object, object>,\n> {\n  #domainEvents: E[] = [];\n\n  get domainEvents() {\n    return this.#domainEvents;\n  }\n\n  set domainEvents(events: E[]) {\n    this.#domainEvents = events;\n  }\n\n  addDomainEvent(event: E) {\n    this.#domainEvents.push(event);\n  }\n\n  removeEvents(events: E[]) {\n    this.#domainEvents = this.#domainEvents.filter(\n      (event) => !events.includes(event),\n    );\n  }\n}\n","import { v4 } from \"uuid\";\n\nexport interface IMessageMetadata {\n  keys?: Record<string, unknown>;\n  headers?: Record<string, unknown>;\n}\n\nexport interface IEnvelope<\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> {\n  id: string;\n  payload: TPayload;\n  meta: TMeta;\n}\n\nconst defaultMeta = {\n  keys: {},\n  headers: {},\n} as IMessageMetadata;\n\nexport abstract class BaseEnvelope<\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> implements IEnvelope<TPayload, TMeta> {\n  constructor(\n    public readonly payload: TPayload,\n    public readonly meta: TMeta = defaultMeta as TMeta,\n    public readonly id = v4(),\n  ) {}\n}\n","import { v4 } from \"uuid\";\nimport {\n  type IEnvelope,\n  type IMessageMetadata,\n  BaseEnvelope,\n} from \"./envelope\";\nimport { z } from \"zod\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n  Partial<Command>;\n\nexport const commandSchema = <\n  TName extends string,\n  TPayload extends z.ZodTypeAny,\n>(\n  commandName: TName,\n  payload: TPayload,\n) =>\n  z.object({\n    id: z.uuid(),\n    command: z.literal(commandName),\n    payload: payload,\n  });\n\nexport abstract class Command {\n  public readonly commandId: string;\n  public readonly correlationId: string;\n  public readonly causationId?: string;\n  public readonly topic?: string;\n\n  constructor(props: CommandProps<unknown>) {\n    this.correlationId = props.correlationId ?? v4();\n    this.commandId = props.commandId ?? v4();\n    this.topic = props.topic;\n  }\n}\n\nexport interface IEnvelopeCommand<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> extends IEnvelope<TPayload, TMeta> {\n  command: TName;\n}\n\nexport interface IEnvelopeCommandJSON<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> {\n  id: string;\n  command: TName;\n  payload: TPayload;\n  meta: TMeta;\n}\n\nexport abstract class BaseCommand<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n>\n  extends BaseEnvelope<TPayload, TMeta>\n  implements IEnvelopeCommand<TName, TPayload, TMeta>\n{\n  public readonly command: TName;\n  public readonly topic?: string;\n\n  constructor(\n    command: TName,\n    payload: TPayload,\n    meta: TMeta = { keys: {}, headers: {} } as TMeta,\n    id = v4(),\n    topic?: string,\n  ) {\n    super(payload, meta, id);\n    this.command = command;\n    this.topic = topic;\n  }\n\n  toJSON(): IEnvelopeCommandJSON<TName, TPayload, TMeta> {\n    return {\n      id: this.id,\n      command: this.command,\n      payload: this.payload,\n      meta: this.meta,\n    };\n  }\n}\n\nconst CREATE_USER_COMMAND = \"CreateUser\" as const;\n\nclass CreateUser extends BaseCommand<\n  typeof CREATE_USER_COMMAND,\n  { name: string }\n> {\n  constructor(name: string) {\n    super(CREATE_USER_COMMAND, { name });\n  }\n}\n","import { z } from \"zod\";\nimport {\n  type IEnvelope,\n  type IMessageMetadata,\n  BaseEnvelope,\n} from \"./envelope\";\nimport { v4 } from \"uuid\";\n\nexport type { IMessageMetadata as IEventMetadata } from \"./envelope\";\n\nconst tasd = \"asd\";\n\nexport const eventSchema = <\n  TName extends string,\n  TPayload extends z.ZodTypeAny,\n>(\n  eventName: TName,\n  payload: TPayload,\n) =>\n  z.object({\n    id: z.uuid(),\n    event: z.literal(eventName),\n    payload: payload,\n    timestamp: z.coerce.date(),\n  });\n\nexport interface IEvent<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> extends IEnvelope<TPayload, TMeta> {\n  event: TName;\n  timestamp: Date;\n}\n\nexport interface IEventJSON<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n> {\n  id: string;\n  event: TName;\n  payload: TPayload;\n  timestamp: string;\n  meta: TMeta;\n}\n\nexport abstract class BaseEvent<\n  TName extends string,\n  TPayload extends object = object,\n  TMeta extends IMessageMetadata = IMessageMetadata,\n>\n  extends BaseEnvelope<TPayload, TMeta>\n  implements IEvent<TName, TPayload, TMeta>\n{\n  public readonly event: TName;\n  public readonly timestamp: Date;\n  public readonly topic?: string;\n\n  constructor(\n    event: TName,\n    payload: TPayload,\n    meta: TMeta = { keys: {}, headers: {} } as TMeta,\n    id = v4(),\n    timestamp = new Date(),\n    topic?: string,\n  ) {\n    super(payload, meta, id);\n    this.event = event;\n    this.timestamp = timestamp;\n    this.topic = topic;\n  }\n\n  toJSON(): IEventJSON<TName, TPayload, TMeta> {\n    return {\n      id: this.id,\n      event: this.event,\n      timestamp: this.timestamp.toISOString(),\n      payload: this.payload,\n      meta: this.meta,\n    };\n  }\n}\n\nclass Test extends BaseEvent<\"Test\", { name: string }> {\n  constructor(name: string) {\n    super(\"Test\", { name });\n  }\n}\n","import { v4 } from \"uuid\";\n\ntype ErrorConstructorWithCaptureStackTrace = ErrorConstructor & {\n  captureStackTrace?: (targetObject: object, constructorOpt?: Function) => void;\n};\n\nexport interface SerializedException {\n  message: string;\n  code: string;\n  correlationId?: string;\n  statusCode?: number;\n  stack?: string;\n  cause?: string;\n  metadata?: unknown;\n}\n\nexport abstract class ExceptionBase extends Error {\n  abstract code: string;\n\n  public readonly correlationId?: string;\n  public readonly statusCode?: number;\n\n  /**\n   *\n   * @param message\n   * @param correlationId\n   * @param cause\n   * @param metadata\n   */\n  constructor(\n    readonly message: string,\n    statusCode?: number,\n    correlationId?: string,\n    readonly cause?: Error,\n    readonly metadata?: unknown,\n  ) {\n    super(message);\n    (Error as ErrorConstructorWithCaptureStackTrace).captureStackTrace?.(this, this.constructor);\n    this.correlationId = correlationId || v4();\n    this.statusCode = statusCode || 500;\n  }\n\n  toJSON(): SerializedException {\n    return {\n      message: this.message,\n      statusCode: this.statusCode,\n      code: this.code,\n      stack: this.stack,\n      correlationId: this.correlationId,\n      cause: JSON.stringify(this.cause),\n      metadata: this.metadata,\n    };\n  }\n}\n","import { z } from \"zod\";\n\nexport const baseFilter = z.object({\n  field: z.string().min(1),\n  relation: z.string().min(1).optional(),\n});\n","import { z } from \"zod\";\n\nconst $and = z.literal(\"$and\");\nconst $or = z.literal(\"$or\");\nconst $not = z.literal(\"$not\");\nexport const conjunctions = z.union([$and, $or, $not]);\nexport type IConjunction = z.infer<typeof conjunctions>;\n","import { ValueObject } from \"./value-objects/value-object\";\n\nexport function convertPropsToObject(props: any): any {\n  const propsCopy = { ...props };\n\n  for (const prop in propsCopy) {\n    if (Array.isArray(propsCopy[prop])) {\n      propsCopy[prop] = (propsCopy[prop] as Array<unknown>).map((item) => {\n        return convertToPlainObject(item);\n      });\n    }\n    propsCopy[prop] = convertToPlainObject(propsCopy[prop]);\n  }\n\n  return propsCopy;\n}\n\nfunction convertToPlainObject(item: any): any {\n  if (ValueObject.isValueObject(item)) {\n    return item.unpack();\n  }\n\n  return item;\n}\n","import { dequal } from \"dequal\";\nimport { convertPropsToObject } from \"../utils.js\";\nexport type Primitives = string | number | boolean | null;\nexport interface DomainPrimitive<T extends Primitives | Date> {\n  value: T;\n}\n\nexport type ValueObjectProps<T> = T extends Primitives | Date\n  ? DomainPrimitive<T>\n  : T;\n\nexport abstract class ValueObject<T = any> {\n  constructor(protected readonly props: ValueObjectProps<T>) {}\n\n  public equals(vo?: ValueObject<T>): boolean {\n    if (vo === null || vo === undefined) {\n      return false;\n    }\n\n    return dequal(vo, this);\n  }\n\n  static isValueObject(obj: unknown): obj is ValueObject<unknown> {\n    return obj instanceof ValueObject;\n  }\n\n  public unpack(): T {\n    if (this.isDomainPrimitive(this.props)) {\n      return this.props.value;\n    }\n\n    if (Array.isArray(this.props)) {\n      return Object.freeze(Array.from(this.props)) as T;\n    }\n\n    const propsCopy = convertPropsToObject(this.props);\n\n    return Object.freeze(propsCopy);\n  }\n\n  private isDomainPrimitive(\n    obj: unknown\n  ): obj is DomainPrimitive<T & (Primitives | Date)> {\n    if (Object.prototype.hasOwnProperty.call(obj, \"value\")) {\n      return true;\n    }\n\n    return false;\n  }\n}\n","import { ValueObject } from \"../../value-objects/value-object\";\nimport { type IFieldValueVisitor } from \"./field-value.visitor\";\nimport { type UnpackedFieldValue } from \"./field.type\";\n\nexport abstract class FieldValueBase<\n  V extends UnpackedFieldValue,\n> extends ValueObject<V> {\n  abstract accept(visitor: IFieldValueVisitor): void;\n}\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IBooleanFieldValue } from \"./boolean-field.type\";\n  \nexport class BooleanFieldValue extends FieldValueBase<IBooleanFieldValue> {\n  constructor(value: IBooleanFieldValue) {\n    super({ value });\n  }\n\n  accept(visitor: IFieldValueVisitor): void {\n    visitor.boolean(this);\n  }\n}\n","import { z } from \"zod\";\n\nexport const booleanFieldValue = z.boolean().nullable();\nexport type IBooleanFieldValue = z.infer<typeof booleanFieldValue>;\n","import { z } from \"zod\";\n\nexport const $eq = z.literal(\"$eq\");\nexport const $neq = z.literal(\"$neq\");\nexport const $contains = z.literal(\"$contains\");\nexport const $not_contains = z.literal(\"$not_contains\");\nexport const $starts_with = z.literal(\"$starts_with\");\nexport const $ends_with = z.literal(\"$ends_with\");\nexport const $regex = z.literal(\"$regex\");\n\nexport const $is_true = z.literal(\"$is_true\");\nexport const $is_false = z.literal(\"$is_false\");\n\nexport const $in = z.literal(\"$in\");\nexport const $nin = z.literal(\"$nin\");\n\nexport const $gt = z.literal(\"$gt\");\nexport const $lt = z.literal(\"$lt\");\nexport const $gte = z.literal(\"$gte\");\nexport const $lte = z.literal(\"$lte\");\n\nexport const $start_eq = z.literal(\"$start_eq\");\nexport const $start_neq = z.literal(\"$start_neq\");\nexport const $start_gt = z.literal(\"$start_gt\");\nexport const $start_lt = z.literal(\"$start_lt\");\nexport const $start_gte = z.literal(\"$start_gte\");\nexport const $start_lte = z.literal(\"$start_lte\");\n\nexport const $end_eq = z.literal(\"$end_eq\");\nexport const $end_neq = z.literal(\"$end_neq\");\nexport const $end_gt = z.literal(\"$end_gt\");\nexport const $end_lt = z.literal(\"$end_lt\");\nexport const $end_gte = z.literal(\"$end_gte\");\nexport const $end_lte = z.literal(\"$end_lte\");\n\nexport const $is_empty = z.literal(\"$is_empty\");\nexport const $is_not_empty = z.literal(\"$is_not_empty\");\n\nexport const $is_today = z.literal(\"$is_today\");\nexport const $is_not_today = z.literal(\"$is_not_today\");\nexport const $is_tomorrow = z.literal(\"$is_tomorrow\");\nexport const $is_yesterday = z.literal(\"$is_yesterday\");\nexport const $between = z.literal(\"$between\");\n\nexport const $has_file_type = z.literal(\"$has_file_type\");\nexport const $has_file_extension = z.literal(\"$has_file_extension\");\n\nexport const $is_root = z.literal(\"$is_root\");\n\nexport const $is_me = z.literal(\"$is_me\");\nexport const $is_not_me = z.literal(\"$is_not_me\");\n\nexport const operatorsWihtoutValue = z.union([\n  $is_empty,\n  $is_not_empty,\n  $is_today,\n  $is_not_today,\n  $is_tomorrow,\n  $is_yesterday,\n  $is_root,\n  $is_me,\n  $is_not_me,\n]);\nexport const isOperatorWithoutValue = (value: string): boolean =>\n  operatorsWihtoutValue.safeParse(value).success;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n  $eq,\n  $neq\n} from \"../../operators\";\n\nexport const booleanFilterOperators = z.union([\n  $eq,\n  $neq,\n]);\n\nexport const booleanFilterValue = z.boolean().nullable();\nexport const booleanFilter = z\n  .object({\n    type: z.literal(\"boolean\"),\n    operator: booleanFilterOperators,\n    value: booleanFilterValue,\n  })\n  .merge(baseFilter);\n\nexport type IBooleanFilter = z.infer<typeof booleanFilter>;\nexport type IBooleanFilterOperator = z.infer<typeof booleanFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IDateFieldValue } from \"./date-field.type\";\n\nexport class DateFieldValue extends FieldValueBase<IDateFieldValue> {\n  constructor(value: IDateFieldValue) {\n    super({ value });\n  }\n\n  accept(visitor: IFieldValueVisitor): void {\n    visitor.date(this);\n  }\n\n  static fromNullableString(str: string | null): DateFieldValue {\n    if (!str) {\n      return new this(null);\n    }\n\n    return new this(new Date(str));\n  }\n}\n","import { z } from \"zod\";\n\nexport const dateFieldValue = z.date().nullable();\n\nexport type IDateFieldValue = z.infer<typeof dateFieldValue>;\n","import { z } from \"zod\";\nimport {\n  $between,\n  $eq,\n  $gt,\n  $gte,\n  $is_not_today,\n  $is_today,\n  $is_tomorrow,\n  $is_yesterday,\n  $lt,\n  $lte,\n  $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const dateFilterOperators = z.union([\n  $eq,\n  $neq,\n  $gt,\n  $gte,\n  $lt,\n  $lte,\n  $between,\n  $is_today,\n  $is_tomorrow,\n  $is_yesterday,\n  $is_not_today,\n]);\n\nexport const dateFilterValue = z\n  .string()\n  .nullable()\n  .or(z.tuple([z.string(), z.string()]));\nexport const dateFilter = z\n  .object({\n    type: z.literal(\"date\"),\n    operator: dateFilterOperators,\n    value: dateFilterValue,\n  })\n  .merge(baseFilter);\n\nexport type IDateFilter = z.infer<typeof dateFilter>;\nexport type IDateFilterValue = z.infer<typeof dateFilterValue>;\nexport type IDateFilterOperator = z.infer<typeof dateFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type INumberFieldValue } from \"./number-field.type\";\n\nexport class NumberFieldValue extends FieldValueBase<INumberFieldValue> {\n  constructor(value: INumberFieldValue) {\n    super({ value });\n  }\n\n  accept(visitor: IFieldValueVisitor): void {\n    visitor.number(this);\n  }\n}\n","import { z } from \"zod\";\n\nexport const numberFieldValue = z.number().or(z.null());\nexport type INumberFieldValue = z.infer<typeof numberFieldValue>;\n","import { z } from \"zod\";\nimport {\n  $eq,\n  $gt,\n  $gte,\n  $is_empty,\n  $is_not_empty,\n  $lt,\n  $lte,\n  $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const numberFilterOperators = z.union([\n  $eq,\n  $neq,\n  $gt,\n  $gte,\n  $lt,\n  $lte,\n  $is_empty,\n  $is_not_empty,\n]);\nexport type INumberFilterOperators = z.infer<typeof numberFilterOperators>;\n\nexport const numberFilterValue = z.number().nullable();\nexport const numberFilter = z\n  .object({\n    type: z.literal(\"number\"),\n    operator: numberFilterOperators,\n    value: numberFilterValue,\n  })\n  .merge(baseFilter);\n\nexport type INumberFilter = z.infer<typeof numberFilter>;\nexport type INumberFilterValue = z.infer<typeof numberFilterValue>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IStringFieldValue } from \"./string-field.type\";\n\nexport class StringFieldValue extends FieldValueBase<IStringFieldValue> {\n  constructor(value: IStringFieldValue) {\n    super({ value });\n  }\n\n  accept(visitor: IFieldValueVisitor): void {\n    visitor.string(this);\n  }\n}\n","import { z } from \"zod\";\n\nexport const stringFieldValue = z.string().nullable();\nexport type IStringFieldValue = z.infer<typeof stringFieldValue>;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n  $eq,\n  $neq,\n  $contains,\n  $not_contains,\n  $starts_with,\n  $ends_with,\n  $regex,\n  $is_empty,\n  $is_not_empty,\n} from \"../../operators\";\n\nexport const stringFilterOperators = z.union([\n  $eq,\n  $neq,\n  $contains,\n  $not_contains,\n  $starts_with,\n  $ends_with,\n  $regex,\n  $is_empty,\n  $is_not_empty,\n]);\n\nexport const stringFilterValue = z.string().nullable();\nexport const stringFilter = z\n  .object({\n    type: z.literal(\"string\"),\n    operator: stringFilterOperators,\n    value: stringFilterValue,\n  })\n  .merge(baseFilter);\n\nexport type IStringFilter = z.infer<typeof stringFilter>;\nexport type IStringFilterOperator = z.infer<typeof stringFilterOperators>;\n","import type { Option, Result } from \"@globalart/oxide\";\nimport { None, Ok, Some } from \"@globalart/oxide\";\n\nexport interface ISpecVisitor {\n  or(left: ISpecification, right: ISpecification): this;\n  not(): this;\n}\n\nexport interface ISpecification<\n  T = any,\n  V extends ISpecVisitor = ISpecVisitor,\n> {\n  isSatisfiedBy(t: T): boolean;\n  mutate(t: T): Result<T, string>;\n  accept(v: V): Result<void, string>;\n}\n\nexport abstract class CompositeSpecification<\n  T = any,\n  V extends ISpecVisitor = ISpecVisitor,\n> implements ISpecification<T, V>\n{\n  abstract isSatisfiedBy(t: T): boolean;\n  abstract mutate(t: T): Result<T, string>;\n  abstract accept(v: V): Result<void, string>;\n\n  public and(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n    return new And(this, s);\n  }\n\n  public or(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n    return new Or(this, s);\n  }\n\n  public not(): Not<T, V> {\n    return new Not(this);\n  }\n}\n\nclass And<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n  constructor(\n    private readonly left: ISpecification<T, V>,\n    private readonly right: ISpecification<T, V>\n  ) {\n    super();\n  }\n\n  isSatisfiedBy(t: T): boolean {\n    return this.left.isSatisfiedBy(t) && this.right.isSatisfiedBy(t);\n  }\n\n  mutate(t: T): Result<T, string> {\n    return this.left.mutate(t).and(this.right.mutate(t));\n  }\n\n  accept(v: V): Result<void, string> {\n    return this.left.accept(v).and(this.right.accept(v));\n  }\n}\n\nclass Or<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n  constructor(\n    private readonly left: ISpecification<T, V>,\n    private readonly right: ISpecification<T, V>\n  ) {\n    super();\n  }\n\n  isSatisfiedBy(t: T): boolean {\n    return this.left.isSatisfiedBy(t) || this.right.isSatisfiedBy(t);\n  }\n\n  mutate(t: T): Result<T, string> {\n    return this.left.mutate(t).orElse(() => this.right.mutate(t));\n  }\n\n  accept(v: V): Result<void, string> {\n    v.or(this.left, this.right);\n\n    return Ok(undefined);\n  }\n}\n\nclass Not<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n  constructor(public readonly spec: ISpecification<T, V>) {\n    super();\n  }\n\n  isSatisfiedBy(t: T): boolean {\n    return !this.spec.isSatisfiedBy(t);\n  }\n\n  mutate(): Result<T, string> {\n    throw new Error(\"[Not.mutate] Method not implemented.\");\n  }\n\n  accept(v: V): Result<void, string> {\n    return this.spec.accept(v.not());\n  }\n}\n\nexport const and = <T, V extends ISpecVisitor>(\n  ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n  if (!specs.length) {\n    return None;\n  }\n\n  let s = specs[0];\n  for (const spec of specs.slice(1)) {\n    s = s.and(spec);\n  }\n\n  return Some(s);\n};\n\nexport const andOptions = <T, V extends ISpecVisitor>(\n  ...specs: Option<CompositeSpecification<T, V>>[]\n): Option<CompositeSpecification<T, V>> => {\n  return and(\n    ...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap())\n  );\n};\n\nexport const or = <T, V extends ISpecVisitor>(\n  ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n  if (!specs.length) {\n    return None;\n  }\n\n  let s = specs[0];\n  for (const spec of specs.slice(1)) {\n    s = s.or(spec);\n  }\n\n  return Some(s);\n};\n","import { type IFilterBaseVisitor } from \"./filter-specification-visitor.base\";\nimport { CompositeSpecification } from \"../specification\";\nimport { type Result } from \"@globalart/oxide\";\n\nexport abstract class BaseFilterSpecification<\n  E = unknown,\n  V = unknown,\n> extends CompositeSpecification<E, IFilterBaseVisitor> {\n  constructor(\n    public readonly field: string,\n    public readonly value: V,\n    public readonly relation?: string\n  ) {\n    super();\n  }\n\n  mutate(t: E): Result<E, string> {\n    throw new Error(\"Method not implemented.\");\n  }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { BooleanFieldValue } from \"../fields/boolean/boolean-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class BooleanEqual extends BaseFilterSpecification<\n  unknown,\n  BooleanFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof BooleanFieldValue && this.value.equals(value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.booleanEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class BooleanNotEqual extends BaseFilterSpecification<\n  unknown,\n  BooleanFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof BooleanFieldValue && this.value.equals(value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.booleanNotEqual(this);\n\n    return Ok(undefined);\n  }\n}\n","import {\n  isAfter,\n  isBefore,\n  isEqual,\n  isToday,\n  isTomorrow,\n  isWithinInterval,\n  isYesterday,\n} from \"date-fns\";\nimport { Ok, type Result } from \"@globalart/oxide\";\nimport { DateFieldValue } from \"../fields/date/date-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class DateEqual extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof DateFieldValue && value.equals(this.value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateGreaterThan extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n    const d1 = value.unpack();\n    const d2 = this.value.unpack();\n\n    return !!d1 && !!d2 && isAfter(d1, d2);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateGreaterThan(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateLessThan extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const d1 = value.unpack();\n    const d2 = this.value.unpack();\n\n    return !!d1 && !!d2 && isBefore(d1, d2);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateLessThan(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateGreaterThanOrEqual extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const d1 = value.unpack();\n    const d2 = this.value.unpack();\n\n    return !!d1 && !!d2 && (isEqual(d1, d2) || isAfter(d1, d2));\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateGreaterThanOrEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateLessThanOrEqual extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const d1 = value.unpack();\n    const d2 = this.value.unpack();\n\n    return !!d1 && !!d2 && (isEqual(d1, d2) || isBefore(d1, d2));\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateLessThanOrEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateIsToday extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const date = value.unpack();\n\n    return !!date && isToday(date);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateIsToday(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateIsTomorrow extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const date = value.unpack();\n\n    return !!date && isTomorrow(date);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateIsTomorrow(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateIsYesterday extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const date = value.unpack();\n\n    return !!date && isYesterday(date);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateIsYesterday(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class DateBetween extends BaseFilterSpecification<\n  unknown,\n  DateFieldValue\n> {\n  constructor(\n    public field: string,\n    public dateStart: Date,\n    public dateEnd: Date,\n    public relation?: string\n  ) {\n    super(field, new DateFieldValue(dateStart), relation);\n  }\n\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof DateFieldValue)) {\n      return false;\n    }\n\n    const date = value.unpack();\n\n    return (\n      !!date &&\n      isWithinInterval(date, { start: this.dateStart, end: this.dateEnd })\n    );\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.dateBetween(this);\n\n    return Ok(undefined);\n  }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\nimport { NumberFieldValue } from \"../fields/number/number-field-value\";\n\nfunction isNil(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\nfunction isNumber(value: unknown): value is number {\n  return typeof value === \"number\";\n}\n\nexport class NumberEqual extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof NumberFieldValue && value.equals(this.value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class NumberGreaterThan extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof NumberFieldValue)) {\n      return false;\n    }\n    const n1 = value.unpack();\n    const n2 = this.value.unpack();\n    if (n1 === null && isNumber(n2)) {\n      return true;\n    }\n\n    return n1 !== null && n2 !== null && n1 > n2;\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberGreaterThan(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class NumberLessThan extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof NumberFieldValue)) {\n      return false;\n    }\n    const n1 = value.unpack();\n    const n2 = this.value.unpack();\n\n    return n1 !== null && n2 !== null && n1 < n2;\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberLessThan(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class NumberGreaterThanOrEqual extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof NumberFieldValue)) {\n      return false;\n    }\n    const n1 = value.unpack();\n    const n2 = this.value.unpack();\n    if (n1 === null && isNumber(n2)) {\n      return true;\n    }\n\n    return n1 !== null && n2 !== null && n1 >= n2;\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberGreaterThanOrEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class NumberLessThanOrEqual extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof NumberFieldValue)) {\n      return false;\n    }\n    const n1 = value.unpack();\n    const n2 = this.value.unpack();\n\n    return n1 !== null && n2 !== null && n1 <= n2;\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberLessThanOrEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class NumberEmpty extends BaseFilterSpecification<\n  unknown,\n  NumberFieldValue\n> {\n  constructor(public readonly field: string) {\n    super(field, new NumberFieldValue(null));\n  }\n\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof NumberFieldValue && isNil(value.unpack());\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.numberEmpty(this);\n\n    return Ok(undefined);\n  }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { StringFieldValue } from \"../fields/string/string-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class StringEqual extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof StringFieldValue && this.value.equals(value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringNotEqual extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    return value instanceof StringFieldValue && this.value.equals(value);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringNotEqual(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringContain extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof StringFieldValue)) {\n      return false;\n    }\n\n    const s1 = value.unpack();\n    const s2 = this.value.unpack();\n\n    return !!s1 && !!s2 && s1.includes(s2);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringContain(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringStartsWith extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof StringFieldValue)) {\n      return false;\n    }\n\n    const s1 = value.unpack();\n    const s2 = this.value.unpack();\n\n    return !!s1 && !!s2 && s1.startsWith(s2);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringStartsWith(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringEndsWith extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof StringFieldValue)) {\n      return false;\n    }\n\n    const s1 = value.unpack();\n    const s2 = this.value.unpack();\n\n    return !!s1 && !!s2 && s1.endsWith(s2);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringEndsWith(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringRegex extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  isSatisfiedBy(value: unknown): boolean {\n    if (!(value instanceof StringFieldValue)) {\n      return false;\n    }\n\n    const s1 = value.unpack();\n    const s2 = this.value.unpack();\n\n    return !!s1 && !!s2 && new RegExp(s2).test(s1);\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringRegex(this);\n\n    return Ok(undefined);\n  }\n}\n\nexport class StringEmpty extends BaseFilterSpecification<\n  unknown,\n  StringFieldValue\n> {\n  constructor(field: string) {\n    super(field, new StringFieldValue(null));\n  }\n\n  isSatisfiedBy(value: unknown): boolean {\n    if (value instanceof StringFieldValue) {\n      return !value.unpack();\n    }\n\n    return !value;\n  }\n\n  accept(v: IFilterBaseVisitor): Result<void, string> {\n    v.stringEmpty(this);\n\n    return Ok(undefined);\n  }\n}\n","import { None, Some, type Option } from \"@globalart/oxide\";\nimport { match } from \"ts-pattern\";\nimport { z } from \"zod\";\nimport { conjunctions, type IConjunction } from \"./conjunction\";\nimport { BooleanFieldValue, booleanFilter, IBooleanFilter } from \"./fields\";\nimport { DateFieldValue } from \"./fields/date/date-field-value\";\nimport { dateFilter, type IDateFilter } from \"./fields/date/date.filter\";\nimport { NumberFieldValue } from \"./fields/number/number-field-value\";\nimport {\n  numberFilter,\n  numberFilterOperators,\n  type INumberFilter,\n} from \"./fields/number/number.filter\";\nimport { StringFieldValue } from \"./fields/string/string-field-value\";\nimport {\n  stringFilter,\n  stringFilterOperators,\n  type IStringFilter,\n} from \"./fields/string/string.filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\nimport {\n  BooleanEqual,\n  BooleanNotEqual,\n} from \"./specifications/boolean.specification\";\nimport { DateBetween, DateEqual } from \"./specifications/date.specification\";\nimport {\n  NumberEmpty,\n  NumberEqual,\n  NumberGreaterThan,\n  NumberGreaterThanOrEqual,\n  NumberLessThan,\n  NumberLessThanOrEqual,\n} from \"./specifications/number.specification\";\nimport {\n  StringContain,\n  StringEmpty,\n  StringEndsWith,\n  StringEqual,\n  StringNotEqual,\n  StringRegex,\n  StringStartsWith,\n} from \"./specifications/string.specification\";\n\nexport const filterRootFilter = <T extends z.ZodType>(filters: [T, ...T[]]) => {\n  const filterTuple: [T, ...T[]] = [filters[0], ...filters.slice(1)];\n\n  const filter = z.union(filterTuple as [T, T, ...T[]]);\n\n  const group: z.ZodType<{\n    conjunction?: IConjunction;\n    children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n  }> = z.lazy(() =>\n    z.object({\n      conjunction: conjunctions,\n      children: z.union([group, filter]).array().nonempty().optional(),\n    }),\n  );\n\n  const filterOrGroup = filter.or(group);\n  type IFilterOrGroup = z.infer<typeof filterOrGroup>;\n  const filterOrGroupList = filterOrGroup.array();\n\n  return group.or(filterOrGroupList);\n};\n\nconst filter = z.discriminatedUnion(\"type\", [\n  numberFilter,\n  stringFilter,\n  dateFilter,\n  booleanFilter,\n]);\n\nexport type IFilter = z.infer<typeof filter>;\nexport type IFilters = IFilter[];\n\nexport interface IGroup<Filter extends IFilter = IFilter> {\n  conjunction?: IConjunction;\n  children?: IFilterOrGroupList<Filter>;\n}\n\nconst group: z.ZodType<IGroup> = z.lazy(() =>\n  z.object({\n    conjunction: conjunctions,\n    children: z.union([group, filter]).array().nonempty().optional(),\n  }),\n);\n\nconst filterOrGroup = filter.or(group);\nexport type IFilterOrGroup<Filter extends IFilter = IFilter> =\n  | Filter\n  | IGroup<Filter>;\n\nexport const filterOrGroupList = filterOrGroup.array();\nexport type IFilterOrGroupList<Filter extends IFilter = IFilter> =\n  IFilterOrGroup<Filter>[];\nexport const rootFilter = filterOrGroup.or(filterOrGroupList);\nexport type IRootFilter<Filter extends IFilter = IFilter> =\n  | IFilterOrGroup<Filter>\n  | IFilterOrGroupList<Filter>;\n\nexport const isGroup = (\n  filterOrGroup: IFilterOrGroup,\n): filterOrGroup is IGroup => {\n  return Reflect.has(filterOrGroup, \"conjunction\");\n};\n\nexport const isFilter = (\n  filterOrGroup: IFilterOrGroup,\n): filterOrGroup is IFilter => {\n  return (\n    Reflect.has(filterOrGroup, \"type\") && Reflect.has(filterOrGroup, \"operator\")\n  );\n};\n\nexport const operators = z.union([\n  numberFilterOperators,\n  stringFilterOperators,\n]);\nexport type IOperator = z.infer<typeof operators>;\n\ntype IFieldType = \"number\";\n\nexport const operatorsMap: Record<IFieldType, IOperator[]> = {\n  number: numberFilterOperators.options.map((v) => v.value),\n};\n\nconst convertStringFilter = (\n  filter: IStringFilter,\n): Option<BaseFilterSpecification> => {\n  if (filter.value === undefined) {\n    return None;\n  }\n\n  switch (filter.operator) {\n    case \"$eq\": {\n      return Some(\n        new StringEqual(\n          filter.field,\n          new StringFieldValue(filter.value),\n          filter.relation,\n        ),\n      );\n    }\n    case \"$neq\": {\n      return Some(\n        new StringNotEqual(\n          filter.field,\n          new StringFieldValue(filter.value),\n          filter.relation,\n        ),\n      );\n    }\n    case \"$contains\": {\n      return Some(\n        new StringContain(filter.field, new StringFieldValue(filter.value)),\n      );\n    }\n    case \"$not_contains\": {\n      return Some(\n        new StringContain(\n          filter.field,\n          new StringFieldValue(filter.value),\n        ).not() as unknown as BaseFilterSpecification,\n      );\n    }\n    case \"$starts_with\": {\n      return Some(\n        new StringStartsWith(filter.field, new StringFieldValue(filter.value)),\n      );\n    }\n    case \"$ends_with\": {\n      return Some(\n        new StringEndsWith(filter.field, new StringFieldValue(filter.value)),\n      );\n    }\n    case \"$regex\": {\n      return Some(\n        new StringRegex(filter.field, new StringFieldValue(filter.value)),\n      );\n    }\n    case \"$is_empty\": {\n      return Some(new StringEmpty(filter.field));\n    }\n    case \"$is_not_empty\": {\n      return Some(\n        new StringEmpty(\n          filter.field,\n        ).not() as unknown as BaseFilterSpecification,\n      );\n    }\n\n    default:\n      return None;\n  }\n};\n\nconst convertNumberFilter = (\n  filter: INumberFilter,\n): Option<BaseFilterSpecification> => {\n  if (filter === undefined) {\n    return None;\n  }\n\n  switch (filter.operator) {\n    case \"$eq\":\n      return Some(\n        new NumberEqual(filter.field, new NumberFieldValue(filter.value)),\n      );\n    case \"$neq\": {\n      // @ts-ignore\n      return Some(\n        new NumberEqual(filter.field, new NumberFieldValue(filter.value)).not(),\n      );\n    }\n    case \"$gt\": {\n      return Some(\n        new NumberGreaterThan(filter.field, new NumberFieldValue(filter.value)),\n      );\n    }\n    case \"$gte\": {\n      return Some(\n        new NumberGreaterThanOrEqual(\n          filter.field,\n          new NumberFieldValue(filter.value),\n        ),\n      );\n    }\n    case \"$lt\": {\n      return Some(\n        new NumberLessThan(filter.field, new NumberFieldValue(filter.value)),\n      );\n    }\n    case \"$lte\": {\n      return Some(\n        new NumberLessThanOrEqual(\n          filter.field,\n          new NumberFieldValue(filter.value),\n        ),\n      );\n    }\n    case \"$is_empty\": {\n      return Some(new NumberEmpty(filter.field));\n    }\n    case \"$is_not_empty\": {\n      // @ts-ignore\n      return Some(new NumberEmpty(filter.field).not());\n    }\n    default:\n      return None;\n  }\n};\n\nconst convertBooleanFilter = (\n  filter: IBooleanFilter,\n): Option<BaseFilterSpecification> => {\n  if (filter === undefined) {\n    return None;\n  }\n\n  switch (filter.operator) {\n    case \"$eq\": {\n      return Some(\n        new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)),\n      );\n    }\n    case \"$neq\": {\n      return Some(\n        new BooleanNotEqual(filter.field, new BooleanFieldValue(filter.value)),\n      );\n    }\n  }\n\n  return Some(\n    new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)),\n  );\n};\n\nconst convertDateFilter = (\n  filter: IDateFilter,\n): Option<BaseFilterSpecification> => {\n  if (filter === undefined) {\n    return None;\n  }\n\n  switch (filter.operator) {\n    case \"$eq\": {\n      return Some(\n        new DateEqual(\n          filter.field,\n          DateFieldValue.fromNullableString(filter.value as string),\n          filter.relation,\n        ),\n      );\n    }\n    case \"$between\": {\n      return Some(\n        new DateBetween(\n          filter.field,\n          new Date((filter.value as [string, string])[0]),\n          new Date((filter.value as [string, string])[1]),\n        ),\n      );\n    }\n  }\n\n  return None;\n};\n\nconst convertFilter = (filter: IFilter): Option<BaseFilterSpecification> => {\n  return match(filter)\n    .returnType<Option<BaseFilterSpecification>>()\n    .with({ type: \"number\" }, (f) => convertNumberFilter(f))\n    .with({ type: \"string\" }, (f) => convertStringFilter(f))\n    .with({ type: \"date\" }, (f) => convertDateFilter(f))\n    .with({ type: \"boolean\" }, (f) => convertBooleanFilter(f))\n    .otherwise(() => None);\n};\n\nconst convertFilterOrGroup = (\n  filterOrGroup: IFilterOrGroup,\n): Option<BaseFilterSpecification> => {\n  if (isGroup(filterOrGroup)) {\n    return convertFilterOrGroupList(\n      filterOrGroup.children,\n      filterOrGroup.conjunction,\n    );\n  } else if (isFilter(filterOrGroup)) {\n    return convertFilter(filterOrGroup);\n  }\n\n  return None;\n};\n\nconst convertFilterOrGroupList = (\n  filterOrGroupList: IFilterOrGroupList = [],\n  conjunction: IConjunction = \"$and\",\n): Option<BaseFilterSpecification> => {\n  let spec: Option<BaseFilterSpecification> = None;\n  for (const filter of filterOrGroupList) {\n    if (spec.isNone()) {\n      spec = convertFilterOrGroup(filter);\n      if (conjunction === \"$not\") {\n        // @ts-ignore\n        return spec.map((s) => s.not());\n      }\n    } else {\n      if (isFilter(filter)) {\n        // @ts-ignore\n        spec = spec.map((left) => {\n          const right = convertFilterOrGroup(filter);\n          if (right.isSome()) {\n            if (conjunction === \"$and\") {\n              return left.and(right.unwrap());\n            } else if (conjunction === \"$or\") {\n              return left.or(right.unwrap());\n            }\n\n            return left.and(right.unwrap().not());\n          }\n\n          return left;\n        });\n      } else if (isGroup(filter)) {\n        spec = convertFilterOrGroupList(filter.children, filter.conjunction);\n      }\n    }\n  }\n\n  return spec;\n};\n\nexport const convertFilterSpec = (\n  filter: IRootFilter | string,\n): Option<BaseFilterSpecification> => {\n  const parsed: IRootFilter =\n    typeof filter === \"string\"\n      ? (() => {\n          try {\n            return JSON.parse(filter) as IRootFilter;\n          } catch {\n            return {} as IRootFilter;\n          }\n        })()\n      : filter;\n\n  if (Array.isArray(parsed)) {\n    return convertFilterOrGroupList(parsed);\n  }\n\n  return convertFilterOrGroup(parsed);\n};\n\nfunction isEmptyNative(value: unknown): boolean {\n  if (value == null) return true;\n  if (Array.isArray(value)) return value.length === 0;\n  if (typeof value === \"object\") {\n    for (const _ in value as object) {\n      return false;\n    }\n    return true;\n  }\n  return false;\n}\n\nexport const isEmptyFilter = (filter: IRootFilter) => isEmptyNative(filter);\n","import { type Option } from \"@globalart/oxide\";\nimport { ValueObject } from \"../value-objects/value-object\";\nimport {\n  type IFilter,\n  type IRootFilter,\n  convertFilterSpec,\n  isGroup,\n} from \"./filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\n\nexport class RootFilter<T extends IFilter = IFilter> extends ValueObject<\n  IRootFilter<T>\n> {\n  get value() {\n    return this.props;\n  }\n\n  get group() {\n    if (Array.isArray(this.value)) {\n      return { conjunction: \"$and\", children: this.value };\n    }\n    if (isGroup(this.value)) {\n      return this.value;\n    }\n\n    return { conjunction: \"$and\", children: [this.value] };\n  }\n\n  getSpec(): Option<BaseFilterSpecification> {\n    return convertFilterSpec(this.value);\n  }\n\n  public toJSON() {\n    return this.props;\n  }\n}\n","import { z } from \"zod\";\n\nexport const paginationSchema = z.object({\n  limit: z.coerce.number().positive().int().default(10).optional(),\n  offset: z.coerce.number().nonnegative().int().default(0).optional(),\n});\n\nexport type IPagination = z.infer<typeof paginationSchema>;\n\nexport const paginatedResponseSchema = paginationSchema.extend({\n  total: z.number().nonnegative().int(),\n});\n","export abstract class Query {}\n","import { z } from \"zod\";\n\n// TODO: base sort with possibility limit sorting fields for concrete entity\nexport const sortingSchema = z.record(z.string(), z.enum([\"ASC\", \"DESC\"]));\n\nexport type ISorting = z.infer<typeof sortingSchema>;\n","import { ValueObject } from \"./value-object.js\";\nimport z from \"zod\";\n\nexport const booleanSchema = z.boolean();\nexport type IBoolean = z.infer<typeof booleanSchema>;\n\nexport class BoolVO extends ValueObject<IBoolean> {\n  constructor(value: IBoolean) {\n    super({ value });\n  }\n\n  public get value(): IBoolean {\n    return this.props.value;\n  }\n\n  public static fromBoolean(value: IBoolean) {\n    return new BoolVO(value);\n  }\n\n  public static True(): BoolVO {\n    return new BoolVO(true);\n  }\n\n  public static False(): BoolVO {\n    return new BoolVO(false);\n  }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nexport const dateSchema = z.date();\nexport type IDate = z.infer<typeof dateSchema>;\n\nexport class DateVO extends ValueObject<IDate> {\n  constructor(value: IDate) {\n    super({ value });\n  }\n\n  public get value(): Date {\n    return this.props.value;\n  }\n\n  public static fromDate(value: Date) {\n    return new DateVO(value);\n  }\n\n  public static now(): DateVO {\n    return new DateVO(new Date());\n  }\n}\n","import z from \"zod\";\nimport { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport const idSchema = z.any();\nexport type IId = z.infer<typeof idSchema>;\n\nexport abstract class ID<T = IId> extends ValueObject<T> {\n  constructor(value: T) {\n    super({ value } as ValueObjectProps<T>);\n  }\n\n  public get value(): T {\n    return this.unpack();\n  }\n}\n","import { customAlphabet } from \"nanoid\";\nimport { ID } from \"./id.vo.js\";\nimport z from \"zod\";\n\nexport const nanoidSchema = z.string().length(5);\nexport type INanoid = z.infer<typeof nanoidSchema>;\n\nexport abstract class NanoID extends ID {\n  private static ALPHABETS = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n  static createId(prefix = \"\", size = 5) {\n    const id = customAlphabet(NanoID.ALPHABETS, size)();\n\n    return prefix + id;\n  }\n\n  public get value(): number {\n    return this.props.value;\n  }\n}\n","import { ValueObject } from \"./value-object.js\";\nimport z from \"zod\";\n\nexport const integerSchema = z.number().int();\nexport type IInteger = z.infer<typeof integerSchema>;\n\nexport class IntegerVO extends ValueObject<IInteger> {\n  constructor(value: IInteger) {\n    super({ value });\n  }\n\n  public get value(): IInteger {\n    return this.props.value;\n  }\n\n  public static fromNumber(value: IInteger) {\n    return new IntegerVO(value);\n  }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nexport const stringSchema = z.string().trim().min(1);\nexport type IString = z.infer<typeof stringSchema>;\n\nexport class StringVO extends ValueObject<IString> {\n  constructor(value: IString) {\n    super({ value });\n  }\n\n  public get value(): IString {\n    return this.props.value;\n  }\n\n  public static fromString(value: IString) {\n    return new StringVO(value);\n  }\n\n  public static empty(): StringVO {\n    return new StringVO(\"\");\n  }\n}\n","import { ID } from \"./id.vo.js\";\nimport { v4 } from \"uuid\";\nimport z from \"zod\";\n\nexport const uuidSchema = z.uuid();\nexport type IUuid = z.infer<typeof uuidSchema>;\n\nexport abstract class UUID extends ID {\n  static createId() {\n    return v4();\n  }\n\n  public get value(): number {\n    return this.props.value;\n  }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst emailSchema = z.email();\nexport type IEmail = z.infer<typeof emailSchema>;\n\nexport class EmailVO extends ValueObject<IEmail> {\n  constructor(value: IEmail) {\n    super({ value });\n  }\n\n  static create(value: IEmail) {\n    return new this(emailSchema.parse(value));\n  }\n\n  public get value(): IEmail {\n    return this.props.value;\n  }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\nexport type IColor = z.infer<typeof colorSchema>;\n\nexport class ColorVO extends ValueObject<IColor> {\n  constructor(value: IColor) {\n    super({ value });\n  }\n\n  static create(value: IColor) {\n    return new this(colorSchema.parse(value));\n  }\n\n  public get value(): IColor {\n    return this.props.value;\n  }\n}\n","export const isPresent = (value: unknown): boolean => {\n  return value !== undefined;\n};"],"mappings":"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"}