@tablecraft/engine 0.1.0-beta.1 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -0
- package/dist/core/aggregationBuilder.d.ts.map +1 -0
- package/dist/core/aggregationBuilder.js.map +1 -0
- package/dist/core/cursorPagination.d.ts.map +1 -0
- package/dist/core/cursorPagination.js.map +1 -0
- package/dist/core/datePresets.d.ts.map +1 -0
- package/dist/core/datePresets.js.map +1 -0
- package/dist/core/dialect.d.ts.map +1 -0
- package/dist/core/dialect.js.map +1 -0
- package/dist/core/fieldSelector.d.ts.map +1 -0
- package/dist/core/fieldSelector.js.map +1 -0
- package/dist/core/filterBuilder.d.ts.map +1 -0
- package/dist/core/filterBuilder.js.map +1 -0
- package/dist/core/filterGroupBuilder.d.ts.map +1 -0
- package/dist/core/filterGroupBuilder.js.map +1 -0
- package/dist/core/groupByBuilder.d.ts.map +1 -0
- package/dist/core/groupByBuilder.js.map +1 -0
- package/dist/core/inputValidator.d.ts.map +1 -0
- package/dist/core/inputValidator.js.map +1 -0
- package/dist/core/metadataBuilder.d.ts.map +1 -0
- package/dist/core/metadataBuilder.js.map +1 -0
- package/dist/core/paginationBuilder.d.ts.map +1 -0
- package/dist/core/paginationBuilder.js.map +1 -0
- package/dist/core/queryBuilder.d.ts.map +1 -0
- package/dist/core/queryBuilder.js.map +1 -0
- package/dist/core/recursiveBuilder.d.ts.map +1 -0
- package/dist/core/recursiveBuilder.js.map +1 -0
- package/dist/core/relationBuilder.d.ts.map +1 -0
- package/dist/core/relationBuilder.js.map +1 -0
- package/dist/core/roleFilter.d.ts.map +1 -0
- package/dist/core/roleFilter.js.map +1 -0
- package/dist/core/searchBuilder.d.ts.map +1 -0
- package/dist/core/searchBuilder.js.map +1 -0
- package/dist/core/softDelete.d.ts.map +1 -0
- package/dist/core/softDelete.js.map +1 -0
- package/dist/core/sortBuilder.d.ts.map +1 -0
- package/dist/core/sortBuilder.js.map +1 -0
- package/dist/core/subqueryBuilder.d.ts.map +1 -0
- package/dist/core/subqueryBuilder.js.map +1 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js.map +1 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/types/engine.d.ts.map +1 -0
- package/dist/{src/types → types}/engine.js.map +1 -1
- package/dist/types/table.d.ts.map +1 -0
- package/dist/types/table.js.map +1 -0
- package/dist/utils/adapterUtils.d.ts.map +1 -0
- package/dist/utils/adapterUtils.js.map +1 -0
- package/dist/utils/codegen.d.ts.map +1 -0
- package/dist/utils/codegen.js.map +1 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/utils/introspect.d.ts.map +1 -0
- package/dist/utils/introspect.js.map +1 -0
- package/dist/utils/openapi.d.ts.map +1 -0
- package/dist/utils/openapi.js.map +1 -0
- package/dist/utils/operators.d.ts.map +1 -0
- package/dist/utils/operators.js.map +1 -0
- package/dist/utils/requestParser.d.ts.map +1 -0
- package/dist/utils/requestParser.js.map +1 -0
- package/dist/utils/responseFormatter.d.ts.map +1 -0
- package/dist/utils/responseFormatter.js.map +1 -0
- package/dist/utils/typedSql.d.ts.map +1 -0
- package/dist/utils/typedSql.js.map +1 -0
- package/package.json +8 -7
- package/dist/src/__tests__/inputValidator.test.d.ts +0 -2
- package/dist/src/__tests__/inputValidator.test.d.ts.map +0 -1
- package/dist/src/__tests__/inputValidator.test.js +0 -205
- package/dist/src/__tests__/inputValidator.test.js.map +0 -1
- package/dist/src/__tests__/metadataBuilder.test.d.ts +0 -2
- package/dist/src/__tests__/metadataBuilder.test.d.ts.map +0 -1
- package/dist/src/__tests__/metadataBuilder.test.js +0 -221
- package/dist/src/__tests__/metadataBuilder.test.js.map +0 -1
- package/dist/src/core/aggregationBuilder.d.ts.map +0 -1
- package/dist/src/core/aggregationBuilder.js.map +0 -1
- package/dist/src/core/cursorPagination.d.ts.map +0 -1
- package/dist/src/core/cursorPagination.js.map +0 -1
- package/dist/src/core/datePresets.d.ts.map +0 -1
- package/dist/src/core/datePresets.js.map +0 -1
- package/dist/src/core/dialect.d.ts.map +0 -1
- package/dist/src/core/dialect.js.map +0 -1
- package/dist/src/core/fieldSelector.d.ts.map +0 -1
- package/dist/src/core/fieldSelector.js.map +0 -1
- package/dist/src/core/filterBuilder.d.ts.map +0 -1
- package/dist/src/core/filterBuilder.js.map +0 -1
- package/dist/src/core/filterGroupBuilder.d.ts.map +0 -1
- package/dist/src/core/filterGroupBuilder.js.map +0 -1
- package/dist/src/core/groupByBuilder.d.ts.map +0 -1
- package/dist/src/core/groupByBuilder.js.map +0 -1
- package/dist/src/core/inputValidator.d.ts.map +0 -1
- package/dist/src/core/inputValidator.js.map +0 -1
- package/dist/src/core/metadataBuilder.d.ts.map +0 -1
- package/dist/src/core/metadataBuilder.js.map +0 -1
- package/dist/src/core/paginationBuilder.d.ts.map +0 -1
- package/dist/src/core/paginationBuilder.js.map +0 -1
- package/dist/src/core/queryBuilder.d.ts.map +0 -1
- package/dist/src/core/queryBuilder.js.map +0 -1
- package/dist/src/core/recursiveBuilder.d.ts.map +0 -1
- package/dist/src/core/recursiveBuilder.js.map +0 -1
- package/dist/src/core/relationBuilder.d.ts.map +0 -1
- package/dist/src/core/relationBuilder.js.map +0 -1
- package/dist/src/core/roleFilter.d.ts.map +0 -1
- package/dist/src/core/roleFilter.js.map +0 -1
- package/dist/src/core/searchBuilder.d.ts.map +0 -1
- package/dist/src/core/searchBuilder.js.map +0 -1
- package/dist/src/core/softDelete.d.ts.map +0 -1
- package/dist/src/core/softDelete.js.map +0 -1
- package/dist/src/core/sortBuilder.d.ts.map +0 -1
- package/dist/src/core/sortBuilder.js.map +0 -1
- package/dist/src/core/subqueryBuilder.d.ts.map +0 -1
- package/dist/src/core/subqueryBuilder.js.map +0 -1
- package/dist/src/core/validator.d.ts.map +0 -1
- package/dist/src/core/validator.js.map +0 -1
- package/dist/src/define.d.ts.map +0 -1
- package/dist/src/define.js.map +0 -1
- package/dist/src/engine.d.ts.map +0 -1
- package/dist/src/engine.js.map +0 -1
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/types/engine.d.ts.map +0 -1
- package/dist/src/types/table.d.ts.map +0 -1
- package/dist/src/types/table.js.map +0 -1
- package/dist/src/utils/adapterUtils.d.ts.map +0 -1
- package/dist/src/utils/adapterUtils.js.map +0 -1
- package/dist/src/utils/codegen.d.ts.map +0 -1
- package/dist/src/utils/codegen.js.map +0 -1
- package/dist/src/utils/export.d.ts.map +0 -1
- package/dist/src/utils/export.js.map +0 -1
- package/dist/src/utils/introspect.d.ts.map +0 -1
- package/dist/src/utils/introspect.js.map +0 -1
- package/dist/src/utils/openapi.d.ts.map +0 -1
- package/dist/src/utils/openapi.js.map +0 -1
- package/dist/src/utils/operators.d.ts.map +0 -1
- package/dist/src/utils/operators.js.map +0 -1
- package/dist/src/utils/requestParser.d.ts.map +0 -1
- package/dist/src/utils/requestParser.js.map +0 -1
- package/dist/src/utils/responseFormatter.d.ts.map +0 -1
- package/dist/src/utils/responseFormatter.js.map +0 -1
- package/dist/src/utils/typedSql.d.ts.map +0 -1
- package/dist/src/utils/typedSql.js.map +0 -1
- package/dist/test/columnMeta.test.d.ts +0 -2
- package/dist/test/columnMeta.test.d.ts.map +0 -1
- package/dist/test/columnMeta.test.js +0 -92
- package/dist/test/columnMeta.test.js.map +0 -1
- package/dist/test/core/aggregationBuilder.test.d.ts +0 -2
- package/dist/test/core/aggregationBuilder.test.d.ts.map +0 -1
- package/dist/test/core/aggregationBuilder.test.js +0 -64
- package/dist/test/core/aggregationBuilder.test.js.map +0 -1
- package/dist/test/core/filterBuilder.test.d.ts +0 -2
- package/dist/test/core/filterBuilder.test.d.ts.map +0 -1
- package/dist/test/core/filterBuilder.test.js +0 -80
- package/dist/test/core/filterBuilder.test.js.map +0 -1
- package/dist/test/core/paginationBuilder.test.d.ts +0 -2
- package/dist/test/core/paginationBuilder.test.d.ts.map +0 -1
- package/dist/test/core/paginationBuilder.test.js +0 -63
- package/dist/test/core/paginationBuilder.test.js.map +0 -1
- package/dist/test/core/queryBuilder.test.d.ts +0 -2
- package/dist/test/core/queryBuilder.test.d.ts.map +0 -1
- package/dist/test/core/queryBuilder.test.js +0 -92
- package/dist/test/core/queryBuilder.test.js.map +0 -1
- package/dist/test/core/searchBuilder.test.d.ts +0 -2
- package/dist/test/core/searchBuilder.test.d.ts.map +0 -1
- package/dist/test/core/searchBuilder.test.js +0 -68
- package/dist/test/core/searchBuilder.test.js.map +0 -1
- package/dist/test/core/softDelete.test.d.ts +0 -2
- package/dist/test/core/softDelete.test.d.ts.map +0 -1
- package/dist/test/core/softDelete.test.js +0 -60
- package/dist/test/core/softDelete.test.js.map +0 -1
- package/dist/test/core/sortBuilder.test.d.ts +0 -2
- package/dist/test/core/sortBuilder.test.d.ts.map +0 -1
- package/dist/test/core/sortBuilder.test.js +0 -59
- package/dist/test/core/sortBuilder.test.js.map +0 -1
- package/dist/test/core/subqueryBuilder.test.d.ts +0 -2
- package/dist/test/core/subqueryBuilder.test.d.ts.map +0 -1
- package/dist/test/core/subqueryBuilder.test.js +0 -48
- package/dist/test/core/subqueryBuilder.test.js.map +0 -1
- package/dist/test/core/validator.test.d.ts +0 -2
- package/dist/test/core/validator.test.d.ts.map +0 -1
- package/dist/test/core/validator.test.js +0 -81
- package/dist/test/core/validator.test.js.map +0 -1
- package/dist/test/datePresets.test.d.ts +0 -2
- package/dist/test/datePresets.test.d.ts.map +0 -1
- package/dist/test/datePresets.test.js +0 -57
- package/dist/test/datePresets.test.js.map +0 -1
- package/dist/test/errors.test.d.ts +0 -2
- package/dist/test/errors.test.d.ts.map +0 -1
- package/dist/test/errors.test.js +0 -62
- package/dist/test/errors.test.js.map +0 -1
- package/dist/test/inputValidator.test.d.ts +0 -2
- package/dist/test/inputValidator.test.d.ts.map +0 -1
- package/dist/test/inputValidator.test.js +0 -60
- package/dist/test/inputValidator.test.js.map +0 -1
- package/dist/test/metadata.test.d.ts +0 -2
- package/dist/test/metadata.test.d.ts.map +0 -1
- package/dist/test/metadata.test.js +0 -285
- package/dist/test/metadata.test.js.map +0 -1
- package/dist/test/metadataComplete.test.d.ts +0 -2
- package/dist/test/metadataComplete.test.d.ts.map +0 -1
- package/dist/test/metadataComplete.test.js +0 -113
- package/dist/test/metadataComplete.test.js.map +0 -1
- package/dist/test/roleFilter.test.d.ts +0 -2
- package/dist/test/roleFilter.test.d.ts.map +0 -1
- package/dist/test/roleFilter.test.js +0 -53
- package/dist/test/roleFilter.test.js.map +0 -1
- package/dist/test/typedSql.test.d.ts +0 -2
- package/dist/test/typedSql.test.d.ts.map +0 -1
- package/dist/test/typedSql.test.js +0 -63
- package/dist/test/typedSql.test.js.map +0 -1
- package/dist/test/utils/codegen.test.d.ts +0 -2
- package/dist/test/utils/codegen.test.d.ts.map +0 -1
- package/dist/test/utils/codegen.test.js +0 -65
- package/dist/test/utils/codegen.test.js.map +0 -1
- package/dist/test/utils/export.test.d.ts +0 -2
- package/dist/test/utils/export.test.d.ts.map +0 -1
- package/dist/test/utils/export.test.js +0 -54
- package/dist/test/utils/export.test.js.map +0 -1
- package/dist/test/utils/openapi.test.d.ts +0 -2
- package/dist/test/utils/openapi.test.d.ts.map +0 -1
- package/dist/test/utils/openapi.test.js +0 -65
- package/dist/test/utils/openapi.test.js.map +0 -1
- package/dist/test/utils/requestParser.test.d.ts +0 -2
- package/dist/test/utils/requestParser.test.d.ts.map +0 -1
- package/dist/test/utils/requestParser.test.js +0 -89
- package/dist/test/utils/requestParser.test.js.map +0 -1
- package/dist/test/utils/responseFormatter.test.d.ts +0 -2
- package/dist/test/utils/responseFormatter.test.d.ts.map +0 -1
- package/dist/test/utils/responseFormatter.test.js +0 -79
- package/dist/test/utils/responseFormatter.test.js.map +0 -1
- /package/dist/{src/core → core}/aggregationBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/aggregationBuilder.js +0 -0
- /package/dist/{src/core → core}/cursorPagination.d.ts +0 -0
- /package/dist/{src/core → core}/cursorPagination.js +0 -0
- /package/dist/{src/core → core}/datePresets.d.ts +0 -0
- /package/dist/{src/core → core}/datePresets.js +0 -0
- /package/dist/{src/core → core}/dialect.d.ts +0 -0
- /package/dist/{src/core → core}/dialect.js +0 -0
- /package/dist/{src/core → core}/fieldSelector.d.ts +0 -0
- /package/dist/{src/core → core}/fieldSelector.js +0 -0
- /package/dist/{src/core → core}/filterBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/filterBuilder.js +0 -0
- /package/dist/{src/core → core}/filterGroupBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/filterGroupBuilder.js +0 -0
- /package/dist/{src/core → core}/groupByBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/groupByBuilder.js +0 -0
- /package/dist/{src/core → core}/inputValidator.d.ts +0 -0
- /package/dist/{src/core → core}/inputValidator.js +0 -0
- /package/dist/{src/core → core}/metadataBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/metadataBuilder.js +0 -0
- /package/dist/{src/core → core}/paginationBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/paginationBuilder.js +0 -0
- /package/dist/{src/core → core}/queryBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/queryBuilder.js +0 -0
- /package/dist/{src/core → core}/recursiveBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/recursiveBuilder.js +0 -0
- /package/dist/{src/core → core}/relationBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/relationBuilder.js +0 -0
- /package/dist/{src/core → core}/roleFilter.d.ts +0 -0
- /package/dist/{src/core → core}/roleFilter.js +0 -0
- /package/dist/{src/core → core}/searchBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/searchBuilder.js +0 -0
- /package/dist/{src/core → core}/softDelete.d.ts +0 -0
- /package/dist/{src/core → core}/softDelete.js +0 -0
- /package/dist/{src/core → core}/sortBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/sortBuilder.js +0 -0
- /package/dist/{src/core → core}/subqueryBuilder.d.ts +0 -0
- /package/dist/{src/core → core}/subqueryBuilder.js +0 -0
- /package/dist/{src/core → core}/validator.d.ts +0 -0
- /package/dist/{src/core → core}/validator.js +0 -0
- /package/dist/{src/define.d.ts → define.d.ts} +0 -0
- /package/dist/{src/define.js → define.js} +0 -0
- /package/dist/{src/engine.d.ts → engine.d.ts} +0 -0
- /package/dist/{src/engine.js → engine.js} +0 -0
- /package/dist/{src/errors.d.ts → errors.d.ts} +0 -0
- /package/dist/{src/errors.js → errors.js} +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/index.js → index.js} +0 -0
- /package/dist/{src/types → types}/engine.d.ts +0 -0
- /package/dist/{src/types → types}/engine.js +0 -0
- /package/dist/{src/types → types}/table.d.ts +0 -0
- /package/dist/{src/types → types}/table.js +0 -0
- /package/dist/{src/utils → utils}/adapterUtils.d.ts +0 -0
- /package/dist/{src/utils → utils}/adapterUtils.js +0 -0
- /package/dist/{src/utils → utils}/codegen.d.ts +0 -0
- /package/dist/{src/utils → utils}/codegen.js +0 -0
- /package/dist/{src/utils → utils}/export.d.ts +0 -0
- /package/dist/{src/utils → utils}/export.js +0 -0
- /package/dist/{src/utils → utils}/introspect.d.ts +0 -0
- /package/dist/{src/utils → utils}/introspect.js +0 -0
- /package/dist/{src/utils → utils}/openapi.d.ts +0 -0
- /package/dist/{src/utils → utils}/openapi.js +0 -0
- /package/dist/{src/utils → utils}/operators.d.ts +0 -0
- /package/dist/{src/utils → utils}/operators.js +0 -0
- /package/dist/{src/utils → utils}/requestParser.d.ts +0 -0
- /package/dist/{src/utils → utils}/requestParser.js +0 -0
- /package/dist/{src/utils → utils}/responseFormatter.d.ts +0 -0
- /package/dist/{src/utils → utils}/responseFormatter.js +0 -0
- /package/dist/{src/utils → utils}/typedSql.d.ts +0 -0
- /package/dist/{src/utils → utils}/typedSql.js +0 -0
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { pgTable, text, integer } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { SearchBuilder } from '../../src/core/searchBuilder';
|
|
4
|
-
// Mock Schema
|
|
5
|
-
const users = pgTable('users', {
|
|
6
|
-
id: integer('id').primaryKey(),
|
|
7
|
-
name: text('name'),
|
|
8
|
-
email: text('email'),
|
|
9
|
-
status: text('status')
|
|
10
|
-
});
|
|
11
|
-
const schema = { users };
|
|
12
|
-
describe('SearchBuilder', () => {
|
|
13
|
-
const config = {
|
|
14
|
-
name: 'users',
|
|
15
|
-
base: 'users',
|
|
16
|
-
columns: [
|
|
17
|
-
{ name: 'id', type: 'number', sortable: true, hidden: false, filterable: true },
|
|
18
|
-
{ name: 'name', type: 'string', sortable: true, hidden: false, filterable: true },
|
|
19
|
-
{ name: 'email', type: 'string', sortable: true, hidden: false, filterable: true },
|
|
20
|
-
{ name: 'status', type: 'string', filterable: true, hidden: false, sortable: true }
|
|
21
|
-
],
|
|
22
|
-
search: {
|
|
23
|
-
fields: ['name', 'email'],
|
|
24
|
-
enabled: true
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
const builder = new SearchBuilder(schema);
|
|
28
|
-
describe('buildSearch', () => {
|
|
29
|
-
it('should build search condition across multiple fields', () => {
|
|
30
|
-
const condition = builder.buildSearch(config, 'john');
|
|
31
|
-
expect(condition).toBeDefined();
|
|
32
|
-
});
|
|
33
|
-
it('should return undefined if search is disabled', () => {
|
|
34
|
-
const disabledConfig = {
|
|
35
|
-
...config,
|
|
36
|
-
search: { ...config.search, enabled: false }
|
|
37
|
-
};
|
|
38
|
-
expect(builder.buildSearch(disabledConfig, 'john')).toBeUndefined();
|
|
39
|
-
});
|
|
40
|
-
it('should return undefined if search fields are empty', () => {
|
|
41
|
-
const emptyFieldsConfig = {
|
|
42
|
-
...config,
|
|
43
|
-
search: { ...config.search, fields: [] }
|
|
44
|
-
};
|
|
45
|
-
expect(builder.buildSearch(emptyFieldsConfig, 'john')).toBeUndefined();
|
|
46
|
-
});
|
|
47
|
-
it('should return undefined if search term is empty', () => {
|
|
48
|
-
expect(builder.buildSearch(config, '')).toBeUndefined();
|
|
49
|
-
expect(builder.buildSearch(config, ' ')).toBeUndefined();
|
|
50
|
-
});
|
|
51
|
-
it('should escape special characters in search term', () => {
|
|
52
|
-
// We can't easily verify the SQL output structure, but we can verify it doesn't crash
|
|
53
|
-
const condition = builder.buildSearch(config, 'john%doe_');
|
|
54
|
-
expect(condition).toBeDefined();
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe('buildFullTextSearch', () => {
|
|
58
|
-
it('should build full text search condition', () => {
|
|
59
|
-
const condition = builder.buildFullTextSearch(config, 'john');
|
|
60
|
-
expect(condition).toBeDefined();
|
|
61
|
-
});
|
|
62
|
-
it('should return undefined if search is disabled', () => {
|
|
63
|
-
const disabledConfig = { ...config, search: { ...config.search, enabled: false } };
|
|
64
|
-
expect(builder.buildFullTextSearch(disabledConfig, 'john')).toBeUndefined();
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=searchBuilder.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchBuilder.test.js","sourceRoot":"","sources":["../../../test/core/searchBuilder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"softDelete.test.d.ts","sourceRoot":"","sources":["../../../test/core/softDelete.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { pgTable, integer, text, timestamp } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { SoftDeleteHandler } from '../../src/core/softDelete';
|
|
4
|
-
const users = pgTable('users', {
|
|
5
|
-
id: integer('id').primaryKey(),
|
|
6
|
-
name: text('name'),
|
|
7
|
-
deletedAt: timestamp('deletedAt')
|
|
8
|
-
});
|
|
9
|
-
const schema = { users };
|
|
10
|
-
describe('SoftDeleteHandler', () => {
|
|
11
|
-
const config = {
|
|
12
|
-
name: 'users',
|
|
13
|
-
base: 'users',
|
|
14
|
-
columns: [{ name: 'id', type: 'number', hidden: false, sortable: true, filterable: true }],
|
|
15
|
-
softDelete: {
|
|
16
|
-
enabled: true,
|
|
17
|
-
field: 'deletedAt'
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
const handler = new SoftDeleteHandler(schema);
|
|
21
|
-
it('should return null check if soft delete is enabled', () => {
|
|
22
|
-
const condition = handler.buildSoftDeleteCondition(config);
|
|
23
|
-
expect(condition).toBeDefined();
|
|
24
|
-
});
|
|
25
|
-
it('should return undefined if soft delete is disabled', () => {
|
|
26
|
-
const disabledConfig = {
|
|
27
|
-
...config,
|
|
28
|
-
softDelete: { enabled: false, field: 'deletedAt' }
|
|
29
|
-
};
|
|
30
|
-
const condition = handler.buildSoftDeleteCondition(disabledConfig);
|
|
31
|
-
expect(condition).toBeUndefined();
|
|
32
|
-
});
|
|
33
|
-
it('should return undefined if includeDeleted is true', () => {
|
|
34
|
-
const condition = handler.buildSoftDeleteCondition(config, true);
|
|
35
|
-
expect(condition).toBeUndefined();
|
|
36
|
-
});
|
|
37
|
-
it('should use default field name if not specified', () => {
|
|
38
|
-
const defaultConfig = {
|
|
39
|
-
...config,
|
|
40
|
-
softDelete: { enabled: true, field: 'deletedAt' } // explicit for types but testing default logic internal to handler
|
|
41
|
-
};
|
|
42
|
-
// If we passed undefined field it would default to deletedAt in z.infer output?
|
|
43
|
-
// But handler logic: field = config.softDelete.field ?? 'deletedAt';
|
|
44
|
-
// So if config has field, it uses it.
|
|
45
|
-
const condition = handler.buildSoftDeleteCondition(defaultConfig);
|
|
46
|
-
expect(condition).toBeDefined();
|
|
47
|
-
});
|
|
48
|
-
it('should warn and return undefined if field does not exist', () => {
|
|
49
|
-
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
50
|
-
const badConfig = {
|
|
51
|
-
...config,
|
|
52
|
-
softDelete: { enabled: true, field: 'nonExistent' }
|
|
53
|
-
};
|
|
54
|
-
const condition = handler.buildSoftDeleteCondition(badConfig);
|
|
55
|
-
expect(condition).toBeUndefined();
|
|
56
|
-
expect(consoleSpy).toHaveBeenCalled();
|
|
57
|
-
consoleSpy.mockRestore();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=softDelete.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"softDelete.test.js","sourceRoot":"","sources":["../../../test/core/softDelete.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sortBuilder.test.d.ts","sourceRoot":"","sources":["../../../test/core/sortBuilder.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { pgTable, text, integer } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { SortBuilder } from '../../src/core/sortBuilder';
|
|
4
|
-
const users = pgTable('users', {
|
|
5
|
-
id: integer('id').primaryKey(),
|
|
6
|
-
name: text('name'),
|
|
7
|
-
email: text('email'),
|
|
8
|
-
});
|
|
9
|
-
const schema = { users };
|
|
10
|
-
describe('SortBuilder', () => {
|
|
11
|
-
const config = {
|
|
12
|
-
name: 'users',
|
|
13
|
-
base: 'users',
|
|
14
|
-
columns: [
|
|
15
|
-
{ name: 'id', type: 'number', sortable: true, hidden: false, filterable: true },
|
|
16
|
-
{ name: 'name', type: 'string', sortable: true, hidden: false, filterable: true },
|
|
17
|
-
{ name: 'email', type: 'string', sortable: false, hidden: false, filterable: true }, // Not sortable
|
|
18
|
-
],
|
|
19
|
-
defaultSort: [
|
|
20
|
-
{ field: 'name', order: 'asc' }
|
|
21
|
-
]
|
|
22
|
-
};
|
|
23
|
-
const builder = new SortBuilder(schema);
|
|
24
|
-
describe('buildSort', () => {
|
|
25
|
-
it('should return default sort if no params provided', () => {
|
|
26
|
-
const sort = builder.buildSort(config, []);
|
|
27
|
-
expect(sort).toHaveLength(1);
|
|
28
|
-
// We assume it's name ASC
|
|
29
|
-
});
|
|
30
|
-
it('should return default sort if params are empty/undefined', () => {
|
|
31
|
-
const sort = builder.buildSort(config, undefined);
|
|
32
|
-
expect(sort).toHaveLength(1);
|
|
33
|
-
});
|
|
34
|
-
it('should use provided sort params', () => {
|
|
35
|
-
const params = [{ field: 'id', order: 'desc' }];
|
|
36
|
-
const sort = builder.buildSort(config, params);
|
|
37
|
-
expect(sort).toHaveLength(1);
|
|
38
|
-
});
|
|
39
|
-
it('should ignore unsortable columns', () => {
|
|
40
|
-
const params = [{ field: 'email', order: 'asc' }];
|
|
41
|
-
const sort = builder.buildSort(config, params);
|
|
42
|
-
expect(sort).toHaveLength(0);
|
|
43
|
-
});
|
|
44
|
-
it('should ignore unknown columns', () => {
|
|
45
|
-
const params = [{ field: 'unknown', order: 'asc' }];
|
|
46
|
-
const sort = builder.buildSort(config, params);
|
|
47
|
-
expect(sort).toHaveLength(0);
|
|
48
|
-
});
|
|
49
|
-
it('should handle multiple sort params', () => {
|
|
50
|
-
const params = [
|
|
51
|
-
{ field: 'name', order: 'desc' },
|
|
52
|
-
{ field: 'id', order: 'asc' }
|
|
53
|
-
];
|
|
54
|
-
const sort = builder.buildSort(config, params);
|
|
55
|
-
expect(sort).toHaveLength(2);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=sortBuilder.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sortBuilder.test.js","sourceRoot":"","sources":["../../../test/core/sortBuilder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subqueryBuilder.test.d.ts","sourceRoot":"","sources":["../../../test/core/subqueryBuilder.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { pgTable, integer } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { SubqueryBuilder } from '../../src/core/subqueryBuilder';
|
|
4
|
-
const users = pgTable('users', {
|
|
5
|
-
id: integer('id').primaryKey(),
|
|
6
|
-
});
|
|
7
|
-
const orders = pgTable('orders', {
|
|
8
|
-
id: integer('id').primaryKey(),
|
|
9
|
-
userId: integer('user_id'),
|
|
10
|
-
});
|
|
11
|
-
const schema = { users, orders };
|
|
12
|
-
describe('SubqueryBuilder', () => {
|
|
13
|
-
const config = {
|
|
14
|
-
name: 'users',
|
|
15
|
-
base: 'users',
|
|
16
|
-
columns: [{ name: 'id', type: 'number', hidden: false, sortable: true, filterable: true }],
|
|
17
|
-
subqueries: [
|
|
18
|
-
{ alias: 'ordersCount', table: 'orders', type: 'count', filter: 'orders.user_id = users.id' },
|
|
19
|
-
{ alias: 'hasOrders', table: 'orders', type: 'exists', filter: 'orders.user_id = users.id' },
|
|
20
|
-
{ alias: 'lastOrder', table: 'orders', type: 'first', filter: 'orders.user_id = users.id' }
|
|
21
|
-
]
|
|
22
|
-
};
|
|
23
|
-
const builder = new SubqueryBuilder(schema);
|
|
24
|
-
describe('buildSubqueries', () => {
|
|
25
|
-
it('should build subquery map', () => {
|
|
26
|
-
const result = builder.buildSubqueries(config);
|
|
27
|
-
expect(result).toBeDefined();
|
|
28
|
-
expect(Object.keys(result)).toHaveLength(3);
|
|
29
|
-
expect(result['ordersCount']).toBeDefined();
|
|
30
|
-
expect(result['hasOrders']).toBeDefined();
|
|
31
|
-
expect(result['lastOrder']).toBeDefined();
|
|
32
|
-
});
|
|
33
|
-
it('should return undefined if no subqueries configured', () => {
|
|
34
|
-
const noSubConfig = { ...config, subqueries: [] };
|
|
35
|
-
const result = builder.buildSubqueries(noSubConfig);
|
|
36
|
-
expect(result).toBeUndefined();
|
|
37
|
-
});
|
|
38
|
-
it('should ignore subqueries for unknown tables', () => {
|
|
39
|
-
const badConfig = {
|
|
40
|
-
...config,
|
|
41
|
-
subqueries: [{ alias: 'x', table: 'unknown', type: 'count' }]
|
|
42
|
-
};
|
|
43
|
-
const result = builder.buildSubqueries(badConfig);
|
|
44
|
-
expect(result).toBeUndefined();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=subqueryBuilder.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subqueryBuilder.test.js","sourceRoot":"","sources":["../../../test/core/subqueryBuilder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../../test/core/validator.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { validateConfig, validateAgainstSchema } from '../../src/core/validator';
|
|
3
|
-
import { pgTable, text, integer } from 'drizzle-orm/pg-core';
|
|
4
|
-
describe('Configuration Validator', () => {
|
|
5
|
-
describe('validateConfig (Zod)', () => {
|
|
6
|
-
it('should validate a correct configuration', () => {
|
|
7
|
-
const config = {
|
|
8
|
-
name: 'users',
|
|
9
|
-
base: 'users',
|
|
10
|
-
columns: [
|
|
11
|
-
{ name: 'id', type: 'number' },
|
|
12
|
-
{ name: 'email', type: 'string' }
|
|
13
|
-
],
|
|
14
|
-
filters: [
|
|
15
|
-
{ field: 'email', operator: 'eq' }
|
|
16
|
-
]
|
|
17
|
-
};
|
|
18
|
-
const result = validateConfig(config);
|
|
19
|
-
expect(result).toBeDefined();
|
|
20
|
-
expect(result.name).toBe('users');
|
|
21
|
-
expect(result.columns).toHaveLength(2);
|
|
22
|
-
});
|
|
23
|
-
it('should throw on missing required fields', () => {
|
|
24
|
-
const config = {
|
|
25
|
-
// Missing 'base'
|
|
26
|
-
name: 'users',
|
|
27
|
-
columns: []
|
|
28
|
-
};
|
|
29
|
-
expect(() => validateConfig(config)).toThrow();
|
|
30
|
-
});
|
|
31
|
-
it('should throw on invalid column type', () => {
|
|
32
|
-
const config = {
|
|
33
|
-
name: 'users',
|
|
34
|
-
base: 'users',
|
|
35
|
-
columns: [
|
|
36
|
-
{ name: 'id', type: 'invalid_type' }
|
|
37
|
-
]
|
|
38
|
-
};
|
|
39
|
-
expect(() => validateConfig(config)).toThrow();
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe('validateAgainstSchema (Drizzle)', () => {
|
|
43
|
-
// Define a mock schema
|
|
44
|
-
const users = pgTable('users', {
|
|
45
|
-
id: integer('id').primaryKey(),
|
|
46
|
-
name: text('name'),
|
|
47
|
-
email: text('email')
|
|
48
|
-
});
|
|
49
|
-
const schema = { users };
|
|
50
|
-
it('should pass when config matches schema', () => {
|
|
51
|
-
const config = validateConfig({
|
|
52
|
-
name: 'users',
|
|
53
|
-
base: 'users',
|
|
54
|
-
columns: [
|
|
55
|
-
{ name: 'id', type: 'number' },
|
|
56
|
-
{ name: 'email', type: 'string' }
|
|
57
|
-
]
|
|
58
|
-
});
|
|
59
|
-
expect(() => validateAgainstSchema(config, schema)).not.toThrow();
|
|
60
|
-
});
|
|
61
|
-
it('should fail when base table does not exist', () => {
|
|
62
|
-
const config = validateConfig({
|
|
63
|
-
name: 'posts',
|
|
64
|
-
base: 'posts', // Does not exist in schema
|
|
65
|
-
columns: []
|
|
66
|
-
});
|
|
67
|
-
expect(() => validateAgainstSchema(config, schema)).toThrow(/Base table 'posts' not found/);
|
|
68
|
-
});
|
|
69
|
-
it('should fail when column does not exist', () => {
|
|
70
|
-
const config = validateConfig({
|
|
71
|
-
name: 'users',
|
|
72
|
-
base: 'users',
|
|
73
|
-
columns: [
|
|
74
|
-
{ name: 'age', type: 'number' } // 'age' not in users table
|
|
75
|
-
]
|
|
76
|
-
});
|
|
77
|
-
expect(() => validateAgainstSchema(config, schema)).toThrow(/Column 'age' configured in 'users' does not exist in table 'users'/);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
//# sourceMappingURL=validator.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.test.js","sourceRoot":"","sources":["../../../test/core/validator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datePresets.test.d.ts","sourceRoot":"","sources":["../../test/datePresets.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach, setSystemTime } from 'bun:test';
|
|
2
|
-
import { resolveDatePreset, isDatePreset } from '../src/core/datePresets';
|
|
3
|
-
describe('isDatePreset', () => {
|
|
4
|
-
it('should recognize valid presets', () => {
|
|
5
|
-
expect(isDatePreset('today')).toBe(true);
|
|
6
|
-
expect(isDatePreset('last7days')).toBe(true);
|
|
7
|
-
expect(isDatePreset('thisMonth')).toBe(true);
|
|
8
|
-
expect(isDatePreset('lastQuarter')).toBe(true);
|
|
9
|
-
expect(isDatePreset('custom')).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
it('should reject invalid values', () => {
|
|
12
|
-
expect(isDatePreset('invalid')).toBe(false);
|
|
13
|
-
expect(isDatePreset(123)).toBe(false);
|
|
14
|
-
expect(isDatePreset(null)).toBe(false);
|
|
15
|
-
expect(isDatePreset('2024-01-01')).toBe(false);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
describe('resolveDatePreset', () => {
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
setSystemTime(new Date('2024-06-15T12:00:00Z'));
|
|
21
|
-
});
|
|
22
|
-
afterEach(() => {
|
|
23
|
-
setSystemTime();
|
|
24
|
-
});
|
|
25
|
-
it('today should be start of today to start of tomorrow', () => {
|
|
26
|
-
const range = resolveDatePreset('today');
|
|
27
|
-
expect(range.start.toISOString()).toBe('2024-06-15T00:00:00.000Z');
|
|
28
|
-
expect(range.end.toISOString()).toBe('2024-06-16T00:00:00.000Z');
|
|
29
|
-
});
|
|
30
|
-
it('yesterday should be start of yesterday to start of today', () => {
|
|
31
|
-
const range = resolveDatePreset('yesterday');
|
|
32
|
-
expect(range.start.toISOString()).toBe('2024-06-14T00:00:00.000Z');
|
|
33
|
-
expect(range.end.toISOString()).toBe('2024-06-15T00:00:00.000Z');
|
|
34
|
-
});
|
|
35
|
-
it('last7days should span 7 days back', () => {
|
|
36
|
-
const range = resolveDatePreset('last7days');
|
|
37
|
-
expect(range.start.toISOString()).toBe('2024-06-08T00:00:00.000Z');
|
|
38
|
-
expect(range.end.toISOString()).toBe('2024-06-16T00:00:00.000Z');
|
|
39
|
-
});
|
|
40
|
-
it('thisMonth should be start of June', () => {
|
|
41
|
-
const range = resolveDatePreset('thisMonth');
|
|
42
|
-
expect(range.start.toISOString()).toBe('2024-06-01T00:00:00.000Z');
|
|
43
|
-
});
|
|
44
|
-
it('lastMonth should be May', () => {
|
|
45
|
-
const range = resolveDatePreset('lastMonth');
|
|
46
|
-
expect(range.start.toISOString()).toBe('2024-05-01T00:00:00.000Z');
|
|
47
|
-
expect(range.end.toISOString()).toBe('2024-06-01T00:00:00.000Z');
|
|
48
|
-
});
|
|
49
|
-
it('thisYear should start from January 1st', () => {
|
|
50
|
-
const range = resolveDatePreset('thisYear');
|
|
51
|
-
expect(range.start.toISOString()).toBe('2024-01-01T00:00:00.000Z');
|
|
52
|
-
});
|
|
53
|
-
it('custom should return undefined', () => {
|
|
54
|
-
expect(resolveDatePreset('custom')).toBeUndefined();
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
//# sourceMappingURL=datePresets.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datePresets.test.js","sourceRoot":"","sources":["../../test/datePresets.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../test/errors.test.ts"],"names":[],"mappings":""}
|
package/dist/test/errors.test.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { TableCraftError, ConfigError, FieldError, ValidationError, AccessDeniedError, NotFoundError, QueryError, DialectError, } from '../src/errors';
|
|
3
|
-
describe('Error classes', () => {
|
|
4
|
-
it('should create ConfigError with correct properties', () => {
|
|
5
|
-
const err = new ConfigError('Bad config', { field: 'x' });
|
|
6
|
-
expect(err.code).toBe('CONFIG_ERROR');
|
|
7
|
-
expect(err.statusCode).toBe(400);
|
|
8
|
-
expect(err.details).toEqual({ field: 'x' });
|
|
9
|
-
expect(err instanceof TableCraftError).toBe(true);
|
|
10
|
-
expect(err instanceof Error).toBe(true);
|
|
11
|
-
});
|
|
12
|
-
it('should create FieldError', () => {
|
|
13
|
-
const err = new FieldError('status', 'is not filterable');
|
|
14
|
-
expect(err.code).toBe('FIELD_ERROR');
|
|
15
|
-
expect(err.statusCode).toBe(400);
|
|
16
|
-
expect(err.message).toContain('status');
|
|
17
|
-
expect(err.message).toContain('not filterable');
|
|
18
|
-
});
|
|
19
|
-
it('should create ValidationError', () => {
|
|
20
|
-
const err = new ValidationError('age', 'number', 'hello');
|
|
21
|
-
expect(err.code).toBe('VALIDATION_ERROR');
|
|
22
|
-
expect(err.statusCode).toBe(400);
|
|
23
|
-
expect(err.message).toContain('age');
|
|
24
|
-
expect(err.message).toContain('number');
|
|
25
|
-
});
|
|
26
|
-
it('should create AccessDeniedError', () => {
|
|
27
|
-
const err = new AccessDeniedError('orders', 'missing role');
|
|
28
|
-
expect(err.code).toBe('ACCESS_DENIED');
|
|
29
|
-
expect(err.statusCode).toBe(403);
|
|
30
|
-
});
|
|
31
|
-
it('should create NotFoundError', () => {
|
|
32
|
-
const err = new NotFoundError('users');
|
|
33
|
-
expect(err.code).toBe('NOT_FOUND');
|
|
34
|
-
expect(err.statusCode).toBe(404);
|
|
35
|
-
});
|
|
36
|
-
it('should create QueryError', () => {
|
|
37
|
-
const err = new QueryError('SQL failed');
|
|
38
|
-
expect(err.code).toBe('QUERY_ERROR');
|
|
39
|
-
expect(err.statusCode).toBe(500);
|
|
40
|
-
});
|
|
41
|
-
it('should create DialectError', () => {
|
|
42
|
-
const err = new DialectError('Recursive CTE', 'mysql');
|
|
43
|
-
expect(err.code).toBe('DIALECT_ERROR');
|
|
44
|
-
expect(err.message).toContain('mysql');
|
|
45
|
-
expect(err.message).toContain('Recursive CTE');
|
|
46
|
-
});
|
|
47
|
-
it('should be catchable as TableCraftError', () => {
|
|
48
|
-
const errors = [
|
|
49
|
-
new ConfigError('x'),
|
|
50
|
-
new FieldError('x', 'y'),
|
|
51
|
-
new ValidationError('x', 'y', 'z'),
|
|
52
|
-
new AccessDeniedError('x'),
|
|
53
|
-
new NotFoundError('x'),
|
|
54
|
-
new QueryError('x'),
|
|
55
|
-
new DialectError('x', 'y'),
|
|
56
|
-
];
|
|
57
|
-
for (const err of errors) {
|
|
58
|
-
expect(err instanceof TableCraftError).toBe(true);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=errors.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../test/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputValidator.test.d.ts","sourceRoot":"","sources":["../../test/inputValidator.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { validateInput } from '../src/core/inputValidator';
|
|
3
|
-
import { FieldError, ValidationError } from '../src/errors';
|
|
4
|
-
const config = {
|
|
5
|
-
name: 'test',
|
|
6
|
-
base: 'test',
|
|
7
|
-
columns: [
|
|
8
|
-
{ name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true },
|
|
9
|
-
{ name: 'name', type: 'string', hidden: false, sortable: true, filterable: true },
|
|
10
|
-
{ name: 'age', type: 'number', hidden: false, sortable: true, filterable: true },
|
|
11
|
-
{ name: 'active', type: 'boolean', hidden: false, sortable: false, filterable: true },
|
|
12
|
-
{ name: 'secret', type: 'string', hidden: true, sortable: false, filterable: false },
|
|
13
|
-
{ name: 'createdAt', type: 'date', hidden: false, sortable: true, filterable: true },
|
|
14
|
-
],
|
|
15
|
-
};
|
|
16
|
-
describe('validateInput', () => {
|
|
17
|
-
it('should pass with valid params', () => {
|
|
18
|
-
expect(() => validateInput({
|
|
19
|
-
select: ['id', 'name'],
|
|
20
|
-
filters: { name: { operator: 'eq', value: 'test' } },
|
|
21
|
-
sort: [{ field: 'name', order: 'asc' }],
|
|
22
|
-
}, config)).not.toThrow();
|
|
23
|
-
});
|
|
24
|
-
it('should throw FieldError for invalid select field', () => {
|
|
25
|
-
expect(() => validateInput({
|
|
26
|
-
select: ['nonexistent'],
|
|
27
|
-
}, config)).toThrow(FieldError);
|
|
28
|
-
});
|
|
29
|
-
it('should throw FieldError for hidden select field', () => {
|
|
30
|
-
expect(() => validateInput({
|
|
31
|
-
select: ['secret'],
|
|
32
|
-
}, config)).toThrow(FieldError);
|
|
33
|
-
});
|
|
34
|
-
it('should throw FieldError for non-filterable field', () => {
|
|
35
|
-
expect(() => validateInput({
|
|
36
|
-
filters: { secret: { operator: 'eq', value: 'x' } },
|
|
37
|
-
}, config)).toThrow(FieldError);
|
|
38
|
-
});
|
|
39
|
-
it('should throw ValidationError for wrong type on number field', () => {
|
|
40
|
-
expect(() => validateInput({
|
|
41
|
-
filters: { age: { operator: 'eq', value: 'not-a-number' } },
|
|
42
|
-
}, config)).toThrow(ValidationError);
|
|
43
|
-
});
|
|
44
|
-
it('should throw ValidationError for wrong type on boolean field', () => {
|
|
45
|
-
expect(() => validateInput({
|
|
46
|
-
filters: { active: { operator: 'eq', value: 'yes' } },
|
|
47
|
-
}, config)).toThrow(ValidationError);
|
|
48
|
-
});
|
|
49
|
-
it('should throw ValidationError for wrong type on date field', () => {
|
|
50
|
-
expect(() => validateInput({
|
|
51
|
-
filters: { createdAt: { operator: 'gt', value: 'invalid-date' } },
|
|
52
|
-
}, config)).toThrow(ValidationError);
|
|
53
|
-
});
|
|
54
|
-
it('should throw FieldError for non-sortable field', () => {
|
|
55
|
-
expect(() => validateInput({
|
|
56
|
-
sort: [{ field: 'active', order: 'asc' }],
|
|
57
|
-
}, config)).toThrow(FieldError);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=inputValidator.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputValidator.test.js","sourceRoot":"","sources":["../../test/inputValidator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.test.d.ts","sourceRoot":"","sources":["../../test/metadata.test.ts"],"names":[],"mappings":""}
|