@aibrains/shared-types 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.
- package/README.md +170 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/mappers/edfi/calendar.mapper.d.ts +158 -0
- package/dist/mappers/edfi/calendar.mapper.d.ts.map +1 -0
- package/dist/mappers/edfi/calendar.mapper.js +235 -0
- package/dist/mappers/edfi/calendar.mapper.js.map +1 -0
- package/dist/mappers/edfi/credential.mapper.d.ts +50 -0
- package/dist/mappers/edfi/credential.mapper.d.ts.map +1 -0
- package/dist/mappers/edfi/credential.mapper.js +123 -0
- package/dist/mappers/edfi/credential.mapper.js.map +1 -0
- package/dist/mappers/edfi/index.d.ts +10 -0
- package/dist/mappers/edfi/index.d.ts.map +1 -0
- package/dist/mappers/edfi/index.js +26 -0
- package/dist/mappers/edfi/index.js.map +1 -0
- package/dist/mappers/edfi/staff.mapper.d.ts +96 -0
- package/dist/mappers/edfi/staff.mapper.d.ts.map +1 -0
- package/dist/mappers/edfi/staff.mapper.js +138 -0
- package/dist/mappers/edfi/staff.mapper.js.map +1 -0
- package/dist/mappers/index.d.ts +7 -0
- package/dist/mappers/index.d.ts.map +1 -0
- package/dist/mappers/index.js +23 -0
- package/dist/mappers/index.js.map +1 -0
- package/dist/schemas/academics/assignment.schema.d.ts +1463 -0
- package/dist/schemas/academics/assignment.schema.d.ts.map +1 -0
- package/dist/schemas/academics/assignment.schema.js +195 -0
- package/dist/schemas/academics/assignment.schema.js.map +1 -0
- package/dist/schemas/academics/attendance.schema.d.ts +762 -0
- package/dist/schemas/academics/attendance.schema.d.ts.map +1 -0
- package/dist/schemas/academics/attendance.schema.js +250 -0
- package/dist/schemas/academics/attendance.schema.js.map +1 -0
- package/dist/schemas/academics/classroom.schema.d.ts +742 -0
- package/dist/schemas/academics/classroom.schema.d.ts.map +1 -0
- package/dist/schemas/academics/classroom.schema.js +164 -0
- package/dist/schemas/academics/classroom.schema.js.map +1 -0
- package/dist/schemas/academics/course-section.schema.d.ts +388 -0
- package/dist/schemas/academics/course-section.schema.d.ts.map +1 -0
- package/dist/schemas/academics/course-section.schema.js +128 -0
- package/dist/schemas/academics/course-section.schema.js.map +1 -0
- package/dist/schemas/academics/course.schema.d.ts +778 -0
- package/dist/schemas/academics/course.schema.d.ts.map +1 -0
- package/dist/schemas/academics/course.schema.js +207 -0
- package/dist/schemas/academics/course.schema.js.map +1 -0
- package/dist/schemas/academics/grade.schema.d.ts +848 -0
- package/dist/schemas/academics/grade.schema.d.ts.map +1 -0
- package/dist/schemas/academics/grade.schema.js +251 -0
- package/dist/schemas/academics/grade.schema.js.map +1 -0
- package/dist/schemas/academics/index.d.ts +13 -0
- package/dist/schemas/academics/index.d.ts.map +1 -0
- package/dist/schemas/academics/index.js +29 -0
- package/dist/schemas/academics/index.js.map +1 -0
- package/dist/schemas/academics/student.schema.d.ts +2891 -0
- package/dist/schemas/academics/student.schema.d.ts.map +1 -0
- package/dist/schemas/academics/student.schema.js +249 -0
- package/dist/schemas/academics/student.schema.js.map +1 -0
- package/dist/schemas/common.d.ts +183 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +126 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/enrollment/enrollment.schema.d.ts +2799 -0
- package/dist/schemas/enrollment/enrollment.schema.d.ts.map +1 -0
- package/dist/schemas/enrollment/enrollment.schema.js +435 -0
- package/dist/schemas/enrollment/enrollment.schema.js.map +1 -0
- package/dist/schemas/enrollment/index.d.ts +7 -0
- package/dist/schemas/enrollment/index.d.ts.map +1 -0
- package/dist/schemas/enrollment/index.js +23 -0
- package/dist/schemas/enrollment/index.js.map +1 -0
- package/dist/schemas/identity/academic-year.schema.d.ts +546 -0
- package/dist/schemas/identity/academic-year.schema.d.ts.map +1 -0
- package/dist/schemas/identity/academic-year.schema.js +137 -0
- package/dist/schemas/identity/academic-year.schema.js.map +1 -0
- package/dist/schemas/identity/auth.schema.d.ts +670 -0
- package/dist/schemas/identity/auth.schema.d.ts.map +1 -0
- package/dist/schemas/identity/auth.schema.js +126 -0
- package/dist/schemas/identity/auth.schema.js.map +1 -0
- package/dist/schemas/identity/bell-schedule.schema.d.ts +630 -0
- package/dist/schemas/identity/bell-schedule.schema.d.ts.map +1 -0
- package/dist/schemas/identity/bell-schedule.schema.js +143 -0
- package/dist/schemas/identity/bell-schedule.schema.js.map +1 -0
- package/dist/schemas/identity/calendar-date.schema.d.ts +830 -0
- package/dist/schemas/identity/calendar-date.schema.d.ts.map +1 -0
- package/dist/schemas/identity/calendar-date.schema.js +208 -0
- package/dist/schemas/identity/calendar-date.schema.js.map +1 -0
- package/dist/schemas/identity/credential.schema.d.ts +472 -0
- package/dist/schemas/identity/credential.schema.d.ts.map +1 -0
- package/dist/schemas/identity/credential.schema.js +200 -0
- package/dist/schemas/identity/credential.schema.js.map +1 -0
- package/dist/schemas/identity/department.schema.d.ts +567 -0
- package/dist/schemas/identity/department.schema.d.ts.map +1 -0
- package/dist/schemas/identity/department.schema.js +113 -0
- package/dist/schemas/identity/department.schema.js.map +1 -0
- package/dist/schemas/identity/index.d.ts +21 -0
- package/dist/schemas/identity/index.d.ts.map +1 -0
- package/dist/schemas/identity/index.js +39 -0
- package/dist/schemas/identity/index.js.map +1 -0
- package/dist/schemas/identity/leave.schema.d.ts +725 -0
- package/dist/schemas/identity/leave.schema.d.ts.map +1 -0
- package/dist/schemas/identity/leave.schema.js +204 -0
- package/dist/schemas/identity/leave.schema.js.map +1 -0
- package/dist/schemas/identity/role.schema.d.ts +356 -0
- package/dist/schemas/identity/role.schema.d.ts.map +1 -0
- package/dist/schemas/identity/role.schema.js +124 -0
- package/dist/schemas/identity/role.schema.js.map +1 -0
- package/dist/schemas/identity/school-year.schema.d.ts +303 -0
- package/dist/schemas/identity/school-year.schema.d.ts.map +1 -0
- package/dist/schemas/identity/school-year.schema.js +59 -0
- package/dist/schemas/identity/school-year.schema.js.map +1 -0
- package/dist/schemas/identity/school.schema.d.ts +844 -0
- package/dist/schemas/identity/school.schema.d.ts.map +1 -0
- package/dist/schemas/identity/school.schema.js +139 -0
- package/dist/schemas/identity/school.schema.js.map +1 -0
- package/dist/schemas/identity/security.schema.d.ts +422 -0
- package/dist/schemas/identity/security.schema.d.ts.map +1 -0
- package/dist/schemas/identity/security.schema.js +151 -0
- package/dist/schemas/identity/security.schema.js.map +1 -0
- package/dist/schemas/identity/session.schema.d.ts +193 -0
- package/dist/schemas/identity/session.schema.d.ts.map +1 -0
- package/dist/schemas/identity/session.schema.js +59 -0
- package/dist/schemas/identity/session.schema.js.map +1 -0
- package/dist/schemas/identity/staff.schema.d.ts +1037 -0
- package/dist/schemas/identity/staff.schema.d.ts.map +1 -0
- package/dist/schemas/identity/staff.schema.js +251 -0
- package/dist/schemas/identity/staff.schema.js.map +1 -0
- package/dist/schemas/identity/tenant.schema.d.ts +313 -0
- package/dist/schemas/identity/tenant.schema.d.ts.map +1 -0
- package/dist/schemas/identity/tenant.schema.js +81 -0
- package/dist/schemas/identity/tenant.schema.js.map +1 -0
- package/dist/schemas/identity/user.schema.d.ts +921 -0
- package/dist/schemas/identity/user.schema.d.ts.map +1 -0
- package/dist/schemas/identity/user.schema.js +201 -0
- package/dist/schemas/identity/user.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +10 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +26 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/validators/academic-year.d.ts +90 -0
- package/dist/validators/academic-year.d.ts.map +1 -0
- package/dist/validators/academic-year.js +190 -0
- package/dist/validators/academic-year.js.map +1 -0
- package/dist/validators/date-range.d.ts +142 -0
- package/dist/validators/date-range.d.ts.map +1 -0
- package/dist/validators/date-range.js +170 -0
- package/dist/validators/date-range.js.map +1 -0
- package/dist/validators/grade-level.d.ts +80 -0
- package/dist/validators/grade-level.d.ts.map +1 -0
- package/dist/validators/grade-level.js +157 -0
- package/dist/validators/grade-level.js.map +1 -0
- package/dist/validators/index.d.ts +10 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +26 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/password.d.ts +60 -0
- package/dist/validators/password.d.ts.map +1 -0
- package/dist/validators/password.js +81 -0
- package/dist/validators/password.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date Range Validators
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas and utilities for date validation.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export { dateSchema } from '../schemas/common';
|
|
8
|
+
/**
|
|
9
|
+
* ISO 8601 datetime string (re-export from common as alias)
|
|
10
|
+
*/
|
|
11
|
+
export declare const datetimeSchema: z.ZodString;
|
|
12
|
+
export declare const dateRangeSchema: z.ZodEffects<z.ZodObject<{
|
|
13
|
+
startDate: z.ZodEffects<z.ZodString, string, string>;
|
|
14
|
+
endDate: z.ZodEffects<z.ZodString, string, string>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
startDate: string;
|
|
17
|
+
endDate: string;
|
|
18
|
+
}, {
|
|
19
|
+
startDate: string;
|
|
20
|
+
endDate: string;
|
|
21
|
+
}>, {
|
|
22
|
+
startDate: string;
|
|
23
|
+
endDate: string;
|
|
24
|
+
}, {
|
|
25
|
+
startDate: string;
|
|
26
|
+
endDate: string;
|
|
27
|
+
}>;
|
|
28
|
+
export type DateRange = z.infer<typeof dateRangeSchema>;
|
|
29
|
+
/**
|
|
30
|
+
* Academic year must be between 120 and 365 days
|
|
31
|
+
*/
|
|
32
|
+
export declare const academicYearDateRangeSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
33
|
+
startDate: z.ZodEffects<z.ZodString, string, string>;
|
|
34
|
+
endDate: z.ZodEffects<z.ZodString, string, string>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
startDate: string;
|
|
37
|
+
endDate: string;
|
|
38
|
+
}, {
|
|
39
|
+
startDate: string;
|
|
40
|
+
endDate: string;
|
|
41
|
+
}>, {
|
|
42
|
+
startDate: string;
|
|
43
|
+
endDate: string;
|
|
44
|
+
}, {
|
|
45
|
+
startDate: string;
|
|
46
|
+
endDate: string;
|
|
47
|
+
}>, {
|
|
48
|
+
startDate: string;
|
|
49
|
+
endDate: string;
|
|
50
|
+
}, {
|
|
51
|
+
startDate: string;
|
|
52
|
+
endDate: string;
|
|
53
|
+
}>;
|
|
54
|
+
export type AcademicYearDateRange = z.infer<typeof academicYearDateRangeSchema>;
|
|
55
|
+
/**
|
|
56
|
+
* Grading period must be between 7 and 180 days
|
|
57
|
+
*/
|
|
58
|
+
export declare const gradingPeriodDateRangeSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
|
59
|
+
startDate: z.ZodEffects<z.ZodString, string, string>;
|
|
60
|
+
endDate: z.ZodEffects<z.ZodString, string, string>;
|
|
61
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
|
+
startDate: string;
|
|
63
|
+
endDate: string;
|
|
64
|
+
}, {
|
|
65
|
+
startDate: string;
|
|
66
|
+
endDate: string;
|
|
67
|
+
}>, {
|
|
68
|
+
startDate: string;
|
|
69
|
+
endDate: string;
|
|
70
|
+
}, {
|
|
71
|
+
startDate: string;
|
|
72
|
+
endDate: string;
|
|
73
|
+
}>, {
|
|
74
|
+
startDate: string;
|
|
75
|
+
endDate: string;
|
|
76
|
+
}, {
|
|
77
|
+
startDate: string;
|
|
78
|
+
endDate: string;
|
|
79
|
+
}>;
|
|
80
|
+
export type GradingPeriodDateRange = z.infer<typeof gradingPeriodDateRangeSchema>;
|
|
81
|
+
/**
|
|
82
|
+
* Parse a YYYY-MM-DD string to a Date object
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseDate(dateString: string): Date;
|
|
85
|
+
/**
|
|
86
|
+
* Format a Date object to YYYY-MM-DD string
|
|
87
|
+
*/
|
|
88
|
+
export declare function formatDate(date: Date): string;
|
|
89
|
+
/**
|
|
90
|
+
* Calculate the number of days between two dates
|
|
91
|
+
*/
|
|
92
|
+
export declare function daysBetween(startDate: string, endDate: string): number;
|
|
93
|
+
/**
|
|
94
|
+
* Check if a date falls within a date range (inclusive)
|
|
95
|
+
*/
|
|
96
|
+
export declare function isDateInRange(date: string, range: {
|
|
97
|
+
startDate: string;
|
|
98
|
+
endDate: string;
|
|
99
|
+
}): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Check if two date ranges overlap
|
|
102
|
+
*/
|
|
103
|
+
export declare function doRangesOverlap(range1: {
|
|
104
|
+
startDate: string;
|
|
105
|
+
endDate: string;
|
|
106
|
+
}, range2: {
|
|
107
|
+
startDate: string;
|
|
108
|
+
endDate: string;
|
|
109
|
+
}): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Get today's date in YYYY-MM-DD format
|
|
112
|
+
*/
|
|
113
|
+
export declare function getTodayString(): string;
|
|
114
|
+
/**
|
|
115
|
+
* Check if a date is in the past
|
|
116
|
+
*/
|
|
117
|
+
export declare function isDateInPast(dateString: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Check if a date is in the future
|
|
120
|
+
*/
|
|
121
|
+
export declare function isDateInFuture(dateString: string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Add days to a date string
|
|
124
|
+
*/
|
|
125
|
+
export declare function addDays(dateString: string, days: number): string;
|
|
126
|
+
/**
|
|
127
|
+
* Get the start and end dates for an academic year given a start month and year
|
|
128
|
+
*/
|
|
129
|
+
export declare function getAcademicYearDates(startYear: number, startMonth?: number, // August by default
|
|
130
|
+
durationMonths?: number): {
|
|
131
|
+
startDate: string;
|
|
132
|
+
endDate: string;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Generate grading period dates for an academic year
|
|
136
|
+
*/
|
|
137
|
+
export declare function generateGradingPeriods(academicYearStart: string, academicYearEnd: string, periodsCount: number): Array<{
|
|
138
|
+
startDate: string;
|
|
139
|
+
endDate: string;
|
|
140
|
+
periodNumber: number;
|
|
141
|
+
}>;
|
|
142
|
+
//# sourceMappingURL=date-range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range.d.ts","sourceRoot":"","sources":["../../src/validators/date-range.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,cAAc,aAAgB,CAAC;AAM5C,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAM3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAMxD;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAMhF;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;EAQxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAMlF;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAMT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC9C,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAU,EAAE,oBAAoB;AAC5C,cAAc,GAAE,MAAW,GAC1B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBrE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Date Range Validators
|
|
4
|
+
*
|
|
5
|
+
* Zod schemas and utilities for date validation.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.gradingPeriodDateRangeSchema = exports.academicYearDateRangeSchema = exports.dateRangeSchema = exports.datetimeSchema = exports.dateSchema = void 0;
|
|
9
|
+
exports.parseDate = parseDate;
|
|
10
|
+
exports.formatDate = formatDate;
|
|
11
|
+
exports.daysBetween = daysBetween;
|
|
12
|
+
exports.isDateInRange = isDateInRange;
|
|
13
|
+
exports.doRangesOverlap = doRangesOverlap;
|
|
14
|
+
exports.getTodayString = getTodayString;
|
|
15
|
+
exports.isDateInPast = isDateInPast;
|
|
16
|
+
exports.isDateInFuture = isDateInFuture;
|
|
17
|
+
exports.addDays = addDays;
|
|
18
|
+
exports.getAcademicYearDates = getAcademicYearDates;
|
|
19
|
+
exports.generateGradingPeriods = generateGradingPeriods;
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const common_1 = require("../schemas/common");
|
|
22
|
+
// Re-export dateSchema from common for convenience
|
|
23
|
+
var common_2 = require("../schemas/common");
|
|
24
|
+
Object.defineProperty(exports, "dateSchema", { enumerable: true, get: function () { return common_2.dateSchema; } });
|
|
25
|
+
/**
|
|
26
|
+
* ISO 8601 datetime string (re-export from common as alias)
|
|
27
|
+
*/
|
|
28
|
+
exports.datetimeSchema = common_1.isoDateSchema;
|
|
29
|
+
// ============================================
|
|
30
|
+
// Date Range Schema
|
|
31
|
+
// ============================================
|
|
32
|
+
exports.dateRangeSchema = zod_1.z.object({
|
|
33
|
+
startDate: common_1.dateSchema,
|
|
34
|
+
endDate: common_1.dateSchema,
|
|
35
|
+
}).refine(data => new Date(data.endDate) >= new Date(data.startDate), { message: 'End date must be on or after start date' });
|
|
36
|
+
// ============================================
|
|
37
|
+
// Academic Year Date Range Schema
|
|
38
|
+
// ============================================
|
|
39
|
+
/**
|
|
40
|
+
* Academic year must be between 120 and 365 days
|
|
41
|
+
*/
|
|
42
|
+
exports.academicYearDateRangeSchema = exports.dateRangeSchema.refine(data => {
|
|
43
|
+
const start = new Date(data.startDate);
|
|
44
|
+
const end = new Date(data.endDate);
|
|
45
|
+
const days = Math.round((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
|
|
46
|
+
return days >= 120 && days <= 365;
|
|
47
|
+
}, { message: 'Academic year must be between 120 and 365 days' });
|
|
48
|
+
// ============================================
|
|
49
|
+
// Grading Period Date Range Schema
|
|
50
|
+
// ============================================
|
|
51
|
+
/**
|
|
52
|
+
* Grading period must be between 7 and 180 days
|
|
53
|
+
*/
|
|
54
|
+
exports.gradingPeriodDateRangeSchema = exports.dateRangeSchema.refine(data => {
|
|
55
|
+
const start = new Date(data.startDate);
|
|
56
|
+
const end = new Date(data.endDate);
|
|
57
|
+
const days = Math.round((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
|
|
58
|
+
return days >= 7 && days <= 180;
|
|
59
|
+
}, { message: 'Grading period must be between 7 and 180 days' });
|
|
60
|
+
// ============================================
|
|
61
|
+
// Utility Functions
|
|
62
|
+
// ============================================
|
|
63
|
+
/**
|
|
64
|
+
* Parse a YYYY-MM-DD string to a Date object
|
|
65
|
+
*/
|
|
66
|
+
function parseDate(dateString) {
|
|
67
|
+
return new Date(dateString + 'T00:00:00.000Z');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Format a Date object to YYYY-MM-DD string
|
|
71
|
+
*/
|
|
72
|
+
function formatDate(date) {
|
|
73
|
+
return date.toISOString().split('T')[0];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Calculate the number of days between two dates
|
|
77
|
+
*/
|
|
78
|
+
function daysBetween(startDate, endDate) {
|
|
79
|
+
const start = parseDate(startDate);
|
|
80
|
+
const end = parseDate(endDate);
|
|
81
|
+
return Math.round((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a date falls within a date range (inclusive)
|
|
85
|
+
*/
|
|
86
|
+
function isDateInRange(date, range) {
|
|
87
|
+
const checkDate = parseDate(date);
|
|
88
|
+
const start = parseDate(range.startDate);
|
|
89
|
+
const end = parseDate(range.endDate);
|
|
90
|
+
return checkDate >= start && checkDate <= end;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if two date ranges overlap
|
|
94
|
+
*/
|
|
95
|
+
function doRangesOverlap(range1, range2) {
|
|
96
|
+
const start1 = parseDate(range1.startDate);
|
|
97
|
+
const end1 = parseDate(range1.endDate);
|
|
98
|
+
const start2 = parseDate(range2.startDate);
|
|
99
|
+
const end2 = parseDate(range2.endDate);
|
|
100
|
+
return start1 <= end2 && end1 >= start2;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get today's date in YYYY-MM-DD format
|
|
104
|
+
*/
|
|
105
|
+
function getTodayString() {
|
|
106
|
+
return formatDate(new Date());
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if a date is in the past
|
|
110
|
+
*/
|
|
111
|
+
function isDateInPast(dateString) {
|
|
112
|
+
const date = parseDate(dateString);
|
|
113
|
+
const today = new Date();
|
|
114
|
+
today.setHours(0, 0, 0, 0);
|
|
115
|
+
return date < today;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if a date is in the future
|
|
119
|
+
*/
|
|
120
|
+
function isDateInFuture(dateString) {
|
|
121
|
+
const date = parseDate(dateString);
|
|
122
|
+
const today = new Date();
|
|
123
|
+
today.setHours(0, 0, 0, 0);
|
|
124
|
+
return date > today;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Add days to a date string
|
|
128
|
+
*/
|
|
129
|
+
function addDays(dateString, days) {
|
|
130
|
+
const date = parseDate(dateString);
|
|
131
|
+
date.setDate(date.getDate() + days);
|
|
132
|
+
return formatDate(date);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the start and end dates for an academic year given a start month and year
|
|
136
|
+
*/
|
|
137
|
+
function getAcademicYearDates(startYear, startMonth = 8, // August by default
|
|
138
|
+
durationMonths = 10) {
|
|
139
|
+
const startDate = new Date(startYear, startMonth - 1, 1);
|
|
140
|
+
const endDate = new Date(startYear, startMonth - 1 + durationMonths, 0);
|
|
141
|
+
return {
|
|
142
|
+
startDate: formatDate(startDate),
|
|
143
|
+
endDate: formatDate(endDate),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Generate grading period dates for an academic year
|
|
148
|
+
*/
|
|
149
|
+
function generateGradingPeriods(academicYearStart, academicYearEnd, periodsCount) {
|
|
150
|
+
const totalDays = daysBetween(academicYearStart, academicYearEnd);
|
|
151
|
+
const daysPerPeriod = Math.floor(totalDays / periodsCount);
|
|
152
|
+
const periods = [];
|
|
153
|
+
let currentStart = academicYearStart;
|
|
154
|
+
for (let i = 0; i < periodsCount; i++) {
|
|
155
|
+
const isLastPeriod = i === periodsCount - 1;
|
|
156
|
+
const endDate = isLastPeriod
|
|
157
|
+
? academicYearEnd
|
|
158
|
+
: addDays(currentStart, daysPerPeriod - 1);
|
|
159
|
+
periods.push({
|
|
160
|
+
startDate: currentStart,
|
|
161
|
+
endDate: endDate,
|
|
162
|
+
periodNumber: i + 1,
|
|
163
|
+
});
|
|
164
|
+
if (!isLastPeriod) {
|
|
165
|
+
currentStart = addDays(endDate, 1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return periods;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=date-range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range.js","sourceRoot":"","sources":["../../src/validators/date-range.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grade Level Validators
|
|
3
|
+
*
|
|
4
|
+
* Constants and validation utilities for grade levels.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export declare const GRADE_LEVELS: readonly ["PK", "K", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
|
|
8
|
+
export type GradeLevel = typeof GRADE_LEVELS[number];
|
|
9
|
+
export declare const GRADE_LEVEL_NAMES: Record<GradeLevel, string>;
|
|
10
|
+
export declare const ELEMENTARY_GRADES: GradeLevel[];
|
|
11
|
+
export declare const MIDDLE_GRADES: GradeLevel[];
|
|
12
|
+
export declare const HIGH_GRADES: GradeLevel[];
|
|
13
|
+
export type GradeLevelGroup = 'elementary' | 'middle' | 'high';
|
|
14
|
+
/**
|
|
15
|
+
* Grade level enum schema (PK, K, 1-12)
|
|
16
|
+
* Note: Named with Enum suffix to avoid conflict with identity/department's gradeLevelConfigSchema
|
|
17
|
+
*/
|
|
18
|
+
export declare const gradeLevelEnumSchema: z.ZodEnum<["PK", "K", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]>;
|
|
19
|
+
/**
|
|
20
|
+
* Grade level range validator schema
|
|
21
|
+
* Used to validate that start grade is before or equal to end grade
|
|
22
|
+
*/
|
|
23
|
+
export declare const gradeLevelRangeValidatorSchema: z.ZodEffects<z.ZodObject<{
|
|
24
|
+
start: z.ZodEnum<["PK", "K", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]>;
|
|
25
|
+
end: z.ZodEnum<["PK", "K", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
start: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
28
|
+
end: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
29
|
+
}, {
|
|
30
|
+
start: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
31
|
+
end: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
32
|
+
}>, {
|
|
33
|
+
start: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
34
|
+
end: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
35
|
+
}, {
|
|
36
|
+
start: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
37
|
+
end: "PK" | "K" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12";
|
|
38
|
+
}>;
|
|
39
|
+
export type GradeLevelRange = z.infer<typeof gradeLevelRangeValidatorSchema>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the numeric index of a grade level for comparison
|
|
42
|
+
*/
|
|
43
|
+
export declare function getGradeLevelIndex(grade: GradeLevel): number;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a string is a valid grade level
|
|
46
|
+
*/
|
|
47
|
+
export declare function isValidGradeLevel(grade: string): grade is GradeLevel;
|
|
48
|
+
/**
|
|
49
|
+
* Get the display name for a grade level
|
|
50
|
+
*/
|
|
51
|
+
export declare function getGradeLevelDisplayName(grade: GradeLevel): string;
|
|
52
|
+
/**
|
|
53
|
+
* Get the grade level group (elementary, middle, high)
|
|
54
|
+
*/
|
|
55
|
+
export declare function getGradeLevelGroup(grade: GradeLevel): GradeLevelGroup;
|
|
56
|
+
/**
|
|
57
|
+
* Compare two grade levels
|
|
58
|
+
* Returns negative if a < b, positive if a > b, 0 if equal
|
|
59
|
+
*/
|
|
60
|
+
export declare function compareGradeLevels(a: GradeLevel, b: GradeLevel): number;
|
|
61
|
+
/**
|
|
62
|
+
* Get all grade levels within a range (inclusive)
|
|
63
|
+
*/
|
|
64
|
+
export declare function getGradeLevelsInRange(start: GradeLevel, end: GradeLevel): GradeLevel[];
|
|
65
|
+
/**
|
|
66
|
+
* Check if a grade is within a range
|
|
67
|
+
*/
|
|
68
|
+
export declare function isGradeInRange(grade: GradeLevel, range: {
|
|
69
|
+
start: GradeLevel;
|
|
70
|
+
end: GradeLevel;
|
|
71
|
+
}): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Get the next grade level, or null if already at 12th grade
|
|
74
|
+
*/
|
|
75
|
+
export declare function getNextGradeLevel(grade: GradeLevel): GradeLevel | null;
|
|
76
|
+
/**
|
|
77
|
+
* Get the previous grade level, or null if already at PK
|
|
78
|
+
*/
|
|
79
|
+
export declare function getPreviousGradeLevel(grade: GradeLevel): GradeLevel | null;
|
|
80
|
+
//# sourceMappingURL=grade-level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grade-level.d.ts","sourceRoot":"","sources":["../../src/validators/grade-level.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,YAAY,qFAef,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAMrD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAexD,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,UAAU,EAAyC,CAAC;AACpF,eAAO,MAAM,aAAa,EAAE,UAAU,EAAoB,CAAC;AAC3D,eAAO,MAAM,WAAW,EAAE,UAAU,EAA4B,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAM/D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,uFAAuB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;EAM1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAM7E;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAEpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAIrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,EAAE,CAStF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC5C,OAAO,CAMT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAMtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAM1E"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Grade Level Validators
|
|
4
|
+
*
|
|
5
|
+
* Constants and validation utilities for grade levels.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.gradeLevelRangeValidatorSchema = exports.gradeLevelEnumSchema = exports.HIGH_GRADES = exports.MIDDLE_GRADES = exports.ELEMENTARY_GRADES = exports.GRADE_LEVEL_NAMES = exports.GRADE_LEVELS = void 0;
|
|
9
|
+
exports.getGradeLevelIndex = getGradeLevelIndex;
|
|
10
|
+
exports.isValidGradeLevel = isValidGradeLevel;
|
|
11
|
+
exports.getGradeLevelDisplayName = getGradeLevelDisplayName;
|
|
12
|
+
exports.getGradeLevelGroup = getGradeLevelGroup;
|
|
13
|
+
exports.compareGradeLevels = compareGradeLevels;
|
|
14
|
+
exports.getGradeLevelsInRange = getGradeLevelsInRange;
|
|
15
|
+
exports.isGradeInRange = isGradeInRange;
|
|
16
|
+
exports.getNextGradeLevel = getNextGradeLevel;
|
|
17
|
+
exports.getPreviousGradeLevel = getPreviousGradeLevel;
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
// ============================================
|
|
20
|
+
// Grade Level Constants
|
|
21
|
+
// ============================================
|
|
22
|
+
exports.GRADE_LEVELS = [
|
|
23
|
+
'PK', // Pre-Kindergarten
|
|
24
|
+
'K', // Kindergarten
|
|
25
|
+
'1',
|
|
26
|
+
'2',
|
|
27
|
+
'3',
|
|
28
|
+
'4',
|
|
29
|
+
'5',
|
|
30
|
+
'6',
|
|
31
|
+
'7',
|
|
32
|
+
'8',
|
|
33
|
+
'9',
|
|
34
|
+
'10',
|
|
35
|
+
'11',
|
|
36
|
+
'12',
|
|
37
|
+
];
|
|
38
|
+
// ============================================
|
|
39
|
+
// Grade Level Display Names
|
|
40
|
+
// ============================================
|
|
41
|
+
exports.GRADE_LEVEL_NAMES = {
|
|
42
|
+
'PK': 'Pre-Kindergarten',
|
|
43
|
+
'K': 'Kindergarten',
|
|
44
|
+
'1': '1st Grade',
|
|
45
|
+
'2': '2nd Grade',
|
|
46
|
+
'3': '3rd Grade',
|
|
47
|
+
'4': '4th Grade',
|
|
48
|
+
'5': '5th Grade',
|
|
49
|
+
'6': '6th Grade',
|
|
50
|
+
'7': '7th Grade',
|
|
51
|
+
'8': '8th Grade',
|
|
52
|
+
'9': '9th Grade (Freshman)',
|
|
53
|
+
'10': '10th Grade (Sophomore)',
|
|
54
|
+
'11': '11th Grade (Junior)',
|
|
55
|
+
'12': '12th Grade (Senior)',
|
|
56
|
+
};
|
|
57
|
+
// ============================================
|
|
58
|
+
// Grade Level Groups
|
|
59
|
+
// ============================================
|
|
60
|
+
exports.ELEMENTARY_GRADES = ['PK', 'K', '1', '2', '3', '4', '5'];
|
|
61
|
+
exports.MIDDLE_GRADES = ['6', '7', '8'];
|
|
62
|
+
exports.HIGH_GRADES = ['9', '10', '11', '12'];
|
|
63
|
+
// ============================================
|
|
64
|
+
// Zod Schemas
|
|
65
|
+
// ============================================
|
|
66
|
+
/**
|
|
67
|
+
* Grade level enum schema (PK, K, 1-12)
|
|
68
|
+
* Note: Named with Enum suffix to avoid conflict with identity/department's gradeLevelConfigSchema
|
|
69
|
+
*/
|
|
70
|
+
exports.gradeLevelEnumSchema = zod_1.z.enum(exports.GRADE_LEVELS);
|
|
71
|
+
/**
|
|
72
|
+
* Grade level range validator schema
|
|
73
|
+
* Used to validate that start grade is before or equal to end grade
|
|
74
|
+
*/
|
|
75
|
+
exports.gradeLevelRangeValidatorSchema = zod_1.z.object({
|
|
76
|
+
start: exports.gradeLevelEnumSchema,
|
|
77
|
+
end: exports.gradeLevelEnumSchema,
|
|
78
|
+
}).refine(data => getGradeLevelIndex(data.start) <= getGradeLevelIndex(data.end), { message: 'Start grade must be at or before end grade' });
|
|
79
|
+
// ============================================
|
|
80
|
+
// Utility Functions
|
|
81
|
+
// ============================================
|
|
82
|
+
/**
|
|
83
|
+
* Get the numeric index of a grade level for comparison
|
|
84
|
+
*/
|
|
85
|
+
function getGradeLevelIndex(grade) {
|
|
86
|
+
return exports.GRADE_LEVELS.indexOf(grade);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if a string is a valid grade level
|
|
90
|
+
*/
|
|
91
|
+
function isValidGradeLevel(grade) {
|
|
92
|
+
return exports.GRADE_LEVELS.includes(grade);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get the display name for a grade level
|
|
96
|
+
*/
|
|
97
|
+
function getGradeLevelDisplayName(grade) {
|
|
98
|
+
return exports.GRADE_LEVEL_NAMES[grade];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the grade level group (elementary, middle, high)
|
|
102
|
+
*/
|
|
103
|
+
function getGradeLevelGroup(grade) {
|
|
104
|
+
if (exports.ELEMENTARY_GRADES.includes(grade))
|
|
105
|
+
return 'elementary';
|
|
106
|
+
if (exports.MIDDLE_GRADES.includes(grade))
|
|
107
|
+
return 'middle';
|
|
108
|
+
return 'high';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Compare two grade levels
|
|
112
|
+
* Returns negative if a < b, positive if a > b, 0 if equal
|
|
113
|
+
*/
|
|
114
|
+
function compareGradeLevels(a, b) {
|
|
115
|
+
return getGradeLevelIndex(a) - getGradeLevelIndex(b);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get all grade levels within a range (inclusive)
|
|
119
|
+
*/
|
|
120
|
+
function getGradeLevelsInRange(start, end) {
|
|
121
|
+
const startIndex = getGradeLevelIndex(start);
|
|
122
|
+
const endIndex = getGradeLevelIndex(end);
|
|
123
|
+
if (startIndex > endIndex) {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
return exports.GRADE_LEVELS.slice(startIndex, endIndex + 1);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if a grade is within a range
|
|
130
|
+
*/
|
|
131
|
+
function isGradeInRange(grade, range) {
|
|
132
|
+
const gradeIndex = getGradeLevelIndex(grade);
|
|
133
|
+
const startIndex = getGradeLevelIndex(range.start);
|
|
134
|
+
const endIndex = getGradeLevelIndex(range.end);
|
|
135
|
+
return gradeIndex >= startIndex && gradeIndex <= endIndex;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the next grade level, or null if already at 12th grade
|
|
139
|
+
*/
|
|
140
|
+
function getNextGradeLevel(grade) {
|
|
141
|
+
const index = getGradeLevelIndex(grade);
|
|
142
|
+
if (index >= exports.GRADE_LEVELS.length - 1) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
return exports.GRADE_LEVELS[index + 1];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the previous grade level, or null if already at PK
|
|
149
|
+
*/
|
|
150
|
+
function getPreviousGradeLevel(grade) {
|
|
151
|
+
const index = getGradeLevelIndex(grade);
|
|
152
|
+
if (index <= 0) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return exports.GRADE_LEVELS[index - 1];
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=grade-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grade-level.js","sourceRoot":"","sources":["../../src/validators/grade-level.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validators
|
|
4
|
+
*
|
|
5
|
+
* Reusable validation utilities and schemas
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
__exportStar(require("./password"), exports);
|
|
23
|
+
__exportStar(require("./grade-level"), exports);
|
|
24
|
+
__exportStar(require("./date-range"), exports);
|
|
25
|
+
__exportStar(require("./academic-year"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,kDAAgC"}
|