@reqord/shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +38 -0
  3. package/dist/constants/index.d.ts +2 -0
  4. package/dist/constants/index.d.ts.map +1 -0
  5. package/dist/constants/index.js +2 -0
  6. package/dist/constants/index.js.map +1 -0
  7. package/dist/constants/paths.d.ts +13 -0
  8. package/dist/constants/paths.d.ts.map +1 -0
  9. package/dist/constants/paths.js +13 -0
  10. package/dist/constants/paths.js.map +1 -0
  11. package/dist/constants/paths.test.d.ts +2 -0
  12. package/dist/constants/paths.test.d.ts.map +1 -0
  13. package/dist/constants/paths.test.js +11 -0
  14. package/dist/constants/paths.test.js.map +1 -0
  15. package/dist/index.d.ts +7 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/rules/consistency.d.ts +12 -0
  20. package/dist/rules/consistency.d.ts.map +1 -0
  21. package/dist/rules/consistency.js +34 -0
  22. package/dist/rules/consistency.js.map +1 -0
  23. package/dist/rules/consistency.test.d.ts +2 -0
  24. package/dist/rules/consistency.test.d.ts.map +1 -0
  25. package/dist/rules/consistency.test.js +97 -0
  26. package/dist/rules/consistency.test.js.map +1 -0
  27. package/dist/rules/index.d.ts +3 -0
  28. package/dist/rules/index.d.ts.map +1 -0
  29. package/dist/rules/index.js +3 -0
  30. package/dist/rules/index.js.map +1 -0
  31. package/dist/rules/status-transitions.d.ts +5 -0
  32. package/dist/rules/status-transitions.d.ts.map +1 -0
  33. package/dist/rules/status-transitions.js +13 -0
  34. package/dist/rules/status-transitions.js.map +1 -0
  35. package/dist/rules/status-transitions.test.d.ts +2 -0
  36. package/dist/rules/status-transitions.test.d.ts.map +1 -0
  37. package/dist/rules/status-transitions.test.js +53 -0
  38. package/dist/rules/status-transitions.test.js.map +1 -0
  39. package/dist/schemas/common.d.ts +33 -0
  40. package/dist/schemas/common.d.ts.map +1 -0
  41. package/dist/schemas/common.js +19 -0
  42. package/dist/schemas/common.js.map +1 -0
  43. package/dist/schemas/feedback.d.ts +249 -0
  44. package/dist/schemas/feedback.d.ts.map +1 -0
  45. package/dist/schemas/feedback.js +39 -0
  46. package/dist/schemas/feedback.js.map +1 -0
  47. package/dist/schemas/feedback.test.d.ts +2 -0
  48. package/dist/schemas/feedback.test.d.ts.map +1 -0
  49. package/dist/schemas/feedback.test.js +234 -0
  50. package/dist/schemas/feedback.test.js.map +1 -0
  51. package/dist/schemas/index.d.ts +8 -0
  52. package/dist/schemas/index.d.ts.map +1 -0
  53. package/dist/schemas/index.js +8 -0
  54. package/dist/schemas/index.js.map +1 -0
  55. package/dist/schemas/project-context.d.ts +116 -0
  56. package/dist/schemas/project-context.d.ts.map +1 -0
  57. package/dist/schemas/project-context.js +25 -0
  58. package/dist/schemas/project-context.js.map +1 -0
  59. package/dist/schemas/requirement.d.ts +242 -0
  60. package/dist/schemas/requirement.d.ts.map +1 -0
  61. package/dist/schemas/requirement.js +52 -0
  62. package/dist/schemas/requirement.js.map +1 -0
  63. package/dist/schemas/requirement.test.d.ts +2 -0
  64. package/dist/schemas/requirement.test.d.ts.map +1 -0
  65. package/dist/schemas/requirement.test.js +38 -0
  66. package/dist/schemas/requirement.test.js.map +1 -0
  67. package/dist/schemas/specification.d.ts +217 -0
  68. package/dist/schemas/specification.d.ts.map +1 -0
  69. package/dist/schemas/specification.js +32 -0
  70. package/dist/schemas/specification.js.map +1 -0
  71. package/dist/schemas/specification.test.d.ts +2 -0
  72. package/dist/schemas/specification.test.d.ts.map +1 -0
  73. package/dist/schemas/specification.test.js +89 -0
  74. package/dist/schemas/specification.test.js.map +1 -0
  75. package/dist/schemas/task.d.ts +177 -0
  76. package/dist/schemas/task.d.ts.map +1 -0
  77. package/dist/schemas/task.js +29 -0
  78. package/dist/schemas/task.js.map +1 -0
  79. package/dist/schemas/task.test.d.ts +2 -0
  80. package/dist/schemas/task.test.d.ts.map +1 -0
  81. package/dist/schemas/task.test.js +203 -0
  82. package/dist/schemas/task.test.js.map +1 -0
  83. package/dist/schemas/validation.d.ts +174 -0
  84. package/dist/schemas/validation.d.ts.map +1 -0
  85. package/dist/schemas/validation.js +31 -0
  86. package/dist/schemas/validation.js.map +1 -0
  87. package/dist/utils/zod-error-formatter.d.ts +25 -0
  88. package/dist/utils/zod-error-formatter.d.ts.map +1 -0
  89. package/dist/utils/zod-error-formatter.js +115 -0
  90. package/dist/utils/zod-error-formatter.js.map +1 -0
  91. package/dist/utils/zod-error-formatter.test.d.ts +2 -0
  92. package/dist/utils/zod-error-formatter.test.d.ts.map +1 -0
  93. package/dist/utils/zod-error-formatter.test.js +314 -0
  94. package/dist/utils/zod-error-formatter.test.js.map +1 -0
  95. package/dist/validation/ambiguous-phrases.d.ts +11 -0
  96. package/dist/validation/ambiguous-phrases.d.ts.map +1 -0
  97. package/dist/validation/ambiguous-phrases.js +56 -0
  98. package/dist/validation/ambiguous-phrases.js.map +1 -0
  99. package/dist/validation/smart-scoring.d.ts +15 -0
  100. package/dist/validation/smart-scoring.d.ts.map +1 -0
  101. package/dist/validation/smart-scoring.js +225 -0
  102. package/dist/validation/smart-scoring.js.map +1 -0
  103. package/dist/validation/smart-scoring.test.d.ts +2 -0
  104. package/dist/validation/smart-scoring.test.d.ts.map +1 -0
  105. package/dist/validation/smart-scoring.test.js +136 -0
  106. package/dist/validation/smart-scoring.test.js.map +1 -0
  107. package/package.json +40 -0
