@globalart/ddd 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +38 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -14
- package/dist/index.d.mts +35 -14
- package/dist/index.mjs +37 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -52,6 +52,20 @@ var AggregateRoot = class {
|
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/envelope.ts
|
|
57
|
+
const defaultMeta = {
|
|
58
|
+
keys: {},
|
|
59
|
+
headers: {}
|
|
60
|
+
};
|
|
61
|
+
var BaseEnvelope = class {
|
|
62
|
+
constructor(payload, meta = defaultMeta, id = (0, uuid.v4)()) {
|
|
63
|
+
this.payload = payload;
|
|
64
|
+
this.meta = meta;
|
|
65
|
+
this.id = id;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
55
69
|
//#endregion
|
|
56
70
|
//#region src/command.ts
|
|
57
71
|
var Command = class {
|
|
@@ -63,6 +77,24 @@ var Command = class {
|
|
|
63
77
|
this.commandId = props.commandId ?? (0, uuid.v4)();
|
|
64
78
|
}
|
|
65
79
|
};
|
|
80
|
+
var BaseEnvelopeCommand = class extends BaseEnvelope {
|
|
81
|
+
command;
|
|
82
|
+
constructor(command, payload, meta = {
|
|
83
|
+
keys: {},
|
|
84
|
+
headers: {}
|
|
85
|
+
}, id = (0, uuid.v4)()) {
|
|
86
|
+
super(payload, meta, id);
|
|
87
|
+
this.command = command;
|
|
88
|
+
}
|
|
89
|
+
toJSON() {
|
|
90
|
+
return {
|
|
91
|
+
id: this.id,
|
|
92
|
+
command: this.command,
|
|
93
|
+
payload: this.payload,
|
|
94
|
+
meta: this.meta
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
};
|
|
66
98
|
|
|
67
99
|
//#endregion
|
|
68
100
|
//#region src/event.ts
|
|
@@ -72,15 +104,15 @@ const eventSchema = (eventName, payload) => zod.z.object({
|
|
|
72
104
|
payload,
|
|
73
105
|
timestamp: zod.z.coerce.date()
|
|
74
106
|
});
|
|
75
|
-
var BaseEvent = class {
|
|
107
|
+
var BaseEvent = class extends BaseEnvelope {
|
|
108
|
+
event;
|
|
109
|
+
timestamp;
|
|
76
110
|
constructor(event, payload, meta = {
|
|
77
111
|
keys: {},
|
|
78
112
|
headers: {}
|
|
79
113
|
}, id = (0, uuid.v4)(), timestamp = /* @__PURE__ */ new Date()) {
|
|
114
|
+
super(payload, meta, id);
|
|
80
115
|
this.event = event;
|
|
81
|
-
this.payload = payload;
|
|
82
|
-
this.meta = meta;
|
|
83
|
-
this.id = id;
|
|
84
116
|
this.timestamp = timestamp;
|
|
85
117
|
}
|
|
86
118
|
toJSON() {
|
|
@@ -1107,6 +1139,8 @@ exports.$start_lte = $start_lte;
|
|
|
1107
1139
|
exports.$start_neq = $start_neq;
|
|
1108
1140
|
exports.$starts_with = $starts_with;
|
|
1109
1141
|
exports.AggregateRoot = AggregateRoot;
|
|
1142
|
+
exports.BaseEnvelope = BaseEnvelope;
|
|
1143
|
+
exports.BaseEnvelopeCommand = BaseEnvelopeCommand;
|
|
1110
1144
|
exports.BaseEvent = BaseEvent;
|
|
1111
1145
|
exports.BaseFilterSpecification = BaseFilterSpecification;
|
|
1112
1146
|
exports.BoolVO = BoolVO;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["#domainEvents","z","z","z","z","z","z","z","z","z","z","z","z","None","z","None","z","z","z","z"],"sources":["../src/aggregate-root.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 BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\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 type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n public readonly correlationId: string;\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\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 IEventMetadata {\n keys?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n}\n\nexport interface IEvent<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IEventMetadata = IEventMetadata,\n> {\n id: string;\n event: TName;\n payload: TPayload;\n meta: TMeta;\n timestamp: Date;\n}\n\nexport interface IEventJSON<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IEventMetadata = IEventMetadata,\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 IEventMetadata = IEventMetadata,\n> implements IEvent<TName, TPayload, TMeta> {\n constructor(\n public readonly event: TName,\n public readonly payload: TPayload,\n public readonly meta: TMeta = {\n keys: {},\n headers: {},\n } as TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\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","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 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\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\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\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\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 { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\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(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> 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\";\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\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\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\";\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();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","export const isPresent = (value: unknown): boolean => {\n return value !== undefined;\n};"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["#domainEvents","z","z","z","z","z","z","z","z","z","z","z","z","None","z","None","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 BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\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\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n public readonly correlationId: string;\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\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 BaseEnvelopeCommand<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IMessageMetadata = IMessageMetadata,\n> extends BaseEnvelope<TPayload, TMeta>\n implements IEnvelopeCommand<TName, TPayload, TMeta> {\n public readonly command: TName;\n\n constructor(\n command: TName,\n payload: TPayload,\n meta: TMeta = { keys: {}, headers: {} } as TMeta,\n id = v4(),\n ) {\n super(payload, meta, id);\n this.command = command;\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","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\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> extends BaseEnvelope<TPayload, TMeta> implements IEvent<TName, TPayload, TMeta> {\n public readonly event: TName;\n public readonly timestamp: Date;\n\n constructor(\n event: TName,\n payload: TPayload,\n meta: TMeta = { keys: {}, headers: {} } as TMeta,\n id = v4(),\n timestamp = new Date(),\n ) {\n super(payload, meta, id);\n this.event = event;\n this.timestamp = timestamp;\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","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 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\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\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\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\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 { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\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(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> 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\";\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\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\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\";\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();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","export const isPresent = (value: unknown): boolean => {\n return value !== undefined;\n};"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { Option, Result } from "@globalart/oxide";
|
|
3
3
|
|
|
4
|
+
//#region src/envelope.d.ts
|
|
5
|
+
interface IMessageMetadata {
|
|
6
|
+
keys?: Record<string, unknown>;
|
|
7
|
+
headers?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
interface IEnvelope<TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
10
|
+
id: string;
|
|
11
|
+
payload: TPayload;
|
|
12
|
+
meta: TMeta;
|
|
13
|
+
}
|
|
14
|
+
declare abstract class BaseEnvelope<TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> implements IEnvelope<TPayload, TMeta> {
|
|
15
|
+
readonly payload: TPayload;
|
|
16
|
+
readonly meta: TMeta;
|
|
17
|
+
readonly id: string;
|
|
18
|
+
constructor(payload: TPayload, meta?: TMeta, id?: string);
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
4
21
|
//#region src/event.d.ts
|
|
5
22
|
declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny>(eventName: TName, payload: TPayload) => z.ZodObject<{
|
|
6
23
|
id: z.ZodUUID;
|
|
@@ -8,29 +25,19 @@ declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny>
|
|
|
8
25
|
payload: TPayload;
|
|
9
26
|
timestamp: z.ZodCoercedDate<unknown>;
|
|
10
27
|
}, z.core.$strip>;
|
|
11
|
-
interface
|
|
12
|
-
keys?: Record<string, unknown>;
|
|
13
|
-
headers?: Record<string, unknown>;
|
|
14
|
-
}
|
|
15
|
-
interface IEvent<TName extends string, TPayload extends object = object, TMeta extends IEventMetadata = IEventMetadata> {
|
|
16
|
-
id: string;
|
|
28
|
+
interface IEvent<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends IEnvelope<TPayload, TMeta> {
|
|
17
29
|
event: TName;
|
|
18
|
-
payload: TPayload;
|
|
19
|
-
meta: TMeta;
|
|
20
30
|
timestamp: Date;
|
|
21
31
|
}
|
|
22
|
-
interface IEventJSON<TName extends string, TPayload extends object = object, TMeta extends
|
|
32
|
+
interface IEventJSON<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
23
33
|
id: string;
|
|
24
34
|
event: TName;
|
|
25
35
|
payload: TPayload;
|
|
26
36
|
timestamp: string;
|
|
27
37
|
meta: TMeta;
|
|
28
38
|
}
|
|
29
|
-
declare abstract class BaseEvent<TName extends string, TPayload extends object = object, TMeta extends
|
|
39
|
+
declare abstract class BaseEvent<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends BaseEnvelope<TPayload, TMeta> implements IEvent<TName, TPayload, TMeta> {
|
|
30
40
|
readonly event: TName;
|
|
31
|
-
readonly payload: TPayload;
|
|
32
|
-
readonly meta: TMeta;
|
|
33
|
-
readonly id: string;
|
|
34
41
|
readonly timestamp: Date;
|
|
35
42
|
constructor(event: TName, payload: TPayload, meta?: TMeta, id?: string, timestamp?: Date);
|
|
36
43
|
toJSON(): IEventJSON<TName, TPayload, TMeta>;
|
|
@@ -53,6 +60,20 @@ declare abstract class Command {
|
|
|
53
60
|
readonly causationId?: string;
|
|
54
61
|
constructor(props: CommandProps<unknown>);
|
|
55
62
|
}
|
|
63
|
+
interface IEnvelopeCommand<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends IEnvelope<TPayload, TMeta> {
|
|
64
|
+
command: TName;
|
|
65
|
+
}
|
|
66
|
+
interface IEnvelopeCommandJSON<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
67
|
+
id: string;
|
|
68
|
+
command: TName;
|
|
69
|
+
payload: TPayload;
|
|
70
|
+
meta: TMeta;
|
|
71
|
+
}
|
|
72
|
+
declare abstract class BaseEnvelopeCommand<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends BaseEnvelope<TPayload, TMeta> implements IEnvelopeCommand<TName, TPayload, TMeta> {
|
|
73
|
+
readonly command: TName;
|
|
74
|
+
constructor(command: TName, payload: TPayload, meta?: TMeta, id?: string);
|
|
75
|
+
toJSON(): IEnvelopeCommandJSON<TName, TPayload, TMeta>;
|
|
76
|
+
}
|
|
56
77
|
//#endregion
|
|
57
78
|
//#region src/command-bus.d.ts
|
|
58
79
|
interface ICommandBus<TCommand extends Command = Command> {
|
|
@@ -888,5 +909,5 @@ declare class ColorVO extends ValueObject<string> {
|
|
|
888
909
|
//#region src/classes/is-present.d.ts
|
|
889
910
|
declare const isPresent: (value: unknown) => boolean;
|
|
890
911
|
//#endregion
|
|
891
|
-
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CommandProps, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, DomainPrimitive, EmailVO, ExceptionBase, FieldValueBase, IBooleanFieldValue, IBooleanFilter, IBooleanFilterOperator, ICommandBus, ICommandHandler, IConjunction, ID, IDateFieldValue, IDateFilter, IDateFilterOperator, IDateFilterValue, IEvent, IEventHandler, IEventJSON, IEventMetadata, IFieldValueVisitor, IFilter, IFilterBaseVisitor, IFilterOrGroup, IFilterOrGroupList, IFilters, IGroup, INumberFieldValue, INumberFilter, INumberFilterOperators, INumberFilterValue, IOperator, IOutboxService, IPagination, IQueryBus, IQueryHandler, IRepositoryOption, IRootFilter, ISorting, ISpecVisitor, ISpecification, IStringFieldValue, IStringFilter, IStringFilterOperator, IUnitOfWork, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, PaginatedRepositoryMethodResult, Primitives, Query, RootFilter, SerializedException, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, UnpackedFieldValue, ValueObject, ValueObjectProps, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
912
|
+
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEnvelope, BaseEnvelopeCommand, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CommandProps, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, DomainPrimitive, EmailVO, ExceptionBase, FieldValueBase, IBooleanFieldValue, IBooleanFilter, IBooleanFilterOperator, ICommandBus, ICommandHandler, IConjunction, ID, IDateFieldValue, IDateFilter, IDateFilterOperator, IDateFilterValue, IEnvelope, IEnvelopeCommand, IEnvelopeCommandJSON, IEvent, IEventHandler, IEventJSON, type IMessageMetadata as IEventMetadata, IMessageMetadata, IFieldValueVisitor, IFilter, IFilterBaseVisitor, IFilterOrGroup, IFilterOrGroupList, IFilters, IGroup, INumberFieldValue, INumberFilter, INumberFilterOperators, INumberFilterValue, IOperator, IOutboxService, IPagination, IQueryBus, IQueryHandler, IRepositoryOption, IRootFilter, ISorting, ISpecVisitor, ISpecification, IStringFieldValue, IStringFilter, IStringFilterOperator, IUnitOfWork, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, PaginatedRepositoryMethodResult, Primitives, Query, RootFilter, SerializedException, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, UnpackedFieldValue, ValueObject, ValueObjectProps, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
892
913
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { Option, Result } from "@globalart/oxide";
|
|
3
3
|
|
|
4
|
+
//#region src/envelope.d.ts
|
|
5
|
+
interface IMessageMetadata {
|
|
6
|
+
keys?: Record<string, unknown>;
|
|
7
|
+
headers?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
interface IEnvelope<TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
10
|
+
id: string;
|
|
11
|
+
payload: TPayload;
|
|
12
|
+
meta: TMeta;
|
|
13
|
+
}
|
|
14
|
+
declare abstract class BaseEnvelope<TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> implements IEnvelope<TPayload, TMeta> {
|
|
15
|
+
readonly payload: TPayload;
|
|
16
|
+
readonly meta: TMeta;
|
|
17
|
+
readonly id: string;
|
|
18
|
+
constructor(payload: TPayload, meta?: TMeta, id?: string);
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
4
21
|
//#region src/event.d.ts
|
|
5
22
|
declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny>(eventName: TName, payload: TPayload) => z.ZodObject<{
|
|
6
23
|
id: z.ZodUUID;
|
|
@@ -8,29 +25,19 @@ declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny>
|
|
|
8
25
|
payload: TPayload;
|
|
9
26
|
timestamp: z.ZodCoercedDate<unknown>;
|
|
10
27
|
}, z.core.$strip>;
|
|
11
|
-
interface
|
|
12
|
-
keys?: Record<string, unknown>;
|
|
13
|
-
headers?: Record<string, unknown>;
|
|
14
|
-
}
|
|
15
|
-
interface IEvent<TName extends string, TPayload extends object = object, TMeta extends IEventMetadata = IEventMetadata> {
|
|
16
|
-
id: string;
|
|
28
|
+
interface IEvent<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends IEnvelope<TPayload, TMeta> {
|
|
17
29
|
event: TName;
|
|
18
|
-
payload: TPayload;
|
|
19
|
-
meta: TMeta;
|
|
20
30
|
timestamp: Date;
|
|
21
31
|
}
|
|
22
|
-
interface IEventJSON<TName extends string, TPayload extends object = object, TMeta extends
|
|
32
|
+
interface IEventJSON<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
23
33
|
id: string;
|
|
24
34
|
event: TName;
|
|
25
35
|
payload: TPayload;
|
|
26
36
|
timestamp: string;
|
|
27
37
|
meta: TMeta;
|
|
28
38
|
}
|
|
29
|
-
declare abstract class BaseEvent<TName extends string, TPayload extends object = object, TMeta extends
|
|
39
|
+
declare abstract class BaseEvent<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends BaseEnvelope<TPayload, TMeta> implements IEvent<TName, TPayload, TMeta> {
|
|
30
40
|
readonly event: TName;
|
|
31
|
-
readonly payload: TPayload;
|
|
32
|
-
readonly meta: TMeta;
|
|
33
|
-
readonly id: string;
|
|
34
41
|
readonly timestamp: Date;
|
|
35
42
|
constructor(event: TName, payload: TPayload, meta?: TMeta, id?: string, timestamp?: Date);
|
|
36
43
|
toJSON(): IEventJSON<TName, TPayload, TMeta>;
|
|
@@ -53,6 +60,20 @@ declare abstract class Command {
|
|
|
53
60
|
readonly causationId?: string;
|
|
54
61
|
constructor(props: CommandProps<unknown>);
|
|
55
62
|
}
|
|
63
|
+
interface IEnvelopeCommand<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends IEnvelope<TPayload, TMeta> {
|
|
64
|
+
command: TName;
|
|
65
|
+
}
|
|
66
|
+
interface IEnvelopeCommandJSON<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> {
|
|
67
|
+
id: string;
|
|
68
|
+
command: TName;
|
|
69
|
+
payload: TPayload;
|
|
70
|
+
meta: TMeta;
|
|
71
|
+
}
|
|
72
|
+
declare abstract class BaseEnvelopeCommand<TName extends string, TPayload extends object = object, TMeta extends IMessageMetadata = IMessageMetadata> extends BaseEnvelope<TPayload, TMeta> implements IEnvelopeCommand<TName, TPayload, TMeta> {
|
|
73
|
+
readonly command: TName;
|
|
74
|
+
constructor(command: TName, payload: TPayload, meta?: TMeta, id?: string);
|
|
75
|
+
toJSON(): IEnvelopeCommandJSON<TName, TPayload, TMeta>;
|
|
76
|
+
}
|
|
56
77
|
//#endregion
|
|
57
78
|
//#region src/command-bus.d.ts
|
|
58
79
|
interface ICommandBus<TCommand extends Command = Command> {
|
|
@@ -888,5 +909,5 @@ declare class ColorVO extends ValueObject<string> {
|
|
|
888
909
|
//#region src/classes/is-present.d.ts
|
|
889
910
|
declare const isPresent: (value: unknown) => boolean;
|
|
890
911
|
//#endregion
|
|
891
|
-
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CommandProps, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, DomainPrimitive, EmailVO, ExceptionBase, FieldValueBase, IBooleanFieldValue, IBooleanFilter, IBooleanFilterOperator, ICommandBus, ICommandHandler, IConjunction, ID, IDateFieldValue, IDateFilter, IDateFilterOperator, IDateFilterValue, IEvent, IEventHandler, IEventJSON, IEventMetadata, IFieldValueVisitor, IFilter, IFilterBaseVisitor, IFilterOrGroup, IFilterOrGroupList, IFilters, IGroup, INumberFieldValue, INumberFilter, INumberFilterOperators, INumberFilterValue, IOperator, IOutboxService, IPagination, IQueryBus, IQueryHandler, IRepositoryOption, IRootFilter, ISorting, ISpecVisitor, ISpecification, IStringFieldValue, IStringFilter, IStringFilterOperator, IUnitOfWork, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, PaginatedRepositoryMethodResult, Primitives, Query, RootFilter, SerializedException, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, UnpackedFieldValue, ValueObject, ValueObjectProps, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
912
|
+
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEnvelope, BaseEnvelopeCommand, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CommandProps, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, DomainPrimitive, EmailVO, ExceptionBase, FieldValueBase, IBooleanFieldValue, IBooleanFilter, IBooleanFilterOperator, ICommandBus, ICommandHandler, IConjunction, ID, IDateFieldValue, IDateFilter, IDateFilterOperator, IDateFilterValue, IEnvelope, IEnvelopeCommand, IEnvelopeCommandJSON, IEvent, IEventHandler, IEventJSON, type IMessageMetadata as IEventMetadata, IMessageMetadata, IFieldValueVisitor, IFilter, IFilterBaseVisitor, IFilterOrGroup, IFilterOrGroupList, IFilters, IGroup, INumberFieldValue, INumberFilter, INumberFilterOperators, INumberFilterValue, IOperator, IOutboxService, IPagination, IQueryBus, IQueryHandler, IRepositoryOption, IRootFilter, ISorting, ISpecVisitor, ISpecification, IStringFieldValue, IStringFilter, IStringFilterOperator, IUnitOfWork, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, PaginatedRepositoryMethodResult, Primitives, Query, RootFilter, SerializedException, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, UnpackedFieldValue, ValueObject, ValueObjectProps, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
892
913
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -23,6 +23,20 @@ var AggregateRoot = class {
|
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/envelope.ts
|
|
28
|
+
const defaultMeta = {
|
|
29
|
+
keys: {},
|
|
30
|
+
headers: {}
|
|
31
|
+
};
|
|
32
|
+
var BaseEnvelope = class {
|
|
33
|
+
constructor(payload, meta = defaultMeta, id = v4()) {
|
|
34
|
+
this.payload = payload;
|
|
35
|
+
this.meta = meta;
|
|
36
|
+
this.id = id;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
26
40
|
//#endregion
|
|
27
41
|
//#region src/command.ts
|
|
28
42
|
var Command = class {
|
|
@@ -34,6 +48,24 @@ var Command = class {
|
|
|
34
48
|
this.commandId = props.commandId ?? v4();
|
|
35
49
|
}
|
|
36
50
|
};
|
|
51
|
+
var BaseEnvelopeCommand = class extends BaseEnvelope {
|
|
52
|
+
command;
|
|
53
|
+
constructor(command, payload, meta = {
|
|
54
|
+
keys: {},
|
|
55
|
+
headers: {}
|
|
56
|
+
}, id = v4()) {
|
|
57
|
+
super(payload, meta, id);
|
|
58
|
+
this.command = command;
|
|
59
|
+
}
|
|
60
|
+
toJSON() {
|
|
61
|
+
return {
|
|
62
|
+
id: this.id,
|
|
63
|
+
command: this.command,
|
|
64
|
+
payload: this.payload,
|
|
65
|
+
meta: this.meta
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
37
69
|
|
|
38
70
|
//#endregion
|
|
39
71
|
//#region src/event.ts
|
|
@@ -43,15 +75,15 @@ const eventSchema = (eventName, payload) => z.object({
|
|
|
43
75
|
payload,
|
|
44
76
|
timestamp: z.coerce.date()
|
|
45
77
|
});
|
|
46
|
-
var BaseEvent = class {
|
|
78
|
+
var BaseEvent = class extends BaseEnvelope {
|
|
79
|
+
event;
|
|
80
|
+
timestamp;
|
|
47
81
|
constructor(event, payload, meta = {
|
|
48
82
|
keys: {},
|
|
49
83
|
headers: {}
|
|
50
84
|
}, id = v4(), timestamp = /* @__PURE__ */ new Date()) {
|
|
85
|
+
super(payload, meta, id);
|
|
51
86
|
this.event = event;
|
|
52
|
-
this.payload = payload;
|
|
53
|
-
this.meta = meta;
|
|
54
|
-
this.id = id;
|
|
55
87
|
this.timestamp = timestamp;
|
|
56
88
|
}
|
|
57
89
|
toJSON() {
|
|
@@ -1038,5 +1070,5 @@ const isPresent = (value) => {
|
|
|
1038
1070
|
};
|
|
1039
1071
|
|
|
1040
1072
|
//#endregion
|
|
1041
|
-
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, EmailVO, ExceptionBase, FieldValueBase, ID, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, Query, RootFilter, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, ValueObject, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
1073
|
+
export { $between, $contains, $end_eq, $end_gt, $end_gte, $end_lt, $end_lte, $end_neq, $ends_with, $eq, $gt, $gte, $has_file_extension, $has_file_type, $in, $is_empty, $is_false, $is_me, $is_not_empty, $is_not_me, $is_not_today, $is_root, $is_today, $is_tomorrow, $is_true, $is_yesterday, $lt, $lte, $neq, $nin, $not_contains, $regex, $start_eq, $start_gt, $start_gte, $start_lt, $start_lte, $start_neq, $starts_with, AggregateRoot, BaseEnvelope, BaseEnvelopeCommand, BaseEvent, BaseFilterSpecification, BoolVO, BooleanEqual, BooleanFieldValue, BooleanNotEqual, ColorVO, Command, CompositeSpecification, DateBetween, DateEqual, DateFieldValue, DateGreaterThan, DateGreaterThanOrEqual, DateIsToday, DateIsTomorrow, DateIsYesterday, DateLessThan, DateLessThanOrEqual, DateVO, EmailVO, ExceptionBase, FieldValueBase, ID, IntegerVO, NanoID, NumberEmpty, NumberEqual, NumberFieldValue, NumberGreaterThan, NumberGreaterThanOrEqual, NumberLessThan, NumberLessThanOrEqual, Query, RootFilter, StringContain, StringEmpty, StringEndsWith, StringEqual, StringFieldValue, StringNotEqual, StringRegex, StringStartsWith, StringVO, UUID, ValueObject, and, andOptions, baseFilter, booleanFieldValue, booleanFilter, booleanFilterOperators, booleanFilterValue, conjunctions, convertFilterSpec, convertPropsToObject, dateFieldValue, dateFilter, dateFilterOperators, dateFilterValue, eventSchema, filterOrGroupList, filterRootFilter, isEmptyFilter, isFilter, isGroup, isOperatorWithoutValue, isPresent, numberFieldValue, numberFilter, numberFilterOperators, numberFilterValue, operators, operatorsMap, operatorsWihtoutValue, or, paginatedResponseSchema, paginationSchema, rootFilter, sortingSchema, stringFieldValue, stringFilter, stringFilterOperators, stringFilterValue };
|
|
1042
1074
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#domainEvents","z","z"],"sources":["../src/aggregate-root.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 BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\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 type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n public readonly correlationId: string;\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\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 IEventMetadata {\n keys?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n}\n\nexport interface IEvent<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IEventMetadata = IEventMetadata,\n> {\n id: string;\n event: TName;\n payload: TPayload;\n meta: TMeta;\n timestamp: Date;\n}\n\nexport interface IEventJSON<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IEventMetadata = IEventMetadata,\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 IEventMetadata = IEventMetadata,\n> implements IEvent<TName, TPayload, TMeta> {\n constructor(\n public readonly event: TName,\n public readonly payload: TPayload,\n public readonly meta: TMeta = {\n keys: {},\n headers: {},\n } as TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\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","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 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\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\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\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\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 { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\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(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> 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\";\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\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\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\";\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();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","export const isPresent = (value: unknown): boolean => {\n return value !== undefined;\n};"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#domainEvents","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 BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\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\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n public readonly correlationId: string;\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\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 BaseEnvelopeCommand<\n TName extends string,\n TPayload extends object = object,\n TMeta extends IMessageMetadata = IMessageMetadata,\n> extends BaseEnvelope<TPayload, TMeta>\n implements IEnvelopeCommand<TName, TPayload, TMeta> {\n public readonly command: TName;\n\n constructor(\n command: TName,\n payload: TPayload,\n meta: TMeta = { keys: {}, headers: {} } as TMeta,\n id = v4(),\n ) {\n super(payload, meta, id);\n this.command = command;\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","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\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> extends BaseEnvelope<TPayload, TMeta> implements IEvent<TName, TPayload, TMeta> {\n public readonly event: TName;\n public readonly timestamp: Date;\n\n constructor(\n event: TName,\n payload: TPayload,\n meta: TMeta = { keys: {}, headers: {} } as TMeta,\n id = v4(),\n timestamp = new Date(),\n ) {\n super(payload, meta, id);\n this.event = event;\n this.timestamp = timestamp;\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","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 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\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\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\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\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 { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\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(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> 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\";\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\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\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\";\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();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","export const isPresent = (value: unknown): boolean => {\n return value !== undefined;\n};"],"mappings":"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"}
|