next-data-kit 8.0.0 → 8.1.0

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.
Files changed (43) hide show
  1. package/README.md +16 -2
  2. package/dist/{action-pIfOi9UC.d.cts → action-DdkPkUFP.d.cts} +13 -7
  3. package/dist/{action-pIfOi9UC.d.ts → action-DdkPkUFP.d.ts} +13 -7
  4. package/dist/client/components/data-kit-infinity.d.ts +1 -2
  5. package/dist/client/components/data-kit-infinity.d.ts.map +1 -1
  6. package/dist/client/components/data-kit-infinity.js +2 -2
  7. package/dist/client/components/data-kit-infinity.js.map +1 -1
  8. package/dist/client/components/data-kit-table.d.ts +1 -2
  9. package/dist/client/components/data-kit-table.d.ts.map +1 -1
  10. package/dist/client/components/data-kit-table.js +3 -3
  11. package/dist/client/components/data-kit-table.js.map +1 -1
  12. package/dist/client/components/data-kit.d.ts +1 -2
  13. package/dist/client/components/data-kit.d.ts.map +1 -1
  14. package/dist/client/components/data-kit.js +2 -2
  15. package/dist/client/components/data-kit.js.map +1 -1
  16. package/dist/client/components/ui/switch.d.ts +2 -2
  17. package/dist/client/components/ui/switch.d.ts.map +1 -1
  18. package/dist/client/components/ui/switch.js +4 -4
  19. package/dist/client/components/ui/switch.js.map +1 -1
  20. package/dist/client/hooks/useDataKit.d.ts.map +1 -1
  21. package/dist/client/hooks/useDataKit.js +14 -6
  22. package/dist/client/hooks/useDataKit.js.map +1 -1
  23. package/dist/index.cjs +32 -25
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +17 -8
  26. package/dist/index.d.ts +17 -8
  27. package/dist/index.js +32 -25
  28. package/dist/index.js.map +1 -1
  29. package/dist/server.cjs +3 -2
  30. package/dist/server.cjs.map +1 -1
  31. package/dist/server.d.cts +2 -2
  32. package/dist/server.d.ts +2 -2
  33. package/dist/server.js +3 -2
  34. package/dist/server.js.map +1 -1
  35. package/dist/types/client/component.d.ts +2 -1
  36. package/dist/types/client/component.d.ts.map +1 -1
  37. package/dist/types/client/hook.d.ts +5 -2
  38. package/dist/types/client/hook.d.ts.map +1 -1
  39. package/dist/types/index.d.cts +7 -3
  40. package/dist/types/next-data-kit.d.ts +12 -6
  41. package/dist/types/next-data-kit.d.ts.map +1 -1
  42. package/dist/types/server/action.d.ts.map +1 -1
  43. package/package.json +1 -1
