@palmares/schemas 0.1.20 → 0.1.22
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/CHANGELOG.md +19 -0
- package/dist/cjs/src/adapter/index.js +2 -0
- package/dist/cjs/src/conf.js +3 -4
- package/dist/cjs/src/model.js +34 -38
- package/dist/cjs/src/schema/array.js +1 -0
- package/dist/cjs/src/schema/object.js +2 -8
- package/dist/cjs/src/schema/schema.js +1 -0
- package/dist/cjs/src/utils.js +12 -14
- package/dist/cjs/src/validators/utils.js +1 -0
- package/dist/cjs/tsconfig.types.tsbuildinfo +1 -1
- package/dist/cjs/types/adapter/index.d.ts +2 -0
- package/dist/cjs/types/adapter/index.d.ts.map +1 -1
- package/dist/cjs/types/conf.d.ts +3 -0
- package/dist/cjs/types/conf.d.ts.map +1 -1
- package/dist/cjs/types/domain.d.ts +3 -0
- package/dist/cjs/types/domain.d.ts.map +1 -1
- package/dist/cjs/types/model.d.ts +2 -2
- package/dist/cjs/types/model.d.ts.map +1 -1
- package/dist/cjs/types/schema/array.d.ts +1 -0
- package/dist/cjs/types/schema/array.d.ts.map +1 -1
- package/dist/cjs/types/schema/object.d.ts.map +1 -1
- package/dist/cjs/types/schema/schema.d.ts +1 -0
- package/dist/cjs/types/schema/schema.d.ts.map +1 -1
- package/dist/cjs/types/utils.d.ts +2 -1
- package/dist/cjs/types/utils.d.ts.map +1 -1
- package/dist/cjs/types/validators/utils.d.ts +1 -0
- package/dist/cjs/types/validators/utils.d.ts.map +1 -1
- package/dist/esm/src/adapter/index.js +2 -0
- package/dist/esm/src/conf.js +3 -4
- package/dist/esm/src/model.js +32 -30
- package/dist/esm/src/schema/array.js +1 -0
- package/dist/esm/src/schema/object.js +2 -1
- package/dist/esm/src/schema/schema.js +1 -0
- package/dist/esm/src/utils.js +9 -6
- package/dist/esm/src/validators/utils.js +1 -0
- package/package.json +11 -5
- package/.turbo/turbo-build$colon$watch.log +0 -24
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-build:watch.log +0 -26
- package/__tests__/.drizzle/migrations/0000_skinny_harrier.sql +0 -22
- package/__tests__/.drizzle/migrations/meta/0000_snapshot.json +0 -156
- package/__tests__/.drizzle/migrations/meta/_journal.json +0 -13
- package/__tests__/.drizzle/schema.ts +0 -35
- package/__tests__/drizzle.config.ts +0 -11
- package/__tests__/eslint.config.js +0 -10
- package/__tests__/manage.ts +0 -5
- package/__tests__/node_modules/.bin/drizzle-kit +0 -17
- package/__tests__/node_modules/.bin/tsc +0 -17
- package/__tests__/node_modules/.bin/tsserver +0 -17
- package/__tests__/node_modules/.bin/tsx +0 -17
- package/__tests__/package.json +0 -34
- package/__tests__/sqlite.db +0 -0
- package/__tests__/src/core/array.test.ts +0 -131
- package/__tests__/src/core/boolean.test.ts +0 -66
- package/__tests__/src/core/datetime.test.ts +0 -102
- package/__tests__/src/core/index.ts +0 -35
- package/__tests__/src/core/model.test.ts +0 -260
- package/__tests__/src/core/models.ts +0 -50
- package/__tests__/src/core/numbers.test.ts +0 -177
- package/__tests__/src/core/object.test.ts +0 -218
- package/__tests__/src/core/string.test.ts +0 -222
- package/__tests__/src/core/test.test.ts +0 -59
- package/__tests__/src/core/types.test.ts +0 -97
- package/__tests__/src/core/union.test.ts +0 -99
- package/__tests__/src/settings.ts +0 -69
- package/__tests__/tsconfig.json +0 -11
- package/src/adapter/fields/array.ts +0 -31
- package/src/adapter/fields/boolean.ts +0 -43
- package/src/adapter/fields/datetime.ts +0 -43
- package/src/adapter/fields/index.ts +0 -72
- package/src/adapter/fields/number.ts +0 -43
- package/src/adapter/fields/object.ts +0 -52
- package/src/adapter/fields/string.ts +0 -43
- package/src/adapter/fields/union.ts +0 -43
- package/src/adapter/index.ts +0 -35
- package/src/adapter/types.ts +0 -276
- package/src/compile.ts +0 -14
- package/src/conf.ts +0 -27
- package/src/constants.ts +0 -7
- package/src/domain.ts +0 -15
- package/src/exceptions.ts +0 -17
- package/src/index.ts +0 -318
- package/src/middleware.ts +0 -52
- package/src/model.ts +0 -507
- package/src/parsers/convert-from-number.ts +0 -13
- package/src/parsers/convert-from-string.ts +0 -19
- package/src/parsers/index.ts +0 -2
- package/src/schema/array.ts +0 -824
- package/src/schema/boolean.ts +0 -792
- package/src/schema/datetime.ts +0 -704
- package/src/schema/index.ts +0 -5
- package/src/schema/number.ts +0 -929
- package/src/schema/object.ts +0 -798
- package/src/schema/schema.ts +0 -1178
- package/src/schema/string.ts +0 -941
- package/src/schema/types.ts +0 -154
- package/src/schema/union.ts +0 -724
- package/src/types.ts +0 -66
- package/src/utils.ts +0 -383
- package/src/validators/array.ts +0 -183
- package/src/validators/boolean.ts +0 -52
- package/src/validators/datetime.ts +0 -121
- package/src/validators/number.ts +0 -178
- package/src/validators/object.ts +0 -56
- package/src/validators/schema.ts +0 -142
- package/src/validators/string.ts +0 -278
- package/src/validators/types.ts +0 -1
- package/src/validators/union.ts +0 -52
- package/src/validators/utils.ts +0 -225
- package/tsconfig.json +0 -9
- package/tsconfig.types.json +0 -10
@@ -1,35 +0,0 @@
|
|
1
|
-
import * as d from 'drizzle-orm/sqlite-core';
|
2
|
-
import * as drzl from 'drizzle-orm';
|
3
|
-
|
4
|
-
export const Company = d.sqliteTable('companies', {
|
5
|
-
id: d.integer('id', { mode: 'number' }).primaryKey({ autoIncrement: true }).notNull().unique(),
|
6
|
-
name: d.text('name', { length: 255 }).notNull(),
|
7
|
-
translatable: d.real('translatable')
|
8
|
-
}, (table) => ({
|
9
|
-
idIdx: d.uniqueIndex('companies_id_idx').on(table.id)
|
10
|
-
}));
|
11
|
-
|
12
|
-
export const User = d.sqliteTable('users', {
|
13
|
-
id: d.integer('id', { mode: 'number' }).primaryKey({ autoIncrement: true }).notNull().unique(),
|
14
|
-
name: d.text('name', { length: 255 }),
|
15
|
-
age: d.integer('age', { mode: 'number' }).notNull(),
|
16
|
-
updatedAt: d.text('updated_at').notNull().$onUpdate(() => drzl.sql`CURRENT_TIMESTAMP`),
|
17
|
-
createdAt: d.text('created_at').notNull().$defaultFn(() => drzl.sql`CURRENT_TIMESTAMP`),
|
18
|
-
companyId: d.integer('company_id', { mode: 'number' }).notNull().references((): d.AnySQLiteColumn => Company.id)
|
19
|
-
}, (table) => ({
|
20
|
-
idIdx: d.uniqueIndex('users_id_idx').on(table.id),
|
21
|
-
nameIdx: d.index('users_name_idx').on(table.name),
|
22
|
-
ageIdx: d.index('users_age_idx').on(table.age)
|
23
|
-
}));
|
24
|
-
|
25
|
-
export const UserRelations = drzl.relations(User, (args) => ({
|
26
|
-
company: args.one(Company, {
|
27
|
-
fields: [User.companyId],
|
28
|
-
references: [Company.id]
|
29
|
-
})
|
30
|
-
}));
|
31
|
-
|
32
|
-
export const CompanyRelations = drzl.relations(Company, (args) => ({
|
33
|
-
usersOfCompany: args.many(User)
|
34
|
-
}));
|
35
|
-
|
@@ -1,10 +0,0 @@
|
|
1
|
-
import config from '../../../eslint.config.js';
|
2
|
-
|
3
|
-
/** @type {import('eslint').Linter.RulesRecord} */
|
4
|
-
const configs = [{
|
5
|
-
...config[0],
|
6
|
-
name: '@palmares/schemas/tests',
|
7
|
-
files: ['src/**/*.ts', 'src/**/*.postgres.ts', 'manage.ts', 'drizzle.config.ts', '.drizzle/schema.ts'],
|
8
|
-
}];
|
9
|
-
|
10
|
-
export default configs;
|
package/__tests__/manage.ts
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
3
|
-
|
4
|
-
case `uname` in
|
5
|
-
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
6
|
-
esac
|
7
|
-
|
8
|
-
if [ -z "$NODE_PATH" ]; then
|
9
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/drizzle-kit@0.23.0/node_modules/drizzle-kit/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/drizzle-kit@0.23.0/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules"
|
10
|
-
else
|
11
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/drizzle-kit@0.23.0/node_modules/drizzle-kit/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/drizzle-kit@0.23.0/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules:$NODE_PATH"
|
12
|
-
fi
|
13
|
-
if [ -x "$basedir/node" ]; then
|
14
|
-
exec "$basedir/node" "$basedir/../drizzle-kit/bin.cjs" "$@"
|
15
|
-
else
|
16
|
-
exec node "$basedir/../drizzle-kit/bin.cjs" "$@"
|
17
|
-
fi
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
3
|
-
|
4
|
-
case `uname` in
|
5
|
-
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
6
|
-
esac
|
7
|
-
|
8
|
-
if [ -z "$NODE_PATH" ]; then
|
9
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/bin/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules"
|
10
|
-
else
|
11
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/bin/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules:$NODE_PATH"
|
12
|
-
fi
|
13
|
-
if [ -x "$basedir/node" ]; then
|
14
|
-
exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
|
15
|
-
else
|
16
|
-
exec node "$basedir/../typescript/bin/tsc" "$@"
|
17
|
-
fi
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
3
|
-
|
4
|
-
case `uname` in
|
5
|
-
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
6
|
-
esac
|
7
|
-
|
8
|
-
if [ -z "$NODE_PATH" ]; then
|
9
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/bin/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules"
|
10
|
-
else
|
11
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/bin/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules/typescript/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/typescript@5.5.4/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules:$NODE_PATH"
|
12
|
-
fi
|
13
|
-
if [ -x "$basedir/node" ]; then
|
14
|
-
exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
|
15
|
-
else
|
16
|
-
exec node "$basedir/../typescript/bin/tsserver" "$@"
|
17
|
-
fi
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
3
|
-
|
4
|
-
case `uname` in
|
5
|
-
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
6
|
-
esac
|
7
|
-
|
8
|
-
if [ -z "$NODE_PATH" ]; then
|
9
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules/tsx/dist/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules/tsx/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules"
|
10
|
-
else
|
11
|
-
export NODE_PATH="/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules/tsx/dist/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules/tsx/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/tsx@4.16.2/node_modules:/Users/nicolasmelo/workspace/palmares/node_modules/.pnpm/node_modules:$NODE_PATH"
|
12
|
-
fi
|
13
|
-
if [ -x "$basedir/node" ]; then
|
14
|
-
exec "$basedir/node" "$basedir/../tsx/dist/cli.mjs" "$@"
|
15
|
-
else
|
16
|
-
exec node "$basedir/../tsx/dist/cli.mjs" "$@"
|
17
|
-
fi
|
package/__tests__/package.json
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "@tests/schemas",
|
3
|
-
"version": "0.0.1",
|
4
|
-
"description": "testing the server",
|
5
|
-
"main": "manage.ts",
|
6
|
-
"scripts": {
|
7
|
-
"test": "tsx manage.ts test",
|
8
|
-
"test:watch": "WATCH=true tsx manage.ts test"
|
9
|
-
},
|
10
|
-
"keywords": [],
|
11
|
-
"author": "",
|
12
|
-
"license": "ISC",
|
13
|
-
"dependencies": {
|
14
|
-
"@palmares/console-logging": "workspace:*",
|
15
|
-
"@palmares/core": "workspace:*",
|
16
|
-
"@palmares/databases": "workspace:*",
|
17
|
-
"@palmares/drizzle-engine": "workspace:*",
|
18
|
-
"@palmares/express-adapter": "workspace:*",
|
19
|
-
"@palmares/jest-tests": "workspace:*",
|
20
|
-
"@palmares/logging": "workspace:*",
|
21
|
-
"@palmares/node-std": "workspace:*",
|
22
|
-
"@palmares/schemas": "workspace:*",
|
23
|
-
"@palmares/tests": "workspace:*",
|
24
|
-
"@palmares/zod-schema": "workspace:*",
|
25
|
-
"better-sqlite3": "^11.1.2",
|
26
|
-
"drizzle-kit": "^0.23.0",
|
27
|
-
"drizzle-orm": "^0.32.0"
|
28
|
-
},
|
29
|
-
"devDependencies": {
|
30
|
-
"@types/better-sqlite3": "^7.6.11",
|
31
|
-
"tsx": "^4.16.2",
|
32
|
-
"typescript": "^5.5.4"
|
33
|
-
}
|
34
|
-
}
|
package/__tests__/sqlite.db
DELETED
File without changes
|
@@ -1,131 +0,0 @@
|
|
1
|
-
import * as p from '@palmares/schemas';
|
2
|
-
import { describe } from '@palmares/tests';
|
3
|
-
|
4
|
-
import type JestTestAdapter from '@palmares/jest-tests';
|
5
|
-
|
6
|
-
describe<JestTestAdapter>('Array Tests', ({ test }) => {
|
7
|
-
test('optional', async ({ expect }) => {
|
8
|
-
const arraySchema = p.array([p.number()]);
|
9
|
-
const tupleSchema = p.array(p.number(), p.string());
|
10
|
-
const arraySchemaWithCustomMessage = p.array([p.number()]).nonOptional({ message: 'hello' });
|
11
|
-
const tupleSchemaWithCustomMessage = p.array(p.number(), p.string()).nonOptional({ message: 'hello' });
|
12
|
-
|
13
|
-
const [
|
14
|
-
{ errors: errorsArrayOnFail },
|
15
|
-
{ errors: errorsTupleOnFail },
|
16
|
-
{ errors: errorsArrayOnFailWithCustomMessage },
|
17
|
-
{ errors: errorsTupleOnFailWithCustomMessage },
|
18
|
-
{ errors: errorsOnValidArray, parsed: parsedArray },
|
19
|
-
{ errors: errorsOnValidTuple, parsed: parsedTuple }
|
20
|
-
] = await Promise.all([
|
21
|
-
arraySchema.parse(undefined as any),
|
22
|
-
tupleSchema.parse(undefined as any),
|
23
|
-
arraySchemaWithCustomMessage.parse(undefined as any),
|
24
|
-
tupleSchemaWithCustomMessage.parse(undefined as any),
|
25
|
-
arraySchema.parse([1, 2, 3]),
|
26
|
-
tupleSchema.parse([1, 'test'])
|
27
|
-
]);
|
28
|
-
|
29
|
-
expect(errorsArrayOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
30
|
-
expect(errorsTupleOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
31
|
-
expect(errorsArrayOnFail?.[0]?.code).toBe('required');
|
32
|
-
expect(errorsArrayOnFail?.[0]?.message).toBe('Required');
|
33
|
-
expect(errorsTupleOnFail?.[0]?.code).toBe('required');
|
34
|
-
expect(errorsTupleOnFail?.[0]?.message).toBe('Required');
|
35
|
-
expect((errorsOnValidArray || []).length).toBe(0);
|
36
|
-
expect(parsedArray[0]).toBe(1);
|
37
|
-
expect(parsedArray[2]).toBe(3);
|
38
|
-
expect((errorsOnValidTuple || []).length).toBe(0);
|
39
|
-
expect(parsedTuple[0]).toBe(1);
|
40
|
-
expect(parsedTuple[1]).toBe('test');
|
41
|
-
});
|
42
|
-
|
43
|
-
test('nullable', async ({ expect }) => {
|
44
|
-
const arraySchema = p.array([p.number()]);
|
45
|
-
const tupleSchema = p.array(p.number(), p.string());
|
46
|
-
const arraySchemaWithCustomMessage = p.array([p.number()]).nonNullable({ message: 'hello' });
|
47
|
-
const tupleSchemaWithCustomMessage = p.array(p.number(), p.string()).nonNullable({ message: 'hello' });
|
48
|
-
|
49
|
-
const [
|
50
|
-
{ errors: errorsArrayOnFail },
|
51
|
-
{ errors: errorsTupleOnFail },
|
52
|
-
{ errors: errorsArrayOnFailWithCustomMessage },
|
53
|
-
{ errors: errorsTupleOnFailWithCustomMessage },
|
54
|
-
{ errors: errorsOnValidArray, parsed: parsedArray },
|
55
|
-
{ errors: errorsOnValidTuple, parsed: parsedTuple }
|
56
|
-
] = await Promise.all([
|
57
|
-
arraySchema.parse(null as any),
|
58
|
-
tupleSchema.parse(null as any),
|
59
|
-
arraySchemaWithCustomMessage.parse(null as any),
|
60
|
-
tupleSchemaWithCustomMessage.parse(null as any),
|
61
|
-
arraySchema.parse([1, 2, 3]),
|
62
|
-
tupleSchema.parse([1, 'test'])
|
63
|
-
]);
|
64
|
-
|
65
|
-
expect(errorsArrayOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
66
|
-
expect(errorsTupleOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
67
|
-
expect(errorsArrayOnFail?.[0]?.code).toBe('null');
|
68
|
-
expect(errorsArrayOnFail?.[0]?.message).toBe('Cannot be null');
|
69
|
-
expect(errorsTupleOnFail?.[0]?.code).toBe('null');
|
70
|
-
expect(errorsTupleOnFail?.[0]?.message).toBe('Cannot be null');
|
71
|
-
expect((errorsOnValidArray || []).length).toBe(0);
|
72
|
-
expect(parsedArray[0]).toBe(1);
|
73
|
-
expect(parsedArray[2]).toBe(3);
|
74
|
-
expect((errorsOnValidTuple || []).length).toBe(0);
|
75
|
-
expect(parsedTuple[0]).toBe(1);
|
76
|
-
expect(parsedTuple[1]).toBe('test');
|
77
|
-
});
|
78
|
-
|
79
|
-
test('nested', async ({ expect }) => {
|
80
|
-
const arraySchema = p.array([p.union([p.number(), p.string().toRepresentation(async () => 'hey')])]);
|
81
|
-
|
82
|
-
const data = await arraySchema.data(['test', 1]);
|
83
|
-
|
84
|
-
console.log(data);
|
85
|
-
expect(data[0]).toBe('hey');
|
86
|
-
expect(data[1]).toBe(1)
|
87
|
-
});
|
88
|
-
|
89
|
-
test('min length', async ({ expect }) => {
|
90
|
-
const arraySchema = p.array([p.number()]).minLength(1);
|
91
|
-
const arraySchemaWithCustomMessage = p.array([p.number()]).minLength(1, { inclusive: true, message: 'hello' });
|
92
|
-
|
93
|
-
const [
|
94
|
-
{ errors: errorsArrayOnFail },
|
95
|
-
{ errors: errorsArrayOnFailWithCustomMessage },
|
96
|
-
{ errors: errorsOnValidArray, parsed: parsedArray }
|
97
|
-
] = await Promise.all([
|
98
|
-
arraySchema.parse([] as any),
|
99
|
-
arraySchemaWithCustomMessage.parse([] as any),
|
100
|
-
arraySchema.parse([1, 2, 3])
|
101
|
-
]);
|
102
|
-
|
103
|
-
expect(errorsArrayOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
104
|
-
expect(errorsArrayOnFail?.[0]?.code).toBe('minLength');
|
105
|
-
expect(errorsArrayOnFail?.[0]?.message).toBe('The array must have a minimum length of 1');
|
106
|
-
expect((errorsOnValidArray || []).length).toBe(0);
|
107
|
-
expect(parsedArray[0]).toBe(1);
|
108
|
-
expect(parsedArray[2]).toBe(3);
|
109
|
-
});
|
110
|
-
|
111
|
-
test('max length', async ({ expect }) => {
|
112
|
-
const arraySchema = p.array([p.number()]).maxLength(1);
|
113
|
-
const arraySchemaWithCustomMessage = p.array([p.number()]).maxLength(1, { inclusive: true, message: 'hello' });
|
114
|
-
|
115
|
-
const [
|
116
|
-
{ errors: errorsArrayOnFail },
|
117
|
-
{ errors: errorsArrayOnFailWithCustomMessage },
|
118
|
-
{ errors: errorsOnValidArray, parsed: parsedArray }
|
119
|
-
] = await Promise.all([
|
120
|
-
arraySchema.parse([1, 2, 3] as any),
|
121
|
-
arraySchemaWithCustomMessage.parse([1, 2, 3] as any),
|
122
|
-
arraySchema.parse([1])
|
123
|
-
]);
|
124
|
-
|
125
|
-
expect(errorsArrayOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
126
|
-
expect(errorsArrayOnFail?.[0]?.code).toBe('maxLength');
|
127
|
-
expect(errorsArrayOnFail?.[0]?.message).toBe('The array must have a maximum length of 1');
|
128
|
-
expect((errorsOnValidArray || []).length).toBe(0);
|
129
|
-
expect(parsedArray[0]).toBe(1);
|
130
|
-
});
|
131
|
-
});
|
@@ -1,66 +0,0 @@
|
|
1
|
-
import * as p from '@palmares/schemas';
|
2
|
-
import { describe } from '@palmares/tests';
|
3
|
-
|
4
|
-
import type JestTestAdapter from '@palmares/jest-tests';
|
5
|
-
|
6
|
-
describe<JestTestAdapter>('Boolean Tests', ({ test }) => {
|
7
|
-
test('optional', async ({ expect }) => {
|
8
|
-
const booleanSchema = p.boolean();
|
9
|
-
const booleanSchemaWithCustomMessage = p.boolean().nonOptional({ message: 'hello' });
|
10
|
-
|
11
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
12
|
-
await Promise.all([
|
13
|
-
booleanSchema.parse(undefined as any),
|
14
|
-
booleanSchemaWithCustomMessage.parse(undefined as any),
|
15
|
-
booleanSchema.parse(true)
|
16
|
-
]);
|
17
|
-
|
18
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
19
|
-
expect(errorsOnFail?.[0]?.code).toBe('required');
|
20
|
-
expect(errorsOnFail?.[0]?.message).toBe('Required');
|
21
|
-
expect((errorsOnValid || []).length).toBe(0);
|
22
|
-
expect(parsed).toBe(true);
|
23
|
-
});
|
24
|
-
|
25
|
-
test('nullable', async ({ expect }) => {
|
26
|
-
const booleanSchema = p.boolean();
|
27
|
-
const booleanSchemaWithCustomMessage = p.boolean().nonNullable({ message: 'hello' });
|
28
|
-
|
29
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
30
|
-
await Promise.all([
|
31
|
-
booleanSchema.parse(null as any),
|
32
|
-
booleanSchemaWithCustomMessage.parse(null as any),
|
33
|
-
booleanSchema.parse(true)
|
34
|
-
]);
|
35
|
-
|
36
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
37
|
-
expect(errorsOnFail?.[0]?.code).toBe('null');
|
38
|
-
expect(errorsOnFail?.[0]?.message).toBe('Cannot be null');
|
39
|
-
expect((errorsOnValid || []).length).toBe(0);
|
40
|
-
expect(parsed).toBe(true);
|
41
|
-
});
|
42
|
-
|
43
|
-
test('true and false values', async ({ expect }) => {
|
44
|
-
const booleanSchema = p.boolean().trueValues(['Y']).falseValues(['N']);
|
45
|
-
|
46
|
-
const [{ errors: errorsTrue, parsed: parsedTrue }, { errors: errorsFalse, parsed: parsedFalse }] =
|
47
|
-
await Promise.all([booleanSchema.parse('Y'), booleanSchema.parse('N')]);
|
48
|
-
|
49
|
-
expect((errorsTrue || []).length).toBe(0);
|
50
|
-
expect((errorsFalse || []).length).toBe(0);
|
51
|
-
expect(parsedTrue).toBe(true);
|
52
|
-
expect(parsedFalse).toBe(false);
|
53
|
-
});
|
54
|
-
|
55
|
-
test('number and string values', async ({ expect }) => {
|
56
|
-
const booleanSchema = p.boolean().allowNumber().allowString();
|
57
|
-
|
58
|
-
const [{ errors: errorsNumber, parsed: parsedNumber }, { errors: errorsString, parsed: parsedString }] =
|
59
|
-
await Promise.all([booleanSchema.parse(1), booleanSchema.parse('true')]);
|
60
|
-
|
61
|
-
expect((errorsNumber || []).length).toBe(0);
|
62
|
-
expect((errorsString || []).length).toBe(0);
|
63
|
-
expect(parsedNumber).toBe(true);
|
64
|
-
expect(parsedString).toBe(true);
|
65
|
-
});
|
66
|
-
});
|
@@ -1,102 +0,0 @@
|
|
1
|
-
import * as p from '@palmares/schemas';
|
2
|
-
import { describe } from '@palmares/tests';
|
3
|
-
|
4
|
-
import type JestTestAdapter from '@palmares/jest-tests';
|
5
|
-
|
6
|
-
describe<JestTestAdapter>('Datetime Tests', ({ test }) => {
|
7
|
-
test('optional', async ({ expect }) => {
|
8
|
-
const datetimeSchema = p.datetime();
|
9
|
-
const datetimeSchemaWithCustomMessage = p.datetime().nonOptional({ message: 'hello' });
|
10
|
-
const now = new Date();
|
11
|
-
|
12
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
13
|
-
await Promise.all([
|
14
|
-
datetimeSchema.parse(undefined as any),
|
15
|
-
datetimeSchemaWithCustomMessage.parse(undefined as any),
|
16
|
-
datetimeSchema.parse(now)
|
17
|
-
]);
|
18
|
-
|
19
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
20
|
-
expect(errorsOnFail?.[0]?.code).toBe('required');
|
21
|
-
expect(errorsOnFail?.[0]?.message).toBe('Required');
|
22
|
-
expect((errorsOnValid || []).length).toBe(0);
|
23
|
-
expect(parsed.toISOString()).toBe(now.toISOString());
|
24
|
-
});
|
25
|
-
|
26
|
-
test('nullable', async ({ expect }) => {
|
27
|
-
const datetimeSchema = p.datetime();
|
28
|
-
const datetimeSchemaWithCustomMessage = p.datetime().nonNullable({ message: 'hello' });
|
29
|
-
const now = new Date();
|
30
|
-
|
31
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
32
|
-
await Promise.all([
|
33
|
-
datetimeSchema.parse(null as any),
|
34
|
-
datetimeSchemaWithCustomMessage.parse(null as any),
|
35
|
-
datetimeSchema.parse(now)
|
36
|
-
]);
|
37
|
-
|
38
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
39
|
-
expect(errorsOnFail?.[0]?.code).toBe('null');
|
40
|
-
expect(errorsOnFail?.[0]?.message).toBe('Cannot be null');
|
41
|
-
expect((errorsOnValid || []).length).toBe(0);
|
42
|
-
expect(parsed.toISOString()).toBe(now.toISOString());
|
43
|
-
});
|
44
|
-
|
45
|
-
test('below', async ({ expect }) => {
|
46
|
-
const nowMinus10Minutes = new Date();
|
47
|
-
nowMinus10Minutes.setMinutes(-10);
|
48
|
-
const nowMinus20Minutes = new Date();
|
49
|
-
nowMinus20Minutes.setMinutes(-20);
|
50
|
-
const datetimeSchema = p.datetime().below(nowMinus10Minutes);
|
51
|
-
const datetimeSchemaWithCustomMessage = p
|
52
|
-
.datetime()
|
53
|
-
.below(nowMinus10Minutes, { message: 'hello', inclusive: false });
|
54
|
-
|
55
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
56
|
-
await Promise.all([
|
57
|
-
datetimeSchema.parse(nowMinus10Minutes),
|
58
|
-
datetimeSchemaWithCustomMessage.parse(nowMinus10Minutes),
|
59
|
-
datetimeSchema.parse(nowMinus20Minutes)
|
60
|
-
]);
|
61
|
-
|
62
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
63
|
-
expect(errorsOnFail?.[0]?.code).toBe('below');
|
64
|
-
expect(errorsOnFail?.[0]?.message).toBe('Value is not below the specified date');
|
65
|
-
expect((errorsOnValid || []).length).toBe(0);
|
66
|
-
expect(parsed.toISOString()).toBe(nowMinus20Minutes.toISOString());
|
67
|
-
});
|
68
|
-
|
69
|
-
test('above', async ({ expect }) => {
|
70
|
-
const nowPlus10Minutes = new Date();
|
71
|
-
nowPlus10Minutes.setMinutes(nowPlus10Minutes.getMinutes() + 10);
|
72
|
-
const nowPlus20Minutes = new Date();
|
73
|
-
nowPlus20Minutes.setMinutes(nowPlus20Minutes.getMinutes() + 20);
|
74
|
-
const datetimeSchema = p.datetime().above(nowPlus10Minutes);
|
75
|
-
const datetimeSchemaWithCustomMessage = p
|
76
|
-
.datetime()
|
77
|
-
.below(nowPlus10Minutes, { message: 'hello', inclusive: false });
|
78
|
-
|
79
|
-
const [{ errors: errorsOnFail }, { errors: errorsOnFailWithCustomMessage }, { errors: errorsOnValid, parsed }] =
|
80
|
-
await Promise.all([
|
81
|
-
datetimeSchema.parse(nowPlus10Minutes),
|
82
|
-
datetimeSchemaWithCustomMessage.parse(nowPlus10Minutes),
|
83
|
-
datetimeSchema.parse(nowPlus20Minutes)
|
84
|
-
]);
|
85
|
-
|
86
|
-
expect(errorsOnFailWithCustomMessage?.[0]?.message).toBe('hello');
|
87
|
-
expect(errorsOnFail?.[0]?.code).toBe('above');
|
88
|
-
expect(errorsOnFail?.[0]?.message).toBe('Value is not above the specified date');
|
89
|
-
expect((errorsOnValid || []).length).toBe(0);
|
90
|
-
expect(parsed.toISOString()).toBe(nowPlus20Minutes.toISOString());
|
91
|
-
});
|
92
|
-
|
93
|
-
test('allowString', async ({ expect }) => {
|
94
|
-
const datetimeSchema = p.datetime().allowString();
|
95
|
-
const now = new Date();
|
96
|
-
|
97
|
-
const { errors: errorsOnValid, parsed } = await datetimeSchema.parse(now.toISOString());
|
98
|
-
|
99
|
-
expect((errorsOnValid || []).length).toBe(0);
|
100
|
-
expect((parsed as Date).toISOString()).toBe(now.toISOString());
|
101
|
-
});
|
102
|
-
});
|
@@ -1,35 +0,0 @@
|
|
1
|
-
import { domain } from '@palmares/core';
|
2
|
-
import { testDomainModifier, } from '@palmares/tests';
|
3
|
-
import { databaseDomainModifier } from '@palmares/databases';
|
4
|
-
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
5
|
-
|
6
|
-
import * as models from './models';
|
7
|
-
import { db } from '../settings';
|
8
|
-
|
9
|
-
export default domain('testingZodSchemas', __dirname, {
|
10
|
-
commands: {
|
11
|
-
drizzleMigrate: {
|
12
|
-
description: 'Migrate the database using drizzle',
|
13
|
-
keywordArgs: undefined,
|
14
|
-
positionalArgs: undefined,
|
15
|
-
handler: () => {
|
16
|
-
migrate(db as any, { migrationsFolder: './.drizzle/migrations' });
|
17
|
-
}
|
18
|
-
}
|
19
|
-
},
|
20
|
-
modifiers: [testDomainModifier, databaseDomainModifier] as const,
|
21
|
-
getMigrations: () => [],
|
22
|
-
getModels: () => models,
|
23
|
-
getTests: () => [
|
24
|
-
//__dirname + '/test.test.ts',
|
25
|
-
//__dirname + '/numbers.test.ts',
|
26
|
-
//__dirname + '/boolean.test.ts',
|
27
|
-
//__dirname + '/datetime.test.ts',
|
28
|
-
//__dirname + '/object.test.ts',
|
29
|
-
//__dirname + '/union.test.ts',
|
30
|
-
//__dirname + '/array.test.ts',
|
31
|
-
//__dirname + '/types.test.ts',
|
32
|
-
//__dirname + '/string.test.ts',
|
33
|
-
__dirname + '/model.test.ts'
|
34
|
-
]
|
35
|
-
});
|