@@ -0,0 +1,203 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { TaskDefinitionSchema, TaskDefinitionFileSchema, TaskLinkedToSchema, TaskEntrySchema, TasksIndexSchema, } from "./task.js";
3
+ describe("TaskDefinitionSchema", () => {
4
+ describe("正常系", () => {
5
+ it("全フィールド指定で受け入れる", () => {
6
+ const task = {
7
+ title: "Implement feature X",
8
+ description: "Add new feature X with tests",
9
+ priority: "P1",
10
+ estimatedHours: 5,
11
+ dependencies: ["req-000001"],
12
+ };
13
+ const result = TaskDefinitionSchema.parse(task);
14
+ expect(result).toEqual(task);
15
+ });
16
+ it("priority省略時にP2をデフォルト値として設定する", () => {
17
+ const task = {
18
+ title: "Implement feature Y",
19
+ description: "Add new feature Y",
20
+ estimatedHours: 3,
21
+ dependencies: ["req-000002"],
22
+ };
23
+ const result = TaskDefinitionSchema.parse(task);
24
+ expect(result.priority).toBe("P2");
25
+ expect(result.title).toBe("Implement feature Y");
26
+ });
27
+ it("dependencies省略時に空配列をデフォルト値として設定する", () => {
28
+ const task = {
29
+ title: "Implement feature Z",
30
+ description: "Add new feature Z",
31
+ priority: "P0",
32
+ estimatedHours: 8,
33
+ };
34
+ const result = TaskDefinitionSchema.parse(task);
35
+ expect(result.dependencies).toEqual([]);
36
+ });
37
+ });
38
+ describe("異常系", () => {
39
+ it("title空文字で拒否する", () => {
40
+ const task = {
41
+ title: "",
42
+ description: "Some description",
43
+ estimatedHours: 5,
44
+ };
45
+ expect(() => TaskDefinitionSchema.parse(task)).toThrow();
46
+ });
47
+ it("description空文字で拒否する", () => {
48
+ const task = {
49
+ title: "Valid title",
50
+ description: "",
51
+ estimatedHours: 5,
52
+ };
53
+ expect(() => TaskDefinitionSchema.parse(task)).toThrow();
54
+ });
55
+ it("estimatedHours 0で拒否する", () => {
56
+ const task = {
57
+ title: "Valid title",
58
+ description: "Valid description",
59
+ estimatedHours: 0,
60
+ };
61
+ expect(() => TaskDefinitionSchema.parse(task)).toThrow();
62
+ });
63
+ it("estimatedHours負数で拒否する", () => {
64
+ const task = {
65
+ title: "Valid title",
66
+ description: "Valid description",
67
+ estimatedHours: -5,
68
+ };
69
+ expect(() => TaskDefinitionSchema.parse(task)).toThrow();
70
+ });
71
+ it("無効なpriorityで拒否する", () => {
72
+ const task = {
73
+ title: "Valid title",
74
+ description: "Valid description",
75
+ priority: "P4",
76
+ estimatedHours: 5,
77
+ };
78
+ expect(() => TaskDefinitionSchema.parse(task)).toThrow();
79
+ });
80
+ });
81
+ });
82
+ describe("TaskDefinitionFileSchema", () => {
83
+ describe("正常系", () => {
84
+ it("複数タスクを受け入れる", () => {
85
+ const file = {
86
+ tasks: [
87
+ {
88
+ title: "Task 1",
89
+ description: "First task",
90
+ priority: "P0",
91
+ estimatedHours: 3,
92
+ dependencies: [],
93
+ },
94
+ {
95
+ title: "Task 2",
96
+ description: "Second task",
97
+ priority: "P2",
98
+ estimatedHours: 5,
99
+ dependencies: ["req-000001"],
100
+ },
101
+ ],
102
+ };
103
+ const result = TaskDefinitionFileSchema.parse(file);
104
+ expect(result.tasks).toHaveLength(2);
105
+ expect(result.tasks[0].title).toBe("Task 1");
106
+ expect(result.tasks[1].title).toBe("Task 2");
107
+ });
108
+ });
109
+ describe("異常系", () => {
110
+ it("空配列で拒否する", () => {
111
+ const file = {
112
+ tasks: [],
113
+ };
114
+ expect(() => TaskDefinitionFileSchema.parse(file)).toThrow();
115
+ });
116
+ it("tasksフィールド欠落で拒否する", () => {
117
+ const file = {};
118
+ expect(() => TaskDefinitionFileSchema.parse(file)).toThrow();
119
+ });
120
+ });
121
+ });
122
+ describe("TaskLinkedToSchema", () => {
123
+ it("specifications配列を受け入れる", () => {
124
+ const result = TaskLinkedToSchema.parse({
125
+ specifications: ["spec-000001", "spec-000002"],
126
+ });
127
+ expect(result.specifications).toEqual(["spec-000001", "spec-000002"]);
128
+ });
129
+ it("specifications省略時に空配列をデフォルト値として設定する", () => {
130
+ const result = TaskLinkedToSchema.parse({});
131
+ expect(result.specifications).toEqual([]);
132
+ });
133
+ });
134
+ describe("TaskEntrySchema", () => {
135
+ const baseEntry = {
136
+ number: 101,
137
+ title: "Implement feature X",
138
+ url: "https://github.com/owner/repo/issues/101",
139
+ linkedTo: { specifications: ["spec-000001"] },
140
+ priority: "P1",
141
+ status: "open",
142
+ estimatedHours: 5,
143
+ syncedAt: "2026-02-10T10:00:00Z",
144
+ };
145
+ it("全フィールド指定で受け入れる", () => {
146
+ const result = TaskEntrySchema.parse(baseEntry);
147
+ expect(result.number).toBe(101);
148
+ expect(result.title).toBe("Implement feature X");
149
+ expect(result.linkedTo.specifications).toEqual(["spec-000001"]);
150
+ expect(result.status).toBe("open");
151
+ });
152
+ it("priority・estimatedHoursはオプション", () => {
153
+ const { priority: _priority, estimatedHours: _estimatedHours, ...minimal } = baseEntry;
154
+ const result = TaskEntrySchema.parse(minimal);
155
+ expect(result.priority).toBeUndefined();
156
+ expect(result.estimatedHours).toBeUndefined();
157
+ });
158
+ it("numberが0以下で拒否する", () => {
159
+ expect(() => TaskEntrySchema.parse({ ...baseEntry, number: 0 })).toThrow();
160
+ expect(() => TaskEntrySchema.parse({ ...baseEntry, number: -1 })).toThrow();
161
+ });
162
+ it("不正なURLで拒否する", () => {
163
+ expect(() => TaskEntrySchema.parse({ ...baseEntry, url: "not-a-url" })).toThrow();
164
+ });
165
+ it("不正なstatusで拒否する", () => {
166
+ expect(() => TaskEntrySchema.parse({ ...baseEntry, status: "in_progress" })).toThrow();
167
+ });
168
+ });
169
+ describe("TasksIndexSchema", () => {
170
+ it("タスク一覧を受け入れる", () => {
171
+ const index = {
172
+ title: "Project Tasks",
173
+ tasks: [
174
+ {
175
+ number: 101,
176
+ title: "Task 1",
177
+ url: "https://github.com/owner/repo/issues/101",
178
+ linkedTo: { specifications: ["spec-000001"] },
179
+ status: "open",
180
+ syncedAt: "2026-02-10T10:00:00Z",
181
+ },
182
+ ],
183
+ };
184
+ const result = TasksIndexSchema.parse(index);
185
+ expect(result.title).toBe("Project Tasks");
186
+ expect(result.tasks).toHaveLength(1);
187
+ });
188
+ it("空のタスク配列を受け入れる", () => {
189
+ const index = {
190
+ title: "Empty Project",
191
+ tasks: [],
192
+ };
193
+ const result = TasksIndexSchema.parse(index);
194
+ expect(result.tasks).toEqual([]);
195
+ });
196
+ it("titleが欠けている場合は拒否する", () => {
197
+ expect(() => TasksIndexSchema.parse({ tasks: [] })).toThrow();
198
+ });
199
+ it("title空文字で拒否する", () => {
200
+ expect(() => TasksIndexSchema.parse({ title: "", tasks: [] })).toThrow();
201
+ });
202
+ });
203
+ //# sourceMappingURL=task.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../src/schemas/task.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ import { z } from "zod";
2
+ export declare const ValidationSeveritySchema: z.ZodEnum<["error", "warning", "info"]>;
3
+ export type ValidationSeverity = z.infer<typeof ValidationSeveritySchema>;
4
+ export declare const ValidationIssueSchema: z.ZodObject<{
5
+ type: z.ZodString;
6
+ severity: z.ZodEnum<["error", "warning", "info"]>;
7
+ field: z.ZodString;
8
+ message: z.ZodString;
9
+ suggestion: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ type: string;
12
+ message: string;
13
+ severity: "error" | "warning" | "info";
14
+ field: string;
15
+ suggestion?: string | undefined;
16
+ }, {
17
+ type: string;
18
+ message: string;
19
+ severity: "error" | "warning" | "info";
20
+ field: string;
21
+ suggestion?: string | undefined;
22
+ }>;
23
+ export type ValidationIssue = z.infer<typeof ValidationIssueSchema>;
24
+ export declare const SmartScoreSchema: z.ZodObject<{
25
+ specific: z.ZodNumber;
26
+ measurable: z.ZodNumber;
27
+ achievable: z.ZodNumber;
28
+ relevant: z.ZodNumber;
29
+ timeBound: z.ZodNumber;
30
+ overall: z.ZodNumber;
31
+ }, "strip", z.ZodTypeAny, {
32
+ specific: number;
33
+ measurable: number;
34
+ achievable: number;
35
+ relevant: number;
36
+ timeBound: number;
37
+ overall: number;
38
+ }, {
39
+ specific: number;
40
+ measurable: number;
41
+ achievable: number;
42
+ relevant: number;
43
+ timeBound: number;
44
+ overall: number;
45
+ }>;
46
+ export type SmartScore = z.infer<typeof SmartScoreSchema>;
47
+ export declare const ValidationMetadataSchema: z.ZodObject<{
48
+ criteriaCount: z.ZodNumber;
49
+ hasDescription: z.ZodBoolean;
50
+ hasDependencyIssues: z.ZodBoolean;
51
+ validatedAt: z.ZodString;
52
+ }, "strip", z.ZodTypeAny, {
53
+ criteriaCount: number;
54
+ hasDescription: boolean;
55
+ hasDependencyIssues: boolean;
56
+ validatedAt: string;
57
+ }, {
58
+ criteriaCount: number;
59
+ hasDescription: boolean;
60
+ hasDependencyIssues: boolean;
61
+ validatedAt: string;
62
+ }>;
63
+ export type ValidationMetadata = z.infer<typeof ValidationMetadataSchema>;
64
+ export declare const ValidationResultSchema: z.ZodObject<{
65
+ id: z.ZodString;
66
+ valid: z.ZodBoolean;
67
+ issues: z.ZodArray<z.ZodObject<{
68
+ type: z.ZodString;
69
+ severity: z.ZodEnum<["error", "warning", "info"]>;
70
+ field: z.ZodString;
71
+ message: z.ZodString;
72
+ suggestion: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ type: string;
75
+ message: string;
76
+ severity: "error" | "warning" | "info";
77
+ field: string;
78
+ suggestion?: string | undefined;
79
+ }, {
80
+ type: string;
81
+ message: string;
82
+ severity: "error" | "warning" | "info";
83
+ field: string;
84
+ suggestion?: string | undefined;
85
+ }>, "many">;
86
+ smartScore: z.ZodObject<{
87
+ specific: z.ZodNumber;
88
+ measurable: z.ZodNumber;
89
+ achievable: z.ZodNumber;
90
+ relevant: z.ZodNumber;
91
+ timeBound: z.ZodNumber;
92
+ overall: z.ZodNumber;
93
+ }, "strip", z.ZodTypeAny, {
94
+ specific: number;
95
+ measurable: number;
96
+ achievable: number;
97
+ relevant: number;
98
+ timeBound: number;
99
+ overall: number;
100
+ }, {
101
+ specific: number;
102
+ measurable: number;
103
+ achievable: number;
104
+ relevant: number;
105
+ timeBound: number;
106
+ overall: number;
107
+ }>;
108
+ metadata: z.ZodObject<{
109
+ criteriaCount: z.ZodNumber;
110
+ hasDescription: z.ZodBoolean;
111
+ hasDependencyIssues: z.ZodBoolean;
112
+ validatedAt: z.ZodString;
113
+ }, "strip", z.ZodTypeAny, {
114
+ criteriaCount: number;
115
+ hasDescription: boolean;
116
+ hasDependencyIssues: boolean;
117
+ validatedAt: string;
118
+ }, {
119
+ criteriaCount: number;
120
+ hasDescription: boolean;
121
+ hasDependencyIssues: boolean;
122
+ validatedAt: string;
123
+ }>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ issues: {
126
+ type: string;
127
+ message: string;
128
+ severity: "error" | "warning" | "info";
129
+ field: string;
130
+ suggestion?: string | undefined;
131
+ }[];
132
+ valid: boolean;
133
+ id: string;
134
+ smartScore: {
135
+ specific: number;
136
+ measurable: number;
137
+ achievable: number;
138
+ relevant: number;
139
+ timeBound: number;
140
+ overall: number;
141
+ };
142
+ metadata: {
143
+ criteriaCount: number;
144
+ hasDescription: boolean;
145
+ hasDependencyIssues: boolean;
146
+ validatedAt: string;
147
+ };
148
+ }, {
149
+ issues: {
150
+ type: string;
151
+ message: string;
152
+ severity: "error" | "warning" | "info";
153
+ field: string;
154
+ suggestion?: string | undefined;
155
+ }[];
156
+ valid: boolean;
157
+ id: string;
158
+ smartScore: {
159
+ specific: number;
160
+ measurable: number;
161
+ achievable: number;
162
+ relevant: number;
163
+ timeBound: number;
164
+ overall: number;
165
+ };
166
+ metadata: {
167
+ criteriaCount: number;
168
+ hasDescription: boolean;
169
+ hasDependencyIssues: boolean;
170
+ validatedAt: string;
171
+ };
172
+ }>;
173
+ export type ValidationResult = z.infer<typeof ValidationResultSchema>;
174
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/schemas/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB,yCAAuC,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ export const ValidationSeveritySchema = z.enum(["error", "warning", "info"]);
3
+ export const ValidationIssueSchema = z.object({
4
+ type: z.string(),
5
+ severity: ValidationSeveritySchema,
6
+ field: z.string(),
7
+ message: z.string(),
8
+ suggestion: z.string().optional(),
9
+ });
10
+ export const SmartScoreSchema = z.object({
11
+ specific: z.number().min(0).max(1),
12
+ measurable: z.number().min(0).max(1),
13
+ achievable: z.number().min(0).max(1),
14
+ relevant: z.number().min(0).max(1),
15
+ timeBound: z.number().min(0).max(1),
16
+ overall: z.number().min(0).max(1),
17
+ });
18
+ export const ValidationMetadataSchema = z.object({
19
+ criteriaCount: z.number(),
20
+ hasDescription: z.boolean(),
21
+ hasDependencyIssues: z.boolean(),
22
+ validatedAt: z.string(),
23
+ });
24
+ export const ValidationResultSchema = z.object({
25
+ id: z.string(),
26
+ valid: z.boolean(),
27
+ issues: z.array(ValidationIssueSchema),
28
+ smartScore: SmartScoreSchema,
29
+ metadata: ValidationMetadataSchema,
30
+ });
31
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/schemas/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAG7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,wBAAwB;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAClC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACtC,UAAU,EAAE,gBAAgB;IAC5B,QAAQ,EAAE,wBAAwB;CACnC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { ZodError, type ZodIssue } from "zod";
2
+ export interface FormatOptions {
3
+ prefix?: string;
4
+ separator?: string;
5
+ }
6
+ /**
7
+ * パスをフォーマットする
8
+ * @param path - パス配列
9
+ * @returns フォーマットされたパス文字列
10
+ */
11
+ export declare function formatPath(path: (string | number)[]): string;
12
+ /**
13
+ * ZodIssueをフォーマットする
14
+ * @param issue - ZodIssue
15
+ * @returns フォーマットされたエラーメッセージ
16
+ */
17
+ export declare function formatZodIssue(issue: ZodIssue): string;
18
+ /**
19
+ * ZodErrorをフォーマットする
20
+ * @param error - ZodError
21
+ * @param options - フォーマットオプション
22
+ * @returns フォーマットされたエラーメッセージ
23
+ */
24
+ export declare function formatZodError(error: ZodError, options?: FormatOptions): string;
25
+ //# sourceMappingURL=zod-error-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-error-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/zod-error-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAuB5D;AAYD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAwDtD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAc/E"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * パスをフォーマットする
3
+ * @param path - パス配列
4
+ * @returns フォーマットされたパス文字列
5
+ */
6
+ export function formatPath(path) {
7
+ if (path.length === 0) {
8
+ return "(root)";
9
+ }
10
+ let result = "";
11
+ for (let i = 0; i < path.length; i++) {
12
+ const segment = path[i];
13
+ if (typeof segment === "number") {
14
+ // 配列インデックス
15
+ result += `[${segment}]`;
16
+ }
17
+ else {
18
+ // プロパティ名
19
+ if (i === 0) {
20
+ result = segment;
21
+ }
22
+ else {
23
+ result += `.${segment}`;
24
+ }
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ const TYPE_NAMES_JA = {
30
+ string: "文字列",
31
+ number: "数値",
32
+ boolean: "真偽値",
33
+ object: "オブジェクト",
34
+ array: "配列",
35
+ null: "null",
36
+ undefined: "未定義",
37
+ };
38
+ /**
39
+ * ZodIssueをフォーマットする
40
+ * @param issue - ZodIssue
41
+ * @returns フォーマットされたエラーメッセージ
42
+ */
43
+ export function formatZodIssue(issue) {
44
+ const path = formatPath(issue.path);
45
+ switch (issue.code) {
46
+ case "invalid_type": {
47
+ const expected = TYPE_NAMES_JA[issue.expected] || issue.expected;
48
+ const received = TYPE_NAMES_JA[issue.received] || issue.received;
49
+ return `${path}: ${expected}が必要です(実際の型: ${received})`;
50
+ }
51
+ case "invalid_enum_value": {
52
+ const options = issue.options.map((o) => `'${o}'`).join(", ");
53
+ return `${path}: 不正な値 '${issue.received}'(期待値: ${options})`;
54
+ }
55
+ case "too_small": {
56
+ const minimum = issue.minimum;
57
+ if (issue.type === "string") {
58
+ return `${path}: ${minimum}文字以上の文字列が必要です`;
59
+ }
60
+ else if (issue.type === "number") {
61
+ if (issue.exact === false && minimum === 0 && !issue.inclusive) {
62
+ return `${path}: 正の数値が必要です`;
63
+ }
64
+ return `${path}: ${minimum}以上の数値が必要です`;
65
+ }
66
+ else if (issue.type === "array") {
67
+ return `${path}: ${minimum}個以上の要素が必要です`;
68
+ }
69
+ return `${path}: ${issue.message}`;
70
+ }
71
+ case "too_big": {
72
+ const maximum = issue.maximum;
73
+ if (issue.type === "string") {
74
+ return `${path}: ${maximum}文字以下の文字列が必要です`;
75
+ }
76
+ else if (issue.type === "number") {
77
+ return `${path}: ${maximum}以下の数値が必要です`;
78
+ }
79
+ else if (issue.type === "array") {
80
+ return `${path}: ${maximum}個以下の要素が必要です`;
81
+ }
82
+ return `${path}: ${issue.message}`;
83
+ }
84
+ case "invalid_string": {
85
+ return `${path}: 形式が不正です`;
86
+ }
87
+ case "unrecognized_keys": {
88
+ const keys = issue.keys.join(", ");
89
+ return `${path}: 不明なフィールド '${keys}'`;
90
+ }
91
+ default: {
92
+ // Fallback for other error codes
93
+ return `${path}: ${issue.message}`;
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * ZodErrorをフォーマットする
99
+ * @param error - ZodError
100
+ * @param options - フォーマットオプション
101
+ * @returns フォーマットされたエラーメッセージ
102
+ */
103
+ export function formatZodError(error, options) {
104
+ const prefix = options?.prefix ?? "- ";
105
+ const separator = options?.separator ?? "\n";
106
+ if (error.issues.length === 0) {
107
+ return "";
108
+ }
109
+ const formattedIssues = error.issues.map((issue) => {
110
+ const message = formatZodIssue(issue);
111
+ return `${prefix}${message}`;
112
+ });
113
+ return formattedIssues.join(separator);
114
+ }
115
+ //# sourceMappingURL=zod-error-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-error-formatter.js","sourceRoot":"","sources":["../../src/utils/zod-error-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=zod-error-formatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-error-formatter.test.d.ts","sourceRoot":"","sources":["../../src/utils/zod-error-formatter.test.ts"],"names":[],"mappings":""}