package/dist/server.cjs CHANGED
@@ -101,6 +101,7 @@ var mongooseAdapter = (model, options = {}) => {
101
101
  if (filter && !customFilter) {
102
102
  if (input.filterConfig) {
103
103
  Object.entries(filter).forEach(([key, value]) => {
104
+ if (filterCustom && filterCustom[key]) return;
104
105
  if (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {
105
106
  const config = input.filterConfig[key];
106
107
  const fieldName = config?.field ?? key;
@@ -116,6 +117,7 @@ var mongooseAdapter = (model, options = {}) => {
116
117
  });
117
118
  } else {
118
119
  Object.entries(filter).forEach(([key, value]) => {
120
+ if (filterCustom && filterCustom[key]) return;
119
121
  if (isProvided(value) && isSafeKey(key)) {
120
122
  if (typeof value === "string") {
121
123
  filterQuery[key] = {
@@ -212,8 +214,7 @@ async function executeDataKit(input, adapter, item, maxLimit, filterAllowed, que
212
214
  }
213
215
  async function dataKitServerAction(props) {
214
216
  const { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;
215
- const filterCustom = "filterCustom" in props ? props.filterCustom : void 0;
216
- const filterAllowed = explicitFilterAllowed ?? (filterCustom ? Object.keys(filterCustom) : void 0);
217
+ const filterAllowed = explicitFilterAllowed;
217
218
  let finalAdapter;
218
219
  if ("adapter" in props && props.adapter) {
219
220
  finalAdapter = props.adapter;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts"],"names":["customFilter","z"],"mappings":"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","file":"server.cjs","sourcesContent":["/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery, TSortEntry, TPaginationInfo } from '../types';\n\n/**\n * Check if a value is provided (not undefined, null, or empty string)\n */\nexport const isProvided = (value: unknown): boolean => value !== undefined && value !== null && value !== '';\n\n/**\n * Get a nested value from an object by path (e.g., 'user.name')\n */\nexport const getValueByPath = (obj: unknown, path: string): unknown => {\n\tif (!path) return undefined;\n\tconst parts = path.split('.');\n\tlet current: unknown = obj;\n\tfor (const part of parts) {\n\t\tif (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n\t\t\tcurrent = (current as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn current;\n};\n\n/**\n * Check if a value matches exactly (supports array inclusion)\n */\nexport const matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n\tif (Array.isArray(needle)) return needle.includes(rowValue as never);\n\treturn rowValue === needle;\n};\n\n/**\n * Check if a value matches a regex-like pattern (case-insensitive)\n */\nexport const matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n\tif (!isProvided(needle)) return true;\n\tif (rowValue === undefined || rowValue === null) return false;\n\tconst hay = String(rowValue);\n\n\tif (needle instanceof RegExp) return needle.test(hay);\n\tconst n = String(needle);\n\treturn hay.toLowerCase().includes(n.toLowerCase());\n};\n\n/**\n * Compare two values for sorting\n */\nexport const compareValues = (a: unknown, b: unknown): number => {\n\tif (a === b) return 0;\n\tif (a === undefined || a === null) return -1;\n\tif (b === undefined || b === null) return 1;\n\n\tif (typeof a === 'number' && typeof b === 'number') return a - b;\n\tif (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n\tconst as = String(a);\n\tconst bs = String(b);\n\treturn as.localeCompare(bs);\n};\n\n/**\n * Normalize and validate sort entries\n */\nexport const normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] => (Array.isArray(sorts) ? sorts.filter(s => !!s?.path && (s.value === 1 || s.value === -1)) : []);\n\n/**\n * Check if a key is safe (not a prototype pollution key)\n */\nexport const isSafeKey = (key: string): boolean => {\n\tconst unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n\treturn !unsafeKeys.includes(key);\n};\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n *\n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(fields: (keyof T | string)[]): ((value: unknown) => TMongoFilterQuery<T>) => {\n\treturn (value: unknown): TMongoFilterQuery<T> => {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn {} as TMongoFilterQuery<T>;\n\t\t}\n\n\t\tconst escapedValue = escapeRegex(value);\n\t\treturn {\n\t\t\t$or: fields.map(field => ({\n\t\t\t\t[field]: { $regex: escapedValue, $options: 'i' },\n\t\t\t})),\n\t\t} as TMongoFilterQuery<T>;\n\t};\n};\n/**\n * Calculate pagination info from page, limit, and total\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n\tcurrentPage: page,\n\ttotalPages: Math.ceil(total / limit),\n\ttotalItems: total,\n\titemsPerPage: limit,\n\thasNextPage: page * limit < total,\n\thasPrevPage: page > 1,\n});\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type { TMongoModel, TMongoFilterQuery, TSortOrder, TSortOptions, TFilterCustomConfigWithFilter, TDataKitAdapter } from '../../types';\nimport { escapeRegex, isProvided, isSafeKey } from '../utils';\n\nexport const mongooseAdapter = <DocType = unknown>(\n\tmodel: TMongoModel<DocType>,\n\toptions: Readonly<{\n\t\tfilter?: ((filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>) | TMongoFilterQuery<DocType>;\n\t\tfilterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n\t\tdefaultSort?: TSortOptions<DocType>;\n\t}> = {},\n): TDataKitAdapter<DocType> => {\n\t// ** Deconstruct options\n\tconst { filter: customFilter, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\t// ** Normalize sort\n\t\tlet sortOption: Record<string, TSortOrder>;\n\n\t\tif (input.sort && Object.keys(input.sort).length > 0) {\n\t\t\tsortOption = input.sort as Record<string, TSortOrder>;\n\t\t} else if (sorts && sorts.length > 0) {\n\t\t\tsortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n\t\t\t\tif (s?.path && (s.value === 1 || s.value === -1)) {\n\t\t\t\t\tacc[s.path] = s.value;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t} else {\n\t\t\tsortOption = defaultSort as Record<string, TSortOrder>;\n\t\t}\n\n\t\t// ** Construct filter query\n\t\tlet filterQuery: TMongoFilterQuery<DocType> = {};\n\n\t\t// ** Query params (exact match)\n\t\tif (input.query) {\n\t\t\tObject.entries(input.query).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Custom filter function or object\n\t\tif (customFilter) {\n\t\t\tconst customQuery = typeof customFilter === 'function' ? customFilter(filter) : customFilter;\n\t\t\tfilterQuery = { ...filterQuery, ...customQuery };\n\t\t}\n\n\t\t// ** User defined filters\n\t\tif (filter && !customFilter) {\n\t\t\tif (input.filterConfig) {\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n\t\t\t\t\t\tconst config = input.filterConfig[key];\n\t\t\t\t\t\tconst fieldName = config?.field ?? key;\n\n\t\t\t\t\t\tif (config?.type === 'REGEX') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(String(value)),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (config?.type === 'EXACT') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// ** Default automatic filtering\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(value),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (typeof value === 'number' || typeof value === 'boolean') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// ** Custom filter logic (filterCustom)\n\t\tif (filterCustom && filter) {\n\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n\t\t\t\t\tconst customFilter = filterCustom[key]!(value);\n\t\t\t\t\tfilterQuery = { ...filterQuery, ...customFilter };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Execute queries\n\t\tconst total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n\t\tconst items = (await model\n\t\t\t.find(filterQuery as TMongoFilterQuery<unknown>)\n\t\t\t.sort(sortOption)\n\t\t\t.limit(limit)\n\t\t\t.skip(skip)) as unknown as DocType[];\n\n\t\treturn { items, total };\n\t};\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { Model } from 'mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TExtractDocType, TMongooseOptions, TAdapterOptions } from '../types';\n\n/**\n * Core execution logic shared by both overloads\n */\nasync function executeDataKit<TDoc, R>(input: TDataKitInput<TDoc>, adapter: TDataKitAdapter<TDoc>, item: (item: TDoc) => Promise<R> | R, maxLimit: number, filterAllowed?: string[], queryAllowed?: (keyof TDoc | string)[], sortAllowed?: (keyof TDoc | string)[]): Promise<TDataKitResult<R>> {\n\t// Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, string | number | boolean | null> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeFilter[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// Check Sort\n\tif (input.sorts && sortAllowed) {\n\t\tinput.sorts.forEach(sort => {\n\t\t\tif (!sortAllowed.includes(sort.path)) {\n\t\t\t\tthrow new Error(`[Security] Sort field '${sort.path}' is not allowed.`);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\tconst { items, total } = await adapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n}\n\n/**\n * Server action with Mongoose model (auto-infers document type)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, R = unknown>(props: Readonly<TMongooseOptions<M, TExtractDocType<M>, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Server action with custom adapter\n */\nexport async function dataKitServerAction<TDoc, R = unknown>(props: Readonly<TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, TDoc = any, R = unknown>(props: Readonly<TMongooseOptions<M, TDoc, R> | TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>> {\n\tconst { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;\n\n\t// Determine filterAllowed\n\tconst filterCustom = 'filterCustom' in props ? props.filterCustom : undefined;\n\tconst filterAllowed = explicitFilterAllowed ?? (filterCustom ? Object.keys(filterCustom) : undefined);\n\n\t// Determine adapter\n\tlet finalAdapter: TDataKitAdapter<TDoc>;\n\n\tif ('adapter' in props && props.adapter) {\n\t\tfinalAdapter = props.adapter;\n\t} else if ('model' in props && props.model) {\n\t\tconst model = props.model as unknown as TMongoModel<TDoc>;\n\t\tfinalAdapter = mongooseAdapter(model, {\n\t\t\tfilter: props.filter,\n\t\t\tfilterCustom: props.filterCustom,\n\t\t\tdefaultSort: props.defaultSort,\n\t\t}) as TDataKitAdapter<TDoc>;\n\t} else {\n\t\tthrow new Error('Either model or adapter must be provided');\n\t}\n\n\treturn executeDataKit(input, finalAdapter, item, maxLimit, filterAllowed, queryAllowed, sortAllowed);\n}\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TDataKitAdapter } from '../../types';\nimport { isProvided, getValueByPath, matchesExact, matchesRegexLike, compareValues, normalizeSorts } from '../utils';\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n\tdataset: ReadonlyArray<T>,\n\toptions: Readonly<{\n\t\t/** default behavior for filter keys not present in filterConfig */\n\t\tdefaultFilterType?: 'regex' | 'exact';\n\t}> = {},\n): TDataKitAdapter<T> => {\n\tconst { defaultFilterType = 'exact' } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\tconst filterConfig: TFilterConfig | undefined = input.filterConfig;\n\t\tconst query = input.query ?? {};\n\n\t\t// 1) Apply query (exact match)\n\t\tlet rows = dataset.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\t\t\t\tconst rowValue = getValueByPath(row, key);\n\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 2) Apply filter (via filterConfig when present)\n\t\tconst effectiveFilter = filter ?? {};\n\t\trows = rows.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(effectiveFilter)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\n\t\t\t\tconst config = filterConfig?.[key];\n\t\t\t\tconst field = config?.field ?? key;\n\t\t\t\tconst rowValue = getValueByPath(row, field);\n\n\t\t\t\tconst type = config?.type ?? defaultFilterType;\n\t\t\t\tif (type === 'regex') {\n\t\t\t\t\tif (!matchesRegexLike(rowValue, value)) return false;\n\t\t\t\t} else {\n\t\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 3) Sort\n\t\tconst normalizedSorts = normalizeSorts(sorts);\n\t\tif (normalizedSorts.length > 0) {\n\t\t\trows = [...rows].sort((ra, rb) => {\n\t\t\t\tfor (const s of normalizedSorts) {\n\t\t\t\t\tconst av = getValueByPath(ra, s.path);\n\t\t\t\t\tconst bv = getValueByPath(rb, s.path);\n\t\t\t\t\tconst cmp = compareValues(av, bv);\n\t\t\t\t\tif (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t}\n\n\t\tconst total = rows.length;\n\t\tconst items = rows.slice(skip, skip + limit);\n\t\treturn { items, total };\n\t};\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n\taction: z.literal('FETCH').optional(),\n\tpage: z.number().int().positive().optional(),\n\tlimit: z.number().int().positive().optional(),\n\tquery: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n\tfilter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n\tfilterConfig: z\n\t\t.record(\n\t\t\tz.string(),\n\t\t\tz.object({\n\t\t\t\ttype: z.enum(['REGEX', 'EXACT']),\n\t\t\t\tfield: z.string().optional(),\n\t\t\t}),\n\t\t)\n\t\t.optional(),\n\tsorts: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().max(100), // Limit path length to prevent abuse\n\t\t\t\tvalue: z.literal(-1).or(z.literal(1)),\n\t\t\t}),\n\t\t)\n\t\t.max(5)\n\t\t.optional(), // Limit to 5 sort fields\n\tsort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n"]}
1
+ {"version":3,"sources":["../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts"],"names":["customFilter","z"],"mappings":"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","file":"server.cjs","sourcesContent":["/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery, TSortEntry, TPaginationInfo } from '../types';\n\n/**\n * Check if a value is provided (not undefined, null, or empty string)\n */\nexport const isProvided = (value: unknown): boolean => value !== undefined && value !== null && value !== '';\n\n/**\n * Get a nested value from an object by path (e.g., 'user.name')\n */\nexport const getValueByPath = (obj: unknown, path: string): unknown => {\n\tif (!path) return undefined;\n\tconst parts = path.split('.');\n\tlet current: unknown = obj;\n\tfor (const part of parts) {\n\t\tif (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n\t\t\tcurrent = (current as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn current;\n};\n\n/**\n * Check if a value matches exactly (supports array inclusion)\n */\nexport const matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n\tif (Array.isArray(needle)) return needle.includes(rowValue as never);\n\treturn rowValue === needle;\n};\n\n/**\n * Check if a value matches a regex-like pattern (case-insensitive)\n */\nexport const matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n\tif (!isProvided(needle)) return true;\n\tif (rowValue === undefined || rowValue === null) return false;\n\tconst hay = String(rowValue);\n\n\tif (needle instanceof RegExp) return needle.test(hay);\n\tconst n = String(needle);\n\treturn hay.toLowerCase().includes(n.toLowerCase());\n};\n\n/**\n * Compare two values for sorting\n */\nexport const compareValues = (a: unknown, b: unknown): number => {\n\tif (a === b) return 0;\n\tif (a === undefined || a === null) return -1;\n\tif (b === undefined || b === null) return 1;\n\n\tif (typeof a === 'number' && typeof b === 'number') return a - b;\n\tif (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n\tconst as = String(a);\n\tconst bs = String(b);\n\treturn as.localeCompare(bs);\n};\n\n/**\n * Normalize and validate sort entries\n */\nexport const normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] => (Array.isArray(sorts) ? sorts.filter(s => !!s?.path && (s.value === 1 || s.value === -1)) : []);\n\n/**\n * Check if a key is safe (not a prototype pollution key)\n */\nexport const isSafeKey = (key: string): boolean => {\n\tconst unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n\treturn !unsafeKeys.includes(key);\n};\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n *\n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(fields: (keyof T | string)[]): ((value: unknown) => TMongoFilterQuery<T>) => {\n\treturn (value: unknown): TMongoFilterQuery<T> => {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn {} as TMongoFilterQuery<T>;\n\t\t}\n\n\t\tconst escapedValue = escapeRegex(value);\n\t\treturn {\n\t\t\t$or: fields.map(field => ({\n\t\t\t\t[field]: { $regex: escapedValue, $options: 'i' },\n\t\t\t})),\n\t\t} as TMongoFilterQuery<T>;\n\t};\n};\n/**\n * Calculate pagination info from page, limit, and total\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n\tcurrentPage: page,\n\ttotalPages: Math.ceil(total / limit),\n\ttotalItems: total,\n\titemsPerPage: limit,\n\thasNextPage: page * limit < total,\n\thasPrevPage: page > 1,\n});\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type { TMongoModel, TMongoFilterQuery, TSortOrder, TSortOptions, TFilterCustomConfigWithFilter, TDataKitAdapter } from '../../types';\nimport { escapeRegex, isProvided, isSafeKey } from '../utils';\n\nexport const mongooseAdapter = <DocType = unknown>(\n\tmodel: TMongoModel<DocType>,\n\toptions: Readonly<{\n\t\tfilter?: ((filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>) | TMongoFilterQuery<DocType>;\n\t\tfilterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n\t\tdefaultSort?: TSortOptions<DocType>;\n\t}> = {},\n): TDataKitAdapter<DocType> => {\n\t// ** Deconstruct options\n\tconst { filter: customFilter, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\t// ** Normalize sort\n\t\tlet sortOption: Record<string, TSortOrder>;\n\n\t\tif (input.sort && Object.keys(input.sort).length > 0) {\n\t\t\tsortOption = input.sort as Record<string, TSortOrder>;\n\t\t} else if (sorts && sorts.length > 0) {\n\t\t\tsortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n\t\t\t\tif (s?.path && (s.value === 1 || s.value === -1)) {\n\t\t\t\t\tacc[s.path] = s.value;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t} else {\n\t\t\tsortOption = defaultSort as Record<string, TSortOrder>;\n\t\t}\n\n\t\t// ** Construct filter query\n\t\tlet filterQuery: TMongoFilterQuery<DocType> = {};\n\n\t\t// ** Query params (exact match)\n\t\tif (input.query) {\n\t\t\tObject.entries(input.query).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Custom filter function or object\n\t\tif (customFilter) {\n\t\t\tconst customQuery = typeof customFilter === 'function' ? customFilter(filter) : customFilter;\n\t\t\tfilterQuery = { ...filterQuery, ...customQuery };\n\t\t}\n\n\t\t// ** User defined filters\n\t\tif (filter && !customFilter) {\n\t\t\tif (input.filterConfig) {\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\t// Skip if handled by filterCustom\n\t\t\t\t\tif (filterCustom && filterCustom[key]) return;\n\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n\t\t\t\t\t\tconst config = input.filterConfig[key];\n\t\t\t\t\t\tconst fieldName = config?.field ?? key;\n\n\t\t\t\t\t\tif (config?.type === 'REGEX') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(String(value)),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (config?.type === 'EXACT') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// ** Default automatic filtering\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\t// Skip if handled by filterCustom\n\t\t\t\t\tif (filterCustom && filterCustom[key]) return;\n\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(value),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (typeof value === 'number' || typeof value === 'boolean') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// ** Custom filter logic (filterCustom)\n\t\tif (filterCustom && filter) {\n\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n\t\t\t\t\tconst customFilter = filterCustom[key]!(value);\n\t\t\t\t\tfilterQuery = { ...filterQuery, ...customFilter };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Execute queries\n\t\tconst total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n\t\tconst items = (await model\n\t\t\t.find(filterQuery as TMongoFilterQuery<unknown>)\n\t\t\t.sort(sortOption)\n\t\t\t.limit(limit)\n\t\t\t.skip(skip)) as unknown as DocType[];\n\n\t\treturn { items, total };\n\t};\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { Model } from 'mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TExtractDocType, TMongooseOptions, TAdapterOptions } from '../types';\n\n/**\n * Core execution logic shared by both overloads\n */\nasync function executeDataKit<TDoc, R>(input: TDataKitInput<TDoc>, adapter: TDataKitAdapter<TDoc>, item: (item: TDoc) => Promise<R> | R, maxLimit: number, filterAllowed?: string[], queryAllowed?: (keyof TDoc | string)[], sortAllowed?: (keyof TDoc | string)[]): Promise<TDataKitResult<R>> {\n\t// Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, string | number | boolean | null> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeFilter[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// Check Sort\n\tif (input.sorts && sortAllowed) {\n\t\tinput.sorts.forEach(sort => {\n\t\t\tif (!sortAllowed.includes(sort.path)) {\n\t\t\t\tthrow new Error(`[Security] Sort field '${sort.path}' is not allowed.`);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\tconst { items, total } = await adapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n}\n\n/**\n * Server action with Mongoose model (auto-infers document type)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, R = unknown>(props: Readonly<TMongooseOptions<M, TExtractDocType<M>, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Server action with custom adapter\n */\nexport async function dataKitServerAction<TDoc, R = unknown>(props: Readonly<TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, TDoc = any, R = unknown>(props: Readonly<TMongooseOptions<M, TDoc, R> | TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>> {\n\tconst { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;\n\n\t// Determine filterAllowed\n\tconst filterAllowed = explicitFilterAllowed;\n\n\t// Determine adapter\n\tlet finalAdapter: TDataKitAdapter<TDoc>;\n\n\tif ('adapter' in props && props.adapter) {\n\t\tfinalAdapter = props.adapter;\n\t} else if ('model' in props && props.model) {\n\t\tconst model = props.model as unknown as TMongoModel<TDoc>;\n\t\tfinalAdapter = mongooseAdapter(model, {\n\t\t\tfilter: props.filter,\n\t\t\tfilterCustom: props.filterCustom,\n\t\t\tdefaultSort: props.defaultSort,\n\t\t}) as TDataKitAdapter<TDoc>;\n\t} else {\n\t\tthrow new Error('Either model or adapter must be provided');\n\t}\n\n\treturn executeDataKit(input, finalAdapter, item, maxLimit, filterAllowed, queryAllowed, sortAllowed);\n}\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TDataKitAdapter } from '../../types';\nimport { isProvided, getValueByPath, matchesExact, matchesRegexLike, compareValues, normalizeSorts } from '../utils';\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n\tdataset: ReadonlyArray<T>,\n\toptions: Readonly<{\n\t\t/** default behavior for filter keys not present in filterConfig */\n\t\tdefaultFilterType?: 'regex' | 'exact';\n\t}> = {},\n): TDataKitAdapter<T> => {\n\tconst { defaultFilterType = 'exact' } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\tconst filterConfig: TFilterConfig | undefined = input.filterConfig;\n\t\tconst query = input.query ?? {};\n\n\t\t// 1) Apply query (exact match)\n\t\tlet rows = dataset.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\t\t\t\tconst rowValue = getValueByPath(row, key);\n\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 2) Apply filter (via filterConfig when present)\n\t\tconst effectiveFilter = filter ?? {};\n\t\trows = rows.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(effectiveFilter)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\n\t\t\t\tconst config = filterConfig?.[key];\n\t\t\t\tconst field = config?.field ?? key;\n\t\t\t\tconst rowValue = getValueByPath(row, field);\n\n\t\t\t\tconst type = config?.type ?? defaultFilterType;\n\t\t\t\tif (type === 'regex') {\n\t\t\t\t\tif (!matchesRegexLike(rowValue, value)) return false;\n\t\t\t\t} else {\n\t\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 3) Sort\n\t\tconst normalizedSorts = normalizeSorts(sorts);\n\t\tif (normalizedSorts.length > 0) {\n\t\t\trows = [...rows].sort((ra, rb) => {\n\t\t\t\tfor (const s of normalizedSorts) {\n\t\t\t\t\tconst av = getValueByPath(ra, s.path);\n\t\t\t\t\tconst bv = getValueByPath(rb, s.path);\n\t\t\t\t\tconst cmp = compareValues(av, bv);\n\t\t\t\t\tif (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t}\n\n\t\tconst total = rows.length;\n\t\tconst items = rows.slice(skip, skip + limit);\n\t\treturn { items, total };\n\t};\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n\taction: z.literal('FETCH').optional(),\n\tpage: z.number().int().positive().optional(),\n\tlimit: z.number().int().positive().optional(),\n\tquery: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n\tfilter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n\tfilterConfig: z\n\t\t.record(\n\t\t\tz.string(),\n\t\t\tz.object({\n\t\t\t\ttype: z.enum(['REGEX', 'EXACT']),\n\t\t\t\tfield: z.string().optional(),\n\t\t\t}),\n\t\t)\n\t\t.optional(),\n\tsorts: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().max(100), // Limit path length to prevent abuse\n\t\t\t\tvalue: z.literal(-1).or(z.literal(1)),\n\t\t\t}),\n\t\t)\n\t\t.max(5)\n\t\t.optional(), // Limit to 5 sort fields\n\tsort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n"]}
package/dist/server.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Model } from 'mongoose';
2
- import { T as TMongooseOptions, a as TExtractDocType, b as TDataKitResult, c as TAdapterOptions, d as TMongoModel, e as TMongoFilterQuery, f as TFilterCustomConfigWithFilter, g as TSortOptions, h as TDataKitAdapter, i as TPaginationInfo } from './action-pIfOi9UC.cjs';
3
- export { k as TDataKitInput, m as TFilterConfig, l as TFilterCustomConfig, j as TSortOrder } from './action-pIfOi9UC.cjs';
2
+ import { T as TMongooseOptions, a as TExtractDocType, b as TDataKitResult, c as TAdapterOptions, d as TMongoModel, e as TMongoFilterQuery, f as TFilterCustomConfigWithFilter, g as TSortOptions, h as TDataKitAdapter, i as TPaginationInfo } from './action-DdkPkUFP.cjs';
3
+ export { k as TDataKitInput, m as TFilterConfig, l as TFilterCustomConfig, j as TSortOrder } from './action-DdkPkUFP.cjs';
4
4
  import { z } from 'zod';
5
5
 
6
6
  /**
package/dist/server.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Model } from 'mongoose';
2
- import { T as TMongooseOptions, a as TExtractDocType, b as TDataKitResult, c as TAdapterOptions, d as TMongoModel, e as TMongoFilterQuery, f as TFilterCustomConfigWithFilter, g as TSortOptions, h as TDataKitAdapter, i as TPaginationInfo } from './action-pIfOi9UC.js';
3
- export { k as TDataKitInput, m as TFilterConfig, l as TFilterCustomConfig, j as TSortOrder } from './action-pIfOi9UC.js';
2
+ import { T as TMongooseOptions, a as TExtractDocType, b as TDataKitResult, c as TAdapterOptions, d as TMongoModel, e as TMongoFilterQuery, f as TFilterCustomConfigWithFilter, g as TSortOptions, h as TDataKitAdapter, i as TPaginationInfo } from './action-DdkPkUFP.js';
3
+ export { k as TDataKitInput, m as TFilterConfig, l as TFilterCustomConfig, j as TSortOrder } from './action-DdkPkUFP.js';
4
4
  import { z } from 'zod';
5
5
 
6
6
  /**
package/dist/server.js CHANGED
@@ -99,6 +99,7 @@ var mongooseAdapter = (model, options = {}) => {
99
99
  if (filter && !customFilter) {
100
100
  if (input.filterConfig) {
101
101
  Object.entries(filter).forEach(([key, value]) => {
102
+ if (filterCustom && filterCustom[key]) return;
102
103
  if (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {
103
104
  const config = input.filterConfig[key];
104
105
  const fieldName = config?.field ?? key;
@@ -114,6 +115,7 @@ var mongooseAdapter = (model, options = {}) => {
114
115
  });
115
116
  } else {
116
117
  Object.entries(filter).forEach(([key, value]) => {
118
+ if (filterCustom && filterCustom[key]) return;
117
119
  if (isProvided(value) && isSafeKey(key)) {
118
120
  if (typeof value === "string") {
119
121
  filterQuery[key] = {
@@ -210,8 +212,7 @@ async function executeDataKit(input, adapter, item, maxLimit, filterAllowed, que
210
212
  }
211
213
  async function dataKitServerAction(props) {
212
214
  const { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;
213
- const filterCustom = "filterCustom" in props ? props.filterCustom : void 0;
214
- const filterAllowed = explicitFilterAllowed ?? (filterCustom ? Object.keys(filterCustom) : void 0);
215
+ const filterAllowed = explicitFilterAllowed;
215
216
  let finalAdapter;
216
217
  if ("adapter" in props && props.adapter) {
217
218
  finalAdapter = props.adapter;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts"],"names":["customFilter"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery, TSortEntry, TPaginationInfo } from '../types';\n\n/**\n * Check if a value is provided (not undefined, null, or empty string)\n */\nexport const isProvided = (value: unknown): boolean => value !== undefined && value !== null && value !== '';\n\n/**\n * Get a nested value from an object by path (e.g., 'user.name')\n */\nexport const getValueByPath = (obj: unknown, path: string): unknown => {\n\tif (!path) return undefined;\n\tconst parts = path.split('.');\n\tlet current: unknown = obj;\n\tfor (const part of parts) {\n\t\tif (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n\t\t\tcurrent = (current as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn current;\n};\n\n/**\n * Check if a value matches exactly (supports array inclusion)\n */\nexport const matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n\tif (Array.isArray(needle)) return needle.includes(rowValue as never);\n\treturn rowValue === needle;\n};\n\n/**\n * Check if a value matches a regex-like pattern (case-insensitive)\n */\nexport const matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n\tif (!isProvided(needle)) return true;\n\tif (rowValue === undefined || rowValue === null) return false;\n\tconst hay = String(rowValue);\n\n\tif (needle instanceof RegExp) return needle.test(hay);\n\tconst n = String(needle);\n\treturn hay.toLowerCase().includes(n.toLowerCase());\n};\n\n/**\n * Compare two values for sorting\n */\nexport const compareValues = (a: unknown, b: unknown): number => {\n\tif (a === b) return 0;\n\tif (a === undefined || a === null) return -1;\n\tif (b === undefined || b === null) return 1;\n\n\tif (typeof a === 'number' && typeof b === 'number') return a - b;\n\tif (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n\tconst as = String(a);\n\tconst bs = String(b);\n\treturn as.localeCompare(bs);\n};\n\n/**\n * Normalize and validate sort entries\n */\nexport const normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] => (Array.isArray(sorts) ? sorts.filter(s => !!s?.path && (s.value === 1 || s.value === -1)) : []);\n\n/**\n * Check if a key is safe (not a prototype pollution key)\n */\nexport const isSafeKey = (key: string): boolean => {\n\tconst unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n\treturn !unsafeKeys.includes(key);\n};\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n *\n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(fields: (keyof T | string)[]): ((value: unknown) => TMongoFilterQuery<T>) => {\n\treturn (value: unknown): TMongoFilterQuery<T> => {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn {} as TMongoFilterQuery<T>;\n\t\t}\n\n\t\tconst escapedValue = escapeRegex(value);\n\t\treturn {\n\t\t\t$or: fields.map(field => ({\n\t\t\t\t[field]: { $regex: escapedValue, $options: 'i' },\n\t\t\t})),\n\t\t} as TMongoFilterQuery<T>;\n\t};\n};\n/**\n * Calculate pagination info from page, limit, and total\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n\tcurrentPage: page,\n\ttotalPages: Math.ceil(total / limit),\n\ttotalItems: total,\n\titemsPerPage: limit,\n\thasNextPage: page * limit < total,\n\thasPrevPage: page > 1,\n});\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type { TMongoModel, TMongoFilterQuery, TSortOrder, TSortOptions, TFilterCustomConfigWithFilter, TDataKitAdapter } from '../../types';\nimport { escapeRegex, isProvided, isSafeKey } from '../utils';\n\nexport const mongooseAdapter = <DocType = unknown>(\n\tmodel: TMongoModel<DocType>,\n\toptions: Readonly<{\n\t\tfilter?: ((filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>) | TMongoFilterQuery<DocType>;\n\t\tfilterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n\t\tdefaultSort?: TSortOptions<DocType>;\n\t}> = {},\n): TDataKitAdapter<DocType> => {\n\t// ** Deconstruct options\n\tconst { filter: customFilter, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\t// ** Normalize sort\n\t\tlet sortOption: Record<string, TSortOrder>;\n\n\t\tif (input.sort && Object.keys(input.sort).length > 0) {\n\t\t\tsortOption = input.sort as Record<string, TSortOrder>;\n\t\t} else if (sorts && sorts.length > 0) {\n\t\t\tsortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n\t\t\t\tif (s?.path && (s.value === 1 || s.value === -1)) {\n\t\t\t\t\tacc[s.path] = s.value;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t} else {\n\t\t\tsortOption = defaultSort as Record<string, TSortOrder>;\n\t\t}\n\n\t\t// ** Construct filter query\n\t\tlet filterQuery: TMongoFilterQuery<DocType> = {};\n\n\t\t// ** Query params (exact match)\n\t\tif (input.query) {\n\t\t\tObject.entries(input.query).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Custom filter function or object\n\t\tif (customFilter) {\n\t\t\tconst customQuery = typeof customFilter === 'function' ? customFilter(filter) : customFilter;\n\t\t\tfilterQuery = { ...filterQuery, ...customQuery };\n\t\t}\n\n\t\t// ** User defined filters\n\t\tif (filter && !customFilter) {\n\t\t\tif (input.filterConfig) {\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n\t\t\t\t\t\tconst config = input.filterConfig[key];\n\t\t\t\t\t\tconst fieldName = config?.field ?? key;\n\n\t\t\t\t\t\tif (config?.type === 'REGEX') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(String(value)),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (config?.type === 'EXACT') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// ** Default automatic filtering\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(value),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (typeof value === 'number' || typeof value === 'boolean') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// ** Custom filter logic (filterCustom)\n\t\tif (filterCustom && filter) {\n\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n\t\t\t\t\tconst customFilter = filterCustom[key]!(value);\n\t\t\t\t\tfilterQuery = { ...filterQuery, ...customFilter };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Execute queries\n\t\tconst total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n\t\tconst items = (await model\n\t\t\t.find(filterQuery as TMongoFilterQuery<unknown>)\n\t\t\t.sort(sortOption)\n\t\t\t.limit(limit)\n\t\t\t.skip(skip)) as unknown as DocType[];\n\n\t\treturn { items, total };\n\t};\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { Model } from 'mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TExtractDocType, TMongooseOptions, TAdapterOptions } from '../types';\n\n/**\n * Core execution logic shared by both overloads\n */\nasync function executeDataKit<TDoc, R>(input: TDataKitInput<TDoc>, adapter: TDataKitAdapter<TDoc>, item: (item: TDoc) => Promise<R> | R, maxLimit: number, filterAllowed?: string[], queryAllowed?: (keyof TDoc | string)[], sortAllowed?: (keyof TDoc | string)[]): Promise<TDataKitResult<R>> {\n\t// Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, string | number | boolean | null> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeFilter[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// Check Sort\n\tif (input.sorts && sortAllowed) {\n\t\tinput.sorts.forEach(sort => {\n\t\t\tif (!sortAllowed.includes(sort.path)) {\n\t\t\t\tthrow new Error(`[Security] Sort field '${sort.path}' is not allowed.`);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\tconst { items, total } = await adapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n}\n\n/**\n * Server action with Mongoose model (auto-infers document type)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, R = unknown>(props: Readonly<TMongooseOptions<M, TExtractDocType<M>, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Server action with custom adapter\n */\nexport async function dataKitServerAction<TDoc, R = unknown>(props: Readonly<TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, TDoc = any, R = unknown>(props: Readonly<TMongooseOptions<M, TDoc, R> | TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>> {\n\tconst { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;\n\n\t// Determine filterAllowed\n\tconst filterCustom = 'filterCustom' in props ? props.filterCustom : undefined;\n\tconst filterAllowed = explicitFilterAllowed ?? (filterCustom ? Object.keys(filterCustom) : undefined);\n\n\t// Determine adapter\n\tlet finalAdapter: TDataKitAdapter<TDoc>;\n\n\tif ('adapter' in props && props.adapter) {\n\t\tfinalAdapter = props.adapter;\n\t} else if ('model' in props && props.model) {\n\t\tconst model = props.model as unknown as TMongoModel<TDoc>;\n\t\tfinalAdapter = mongooseAdapter(model, {\n\t\t\tfilter: props.filter,\n\t\t\tfilterCustom: props.filterCustom,\n\t\t\tdefaultSort: props.defaultSort,\n\t\t}) as TDataKitAdapter<TDoc>;\n\t} else {\n\t\tthrow new Error('Either model or adapter must be provided');\n\t}\n\n\treturn executeDataKit(input, finalAdapter, item, maxLimit, filterAllowed, queryAllowed, sortAllowed);\n}\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TDataKitAdapter } from '../../types';\nimport { isProvided, getValueByPath, matchesExact, matchesRegexLike, compareValues, normalizeSorts } from '../utils';\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n\tdataset: ReadonlyArray<T>,\n\toptions: Readonly<{\n\t\t/** default behavior for filter keys not present in filterConfig */\n\t\tdefaultFilterType?: 'regex' | 'exact';\n\t}> = {},\n): TDataKitAdapter<T> => {\n\tconst { defaultFilterType = 'exact' } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\tconst filterConfig: TFilterConfig | undefined = input.filterConfig;\n\t\tconst query = input.query ?? {};\n\n\t\t// 1) Apply query (exact match)\n\t\tlet rows = dataset.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\t\t\t\tconst rowValue = getValueByPath(row, key);\n\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 2) Apply filter (via filterConfig when present)\n\t\tconst effectiveFilter = filter ?? {};\n\t\trows = rows.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(effectiveFilter)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\n\t\t\t\tconst config = filterConfig?.[key];\n\t\t\t\tconst field = config?.field ?? key;\n\t\t\t\tconst rowValue = getValueByPath(row, field);\n\n\t\t\t\tconst type = config?.type ?? defaultFilterType;\n\t\t\t\tif (type === 'regex') {\n\t\t\t\t\tif (!matchesRegexLike(rowValue, value)) return false;\n\t\t\t\t} else {\n\t\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 3) Sort\n\t\tconst normalizedSorts = normalizeSorts(sorts);\n\t\tif (normalizedSorts.length > 0) {\n\t\t\trows = [...rows].sort((ra, rb) => {\n\t\t\t\tfor (const s of normalizedSorts) {\n\t\t\t\t\tconst av = getValueByPath(ra, s.path);\n\t\t\t\t\tconst bv = getValueByPath(rb, s.path);\n\t\t\t\t\tconst cmp = compareValues(av, bv);\n\t\t\t\t\tif (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t}\n\n\t\tconst total = rows.length;\n\t\tconst items = rows.slice(skip, skip + limit);\n\t\treturn { items, total };\n\t};\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n\taction: z.literal('FETCH').optional(),\n\tpage: z.number().int().positive().optional(),\n\tlimit: z.number().int().positive().optional(),\n\tquery: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n\tfilter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n\tfilterConfig: z\n\t\t.record(\n\t\t\tz.string(),\n\t\t\tz.object({\n\t\t\t\ttype: z.enum(['REGEX', 'EXACT']),\n\t\t\t\tfield: z.string().optional(),\n\t\t\t}),\n\t\t)\n\t\t.optional(),\n\tsorts: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().max(100), // Limit path length to prevent abuse\n\t\t\t\tvalue: z.literal(-1).or(z.literal(1)),\n\t\t\t}),\n\t\t)\n\t\t.max(5)\n\t\t.optional(), // Limit to 5 sort fields\n\tsort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n"]}
1
+ {"version":3,"sources":["../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts"],"names":["customFilter"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery, TSortEntry, TPaginationInfo } from '../types';\n\n/**\n * Check if a value is provided (not undefined, null, or empty string)\n */\nexport const isProvided = (value: unknown): boolean => value !== undefined && value !== null && value !== '';\n\n/**\n * Get a nested value from an object by path (e.g., 'user.name')\n */\nexport const getValueByPath = (obj: unknown, path: string): unknown => {\n\tif (!path) return undefined;\n\tconst parts = path.split('.');\n\tlet current: unknown = obj;\n\tfor (const part of parts) {\n\t\tif (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n\t\t\tcurrent = (current as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn current;\n};\n\n/**\n * Check if a value matches exactly (supports array inclusion)\n */\nexport const matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n\tif (Array.isArray(needle)) return needle.includes(rowValue as never);\n\treturn rowValue === needle;\n};\n\n/**\n * Check if a value matches a regex-like pattern (case-insensitive)\n */\nexport const matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n\tif (!isProvided(needle)) return true;\n\tif (rowValue === undefined || rowValue === null) return false;\n\tconst hay = String(rowValue);\n\n\tif (needle instanceof RegExp) return needle.test(hay);\n\tconst n = String(needle);\n\treturn hay.toLowerCase().includes(n.toLowerCase());\n};\n\n/**\n * Compare two values for sorting\n */\nexport const compareValues = (a: unknown, b: unknown): number => {\n\tif (a === b) return 0;\n\tif (a === undefined || a === null) return -1;\n\tif (b === undefined || b === null) return 1;\n\n\tif (typeof a === 'number' && typeof b === 'number') return a - b;\n\tif (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n\tconst as = String(a);\n\tconst bs = String(b);\n\treturn as.localeCompare(bs);\n};\n\n/**\n * Normalize and validate sort entries\n */\nexport const normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] => (Array.isArray(sorts) ? sorts.filter(s => !!s?.path && (s.value === 1 || s.value === -1)) : []);\n\n/**\n * Check if a key is safe (not a prototype pollution key)\n */\nexport const isSafeKey = (key: string): boolean => {\n\tconst unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n\treturn !unsafeKeys.includes(key);\n};\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n *\n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(fields: (keyof T | string)[]): ((value: unknown) => TMongoFilterQuery<T>) => {\n\treturn (value: unknown): TMongoFilterQuery<T> => {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn {} as TMongoFilterQuery<T>;\n\t\t}\n\n\t\tconst escapedValue = escapeRegex(value);\n\t\treturn {\n\t\t\t$or: fields.map(field => ({\n\t\t\t\t[field]: { $regex: escapedValue, $options: 'i' },\n\t\t\t})),\n\t\t} as TMongoFilterQuery<T>;\n\t};\n};\n/**\n * Calculate pagination info from page, limit, and total\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n\tcurrentPage: page,\n\ttotalPages: Math.ceil(total / limit),\n\ttotalItems: total,\n\titemsPerPage: limit,\n\thasNextPage: page * limit < total,\n\thasPrevPage: page > 1,\n});\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type { TMongoModel, TMongoFilterQuery, TSortOrder, TSortOptions, TFilterCustomConfigWithFilter, TDataKitAdapter } from '../../types';\nimport { escapeRegex, isProvided, isSafeKey } from '../utils';\n\nexport const mongooseAdapter = <DocType = unknown>(\n\tmodel: TMongoModel<DocType>,\n\toptions: Readonly<{\n\t\tfilter?: ((filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>) | TMongoFilterQuery<DocType>;\n\t\tfilterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n\t\tdefaultSort?: TSortOptions<DocType>;\n\t}> = {},\n): TDataKitAdapter<DocType> => {\n\t// ** Deconstruct options\n\tconst { filter: customFilter, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\t// ** Normalize sort\n\t\tlet sortOption: Record<string, TSortOrder>;\n\n\t\tif (input.sort && Object.keys(input.sort).length > 0) {\n\t\t\tsortOption = input.sort as Record<string, TSortOrder>;\n\t\t} else if (sorts && sorts.length > 0) {\n\t\t\tsortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n\t\t\t\tif (s?.path && (s.value === 1 || s.value === -1)) {\n\t\t\t\t\tacc[s.path] = s.value;\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t} else {\n\t\t\tsortOption = defaultSort as Record<string, TSortOrder>;\n\t\t}\n\n\t\t// ** Construct filter query\n\t\tlet filterQuery: TMongoFilterQuery<DocType> = {};\n\n\t\t// ** Query params (exact match)\n\t\tif (input.query) {\n\t\t\tObject.entries(input.query).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Custom filter function or object\n\t\tif (customFilter) {\n\t\t\tconst customQuery = typeof customFilter === 'function' ? customFilter(filter) : customFilter;\n\t\t\tfilterQuery = { ...filterQuery, ...customQuery };\n\t\t}\n\n\t\t// ** User defined filters\n\t\tif (filter && !customFilter) {\n\t\t\tif (input.filterConfig) {\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\t// Skip if handled by filterCustom\n\t\t\t\t\tif (filterCustom && filterCustom[key]) return;\n\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n\t\t\t\t\t\tconst config = input.filterConfig[key];\n\t\t\t\t\t\tconst fieldName = config?.field ?? key;\n\n\t\t\t\t\t\tif (config?.type === 'REGEX') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(String(value)),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (config?.type === 'EXACT') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[fieldName] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// ** Default automatic filtering\n\t\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\t\t// Skip if handled by filterCustom\n\t\t\t\t\tif (filterCustom && filterCustom[key]) return;\n\n\t\t\t\t\tif (isProvided(value) && isSafeKey(key)) {\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = {\n\t\t\t\t\t\t\t\t$regex: escapeRegex(value),\n\t\t\t\t\t\t\t\t$options: 'i',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (typeof value === 'number' || typeof value === 'boolean') {\n\t\t\t\t\t\t\t(filterQuery as Record<string, unknown>)[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// ** Custom filter logic (filterCustom)\n\t\tif (filterCustom && filter) {\n\t\t\tObject.entries(filter).forEach(([key, value]) => {\n\t\t\t\tif (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n\t\t\t\t\tconst customFilter = filterCustom[key]!(value);\n\t\t\t\t\tfilterQuery = { ...filterQuery, ...customFilter };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// ** Execute queries\n\t\tconst total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n\t\tconst items = (await model\n\t\t\t.find(filterQuery as TMongoFilterQuery<unknown>)\n\t\t\t.sort(sortOption)\n\t\t\t.limit(limit)\n\t\t\t.skip(skip)) as unknown as DocType[];\n\n\t\treturn { items, total };\n\t};\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { Model } from 'mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TExtractDocType, TMongooseOptions, TAdapterOptions } from '../types';\n\n/**\n * Core execution logic shared by both overloads\n */\nasync function executeDataKit<TDoc, R>(input: TDataKitInput<TDoc>, adapter: TDataKitAdapter<TDoc>, item: (item: TDoc) => Promise<R> | R, maxLimit: number, filterAllowed?: string[], queryAllowed?: (keyof TDoc | string)[], sortAllowed?: (keyof TDoc | string)[]): Promise<TDataKitResult<R>> {\n\t// Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, string | number | boolean | null> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeFilter[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// Check Sort\n\tif (input.sorts && sortAllowed) {\n\t\tinput.sorts.forEach(sort => {\n\t\t\tif (!sortAllowed.includes(sort.path)) {\n\t\t\t\tthrow new Error(`[Security] Sort field '${sort.path}' is not allowed.`);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\tconst { items, total } = await adapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n}\n\n/**\n * Server action with Mongoose model (auto-infers document type)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, R = unknown>(props: Readonly<TMongooseOptions<M, TExtractDocType<M>, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Server action with custom adapter\n */\nexport async function dataKitServerAction<TDoc, R = unknown>(props: Readonly<TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>>;\n\n/**\n * Implementation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function dataKitServerAction<M extends Model<any>, TDoc = any, R = unknown>(props: Readonly<TMongooseOptions<M, TDoc, R> | TAdapterOptions<TDoc, R>>): Promise<TDataKitResult<R>> {\n\tconst { input, item, maxLimit = 100, queryAllowed, filterAllowed: explicitFilterAllowed, sortAllowed } = props;\n\n\t// Determine filterAllowed\n\tconst filterAllowed = explicitFilterAllowed;\n\n\t// Determine adapter\n\tlet finalAdapter: TDataKitAdapter<TDoc>;\n\n\tif ('adapter' in props && props.adapter) {\n\t\tfinalAdapter = props.adapter;\n\t} else if ('model' in props && props.model) {\n\t\tconst model = props.model as unknown as TMongoModel<TDoc>;\n\t\tfinalAdapter = mongooseAdapter(model, {\n\t\t\tfilter: props.filter,\n\t\t\tfilterCustom: props.filterCustom,\n\t\t\tdefaultSort: props.defaultSort,\n\t\t}) as TDataKitAdapter<TDoc>;\n\t} else {\n\t\tthrow new Error('Either model or adapter must be provided');\n\t}\n\n\treturn executeDataKit(input, finalAdapter, item, maxLimit, filterAllowed, queryAllowed, sortAllowed);\n}\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TDataKitAdapter } from '../../types';\nimport { isProvided, getValueByPath, matchesExact, matchesRegexLike, compareValues, normalizeSorts } from '../utils';\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n\tdataset: ReadonlyArray<T>,\n\toptions: Readonly<{\n\t\t/** default behavior for filter keys not present in filterConfig */\n\t\tdefaultFilterType?: 'regex' | 'exact';\n\t}> = {},\n): TDataKitAdapter<T> => {\n\tconst { defaultFilterType = 'exact' } = options;\n\n\treturn async ({ filter, sorts, limit, skip, input }) => {\n\t\tconst filterConfig: TFilterConfig | undefined = input.filterConfig;\n\t\tconst query = input.query ?? {};\n\n\t\t// 1) Apply query (exact match)\n\t\tlet rows = dataset.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\t\t\t\tconst rowValue = getValueByPath(row, key);\n\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 2) Apply filter (via filterConfig when present)\n\t\tconst effectiveFilter = filter ?? {};\n\t\trows = rows.filter(row => {\n\t\t\tfor (const [key, value] of Object.entries(effectiveFilter)) {\n\t\t\t\tif (!isProvided(value)) continue;\n\n\t\t\t\tconst config = filterConfig?.[key];\n\t\t\t\tconst field = config?.field ?? key;\n\t\t\t\tconst rowValue = getValueByPath(row, field);\n\n\t\t\t\tconst type = config?.type ?? defaultFilterType;\n\t\t\t\tif (type === 'regex') {\n\t\t\t\t\tif (!matchesRegexLike(rowValue, value)) return false;\n\t\t\t\t} else {\n\t\t\t\t\tif (!matchesExact(rowValue, value)) return false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\t// 3) Sort\n\t\tconst normalizedSorts = normalizeSorts(sorts);\n\t\tif (normalizedSorts.length > 0) {\n\t\t\trows = [...rows].sort((ra, rb) => {\n\t\t\t\tfor (const s of normalizedSorts) {\n\t\t\t\t\tconst av = getValueByPath(ra, s.path);\n\t\t\t\t\tconst bv = getValueByPath(rb, s.path);\n\t\t\t\t\tconst cmp = compareValues(av, bv);\n\t\t\t\t\tif (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t}\n\n\t\tconst total = rows.length;\n\t\tconst items = rows.slice(skip, skip + limit);\n\t\treturn { items, total };\n\t};\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n\taction: z.literal('FETCH').optional(),\n\tpage: z.number().int().positive().optional(),\n\tlimit: z.number().int().positive().optional(),\n\tquery: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n\tfilter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n\tfilterConfig: z\n\t\t.record(\n\t\t\tz.string(),\n\t\t\tz.object({\n\t\t\t\ttype: z.enum(['REGEX', 'EXACT']),\n\t\t\t\tfield: z.string().optional(),\n\t\t\t}),\n\t\t)\n\t\t.optional(),\n\tsorts: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().max(100), // Limit path length to prevent abuse\n\t\t\t\tvalue: z.literal(-1).or(z.literal(1)),\n\t\t\t}),\n\t\t)\n\t\t.max(5)\n\t\t.optional(), // Limit to 5 sort fields\n\tsort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n"]}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Types for the React Data Kit component and related UI elements.
5
5
  */
6
- import type { TDataKitInput, TDataKitResult } from '../next-data-kit';
6
+ import type { TDataKitInput, TDataKitResult, TFilterConfiguration } from '../next-data-kit';
7
7
  import type { TUseDataKitReturn } from './hook';
8
8
  /**
9
9
  * Extract the item type from a TDataKitResult
@@ -42,6 +42,7 @@ type TDataKitFilterItemBase = {
42
42
  id: string;
43
43
  label: string;
44
44
  placeholder?: string;
45
+ configuration?: TFilterConfiguration;
45
46
  };
46
47
  /**
47
48
  * Text filter item
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/types/client/component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/types/client/component.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Types for the next-data-kit hooks and state management.
5
5
  */
6
- import type { TSortEntry, TFilterConfig, TDataKitInput, TDataKitResult } from '../next-data-kit';
6
+ import type { TSortEntry, TFilterConfig, TDataKitInput, TDataKitResult, TFilterConfiguration } from '../next-data-kit';
7
7
  /**
8
8
  * React Data Kit controller state
9
9
  */
@@ -71,7 +71,10 @@ export type TUseDataKitOptions<T = unknown, R = unknown> = {
71
71
  query?: Record<string, unknown>;
72
72
  };
73
73
  memory?: 'memory' | 'search-params';
74
- filterConfig?: TFilterConfig;
74
+ filters?: {
75
+ id: string;
76
+ configuration?: TFilterConfiguration;
77
+ }[];
75
78
  action: (input: TDataKitInput<T>) => Promise<TDataKitResult<R>>;
76
79
  onSuccess?: (result: TDataKitResult<R>) => void;
77
80
  onError?: (error: Error) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/types/client/hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/types/client/hook.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { n as TSortEntry, m as TFilterConfig, k as TDataKitInput, b as TDataKitResult } from '../action-pIfOi9UC.cjs';
2
- export { c as TAdapterOptions, q as TBaseOptions, h as TDataKitAdapter, a as TExtractDocType, l as TFilterCustomConfig, f as TFilterCustomConfigWithFilter, o as TMongoFilterOperators, e as TMongoFilterQuery, d as TMongoModel, p as TMongoRootFilterOperators, T as TMongooseOptions, i as TPaginationInfo, g as TSortOptions, j as TSortOrder } from '../action-pIfOi9UC.cjs';
1
+ import { n as TSortEntry, m as TFilterConfig, k as TDataKitInput, o as TFilterConfiguration, b as TDataKitResult } from '../action-DdkPkUFP.cjs';
2
+ export { c as TAdapterOptions, r as TBaseOptions, h as TDataKitAdapter, a as TExtractDocType, l as TFilterCustomConfig, f as TFilterCustomConfigWithFilter, p as TMongoFilterOperators, e as TMongoFilterQuery, d as TMongoModel, q as TMongoRootFilterOperators, T as TMongooseOptions, i as TPaginationInfo, g as TSortOptions, j as TSortOrder } from '../action-DdkPkUFP.cjs';
3
3
  import 'mongoose';
4
4
 
5
5
  /**
@@ -75,7 +75,10 @@ type TUseDataKitOptions<T = unknown, R = unknown> = {
75
75
  query?: Record<string, unknown>;
76
76
  };
77
77
  memory?: 'memory' | 'search-params';
78
- filterConfig?: TFilterConfig;
78
+ filters?: {
79
+ id: string;
80
+ configuration?: TFilterConfiguration;
81
+ }[];
79
82
  action: (input: TDataKitInput<T>) => Promise<TDataKitResult<R>>;
80
83
  onSuccess?: (result: TDataKitResult<R>) => void;
81
84
  onError?: (error: Error) => void;
@@ -189,6 +192,7 @@ type TDataKitFilterItemBase = {
189
192
  id: string;
190
193
  label: string;
191
194
  placeholder?: string;
195
+ configuration?: TFilterConfiguration;
192
196
  };
193
197
  /**
194
198
  * Text filter item
@@ -17,28 +17,34 @@ export type TSortEntry = {
17
17
  path: string;
18
18
  value: 1 | -1;
19
19
  };
20
+ /**
21
+ * Filter configuration item
22
+ */
23
+ export type TFilterConfiguration = {
24
+ type: 'REGEX' | 'EXACT';
25
+ field?: string;
26
+ };
20
27
  /**
21
28
  * Filter configuration for automatic filtering
22
29
  */
23
30
  export type TFilterConfig = {
24
- [key: string]: {
25
- type: 'REGEX' | 'EXACT';
26
- field?: string;
27
- };
31
+ [key: string]: TFilterConfiguration;
28
32
  };
29
33
  /**
30
34
  * Custom filter configuration
31
35
  * Allows defining custom filter functions for specific filter keys
36
+ * The value parameter can be typed by using a type assertion in the function definition
32
37
  */
33
38
  export type TFilterCustomConfig<T = unknown> = {
34
- [id: string]: (data: unknown) => TMongoFilterQuery<T>;
39
+ [id: string]: (data: any) => TMongoFilterQuery<T>;
35
40
  };
36
41
  /**
37
42
  * Variant of TFilterCustomConfig that allows customizing the returned filter shape.
38
43
  * Useful for Mongo (operator-based) vs. other ORMs (where clauses) in the future.
44
+ * The value parameter can be typed by using a type assertion in the function definition
39
45
  */
40
46
  export type TFilterCustomConfigWithFilter<TDoc = unknown, TFilter = TMongoFilterQuery<TDoc>> = {
41
- [id: string]: (data: unknown) => TFilter;
47
+ [id: string]: (data: any) => TFilter;
42
48
  };
43
49
  /**
44
50
  * React Data Kit server action input
@@ -1 +1 @@
1
- {"version":3,"file":"next-data-kit.d.ts","sourceRoot":"","sources":["../../src/types/next-data-kit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAC5B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG;QAEd,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAExB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC9C,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,6BAA6B,CAAC,IAAI,GAAG,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI;IAC9F,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI;IAExC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAEvB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAErB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAElD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAE1D,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAChC,MAAM,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC,KACE,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"next-data-kit.d.ts","sourceRoot":"","sources":["../../src/types/next-data-kit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/server/action.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,6BAA6B,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AAEH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC;AAEnH;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI;IACnC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IAClE,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxG,YAAY,CAAC,EAAE,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IAC9D,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,KAAK,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/server/action.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,6BAA6B,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AAEH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC;AAEnH;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI;IAChC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxG,YAAY,CAAC,EAAE,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IAC3D,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-data-kit",
3
- "version": "8.0.0",
3
+ "version": "8.1.0",
4
4
  "description": "A powerful table utility for server-side pagination, filtering, and sorting with React components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",