@turystack/query-dsl 1.0.2 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/boolean/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAUnB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IACnD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,KAAK,CAAA;IACb,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/boolean/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAUnB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IACnD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,KAAK,CAAA;IACb,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA","sourcesContent":["import z from 'zod'\n\n/**\n * Zod schema that coerces `\"true\"` and `\"false\"` query-string values\n * into native booleans before validating with `z.boolean()`.\n *\n * @example\n * BooleanSchema.parse('true') // true\n * BooleanSchema.parse('false') // false\n */\nexport const BooleanSchema = z.preprocess((value) => {\n\tif (value === 'false') {\n\t\treturn false\n\t}\n\tif (value === 'true') {\n\t\treturn true\n\t}\n\n\treturn value\n}, z.boolean())\n\nexport type Boolean = z.infer<typeof BooleanSchema>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boolean/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boolean/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA","sourcesContent":["export type { Boolean } from './boolean.js'\nexport { BooleanSchema } from './boolean.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"date-range.js","sourceRoot":"","sources":["../../src/date-range/date-range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"date-range.js","sourceRoot":"","sources":["../../src/date-range/date-range.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod'\n\n/** Validates the `>=2024-01-01;<=2024-12-31` date range query format. */\nexport const dateRangeRegex =\n\t/^(>=|<=|>|<|=)\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))?(?:;(?:>=|<=|>|<|=)\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))?)*$/\n\nconst dateValueSchema = z.union([\n\tz.iso.date(),\n\tz.iso.datetime({\n\t\toffset: true,\n\t}),\n])\n\n/**\n * Zod schema that parses a semicolon-separated date range string\n * (e.g. `>=2024-01-01;<=2024-12-31`) into a `DateRange` object with Date values.\n *\n * Validates each date segment with `z.iso.date()` and throws on\n * duplicate operators or invalid dates.\n *\n * @example\n * DateRangeSchema.parse('>=2024-01-01;<=2024-12-31')\n * // { gte: Date, lte: Date }\n */\nexport const DateRangeSchema = z\n\t.string()\n\t.optional()\n\t.refine((value) => (value ? dateRangeRegex.test(value) : true), {\n\t\tparams: {\n\t\t\tcode: 'dateRangeInvalidFormat',\n\t\t},\n\t})\n\t.transform((value, ctx) => {\n\t\tif (!value) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst parts = value.split(';')\n\n\t\tconst result: DateRange = {}\n\t\tconst usedOps = new Set<string>()\n\n\t\tfor (const part of parts) {\n\t\t\tconst [, op, rawDate] = part.match(/(>=|<=|>|<|=)(.*)/)!\n\n\t\t\tconst parsed = dateValueSchema.safeParse(rawDate)\n\t\t\tif (!parsed.success) {\n\t\t\t\tctx.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: rawDate,\n\t\t\t\t\tmessage: '',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcode: 'dateInvalid',\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn z.NEVER\n\t\t\t}\n\n\t\t\tif (usedOps.has(op)) {\n\t\t\t\tctx.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: op,\n\t\t\t\t\tmessage: '',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcode: 'dateRangeDuplicatedOperator',\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn z.NEVER\n\t\t\t}\n\n\t\t\tusedOps.add(op)\n\n\t\t\tconst d = new Date(rawDate)\n\n\t\t\tif (op === '>=') {\n\t\t\t\tresult.gte = d\n\t\t\t}\n\t\t\tif (op === '<=') {\n\t\t\t\tresult.lte = d\n\t\t\t}\n\t\t\tif (op === '>') {\n\t\t\t\tresult.gt = d\n\t\t\t}\n\t\t\tif (op === '<') {\n\t\t\t\tresult.lt = d\n\t\t\t}\n\t\t\tif (op === '=') {\n\t\t\t\tresult.eq = d\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t})\n\t.meta({\n\t\tdescription: 'Available operators: >, >=, <, <=, =.',\n\t\texample: '>=2024-01-01;<=2024-12-31',\n\t})\n\nexport type DateRange = {\n\teq?: Date\n\tgt?: Date\n\tgte?: Date\n\tlt?: Date\n\tlte?: Date\n}\n\nexport type DateRangeValue = {\n\tfrom?: Date\n\tto?: Date\n}\n\n/**\n * Serializes a `DateRange` object back into the query-string format\n * using ISO 8601 date strings.\n *\n * @example\n * dateRangeToQuery({ gte: new Date('2024-01-01') }) // '>=2024-01-01T00:00:00.000Z'\n */\nexport const dateRangeToQuery = (range: DateRange) => {\n\tconst opMap: Record<keyof DateRange, string> = {\n\t\teq: '=',\n\t\tgt: '>',\n\t\tgte: '>=',\n\t\tlt: '<',\n\t\tlte: '<=',\n\t}\n\n\treturn Object.entries(range)\n\t\t.filter(([, value]) => value instanceof Date)\n\t\t.map(([key, date]) => {\n\t\t\tconst op = opMap[key as keyof DateRange]\n\t\t\treturn `${op}${(date as Date).toISOString()}`\n\t\t})\n\t\t.join(';')\n}\n\n/**\n * Parses a date range query string into a `DateRange` object without Zod validation.\n * Useful on the client side where the value is already trusted.\n *\n * @example\n * queryToDateRange('>=2024-01-01') // { gte: Date }\n */\nexport const queryToDateRange = (query: string): DateRange => {\n\tconst opMap: Record<string, keyof DateRange> = {\n\t\t'<': 'lt',\n\t\t'<=': 'lte',\n\t\t'=': 'eq',\n\t\t'>': 'gt',\n\t\t'>=': 'gte',\n\t}\n\n\tconst result: DateRange = {}\n\n\tif (!query.trim()) {\n\t\treturn result\n\t}\n\n\tfor (const part of query.split(';')) {\n\t\tconst [, op, rawDate] = part.match(/(>=|<=|>|<|=)(.*)/) || []\n\n\t\tif (!op || !rawDate) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst date = new Date(rawDate)\n\n\t\tif (!Number.isNaN(date.getTime())) {\n\t\t\tconst key = opMap[op]\n\t\t\tresult[key] = date\n\t\t}\n\t}\n\n\treturn result\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/date-range/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/date-range/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,iBAAiB,CAAA","sourcesContent":["export type { DateRange, DateRangeValue } from './date-range.js'\nexport {\n\tDateRangeSchema,\n\tdateRangeRegex,\n\tdateRangeToQuery,\n\tqueryToDateRange,\n} from './date-range.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/filter/filter.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAYnB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,MAAyB,EACzB,OAEC,EACA,EAAE,CACH,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,IAAI,CAAC;IACL,WAAW,EAAE,wCAAwC,MAAM;SACzD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,EAAE;IACd,OAAO,EAAE,OAAO,EAAE,OAAO;CACzB,CAAC,CAAA"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/filter/filter.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAYnB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,MAAyB,EACzB,OAEC,EACA,EAAE,CACH,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,IAAI,CAAC;IACL,WAAW,EAAE,wCAAwC,MAAM;SACzD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,EAAE;IACd,OAAO,EAAE,OAAO,EAAE,OAAO;CACzB,CAAC,CAAA","sourcesContent":["import z from 'zod'\n\n/**\n * Creates an optional string schema with OpenAPI metadata listing\n * the filterable fields. Useful for generic text search parameters.\n *\n * @param fields - Field names that the filter matches against.\n * @param options - Optional object with an `example` value for docs.\n *\n * @example\n * const schema = FilterSchema(['name', 'email'], { example: 'john' })\n */\nexport const FilterSchema = (\n\tfields: readonly string[],\n\toptions?: {\n\t\texample: string\n\t},\n) =>\n\tz\n\t\t.string()\n\t\t.optional()\n\t\t.meta({\n\t\t\tdescription: `Generic filter that matches against\\n${fields\n\t\t\t\t.map((field) => `- ${field}`)\n\t\t\t\t.join('\\n')}`,\n\t\t\texample: options?.example,\n\t\t})\n\nexport type Filter = {\n\tfilter?: z.infer<ReturnType<typeof FilterSchema>>\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA","sourcesContent":["export type { Filter } from './filter.js'\nexport { FilterSchema } from './filter.js'\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA","sourcesContent":["export * from '@/boolean/index.js'\nexport * from '@/date-range/index.js'\nexport * from '@/filter/index.js'\nexport * from '@/list/index.js'\nexport * from '@/number-range/index.js'\nexport * from '@/pagination/index.js'\nexport * from '@/sort/index.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/list/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/list/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA","sourcesContent":["export type { List } from './list.js'\nexport { ListSchema, listToQuery, queryToList } from './list.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/list/list.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAanB,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,MAAsB,EACtB,IAAkB,EACjB,EAAE,CACH,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,CAAA;IACV,CAAC;IAED,MAAM,MAAM,GAAG,KAAK;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE7B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAEnE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,kBAAkB;aACxB;SACD,CAAC,CAAA;QACF,OAAO,CAAC,CAAC,KAAK,CAAA;IACf,CAAC;IAED,OAAO;QACN,GAAG,IAAI,GAAG,CACT,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACxD,CAAC,MAAM,EAAE;KACC,CAAA;AACb,CAAC,CAAC;KACD,IAAI,CAAC;IACL,WAAW,EAAE,kCAAkC;IAC/C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;CACvB,CAAC,CAAA;AAYJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,KAAqB,EACX,EAAE;IACZ,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO;QACN,GAAG,IAAI,GAAG,CACT,KAAK;aACH,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CACjB;KACU,CAAA;AACb,CAAC,CAAA;AAQD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,IAAa,EAAU,EAAE;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC,CAAA"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/list/list.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAanB,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,MAAsB,EACtB,IAAkB,EACjB,EAAE,CACH,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,CAAA;IACV,CAAC;IAED,MAAM,MAAM,GAAG,KAAK;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE7B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAEnE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,kBAAkB;aACxB;SACD,CAAC,CAAA;QACF,OAAO,CAAC,CAAC,KAAK,CAAA;IACf,CAAC;IAED,OAAO;QACN,GAAG,IAAI,GAAG,CACT,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACxD,CAAC,MAAM,EAAE;KACC,CAAA;AACb,CAAC,CAAC;KACD,IAAI,CAAC;IACL,WAAW,EAAE,kCAAkC;IAC/C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;CACvB,CAAC,CAAA;AAYJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,KAAqB,EACX,EAAE;IACZ,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO;QACN,GAAG,IAAI,GAAG,CACT,KAAK;aACH,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CACjB;KACU,CAAA;AACb,CAAC,CAAA;AAQD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,IAAa,EAAU,EAAE;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC,CAAA","sourcesContent":["import z from 'zod'\n\n/**\n * Creates a Zod schema that parses a comma-separated string into a\n * deduplicated array of validated values.\n *\n * @param schema - Zod schema used to validate each individual value.\n * @param list - Allowed values, used for the error message and OpenAPI example.\n *\n * @example\n * const StatusSchema = ListSchema(z.enum(['active', 'inactive']), ['active', 'inactive'])\n * StatusSchema.parse('active,inactive') // ['active', 'inactive']\n */\nexport const ListSchema = <T extends string>(\n\tschema: z.ZodSchema<T>,\n\tlist: readonly T[],\n) =>\n\tz\n\t\t.string()\n\t\t.optional()\n\t\t.transform((value, ctx) => {\n\t\t\tif (!value) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst values = value\n\t\t\t\t.split(',')\n\t\t\t\t.map((v) => v.trim())\n\t\t\t\t.filter((v) => v.length > 0)\n\n\t\t\tconst parsedValues = values.map((value) => schema.safeParse(value))\n\n\t\t\tif (parsedValues.some((result) => !result.success)) {\n\t\t\t\tctx.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: values,\n\t\t\t\t\tmessage: '',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tallowed: list,\n\t\t\t\t\t\tcode: 'listInvalidValue',\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn z.NEVER\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t...new Set(\n\t\t\t\t\tparsedValues.filter((v) => v.success).map((v) => v.data),\n\t\t\t\t).values(),\n\t\t\t] as List<T>\n\t\t})\n\t\t.meta({\n\t\t\tdescription: 'Parses a comma-separated string.',\n\t\t\texample: list.join(','),\n\t\t})\n\nexport type List<T extends string> = T[]\n\n/**\n * Parses a comma-separated query string into a typed array without Zod validation.\n * Returns an empty array for nullish values.\n *\n * @example\n * queryToList('active,inactive') // ['active', 'inactive']\n * queryToList(null) // []\n */\nexport const queryToList = <T extends string>(\n\tquery?: string | null,\n): List<T> => {\n\tif (!query) {\n\t\treturn []\n\t}\n\n\treturn [\n\t\t...new Set(\n\t\t\tquery\n\t\t\t\t.split(',')\n\t\t\t\t.map((value) => value.trim())\n\t\t\t\t.filter(Boolean),\n\t\t),\n\t] as List<T>\n}\n\n/**\n * Joins an array of values into a comma-separated query string.\n *\n * @example\n * listToQuery(['active', 'inactive']) // 'active,inactive'\n */\nexport const listToQuery = <T extends string>(list: List<T>): string => {\n\treturn list.join(',')\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/number-range/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,WAAW,EACX,YAAY,GACZ,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/number-range/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,WAAW,EACX,YAAY,GACZ,MAAM,mBAAmB,CAAA","sourcesContent":["export type { Range, RangeValue } from './number-range.js'\nexport {\n\tqueryToRange,\n\tRangeSchema,\n\trangeToQuery,\n} from './number-range.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"number-range.js","sourceRoot":"","sources":["../../src/number-range/number-range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"number-range.js","sourceRoot":"","sources":["../../src/number-range/number-range.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod'\n\n/** Validates the `>=10;<=50` numeric range query format. */\nconst rangeRegex =\n\t/^(>=|<=|>|<|=)(-?\\d+(?:\\.\\d+)?)(;(>=|<=|>|<|=)(-?\\d+(?:\\.\\d+)?))*$/\n\n/**\n * Zod schema that parses a semicolon-separated range string (e.g. `>=10;<=50`)\n * into a `Range` object with numeric comparison operators.\n *\n * Throws on duplicate operators or invalid format.\n *\n * @example\n * RangeSchema.parse('>=10;<=50') // { gte: 10, lte: 50 }\n * RangeSchema.parse('=42') // { eq: 42 }\n */\nexport const RangeSchema = z\n\t.string()\n\t.refine((value) => rangeRegex.test(value), {\n\t\tparams: {\n\t\t\tcode: 'rangeInvalidFormat',\n\t\t},\n\t})\n\t.transform((value, ctx) => {\n\t\tconst parts = value.split(';')\n\n\t\tconst result: Range = {}\n\t\tconst usedOps = new Set<string>()\n\n\t\tfor (const part of parts) {\n\t\t\tconst [, op, num] = part.match(/(>=|<=|>|<|=)(.*)/)!\n\n\t\t\tif (usedOps.has(op)) {\n\t\t\t\tctx.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: op,\n\t\t\t\t\tmessage: '',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcode: 'rangeDuplicatedOperator',\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\treturn z.NEVER\n\t\t\t}\n\n\t\t\tusedOps.add(op)\n\n\t\t\tconst n = Number(num)\n\n\t\t\tif (op === '>=') {\n\t\t\t\tresult.gte = n\n\t\t\t}\n\t\t\tif (op === '<=') {\n\t\t\t\tresult.lte = n\n\t\t\t}\n\t\t\tif (op === '>') {\n\t\t\t\tresult.gt = n\n\t\t\t}\n\t\t\tif (op === '<') {\n\t\t\t\tresult.lt = n\n\t\t\t}\n\t\t\tif (op === '=') {\n\t\t\t\tresult.eq = n\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t})\n\t.meta({\n\t\tdescription: 'Available operators: >, >=, <, <=, =.',\n\t\texample: '>=10;<=50',\n\t})\n\nexport type Range = {\n\teq?: number\n\tgt?: number\n\tgte?: number\n\tlt?: number\n\tlte?: number\n}\n\nexport type RangeValue = {\n\tfrom?: number\n\tto?: number\n}\n\n/**\n * Serializes a `Range` object back into the query-string format.\n *\n * @example\n * rangeToQuery({ gte: 10, lte: 50 }) // '>=10;<=50'\n */\nexport const rangeToQuery = (range: Range) => {\n\tconst opMap: Record<keyof Range, string> = {\n\t\teq: '=',\n\t\tgt: '>',\n\t\tgte: '>=',\n\t\tlt: '<',\n\t\tlte: '<=',\n\t}\n\n\treturn Object.entries(range)\n\t\t.filter(([, value]) => typeof value === 'number' && !Number.isNaN(value))\n\t\t.map(([key, value]) => {\n\t\t\tconst op = opMap[key as keyof Range]\n\t\t\treturn `${op}${value}`\n\t\t})\n\t\t.join(';')\n}\n\n/**\n * Parses a range query string into a `Range` object without Zod validation.\n * Useful on the client side where the value is already trusted.\n *\n * @example\n * queryToRange('>=10;<=50') // { gte: 10, lte: 50 }\n */\nexport const queryToRange = (query: string): Range => {\n\tconst opMap: Record<string, keyof Range> = {\n\t\t'<': 'lt',\n\t\t'<=': 'lte',\n\t\t'=': 'eq',\n\t\t'>': 'gt',\n\t\t'>=': 'gte',\n\t}\n\n\tconst result: Range = {}\n\n\tif (!query.trim()) {\n\t\treturn result\n\t}\n\n\tfor (const part of query.split(';')) {\n\t\tconst [, op, raw] = part.match(/(>=|<=|>|<|=)(.*)/) || []\n\n\t\tif (!op || !raw) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst value = raw.trim()\n\n\t\tif (!value) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst key = opMap[op]\n\t\tconst num = Number(value)\n\n\t\tif (!Number.isNaN(num)) {\n\t\t\tresult[key] = num\n\t\t}\n\t}\n\n\treturn result\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pagination/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACN,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,GAChB,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pagination/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACN,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,GAChB,MAAM,iBAAiB,CAAA","sourcesContent":["export type {\n\tCursorPaginatedResponse,\n\tCursorPagination,\n\tCursorPaginationMeta,\n\tPagePaginatedResponse,\n\tPagePagination,\n\tPagePaginationMeta,\n\tPaginatedResponse,\n\tPagination,\n\tPaginationMeta,\n} from './pagination.js'\nexport {\n\tCursorPaginatedResponseSchema,\n\tCursorPaginationMetaSchema,\n\tCursorPaginationSchema,\n\tPagePaginatedResponseSchema,\n\tPagePaginationMetaSchema,\n\tPagePaginationSchema,\n\tPaginatedResponseSchema,\n\tPaginationMetaSchema,\n\tPaginationSchema,\n} from './pagination.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination/pagination.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod'\n\nconst LimitSchema = z.coerce.number().min(1).max(100).default(10).meta({\n\tdescription: 'Items per page',\n\texample: 10,\n})\n\n/**\n * Query schema for page-based pagination (`?page=2&limit=10`).\n *\n * @example\n * PagePaginationSchema.parse({ page: '2' }) // { page: 2, limit: 10 }\n */\nexport const PagePaginationSchema = z.object({\n\tlimit: LimitSchema,\n\tpage: z.coerce.number().min(1).default(1).meta({\n\t\tdescription: 'Page number',\n\t\texample: 1,\n\t}),\n})\n\nexport type PagePagination = z.infer<typeof PagePaginationSchema>\n\n/** Response meta for page-based pagination. */\nexport const PagePaginationMetaSchema = z.object({\n\tlimit: z.number().meta({\n\t\tdescription: 'Items per page',\n\t\texample: 10,\n\t}),\n\tpage: z.number().meta({\n\t\tdescription: 'Current page',\n\t\texample: 1,\n\t}),\n\ttotalItems: z.number().meta({\n\t\tdescription: 'Total items',\n\t\texample: 100,\n\t}),\n\ttotalPages: z.number().meta({\n\t\tdescription: 'Total pages',\n\t\texample: 10,\n\t}),\n})\n\nexport type PagePaginationMeta = z.infer<typeof PagePaginationMetaSchema>\n\n/**\n * Query schema for cursor-based pagination (`?limit=10&nextCursor=123`).\n *\n * @example\n * CursorPaginationSchema.parse({ nextCursor: '123' }) // { limit: 10, nextCursor: '123' }\n */\nexport const CursorPaginationSchema = z.object({\n\tlimit: LimitSchema,\n\tnextCursor: z.string().optional().meta({\n\t\tdescription: 'Cursor to end before',\n\t\texample: '123',\n\t}),\n\tpreviousCursor: z.string().optional().meta({\n\t\tdescription: 'Cursor to start after',\n\t\texample: '123',\n\t}),\n})\n\nexport type CursorPagination = z.infer<typeof CursorPaginationSchema>\n\n/** Response meta for cursor-based pagination. */\nexport const CursorPaginationMetaSchema = z.object({\n\thasMore: z.boolean().default(false).meta({\n\t\tdescription: 'Has more items',\n\t\texample: true,\n\t}),\n\tlimit: z.number().meta({\n\t\tdescription: 'Items per page',\n\t\texample: 10,\n\t}),\n\tnextCursor: z.string().optional().meta({\n\t\tdescription: 'Cursor for the next page',\n\t\texample: '123',\n\t}),\n})\n\nexport type CursorPaginationMeta = z.infer<typeof CursorPaginationMetaSchema>\n\n/**\n * Query schema accepting page OR cursor pagination — never both. The output\n * is a discriminated union on `mode`; nothing sent resolves to page 1.\n *\n * @example\n * PaginationSchema.parse({ page: '2' }) // { mode: 'page', page: 2, limit: 10 }\n * PaginationSchema.parse({ nextCursor: 'abc' }) // { mode: 'cursor', limit: 10, nextCursor: 'abc' }\n * PaginationSchema.parse({ page: '2', nextCursor: 'abc' }) // throws paginationMixedModes\n */\nexport const PaginationSchema = z\n\t.object({\n\t\tlimit: LimitSchema,\n\t\tnextCursor: z.string().optional().meta({\n\t\t\tdescription: 'Cursor to end before (cursor mode)',\n\t\t\texample: '123',\n\t\t}),\n\t\tpage: z.coerce.number().min(1).optional().meta({\n\t\t\tdescription: 'Page number (page mode)',\n\t\t\texample: 1,\n\t\t}),\n\t\tpreviousCursor: z.string().optional().meta({\n\t\t\tdescription: 'Cursor to start after (cursor mode)',\n\t\t\texample: '123',\n\t\t}),\n\t})\n\t.superRefine((value, ctx) => {\n\t\tconst hasPage = value.page !== undefined\n\t\tconst hasCursor =\n\t\t\tvalue.nextCursor !== undefined || value.previousCursor !== undefined\n\n\t\tif (hasPage && hasCursor) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tinput: value,\n\t\t\t\tmessage: '',\n\t\t\t\tparams: {\n\t\t\t\t\tcode: 'paginationMixedModes',\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t})\n\t.transform((value) => {\n\t\tif (value.nextCursor !== undefined || value.previousCursor !== undefined) {\n\t\t\treturn {\n\t\t\t\tlimit: value.limit,\n\t\t\t\tmode: 'cursor' as const,\n\t\t\t\tnextCursor: value.nextCursor,\n\t\t\t\tpreviousCursor: value.previousCursor,\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlimit: value.limit,\n\t\t\tmode: 'page' as const,\n\t\t\tpage: value.page ?? 1,\n\t\t}\n\t})\n\nexport type Pagination = z.output<typeof PaginationSchema>\n\n/** Response meta discriminated on `mode` — matches whichever mode was requested. */\nexport const PaginationMetaSchema = z.discriminatedUnion('mode', [\n\tPagePaginationMetaSchema.extend({\n\t\tmode: z.literal('page'),\n\t}),\n\tCursorPaginationMetaSchema.extend({\n\t\tmode: z.literal('cursor'),\n\t}),\n])\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>\n\nconst EnvelopeSchema = <T extends z.ZodTypeAny, M extends z.ZodTypeAny>(\n\tdataSchema: T,\n\tmetaSchema: M,\n) =>\n\tz\n\t\t.object({\n\t\t\tdata: z.array(dataSchema),\n\t\t})\n\t\t.extend({\n\t\t\tmeta: metaSchema,\n\t\t})\n\n/**\n * Response envelope for mode-dynamic pagination: `{ data: T[], meta }` with\n * the meta discriminated on `mode` — the canonical shape for list endpoints\n * that accept page or cursor.\n *\n * @example\n * PaginatedResponseSchema(OrderSchema)\n */\nexport const PaginatedResponseSchema = <T extends z.ZodTypeAny>(\n\tdataSchema: T,\n) => EnvelopeSchema(dataSchema, PaginationMetaSchema)\n\nexport type PaginatedResponse<T> =\n\t| {\n\t\t\tdata: T[]\n\t\t\tmeta: {\n\t\t\t\tmode: 'page'\n\t\t\t} & PagePaginationMeta\n\t }\n\t| {\n\t\t\tdata: T[]\n\t\t\tmeta: {\n\t\t\t\tmode: 'cursor'\n\t\t\t} & CursorPaginationMeta\n\t }\n\n/**\n * Response envelope for page-based pagination: `{ data: T[], meta }`.\n *\n * @example\n * PagePaginatedResponseSchema(OrderSchema)\n */\nexport const PagePaginatedResponseSchema = <T extends z.ZodTypeAny>(\n\tdataSchema: T,\n) => EnvelopeSchema(dataSchema, PagePaginationMetaSchema)\n\nexport type PagePaginatedResponse<T> = {\n\tdata: T[]\n\tmeta: PagePaginationMeta\n}\n\n/**\n * Response envelope for cursor-based pagination: `{ data: T[], meta }`.\n *\n * @example\n * CursorPaginatedResponseSchema(OrderSchema)\n */\nexport const CursorPaginatedResponseSchema = <T extends z.ZodTypeAny>(\n\tdataSchema: T,\n) => EnvelopeSchema(dataSchema, CursorPaginationMetaSchema)\n\nexport type CursorPaginatedResponse<T> = {\n\tdata: T[]\n\tmeta: CursorPaginationMeta\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sort/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sort/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA","sourcesContent":["export type { Sort, SortOrder } from './sort.js'\nexport { SortOrderSchema, SortSchema } from './sort.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/sort/sort.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAGnB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC9B,IAAI,CAAC;IACL,KAAK;IACL,MAAM;CACN,CAAC;KACD,IAAI,CAAC;IACL,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,KAAK;CACd,CAAC,CAAA;AAoBH,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,MAAS,EACT,OAAqC,EACpC,EAAE,CACH,CAAC,CAAC,MAAM,CAAC;IACR,MAAM,EAAE,CAAC;SACP,IAAI,CACJ,MAGC,CACD;SACA,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;SAC9B,IAAI,CAAC;QACL,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,OAAO,CAAC,aAAa;KAC9B,CAAC;IACH,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;QACjE,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,OAAO,CAAC,gBAAgB;KACjC,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/sort/sort.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAGnB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC9B,IAAI,CAAC;IACL,KAAK;IACL,MAAM;CACN,CAAC;KACD,IAAI,CAAC;IACL,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,KAAK;CACd,CAAC,CAAA;AAoBH,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,MAAS,EACT,OAAqC,EACpC,EAAE,CACH,CAAC,CAAC,MAAM,CAAC;IACR,MAAM,EAAE,CAAC;SACP,IAAI,CACJ,MAGC,CACD;SACA,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;SAC9B,IAAI,CAAC;QACL,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,OAAO,CAAC,aAAa;KAC9B,CAAC;IACH,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;QACjE,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,OAAO,CAAC,gBAAgB;KACjC,CAAC;CACF,CAAC,CAAA","sourcesContent":["import z from 'zod'\n\n/** Sort direction: `asc` or `desc`. */\nexport const SortOrderSchema = z\n\t.enum([\n\t\t'asc',\n\t\t'desc',\n\t])\n\t.meta({\n\t\tdescription: 'Sort order',\n\t\texample: 'asc',\n\t})\n\nexport type SortOrder = z.infer<typeof SortOrderSchema>\n\ntype SortSchemaOptions<T extends string> = {\n\tdefaultSortBy: T\n\tdefaultSortOrder: SortOrder\n}\n\n/**\n * Query schema for sorting (`?sortBy=createdAt&sortOrder=desc`), constrained\n * to an allow-list of fields with explicit defaults.\n *\n * @example\n * const OrderSortSchema = SortSchema(['createdAt', 'total'], {\n * defaultSortBy: 'createdAt',\n * defaultSortOrder: 'desc',\n * })\n * OrderSortSchema.parse({}) // { sortBy: 'createdAt', sortOrder: 'desc' }\n */\nexport const SortSchema = <T extends readonly string[]>(\n\tfields: T,\n\toptions: SortSchemaOptions<T[number]>,\n) =>\n\tz.object({\n\t\tsortBy: z\n\t\t\t.enum(\n\t\t\t\tfields as unknown as [\n\t\t\t\t\tT[number],\n\t\t\t\t\t...T[number][],\n\t\t\t\t],\n\t\t\t)\n\t\t\t.default(options.defaultSortBy)\n\t\t\t.meta({\n\t\t\t\tdescription: 'Field to sort by',\n\t\t\t\texample: options.defaultSortBy,\n\t\t\t}),\n\t\tsortOrder: SortOrderSchema.default(options.defaultSortOrder).meta({\n\t\t\tdescription: 'Sort order',\n\t\t\texample: options.defaultSortOrder,\n\t\t}),\n\t})\n\nexport type Sort<T extends readonly string[]> = {\n\tsortBy?: T[number]\n\tsortOrder?: SortOrder\n}\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@turystack/query-dsl",
3
3
  "description": "Zod schemas and serializers for type-safe HTTP query parameters.",
4
4
  "private": false,
5
- "version": "1.0.2",
5
+ "version": "1.0.3",
6
6
  "type": "module",
7
7
  "sideEffects": false,
8
8
  "main": "./dist/index.js",