feat(v1.4.0): exports + smart year level + progress + encrypted passwords
ci / test (push) Successful in 43s
build-extension / build (push) Successful in 6m7s

v1.4.0: CSV/Excel/JSON/NextUp exports, units-first smart year standing, live export progress bar, AES-GCM at-rest password encryption.
This commit was merged in pull request #4.
This commit is contained in:
2026-08-20 04:39:08 +00:00
parent 89fd587c21
commit 0cb70ecee0
19 changed files with 5442 additions and 91 deletions
+45
View File
@@ -0,0 +1,45 @@
(function (root, factory) {
if (typeof module === 'object' && module.exports) {
module.exports = factory();
} else {
root.ISMIStools = Object.assign(root.ISMIStools || {}, factory());
}
})(typeof self !== 'undefined' ? self : this, function () {
'use strict';
// Build a clean, reusable JSON representation of the study load.
// data: { header, courses, totalUnits, year, period }
function buildStudyLoadJson(data) {
const header = data.header || {};
const courses = (data.courses || []).map((c) => ({
group: c.group || '',
courseCode: c.courseCode || '',
description: c.description || '',
schedule: c.schedule || '',
faculty: (c.faculty || c.teacher) || '',
units: c.units || '',
status: c.status || ''
}));
return {
meta: {
program: header.program || '',
studentName: header.fullName || header.studentName || '',
studentId: header.studentId || '',
academicYear: data.year ? String(data.year) : '',
semester: header.semester || data.period || '',
yearLevel: header.yearLevel || '',
totalUnits: data.totalUnits || '',
generatedAt: new Date().toISOString(),
extensionVersion: data.extensionVersion || ''
},
courses,
totals: {
// A study load lists the courses the student is enrolled in for the
// term; there is no "completed" concept here.
enrolledUnits: data.totalUnits || ''
}
};
}
return { buildStudyLoadJson };
});