@kuroson/cse-students 0.3.2 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @kuroson/cse-students
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 87c5564: Minify and reduce bundle size
8
+
3
9
  ## 0.3.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -1,57 +1,3 @@
1
- 'use strict';
2
-
3
- require('winston');
4
- var fs = require('fs');
5
-
6
- // src/Students.ts
7
- var readFileFrom = (path, encoding = "utf-8") => {
8
- if (fs.existsSync(path)) {
9
- return fs.readFileSync(path, encoding);
10
- }
11
- throw new Error(`Failed to read file from expected directory: ${path}`);
12
- };
13
- var cleanUpName = (name) => {
14
- const [last, first] = name.trim().split(",");
15
- let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, "");
16
- if (finalName.startsWith(".")) {
17
- finalName = finalName.slice(1).trim();
18
- }
19
- return finalName.trim();
20
- };
21
-
22
- // src/Students.ts
23
- var Students = class {
24
- students;
25
- timeTableKeys = {};
26
- constructor(inputOptions) {
27
- const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;
28
- this.timeTableKeys = timeTable?.reduce((acc, curr) => {
29
- acc[curr.expandedClassCode] = curr.classCode;
30
- return acc;
31
- }, {}) ?? {};
32
- const input = givenInput ?? readFileFrom(pathToFile, "utf-8");
33
- const lines = input.split("\n").slice(1).filter((x) => x.length !== 0);
34
- const students = lines.map((line) => {
35
- const [zID, name, classCode] = line.split("|");
36
- const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);
37
- return {
38
- zID: `z${zID.trim()}`,
39
- name: cleanUpName(name),
40
- class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? "N/A",
41
- classCode: alternativeClass?.classCode?.trim() ?? (classCode !== void 0 ? this.timeTableKeys[classCode.trim()] ?? "N/A" : "N/A")
42
- };
43
- });
44
- logger?.verbose(`Read ${students.length} students`);
45
- this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));
46
- }
47
- /**
48
- * Get the students as an array
49
- */
50
- getStudents = () => [...this.students];
51
- getTimeTableKeys = () => ({ ...this.timeTableKeys });
52
- };
53
-
54
- exports.Students = Students;
55
- exports.cleanUpName = cleanUpName;
56
- //# sourceMappingURL=index.cjs.map
1
+ 'use strict';require('winston');var fs=require('fs');var d=(t,i="utf-8")=>{if(fs.existsSync(t))return fs.readFileSync(t,i);throw new Error(`Failed to read file from expected directory: ${t}`)},l=t=>{let[i,s]=t.trim().split(","),n=`${s.trim()} ${i.trim()}`.replace(/'/g,"");return n.startsWith(".")&&(n=n.slice(1).trim()),n.trim()};var a=class{students;timeTableKeys={};constructor(i){let{timeTable:s,givenInput:n,pathToFile:g,winstonLogger:u}=i;this.timeTableKeys=s?.reduce((e,r)=>(e[r.expandedClassCode]=r.classCode,e),{})??{};let m=(n??d(g,"utf-8")).split(`
2
+ `).slice(1).filter(e=>e.length!==0).map(e=>{let[r,c,o]=e.split("|"),p=s?.find(f=>f.otherExpandedClassCode===o);return {zID:`z${r.trim()}`,name:l(c),class:p?.otherExpandedClassCode?.trim()??o?.trim()??"N/A",classCode:p?.classCode?.trim()??(o!==void 0?this.timeTableKeys[o.trim()]??"N/A":"N/A")}});u?.verbose(`Read ${m.length} students`),this.students=m.sort((e,r)=>e.zID.localeCompare(r.zID));}getStudents=()=>[...this.students];getTimeTableKeys=()=>({...this.timeTableKeys})};exports.Students=a;exports.cleanUpName=l;//# sourceMappingURL=index.cjs.map
57
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/Students.ts"],"names":["existsSync","readFileSync"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from 'fs';\n\n/**\n * Reads input from a file and returns a string\n * @throws { Error } if the file does not exist\n * @param path path of file\n * @param encoding encoding, defaulted to \"utf-8\"\n */\nexport const readFileFrom = (path: string, encoding: BufferEncoding = 'utf-8'): string => {\n if (existsSync(path)) {\n return readFileSync(path, encoding);\n }\n throw new Error(`Failed to read file from expected directory: ${path}`);\n};\n\n/**\n * Cleans up the name by removing leading/trailing spaces and removing any leading periods\n * @param name in the format \"Last, First\"\n */\nexport const cleanUpName = (name: string): string => {\n const [last, first] = name.trim().split(',') as [string, string];\n let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, '');\n if (finalName.startsWith('.')) {\n finalName = finalName.slice(1).trim();\n }\n return finalName.trim();\n};\n","import { type Logger } from 'winston';\nimport type { StudentEnrolment, TimetableInformation } from './types';\nimport { cleanUpName, readFileFrom } from './utils';\n\ntype InputOptions = {\n timeTable?: TimetableInformation;\n winstonLogger?: Logger;\n} & ({ givenInput: string; pathToFile?: never } | { pathToFile: string; givenInput?: never });\n\nexport class Students {\n private readonly students: StudentEnrolment[];\n private readonly timeTableKeys: { [key: string]: string | undefined } = {};\n\n public constructor(inputOptions: InputOptions) {\n const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;\n\n this.timeTableKeys =\n timeTable?.reduce((acc: typeof this.timeTableKeys, curr) => {\n acc[curr.expandedClassCode] = curr.classCode;\n return acc;\n }, {}) ?? {};\n\n const input = givenInput ?? readFileFrom(pathToFile, 'utf-8');\n const lines = input\n .split('\\n')\n .slice(1)\n .filter((x) => x.length !== 0);\n const students: StudentEnrolment[] = lines.map((line) => {\n const [zID, name, classCode] = line.split('|') as [string, string, string | undefined];\n\n /**\n * This is in case teaching decides to combine classes but not update the fucking enrolments\n */\n const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);\n\n return {\n zID: `z${zID.trim()}`,\n name: cleanUpName(name),\n class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? 'N/A',\n classCode:\n alternativeClass?.classCode?.trim() ??\n (classCode !== undefined ? (this.timeTableKeys[classCode.trim()] ?? 'N/A') : 'N/A'),\n };\n });\n logger?.verbose(`Read ${students.length} students`);\n this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));\n }\n\n /**\n * Get the students as an array\n */\n public getStudents = () => [...this.students];\n public getTimeTableKeys = () => ({ ...this.timeTableKeys });\n}\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/Students.ts"],"names":["readFileFrom","path","encoding","existsSync","readFileSync","cleanUpName","name","last","first","finalName","Students","inputOptions","timeTable","givenInput","pathToFile","logger","acc","curr","students","x","line","zID","classCode","alternativeClass","a","b"],"mappings":"qDAQO,IAAMA,CAAAA,CAAe,CAACC,CAAAA,CAAcC,CAAAA,CAA2B,OAAA,GAAoB,CACxF,GAAIC,aAAAA,CAAWF,CAAI,CAAA,CACjB,OAAOG,eAAAA,CAAaH,CAAAA,CAAMC,CAAQ,CAAA,CAEpC,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgDD,CAAI,CAAA,CAAE,CACxE,CAAA,CAMaI,CAAAA,CAAeC,CAAAA,EAAyB,CACnD,GAAM,CAACC,CAAAA,CAAMC,CAAK,CAAA,CAAIF,CAAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA,CACvCG,CAAAA,CAAY,CAAA,EAAGD,CAAAA,CAAM,IAAA,EAAM,CAAA,CAAA,EAAID,CAAAA,CAAK,IAAA,EAAM,CAAA,CAAA,CAAG,OAAA,CAAQ,IAAA,CAAM,EAAE,CAAA,CACjE,OAAIE,CAAAA,CAAU,UAAA,CAAW,GAAG,CAAA,GAC1BA,CAAAA,CAAYA,CAAAA,CAAU,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAAA,CAE/BA,CAAAA,CAAU,IAAA,EACnB,ECjBO,IAAMC,CAAAA,CAAN,KAAe,CACH,QAAA,CACA,aAAA,CAAuD,EAAC,CAElE,WAAA,CAAYC,CAAAA,CAA4B,CAC7C,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,UAAA,CAAAC,CAAAA,CAAY,UAAA,CAAAC,CAAAA,CAAY,aAAA,CAAeC,CAAO,CAAA,CAAIJ,CAAAA,CAErE,IAAA,CAAK,aAAA,CACHC,CAAAA,EAAW,MAAA,CAAO,CAACI,CAAAA,CAAgCC,CAAAA,IACjDD,CAAAA,CAAIC,CAAAA,CAAK,iBAAiB,CAAA,CAAIA,CAAAA,CAAK,SAAA,CAC5BD,CAAAA,CAAAA,CACN,EAAE,CAAA,EAAK,EAAC,CAOb,IAAME,CAAAA,CAAAA,CALQL,CAAAA,EAAcb,CAAAA,CAAac,CAAAA,CAAY,OAAO,CAAA,EAEzD,KAAA,CAAM;AAAA,CAAI,CAAA,CACV,MAAM,CAAC,CAAA,CACP,OAAQK,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,CAAC,CAAA,CACY,GAAA,CAAKC,GAAS,CACvD,GAAM,CAACC,CAAAA,CAAKf,CAAAA,CAAMgB,CAAS,EAAIF,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAKvCG,CAAAA,CAAmBX,CAAAA,EAAW,KAAMO,CAAAA,EAAMA,CAAAA,CAAE,yBAA2BG,CAAS,CAAA,CAEtF,OAAO,CACL,GAAA,CAAK,CAAA,CAAA,EAAID,CAAAA,CAAI,IAAA,EAAM,GACnB,IAAA,CAAMhB,CAAAA,CAAYC,CAAI,CAAA,CACtB,KAAA,CAAOiB,CAAAA,EAAkB,wBAAwB,IAAA,EAAK,EAAKD,CAAAA,EAAW,IAAA,EAAK,EAAK,KAAA,CAChF,UACEC,CAAAA,EAAkB,SAAA,EAAW,MAAK,GACjCD,CAAAA,GAAc,OAAa,IAAA,CAAK,aAAA,CAAcA,CAAAA,CAAU,IAAA,EAAM,CAAA,EAAK,MAAS,KAAA,CACjF,CACF,CAAC,CAAA,CACDP,CAAAA,EAAQ,OAAA,CAAQ,QAAQG,CAAAA,CAAS,MAAM,CAAA,SAAA,CAAW,CAAA,CAClD,IAAA,CAAK,QAAA,CAAWA,EAAS,IAAA,CAAK,CAACM,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAE,GAAA,CAAI,cAAcC,CAAAA,CAAE,GAAG,CAAC,EACpE,CAKO,WAAA,CAAc,IAAM,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA,CACrC,gBAAA,CAAmB,KAAO,CAAE,GAAG,IAAA,CAAK,aAAc,CAAA,CAC3D","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from 'fs';\n\n/**\n * Reads input from a file and returns a string\n * @throws { Error } if the file does not exist\n * @param path path of file\n * @param encoding encoding, defaulted to \"utf-8\"\n */\nexport const readFileFrom = (path: string, encoding: BufferEncoding = 'utf-8'): string => {\n if (existsSync(path)) {\n return readFileSync(path, encoding);\n }\n throw new Error(`Failed to read file from expected directory: ${path}`);\n};\n\n/**\n * Cleans up the name by removing leading/trailing spaces and removing any leading periods\n * @param name in the format \"Last, First\"\n */\nexport const cleanUpName = (name: string): string => {\n const [last, first] = name.trim().split(',') as [string, string];\n let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, '');\n if (finalName.startsWith('.')) {\n finalName = finalName.slice(1).trim();\n }\n return finalName.trim();\n};\n","import { type Logger } from 'winston';\nimport type { StudentEnrolment, TimetableInformation } from './types';\nimport { cleanUpName, readFileFrom } from './utils';\n\ntype InputOptions = {\n timeTable?: TimetableInformation;\n winstonLogger?: Logger;\n} & ({ givenInput: string; pathToFile?: never } | { pathToFile: string; givenInput?: never });\n\nexport class Students {\n private readonly students: StudentEnrolment[];\n private readonly timeTableKeys: { [key: string]: string | undefined } = {};\n\n public constructor(inputOptions: InputOptions) {\n const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;\n\n this.timeTableKeys =\n timeTable?.reduce((acc: typeof this.timeTableKeys, curr) => {\n acc[curr.expandedClassCode] = curr.classCode;\n return acc;\n }, {}) ?? {};\n\n const input = givenInput ?? readFileFrom(pathToFile, 'utf-8');\n const lines = input\n .split('\\n')\n .slice(1)\n .filter((x) => x.length !== 0);\n const students: StudentEnrolment[] = lines.map((line) => {\n const [zID, name, classCode] = line.split('|') as [string, string, string | undefined];\n\n /**\n * This is in case teaching decides to combine classes but not update the fucking enrolments\n */\n const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);\n\n return {\n zID: `z${zID.trim()}`,\n name: cleanUpName(name),\n class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? 'N/A',\n classCode:\n alternativeClass?.classCode?.trim() ??\n (classCode !== undefined ? (this.timeTableKeys[classCode.trim()] ?? 'N/A') : 'N/A'),\n };\n });\n logger?.verbose(`Read ${students.length} students`);\n this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));\n }\n\n /**\n * Get the students as an array\n */\n public getStudents = () => [...this.students];\n public getTimeTableKeys = () => ({ ...this.timeTableKeys });\n}\n"]}
package/dist/index.js CHANGED
@@ -1,54 +1,3 @@
1
- import 'winston';
2
- import { existsSync, readFileSync } from 'fs';
3
-
4
- // src/Students.ts
5
- var readFileFrom = (path, encoding = "utf-8") => {
6
- if (existsSync(path)) {
7
- return readFileSync(path, encoding);
8
- }
9
- throw new Error(`Failed to read file from expected directory: ${path}`);
10
- };
11
- var cleanUpName = (name) => {
12
- const [last, first] = name.trim().split(",");
13
- let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, "");
14
- if (finalName.startsWith(".")) {
15
- finalName = finalName.slice(1).trim();
16
- }
17
- return finalName.trim();
18
- };
19
-
20
- // src/Students.ts
21
- var Students = class {
22
- students;
23
- timeTableKeys = {};
24
- constructor(inputOptions) {
25
- const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;
26
- this.timeTableKeys = timeTable?.reduce((acc, curr) => {
27
- acc[curr.expandedClassCode] = curr.classCode;
28
- return acc;
29
- }, {}) ?? {};
30
- const input = givenInput ?? readFileFrom(pathToFile, "utf-8");
31
- const lines = input.split("\n").slice(1).filter((x) => x.length !== 0);
32
- const students = lines.map((line) => {
33
- const [zID, name, classCode] = line.split("|");
34
- const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);
35
- return {
36
- zID: `z${zID.trim()}`,
37
- name: cleanUpName(name),
38
- class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? "N/A",
39
- classCode: alternativeClass?.classCode?.trim() ?? (classCode !== void 0 ? this.timeTableKeys[classCode.trim()] ?? "N/A" : "N/A")
40
- };
41
- });
42
- logger?.verbose(`Read ${students.length} students`);
43
- this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));
44
- }
45
- /**
46
- * Get the students as an array
47
- */
48
- getStudents = () => [...this.students];
49
- getTimeTableKeys = () => ({ ...this.timeTableKeys });
50
- };
51
-
52
- export { Students, cleanUpName };
53
- //# sourceMappingURL=index.js.map
1
+ import'winston';import {existsSync,readFileSync}from'fs';var d=(t,i="utf-8")=>{if(existsSync(t))return readFileSync(t,i);throw new Error(`Failed to read file from expected directory: ${t}`)},l=t=>{let[i,s]=t.trim().split(","),n=`${s.trim()} ${i.trim()}`.replace(/'/g,"");return n.startsWith(".")&&(n=n.slice(1).trim()),n.trim()};var a=class{students;timeTableKeys={};constructor(i){let{timeTable:s,givenInput:n,pathToFile:g,winstonLogger:u}=i;this.timeTableKeys=s?.reduce((e,r)=>(e[r.expandedClassCode]=r.classCode,e),{})??{};let m=(n??d(g,"utf-8")).split(`
2
+ `).slice(1).filter(e=>e.length!==0).map(e=>{let[r,c,o]=e.split("|"),p=s?.find(f=>f.otherExpandedClassCode===o);return {zID:`z${r.trim()}`,name:l(c),class:p?.otherExpandedClassCode?.trim()??o?.trim()??"N/A",classCode:p?.classCode?.trim()??(o!==void 0?this.timeTableKeys[o.trim()]??"N/A":"N/A")}});u?.verbose(`Read ${m.length} students`),this.students=m.sort((e,r)=>e.zID.localeCompare(r.zID));}getStudents=()=>[...this.students];getTimeTableKeys=()=>({...this.timeTableKeys})};export{a as Students,l as cleanUpName};//# sourceMappingURL=index.js.map
54
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/Students.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from 'fs';\n\n/**\n * Reads input from a file and returns a string\n * @throws { Error } if the file does not exist\n * @param path path of file\n * @param encoding encoding, defaulted to \"utf-8\"\n */\nexport const readFileFrom = (path: string, encoding: BufferEncoding = 'utf-8'): string => {\n if (existsSync(path)) {\n return readFileSync(path, encoding);\n }\n throw new Error(`Failed to read file from expected directory: ${path}`);\n};\n\n/**\n * Cleans up the name by removing leading/trailing spaces and removing any leading periods\n * @param name in the format \"Last, First\"\n */\nexport const cleanUpName = (name: string): string => {\n const [last, first] = name.trim().split(',') as [string, string];\n let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, '');\n if (finalName.startsWith('.')) {\n finalName = finalName.slice(1).trim();\n }\n return finalName.trim();\n};\n","import { type Logger } from 'winston';\nimport type { StudentEnrolment, TimetableInformation } from './types';\nimport { cleanUpName, readFileFrom } from './utils';\n\ntype InputOptions = {\n timeTable?: TimetableInformation;\n winstonLogger?: Logger;\n} & ({ givenInput: string; pathToFile?: never } | { pathToFile: string; givenInput?: never });\n\nexport class Students {\n private readonly students: StudentEnrolment[];\n private readonly timeTableKeys: { [key: string]: string | undefined } = {};\n\n public constructor(inputOptions: InputOptions) {\n const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;\n\n this.timeTableKeys =\n timeTable?.reduce((acc: typeof this.timeTableKeys, curr) => {\n acc[curr.expandedClassCode] = curr.classCode;\n return acc;\n }, {}) ?? {};\n\n const input = givenInput ?? readFileFrom(pathToFile, 'utf-8');\n const lines = input\n .split('\\n')\n .slice(1)\n .filter((x) => x.length !== 0);\n const students: StudentEnrolment[] = lines.map((line) => {\n const [zID, name, classCode] = line.split('|') as [string, string, string | undefined];\n\n /**\n * This is in case teaching decides to combine classes but not update the fucking enrolments\n */\n const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);\n\n return {\n zID: `z${zID.trim()}`,\n name: cleanUpName(name),\n class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? 'N/A',\n classCode:\n alternativeClass?.classCode?.trim() ??\n (classCode !== undefined ? (this.timeTableKeys[classCode.trim()] ?? 'N/A') : 'N/A'),\n };\n });\n logger?.verbose(`Read ${students.length} students`);\n this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));\n }\n\n /**\n * Get the students as an array\n */\n public getStudents = () => [...this.students];\n public getTimeTableKeys = () => ({ ...this.timeTableKeys });\n}\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/Students.ts"],"names":["readFileFrom","path","encoding","existsSync","readFileSync","cleanUpName","name","last","first","finalName","Students","inputOptions","timeTable","givenInput","pathToFile","logger","acc","curr","students","x","line","zID","classCode","alternativeClass","a","b"],"mappings":"yDAQO,IAAMA,CAAAA,CAAe,CAACC,CAAAA,CAAcC,CAAAA,CAA2B,OAAA,GAAoB,CACxF,GAAIC,UAAAA,CAAWF,CAAI,CAAA,CACjB,OAAOG,YAAAA,CAAaH,CAAAA,CAAMC,CAAQ,CAAA,CAEpC,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgDD,CAAI,CAAA,CAAE,CACxE,CAAA,CAMaI,CAAAA,CAAeC,CAAAA,EAAyB,CACnD,GAAM,CAACC,CAAAA,CAAMC,CAAK,CAAA,CAAIF,CAAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA,CACvCG,CAAAA,CAAY,CAAA,EAAGD,CAAAA,CAAM,IAAA,EAAM,CAAA,CAAA,EAAID,CAAAA,CAAK,IAAA,EAAM,CAAA,CAAA,CAAG,OAAA,CAAQ,IAAA,CAAM,EAAE,CAAA,CACjE,OAAIE,CAAAA,CAAU,UAAA,CAAW,GAAG,CAAA,GAC1BA,CAAAA,CAAYA,CAAAA,CAAU,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAAA,CAE/BA,CAAAA,CAAU,IAAA,EACnB,ECjBO,IAAMC,CAAAA,CAAN,KAAe,CACH,QAAA,CACA,aAAA,CAAuD,EAAC,CAElE,WAAA,CAAYC,CAAAA,CAA4B,CAC7C,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,UAAA,CAAAC,CAAAA,CAAY,UAAA,CAAAC,CAAAA,CAAY,aAAA,CAAeC,CAAO,CAAA,CAAIJ,CAAAA,CAErE,IAAA,CAAK,aAAA,CACHC,CAAAA,EAAW,MAAA,CAAO,CAACI,CAAAA,CAAgCC,CAAAA,IACjDD,CAAAA,CAAIC,CAAAA,CAAK,iBAAiB,CAAA,CAAIA,CAAAA,CAAK,SAAA,CAC5BD,CAAAA,CAAAA,CACN,EAAE,CAAA,EAAK,EAAC,CAOb,IAAME,CAAAA,CAAAA,CALQL,CAAAA,EAAcb,CAAAA,CAAac,CAAAA,CAAY,OAAO,CAAA,EAEzD,KAAA,CAAM;AAAA,CAAI,CAAA,CACV,MAAM,CAAC,CAAA,CACP,OAAQK,CAAAA,EAAMA,CAAAA,CAAE,MAAA,GAAW,CAAC,CAAA,CACY,GAAA,CAAKC,GAAS,CACvD,GAAM,CAACC,CAAAA,CAAKf,CAAAA,CAAMgB,CAAS,EAAIF,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAKvCG,CAAAA,CAAmBX,CAAAA,EAAW,KAAMO,CAAAA,EAAMA,CAAAA,CAAE,yBAA2BG,CAAS,CAAA,CAEtF,OAAO,CACL,GAAA,CAAK,CAAA,CAAA,EAAID,CAAAA,CAAI,IAAA,EAAM,GACnB,IAAA,CAAMhB,CAAAA,CAAYC,CAAI,CAAA,CACtB,KAAA,CAAOiB,CAAAA,EAAkB,wBAAwB,IAAA,EAAK,EAAKD,CAAAA,EAAW,IAAA,EAAK,EAAK,KAAA,CAChF,UACEC,CAAAA,EAAkB,SAAA,EAAW,MAAK,GACjCD,CAAAA,GAAc,OAAa,IAAA,CAAK,aAAA,CAAcA,CAAAA,CAAU,IAAA,EAAM,CAAA,EAAK,MAAS,KAAA,CACjF,CACF,CAAC,CAAA,CACDP,CAAAA,EAAQ,OAAA,CAAQ,QAAQG,CAAAA,CAAS,MAAM,CAAA,SAAA,CAAW,CAAA,CAClD,IAAA,CAAK,QAAA,CAAWA,EAAS,IAAA,CAAK,CAACM,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAE,GAAA,CAAI,cAAcC,CAAAA,CAAE,GAAG,CAAC,EACpE,CAKO,WAAA,CAAc,IAAM,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA,CACrC,gBAAA,CAAmB,KAAO,CAAE,GAAG,IAAA,CAAK,aAAc,CAAA,CAC3D","file":"index.js","sourcesContent":["import { existsSync, readFileSync } from 'fs';\n\n/**\n * Reads input from a file and returns a string\n * @throws { Error } if the file does not exist\n * @param path path of file\n * @param encoding encoding, defaulted to \"utf-8\"\n */\nexport const readFileFrom = (path: string, encoding: BufferEncoding = 'utf-8'): string => {\n if (existsSync(path)) {\n return readFileSync(path, encoding);\n }\n throw new Error(`Failed to read file from expected directory: ${path}`);\n};\n\n/**\n * Cleans up the name by removing leading/trailing spaces and removing any leading periods\n * @param name in the format \"Last, First\"\n */\nexport const cleanUpName = (name: string): string => {\n const [last, first] = name.trim().split(',') as [string, string];\n let finalName = `${first.trim()} ${last.trim()}`.replace(/'/g, '');\n if (finalName.startsWith('.')) {\n finalName = finalName.slice(1).trim();\n }\n return finalName.trim();\n};\n","import { type Logger } from 'winston';\nimport type { StudentEnrolment, TimetableInformation } from './types';\nimport { cleanUpName, readFileFrom } from './utils';\n\ntype InputOptions = {\n timeTable?: TimetableInformation;\n winstonLogger?: Logger;\n} & ({ givenInput: string; pathToFile?: never } | { pathToFile: string; givenInput?: never });\n\nexport class Students {\n private readonly students: StudentEnrolment[];\n private readonly timeTableKeys: { [key: string]: string | undefined } = {};\n\n public constructor(inputOptions: InputOptions) {\n const { timeTable, givenInput, pathToFile, winstonLogger: logger } = inputOptions;\n\n this.timeTableKeys =\n timeTable?.reduce((acc: typeof this.timeTableKeys, curr) => {\n acc[curr.expandedClassCode] = curr.classCode;\n return acc;\n }, {}) ?? {};\n\n const input = givenInput ?? readFileFrom(pathToFile, 'utf-8');\n const lines = input\n .split('\\n')\n .slice(1)\n .filter((x) => x.length !== 0);\n const students: StudentEnrolment[] = lines.map((line) => {\n const [zID, name, classCode] = line.split('|') as [string, string, string | undefined];\n\n /**\n * This is in case teaching decides to combine classes but not update the fucking enrolments\n */\n const alternativeClass = timeTable?.find((x) => x.otherExpandedClassCode === classCode);\n\n return {\n zID: `z${zID.trim()}`,\n name: cleanUpName(name),\n class: alternativeClass?.otherExpandedClassCode?.trim() ?? classCode?.trim() ?? 'N/A',\n classCode:\n alternativeClass?.classCode?.trim() ??\n (classCode !== undefined ? (this.timeTableKeys[classCode.trim()] ?? 'N/A') : 'N/A'),\n };\n });\n logger?.verbose(`Read ${students.length} students`);\n this.students = students.sort((a, b) => a.zID.localeCompare(b.zID));\n }\n\n /**\n * Get the students as an array\n */\n public getStudents = () => [...this.students];\n public getTimeTableKeys = () => ({ ...this.timeTableKeys });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kuroson/cse-students",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Student enrolment parser for UNSW CSE courses",
5
5
  "license": "MIT",
6
6
  "author": "Alvin Cherk <a.cherk@unsw.edu.au>",