@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.
Files changed (111) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/src/adapter/index.js +2 -0
  3. package/dist/cjs/src/conf.js +3 -4
  4. package/dist/cjs/src/model.js +34 -38
  5. package/dist/cjs/src/schema/array.js +1 -0
  6. package/dist/cjs/src/schema/object.js +2 -8
  7. package/dist/cjs/src/schema/schema.js +1 -0
  8. package/dist/cjs/src/utils.js +12 -14
  9. package/dist/cjs/src/validators/utils.js +1 -0
  10. package/dist/cjs/tsconfig.types.tsbuildinfo +1 -1
  11. package/dist/cjs/types/adapter/index.d.ts +2 -0
  12. package/dist/cjs/types/adapter/index.d.ts.map +1 -1
  13. package/dist/cjs/types/conf.d.ts +3 -0
  14. package/dist/cjs/types/conf.d.ts.map +1 -1
  15. package/dist/cjs/types/domain.d.ts +3 -0
  16. package/dist/cjs/types/domain.d.ts.map +1 -1
  17. package/dist/cjs/types/model.d.ts +2 -2
  18. package/dist/cjs/types/model.d.ts.map +1 -1
  19. package/dist/cjs/types/schema/array.d.ts +1 -0
  20. package/dist/cjs/types/schema/array.d.ts.map +1 -1
  21. package/dist/cjs/types/schema/object.d.ts.map +1 -1
  22. package/dist/cjs/types/schema/schema.d.ts +1 -0
  23. package/dist/cjs/types/schema/schema.d.ts.map +1 -1
  24. package/dist/cjs/types/utils.d.ts +2 -1
  25. package/dist/cjs/types/utils.d.ts.map +1 -1
  26. package/dist/cjs/types/validators/utils.d.ts +1 -0
  27. package/dist/cjs/types/validators/utils.d.ts.map +1 -1
  28. package/dist/esm/src/adapter/index.js +2 -0
  29. package/dist/esm/src/conf.js +3 -4
  30. package/dist/esm/src/model.js +32 -30
  31. package/dist/esm/src/schema/array.js +1 -0
  32. package/dist/esm/src/schema/object.js +2 -1
  33. package/dist/esm/src/schema/schema.js +1 -0
  34. package/dist/esm/src/utils.js +9 -6
  35. package/dist/esm/src/validators/utils.js +1 -0
  36. package/package.json +11 -5
  37. package/.turbo/turbo-build$colon$watch.log +0 -24
  38. package/.turbo/turbo-build.log +0 -4
  39. package/.turbo/turbo-build:watch.log +0 -26
  40. package/__tests__/.drizzle/migrations/0000_skinny_harrier.sql +0 -22
  41. package/__tests__/.drizzle/migrations/meta/0000_snapshot.json +0 -156
  42. package/__tests__/.drizzle/migrations/meta/_journal.json +0 -13
  43. package/__tests__/.drizzle/schema.ts +0 -35
  44. package/__tests__/drizzle.config.ts +0 -11
  45. package/__tests__/eslint.config.js +0 -10
  46. package/__tests__/manage.ts +0 -5
  47. package/__tests__/node_modules/.bin/drizzle-kit +0 -17
  48. package/__tests__/node_modules/.bin/tsc +0 -17
  49. package/__tests__/node_modules/.bin/tsserver +0 -17
  50. package/__tests__/node_modules/.bin/tsx +0 -17
  51. package/__tests__/package.json +0 -34
  52. package/__tests__/sqlite.db +0 -0
  53. package/__tests__/src/core/array.test.ts +0 -131
  54. package/__tests__/src/core/boolean.test.ts +0 -66
  55. package/__tests__/src/core/datetime.test.ts +0 -102
  56. package/__tests__/src/core/index.ts +0 -35
  57. package/__tests__/src/core/model.test.ts +0 -260
  58. package/__tests__/src/core/models.ts +0 -50
  59. package/__tests__/src/core/numbers.test.ts +0 -177
  60. package/__tests__/src/core/object.test.ts +0 -218
  61. package/__tests__/src/core/string.test.ts +0 -222
  62. package/__tests__/src/core/test.test.ts +0 -59
  63. package/__tests__/src/core/types.test.ts +0 -97
  64. package/__tests__/src/core/union.test.ts +0 -99
  65. package/__tests__/src/settings.ts +0 -69
  66. package/__tests__/tsconfig.json +0 -11
  67. package/src/adapter/fields/array.ts +0 -31
  68. package/src/adapter/fields/boolean.ts +0 -43
  69. package/src/adapter/fields/datetime.ts +0 -43
  70. package/src/adapter/fields/index.ts +0 -72
  71. package/src/adapter/fields/number.ts +0 -43
  72. package/src/adapter/fields/object.ts +0 -52
  73. package/src/adapter/fields/string.ts +0 -43
  74. package/src/adapter/fields/union.ts +0 -43
  75. package/src/adapter/index.ts +0 -35
  76. package/src/adapter/types.ts +0 -276
  77. package/src/compile.ts +0 -14
  78. package/src/conf.ts +0 -27
  79. package/src/constants.ts +0 -7
  80. package/src/domain.ts +0 -15
  81. package/src/exceptions.ts +0 -17
  82. package/src/index.ts +0 -318
  83. package/src/middleware.ts +0 -52
  84. package/src/model.ts +0 -507
  85. package/src/parsers/convert-from-number.ts +0 -13
  86. package/src/parsers/convert-from-string.ts +0 -19
  87. package/src/parsers/index.ts +0 -2
  88. package/src/schema/array.ts +0 -824
  89. package/src/schema/boolean.ts +0 -792
  90. package/src/schema/datetime.ts +0 -704
  91. package/src/schema/index.ts +0 -5
  92. package/src/schema/number.ts +0 -929
  93. package/src/schema/object.ts +0 -798
  94. package/src/schema/schema.ts +0 -1178
  95. package/src/schema/string.ts +0 -941
  96. package/src/schema/types.ts +0 -154
  97. package/src/schema/union.ts +0 -724
  98. package/src/types.ts +0 -66
  99. package/src/utils.ts +0 -383
  100. package/src/validators/array.ts +0 -183
  101. package/src/validators/boolean.ts +0 -52
  102. package/src/validators/datetime.ts +0 -121
  103. package/src/validators/number.ts +0 -178
  104. package/src/validators/object.ts +0 -56
  105. package/src/validators/schema.ts +0 -142
  106. package/src/validators/string.ts +0 -278
  107. package/src/validators/types.ts +0 -1
  108. package/src/validators/union.ts +0 -52
  109. package/src/validators/utils.ts +0 -225
  110. package/tsconfig.json +0 -9
  111. 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,11 +0,0 @@
1
- import { defineConfig } from 'drizzle-kit';
2
-
3
- export default defineConfig({
4
- schema: './.drizzle/schema.ts',
5
- out: './.drizzle/migrations',
6
- dialect: 'sqlite',
7
- dbCredentials: {
8
- databaseId: 'default',
9
- url: 'sqlite.db',
10
- },
11
- });
@@ -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;
@@ -1,5 +0,0 @@
1
- import { Commands } from '@palmares/core';
2
-
3
- import settings from './src/settings';
4
-
5
- Commands.handleCommands(settings, process.argv.slice(2));
@@ -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
@@ -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
- }
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
- });