From 1d62e44c2a6c23e86941b5e98ada304e034791b2 Mon Sep 17 00:00:00 2001 From: Keming He Date: Sat, 3 Aug 2024 10:40:50 -0400 Subject: [PATCH 1/2] refactor(scripts/): added type imports to auto-gen files, refactored to uniformed named export adding type imports to auto-gen files enables tsc to lint (type check) generated files to catch last-minute errors fixed #9 --- pnpm-lock.yaml | 138 +++++++++--------- scripts/genAllStudentOrgs.ts | 30 +++- scripts/genAllUndergradMajorsAndDegrees.ts | 29 +++- scripts/utils/csv2TS.ts | 78 +++++----- src/autoGenerated/allStudentOrgs.ts | 13 +- .../allUndergradMajorsAndDegrees.ts | 13 +- src/osu.test.ts | 4 +- src/osu.ts | 12 +- 8 files changed, 179 insertions(+), 138 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf20b35..0b43857 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -578,83 +578,83 @@ packages: peerDependencies: release-it: ^17.0.0 - '@rollup/rollup-android-arm-eabi@4.19.2': - resolution: {integrity: sha512-OHflWINKtoCFSpm/WmuQaWW4jeX+3Qt3XQDepkkiFTsoxFc5BpF3Z5aDxFZgBqRjO6ATP5+b1iilp4kGIZVWlA==} + '@rollup/rollup-android-arm-eabi@4.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.19.2': - resolution: {integrity: sha512-k0OC/b14rNzMLDOE6QMBCjDRm3fQOHAL8Ldc9bxEWvMo4Ty9RY6rWmGetNTWhPo+/+FNd1lsQYRd0/1OSix36A==} + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.19.2': - resolution: {integrity: sha512-IIARRgWCNWMTeQH+kr/gFTHJccKzwEaI0YSvtqkEBPj7AshElFq89TyreKNFAGh5frLfDCbodnq+Ye3dqGKPBw==} + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.19.2': - resolution: {integrity: sha512-52udDMFDv54BTAdnw+KXNF45QCvcJOcYGl3vQkp4vARyrcdI/cXH8VXTEv/8QWfd6Fru8QQuw1b2uNersXOL0g==} + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.19.2': - resolution: {integrity: sha512-r+SI2t8srMPYZeoa1w0o/AfoVt9akI1ihgazGYPQGRilVAkuzMGiTtexNZkrPkQsyFrvqq/ni8f3zOnHw4hUbA==} + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.19.2': - resolution: {integrity: sha512-+tYiL4QVjtI3KliKBGtUU7yhw0GMcJJuB9mLTCEauHEsqfk49gtUBXGtGP3h1LW8MbaTY6rSFIQV1XOBps1gBA==} + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.19.2': - resolution: {integrity: sha512-OR5DcvZiYN75mXDNQQxlQPTv4D+uNCUsmSCSY2FolLf9W5I4DSoJyg7z9Ea3TjKfhPSGgMJiey1aWvlWuBzMtg==} + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.19.2': - resolution: {integrity: sha512-Hw3jSfWdUSauEYFBSFIte6I8m6jOj+3vifLg8EU3lreWulAUpch4JBjDMtlKosrBzkr0kwKgL9iCfjA8L3geoA==} + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.19.2': - resolution: {integrity: sha512-rhjvoPBhBwVnJRq/+hi2Q3EMiVF538/o9dBuj9TVLclo9DuONqt5xfWSaE6MYiFKpo/lFPJ/iSI72rYWw5Hc7w==} + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.19.2': - resolution: {integrity: sha512-EAz6vjPwHHs2qOCnpQkw4xs14XJq84I81sDRGPEjKPFVPBw7fwvtwhVjcZR6SLydCv8zNK8YGFblKWd/vRmP8g==} + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.19.2': - resolution: {integrity: sha512-IJSUX1xb8k/zN9j2I7B5Re6B0NNJDJ1+soezjNojhT8DEVeDNptq2jgycCOpRhyGj0+xBn7Cq+PK7Q+nd2hxLA==} + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.19.2': - resolution: {integrity: sha512-OgaToJ8jSxTpgGkZSkwKE+JQGihdcaqnyHEFOSAU45utQ+yLruE1dkonB2SDI8t375wOKgNn8pQvaWY9kPzxDQ==} + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.19.2': - resolution: {integrity: sha512-5V3mPpWkB066XZZBgSd1lwozBk7tmOkKtquyCJ6T4LN3mzKENXyBwWNQn8d0Ci81hvlBw5RoFgleVpL6aScLYg==} + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.19.2': - resolution: {integrity: sha512-ayVstadfLeeXI9zUPiKRVT8qF55hm7hKa+0N1V6Vj+OTNFfKSoUxyZvzVvgtBxqSb5URQ8sK6fhwxr9/MLmxdA==} + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.19.2': - resolution: {integrity: sha512-Mda7iG4fOLHNsPqjWSjANvNZYoW034yxgrndof0DwCy0D3FvTjeNo+HGE6oGWgvcLZNLlcp0hLEFcRs+UGsMLg==} + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.19.2': - resolution: {integrity: sha512-DPi0ubYhSow/00YqmG1jWm3qt1F8aXziHc/UNy8bo9cpCacqhuWu+iSq/fp2SyEQK7iYTZ60fBU9cat3MXTjIQ==} + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} cpu: [x64] os: [win32] @@ -2161,8 +2161,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.19.2: - resolution: {integrity: sha512-6/jgnN1svF9PjNYJ4ya3l+cqutg49vOZ4rVgsDKxdl+5gpGPnByFXWGyfH9YGx9i3nfBwSu1Iyu6vGwFFA0BdQ==} + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3041,52 +3041,52 @@ snapshots: release-it: 17.6.0(typescript@5.5.4) semver: 7.6.3 - '@rollup/rollup-android-arm-eabi@4.19.2': + '@rollup/rollup-android-arm-eabi@4.20.0': optional: true - '@rollup/rollup-android-arm64@4.19.2': + '@rollup/rollup-android-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-arm64@4.19.2': + '@rollup/rollup-darwin-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-x64@4.19.2': + '@rollup/rollup-darwin-x64@4.20.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.19.2': + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.19.2': + '@rollup/rollup-linux-arm-musleabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.19.2': + '@rollup/rollup-linux-arm64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.19.2': + '@rollup/rollup-linux-arm64-musl@4.20.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.19.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.19.2': + '@rollup/rollup-linux-riscv64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.19.2': + '@rollup/rollup-linux-s390x-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.19.2': + '@rollup/rollup-linux-x64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-musl@4.19.2': + '@rollup/rollup-linux-x64-musl@4.20.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.19.2': + '@rollup/rollup-win32-arm64-msvc@4.20.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.19.2': + '@rollup/rollup-win32-ia32-msvc@4.20.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.19.2': + '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true '@sindresorhus/is@5.6.0': {} @@ -4700,26 +4700,26 @@ snapshots: reusify@1.0.4: {} - rollup@4.19.2: + rollup@4.20.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.19.2 - '@rollup/rollup-android-arm64': 4.19.2 - '@rollup/rollup-darwin-arm64': 4.19.2 - '@rollup/rollup-darwin-x64': 4.19.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.19.2 - '@rollup/rollup-linux-arm-musleabihf': 4.19.2 - '@rollup/rollup-linux-arm64-gnu': 4.19.2 - '@rollup/rollup-linux-arm64-musl': 4.19.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.19.2 - '@rollup/rollup-linux-riscv64-gnu': 4.19.2 - '@rollup/rollup-linux-s390x-gnu': 4.19.2 - '@rollup/rollup-linux-x64-gnu': 4.19.2 - '@rollup/rollup-linux-x64-musl': 4.19.2 - '@rollup/rollup-win32-arm64-msvc': 4.19.2 - '@rollup/rollup-win32-ia32-msvc': 4.19.2 - '@rollup/rollup-win32-x64-msvc': 4.19.2 + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -4941,7 +4941,7 @@ snapshots: picocolors: 1.0.1 postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5) resolve-from: 5.0.0 - rollup: 4.19.2 + rollup: 4.20.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -5050,7 +5050,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.40 - rollup: 4.19.2 + rollup: 4.20.0 optionalDependencies: '@types/node': 20.14.14 fsevents: 2.3.3 diff --git a/scripts/genAllStudentOrgs.ts b/scripts/genAllStudentOrgs.ts index e6c3ba4..08ec74b 100644 --- a/scripts/genAllStudentOrgs.ts +++ b/scripts/genAllStudentOrgs.ts @@ -6,11 +6,9 @@ import { type ZodSchema, z } from "zod"; // Local utils imports. -import csv2TS, { - DEFAULT_HEADER, - type csv2TSOptions, -} from "@scripts/utils/csv2TS"; +import csv2TS, { type csv2TSOptions } from "@scripts/utils/csv2TS"; +// Define raw data schema for input csv validation. ---------------------------- export const rawStudentOrg: ZodSchema = z.object( // biome-ignore format: added alignment for clarity. { @@ -21,6 +19,7 @@ export const rawStudentOrg: ZodSchema = z.object( ); export type rawStudentOrg = z.infer; +// Define student organization schema for output ts validation. ---------------- export const studentOrg: ZodSchema = z.object( // biome-ignore format: added alignment for clarity. { @@ -31,6 +30,8 @@ export const studentOrg: ZodSchema = z.object( ); export type studentOrg = z.infer; +// Define middle fn to sanitize raw data into student org data. ---------------- + // Sanitize affiliation string into array of strings, fallback to null. export function sanitizeAffiliation(affiliation: string): string[] | null { // Early return null if affiliation is empty. @@ -64,6 +65,18 @@ export function sanitizeStudentOrgs(data: rawStudentOrg[]): studentOrg[] { }); } +// Define allStudentOrg header and footer for output ts file. ------------------ +export const allStudentOrgsHeader: string = `// ./src/autoGenerated/allStudentOrgs.ts +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// For details see ./scripts/genAllStudentOrgs.ts + +// Type imports. +import type { StudentOrg } from "@src/osu"; + +export const allStudentOrgs: StudentOrg[] =\n`; + +// Setup options for allStudentOrgs csv to ts conversion. ---------------------- export const allStudentOrgsOptions: csv2TSOptions = // biome-ignore format: added alignment for clarity. { @@ -72,12 +85,15 @@ export const allStudentOrgsOptions: csv2TSOptions = inFileSchema : rawStudentOrg, middleFunction : sanitizeStudentOrgs, outFilePath : "src/autoGenerated/allStudentOrgs.ts", - outFileHeader : DEFAULT_HEADER, - outFileArrayName: "allStudentOrgs", + outFileHeader : allStudentOrgsHeader, + outFileFooter : "", outFileSchema : studentOrg, }; -// Main function to convert allStudentOrgs csv to ts array. +// Main function to convert allStudentOrgs csv to ts array. -------------------- export default async function genAllStudentOrgs(): Promise { await csv2TS(allStudentOrgsOptions); } + +// Enable script to run standalone. -------------------------------------------- +// genAllStudentOrgs(); diff --git a/scripts/genAllUndergradMajorsAndDegrees.ts b/scripts/genAllUndergradMajorsAndDegrees.ts index 3a53af0..2319531 100644 --- a/scripts/genAllUndergradMajorsAndDegrees.ts +++ b/scripts/genAllUndergradMajorsAndDegrees.ts @@ -6,11 +6,9 @@ import { type ZodSchema, z } from "zod"; // Local utils imports. -import csv2TS, { - type csv2TSOptions, - DEFAULT_HEADER, -} from "@scripts/utils/csv2TS"; +import csv2TS, { type csv2TSOptions } from "@scripts/utils/csv2TS"; +// Define raw data schema for input csv validation. ---------------------------- export const rawUndergradMajor: ZodSchema = z.object( // biome-ignore format: added alignment for clarity. { @@ -22,6 +20,7 @@ export const rawUndergradMajor: ZodSchema = z.object( ); export type rawUndergradMajor = z.infer; +// Define undergrad major schema for output ts validation. --------------------- export const undergradMajor: ZodSchema = z.object( // biome-ignore format: added alignment for clarity. { @@ -33,6 +32,7 @@ export const undergradMajor: ZodSchema = z.object( ); export type undergradMajor = z.infer; +// Define middle fn to sanitize raw data into undergrad major data. ------------ export function sanitizeUndergradMajorsAndDegrees( data: rawUndergradMajor[], ): undergradMajor[] { @@ -49,6 +49,18 @@ export function sanitizeUndergradMajorsAndDegrees( }); } +// Define allUndergradMajorsAndDegrees header and footer. ---------------------- +export const allUndergradMajorsAndDegreesHeader: string = `// ./src/autoGenerated/allUndergradMajorsAndDegrees.ts +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// For details see ./scripts/genAllUndergradMajorsAndDegrees.ts + +// Type imports. +import type { Major } from "@src/osu"; + +export const allUndergradMajorsAndDegrees: Major[] =\n`; + +// Set up options for allUndergradMajorsAndDegrees conversion. ----------------- export const allUndergradMajorsAndDegreesOptions: csv2TSOptions = // biome-ignore format: added alignment for clarity. { @@ -57,12 +69,15 @@ export const allUndergradMajorsAndDegreesOptions: csv2TSOptions = inFileSchema : rawUndergradMajor, middleFunction : sanitizeUndergradMajorsAndDegrees, outFilePath : "src/autoGenerated/allUndergradMajorsAndDegrees.ts", - outFileHeader : DEFAULT_HEADER, - outFileArrayName: "allUndergradMajorsAndDegrees", + outFileHeader : allUndergradMajorsAndDegreesHeader, + outFileFooter : "", outFileSchema : undergradMajor }; -// Main function to convert allUndergradMajorsAndDegrees csv to ts array file. +// Main conversion function. --------------------------------------------------- export default async function genAllUndergradMajorsAndDegrees(): Promise { await csv2TS(allUndergradMajorsAndDegreesOptions); } + +// Enable script to run standalone. -------------------------------------------- +// genAllUndergradMajorsAndDegrees(); diff --git a/scripts/utils/csv2TS.ts b/scripts/utils/csv2TS.ts index 1a9ae52..6eb9221 100644 --- a/scripts/utils/csv2TS.ts +++ b/scripts/utils/csv2TS.ts @@ -12,16 +12,16 @@ import path from "node:path"; import csv from "csv-parser"; import fs from "fs-extra"; +// biome-ignore format: added alignment for clarity. export interface csv2TSOptions { - // biome-ignore format: added alignment for clarity. - inFilePath : string; - inFileCSVHeaders: string[]; - inFileSchema: ZodSchema; - middleFunction?: (data: unknown[]) => unknown[]; - outFilePath: string; - outFileHeader: string; - outFileArrayName: string; - outFileSchema: ZodSchema; + inFilePath : string; + inFileCSVHeaders : string[]; + inFileSchema : ZodSchema; + middleFunction ?: (data: unknown[]) => unknown[]; + outFilePath : string; + outFileHeader : string; + outFileFooter : string; + outFileSchema : ZodSchema; } // Generic csv to ts array function definition. -------------------------------- @@ -35,7 +35,7 @@ export default async function csv2TS(options: csv2TSOptions): Promise { middleFunction, outFilePath, outFileHeader, - outFileArrayName, + outFileFooter, outFileSchema, } = options; @@ -43,11 +43,14 @@ export default async function csv2TS(options: csv2TSOptions): Promise { await fileExistsNonEmpty(inFilePath); // Parse csv file. - let parsedData = await parseCSVFile({ - filePath: inFilePath, - csvHeaders: inFileCSVHeaders, - schema: inFileSchema, - }); + let parsedData = await parseCSVFile( + // biome-ignore format: added alignment for clarity. + { + filePath : inFilePath, + csvHeaders: inFileCSVHeaders, + schema : inFileSchema, + }, + ); // Apply middle transform function if provided. if (middleFunction) { @@ -66,13 +69,16 @@ export default async function csv2TS(options: csv2TSOptions): Promise { parsedData = outFileSchema.array().parse(parsedData); // Write to ts file. - await writeTSFile({ - outFilePath, - outFileHeader, - outFileArrayName, - data: parsedData, - schema: outFileSchema, - }); + await writeTSFile( + // biome-ignore format: added alignment for clarity. + { + filePath : outFilePath, + fileHeader: outFileHeader, + fileFooter: outFileFooter, + data : parsedData, + schema : outFileSchema, + }, + ); } catch (error) { console.error(`Error converting csv to TS array file: ${error}`); } @@ -95,10 +101,11 @@ export async function fileExistsNonEmpty(filePath: string): Promise { // Resovles to void (undefined) if file exists and is non-empty. } +// biome-ignore format: added alignment for clarity. export interface parseCSVFileOptions { - filePath: string; + filePath : string; csvHeaders: string[]; - schema: ZodSchema; + schema : ZodSchema; } /** @@ -142,15 +149,13 @@ export async function parseCSVFile( } } -export const DEFAULT_HEADER = - "// This is a auto-generated file. For changes, see @scripts/generate.ts."; - +// biome-ignore format: added alignment for clarity. export interface writeTSFileOptions { - outFilePath: string; - outFileHeader: string; - outFileArrayName: string; - data: unknown[]; - schema: ZodSchema; + filePath : string; + fileHeader: string; + fileFooter: string; + data : unknown[]; + schema : ZodSchema; } /** @@ -161,19 +166,18 @@ export interface writeTSFileOptions { */ export async function writeTSFile(options: writeTSFileOptions): Promise { // Destructure options. - const { outFilePath, outFileHeader, outFileArrayName, data, schema } = - options; + const { filePath, fileHeader, fileFooter, data, schema } = options; // Resolve out file path. - const resolvedOutFilePath: string = path.resolve(outFilePath); + const resolvedFilePath: string = path.resolve(filePath); // Validate data against schema. const validatedData = schema.array().parse(data); // Prepare out file content. const arrayContent: string = JSON.stringify(validatedData, null, 2); - const outFileContent = `${outFileHeader}\nconst ${outFileArrayName} = ${arrayContent};\nexport default ${outFileArrayName};\n`; + const fileContent = `${fileHeader}${arrayContent};\n${fileFooter}`; // Write to out file. - await fs.outputFile(resolvedOutFilePath, outFileContent); + await fs.outputFile(resolvedFilePath, fileContent); } diff --git a/src/autoGenerated/allStudentOrgs.ts b/src/autoGenerated/allStudentOrgs.ts index ff680cf..0132bb0 100644 --- a/src/autoGenerated/allStudentOrgs.ts +++ b/src/autoGenerated/allStudentOrgs.ts @@ -1,5 +1,13 @@ -// This is a auto-generated file. For changes, see @scripts/generate.ts. -const allStudentOrgs = [ +// ./src/autoGenerated/allStudentOrgs.ts +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// For details see ./scripts/genAllStudentOrgs.ts + +// Type imports. +import type { StudentOrg } from "@src/osu"; + +export const allStudentOrgs: StudentOrg[] = +[ { "name": "The Alliance of Students with Disabilities for Inclusion, Networking, and Transition Opportunities in STEM at The Ohio State University", "purposeStatement": "The Alliance of Students with Disabilities for Inclusion, Networking, and Transition Opportunities in STEM at The Ohio State University (TAP...", @@ -17467,4 +17475,3 @@ const allStudentOrgs = [ ] } ]; -export default allStudentOrgs; diff --git a/src/autoGenerated/allUndergradMajorsAndDegrees.ts b/src/autoGenerated/allUndergradMajorsAndDegrees.ts index 205bb46..6f059d0 100644 --- a/src/autoGenerated/allUndergradMajorsAndDegrees.ts +++ b/src/autoGenerated/allUndergradMajorsAndDegrees.ts @@ -1,5 +1,13 @@ -// This is a auto-generated file. For changes, see @scripts/generate.ts. -const allUndergradMajorsAndDegrees = [ +// ./src/autoGenerated/allUndergradMajorsAndDegrees.ts +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// For details see ./scripts/genAllUndergradMajorsAndDegrees.ts + +// Type imports. +import type { Major } from "@src/osu"; + +export const allUndergradMajorsAndDegrees: Major[] = +[ { "major": "Accounting", "degree": "BS", @@ -1291,4 +1299,3 @@ const allUndergradMajorsAndDegrees = [ "college": "Arts and Sciences" } ]; -export default allUndergradMajorsAndDegrees; diff --git a/src/osu.test.ts b/src/osu.test.ts index 52a5193..f9cda9b 100644 --- a/src/osu.test.ts +++ b/src/osu.test.ts @@ -8,8 +8,8 @@ import { describe, expect, it } from "vitest"; // Local class, constant, and util imports. import { studentOrg } from "@scripts/genAllStudentOrgs"; import { undergradMajor } from "@scripts/genAllUndergradMajorsAndDegrees"; -import allStudentOrgs from "@src/autoGenerated/allStudentOrgs"; -import allUndergradMajorsAndDegrees from "@src/autoGenerated/allUndergradMajorsAndDegrees"; +import { allStudentOrgs } from "@src/autoGenerated/allStudentOrgs"; +import { allUndergradMajorsAndDegrees } from "@src/autoGenerated/allUndergradMajorsAndDegrees"; // Testing module imports. import { osu } from "@src/osu"; diff --git a/src/osu.ts b/src/osu.ts index 0596b6b..b022bec 100644 --- a/src/osu.ts +++ b/src/osu.ts @@ -4,8 +4,8 @@ // encapsulates OSU-related data services. // Local utils and contant imports. -import allStudentOrgs from "@src/autoGenerated/allStudentOrgs"; -import allUndergradMajorsAndDegrees from "@src/autoGenerated/allUndergradMajorsAndDegrees"; +import { allStudentOrgs } from "@src/autoGenerated/allStudentOrgs"; +import { allUndergradMajorsAndDegrees } from "@src/autoGenerated/allUndergradMajorsAndDegrees"; export namespace osu { @@ -14,9 +14,7 @@ export namespace osu { /** * A list of all undergraduate majors and degrees. - * * @type {osu.undergrad.Major[]} - * * @memberof osu.undergrad */ export const majors: Major[] = allUndergradMajorsAndDegrees; @@ -25,9 +23,7 @@ export namespace osu { // OSU Student Organizations array. ------------------------------------------ /** * A list of all student organizations. - * * @type {osu.StudentOrg[]} - * * @memberof osu */ export const studentOrgs: StudentOrg[] = allStudentOrgs; @@ -36,9 +32,7 @@ export namespace osu { // OSU-related types. ---------------------------------------------------------- /** * Represents an undergraduate major. - * * @typedef {Object} Major - * * @property {string} major - The name of the major. * @property {string|null} degree - The degree associated with the major, or null if not applicable. * @property {string} campus - The campus where the major is offered. @@ -53,9 +47,7 @@ export interface Major { /** * Represents a student organization. - * * @typedef {Object} StudentOrg - * * @property {string} name - The name of the student organization. * @property {string} purposeStatement - A paragraph about the organization's purpose. * @property {string[]} affiliation - Includes campus, category, mission, etc. From 11f8d8ba9908c2c3fd3957111d581bfa8c575324 Mon Sep 17 00:00:00 2001 From: Keming He Date: Sat, 3 Aug 2024 10:40:50 -0400 Subject: [PATCH 2/2] chore(changelog): v1.1.1 via release-it (auto, ci env) --- CHANGELOG.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be50d06..d345d98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## [1.1.1](https://github.com/KemingHe/OSU/compare/v1.1.0...v1.1.1) (2024-08-03) + ## [1.1.0](https://github.com/KemingHe/OSU/compare/v1.0.10...v1.1.0) (2024-08-03) diff --git a/package.json b/package.json index 18c6d71..6ffd2fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@keminghe/osu", - "version": "1.1.0", + "version": "1.1.1", "description": "Unofficial, publicly available data about The Ohio State University.", "keywords": [ "data",