4.0.1 • Published 10 months ago

@keminghe/osu v4.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

@keminghe/osu

!IMPORTANT

Async accessors depend on jsdom and are node-only. For example: import { getResearchPostingsAsync } from "@keminghe/osu/async";

Use import from the synchronous @keminghe/osu if you are working in a browswer environment.

!NOTE

Build by students, for students, with :heart:. NOT affiliated by official OSU.

  • Publicly-available official data about OSU undergrad majors here.
  • Publicly-available official data about OSU student orgs here.

:gear: Installation

Requires Node.js >= 8.1.0 (es2017)

# Using npm:
npm install @keminghe/osu

# Using yarn:
yarn add @keminghe/osu

# Using pnpm: (recommended)
pnpm add @keminghe/osu

:rocket: Quickstart

Using Validators

// Using OSU email validator functions.
import {
  isNameDotNum,
  isOSUDotEduEmail,
  isBuckeyemail,
  isOSUEmail,
} from "@keminghe/osu";

isNameDotNum("buckeye.1");                      // true
isOSUDotEduEmail("buckeye.1@osu.edu");          // true
isBuckeyemail("buckeye.1@buckeyemail.osu.edu"); // true
isOSUEmail("non-osu@gmail.com");                // false

Using RegExp Patterns

// Using OSU name dot num and email RegExp patterns.
import {
  NAME_DOT_NUM_PATTERN,
  OSU_DOT_EDU_EMAIL_PATTERN,
  BUCKEYEMAIL_PATTERN
} from "@keminghe/osu";

NAME_DOT_NUM_PATTERN.test("buckeye.1");                         // true
OSU_DOT_EDU_EMAIL_PATTERN.test("buckeye.1@osu.edu");            // true
BUCKEYEMAIL_PATTERN.test("buckeyemail.1@buckeyemail.osu.edu");  // true

Accessing All Undergrad Majors

import { 
  getUndergradMajors, 
  type UndergradMajor,
  UndergradMajorSchema,
} from "@keminghe/osu";

const majors: UndergradMajor[] = getUndergradMajors();
UndergradMajorSchema.array().parse(majors);
console.log(majors);

Accessing All Student Organizations

import { 
  getStudentOrgs,
  type StudentOrg,
  StudentOrgSchema,
} from "@keminghe/osu";

const orgs: StudentOrg[] = getStudentOrgs();
StudentOrgSchema.array().parse(orgs);
console.log(orgs);

Accessing All Undergrad Research Postings (Async!)

import { ResearchPostingSchema, type ResearchPosting } from "@keminghe/osu";

// IMPORTANT: note the different async import path.
import { getResearchPostingsAsync } from "@keminghe/osu/async";

getResearchPostingsAsync()
  .then((researchPostings) => {
    ResearchPostingSchema.array().parse(researchPostings);
    console.log(researchPostings);
  })
  .catch((error) => {
    console.error(error);
  });

// Or use with async/await.

(DEPRECATED v1.1.0) Using Validators

import { isNameDotNumber, isOSUEmail, isBuckeyemail, isOSUOrBuckeyemail } from "@keminghe/osu";
const flag1 = isNameDotNumber("brutus.1");                    // true
const flag2 = isNameDotNumber("adams-brown-catlyn.3");        // true
const flag3 = isOSUEmail("brutus.1@osu.edu");                 // true
const flag4 = isBuckeyemail("brutus.1@buckeyemail.osu.edu");  // true
const flag5 = isOSUOrBuckeyemail("non-osu@email.com");        // false

(DEPRECATED v1.1.0) Accessing Undergraduate Majors and Degrees

import osu from "@keminghe/osu";

const majors = osu.undergrad.majors;
console.log(majors);

(DEPRECATED v1.1.0) Accessing Student Organizations

import osu from "@keminghe/osu";

const studentOrgs = osu.studentOrgs;
console.log(studentOrgs);

:blue_book: API

StudentOrg Type

/**
 * TypeScript type inferred from the `StudentOrg` Zod schema.
 *
 * This type represents the structure of a student organization object as defined by the `StudentOrg` schema.
 *
 * @typedef {Object} StudentOrg
 * @property {string} name - Name of the student organization, represented by a non-empty string.
 * @property {string | null} purposeStatement - Purpose statement of the student organization, represented by a non-empty string, or null if not applicable or missing data.
 * @property {Campus[] | null} campuses - Campuses where the student organization is active, represented by a non-empty array of `Campus` objects, or null if not applicable or missing data.
 * @property {StudentOrgCategory[] | null} categories - Categories of the student organization, represented by a non-empty array of `StudentOrgCategory` objects, or null if not applicable or missing data.
 */
export type StudentOrg = z.infer<typeof StudentOrgSchema>;

UndergradMajor Type

/**
 * TypeScript type inferred from the `UndergradMajor` Zod schema.
 *
 * This type represents the structure of an undergraduate major object as defined by the `UndergradMajor` schema.
 *
 * @typedef {Object} UndergradMajor
 * @property {string} major - Name of the major, represented by a non-empty string.
 * @property {UndergradDegree[] | null} degrees - Array of undergraduate degrees associated with the major, represented by a non-empty array of `UndergradDegree` objects, or null if not applicable or missing data.
 * @property {Campus[] | null} campuses - Campuses where the major is offered, represented by a non-empty array of `Campus` objects, or null if not applicable or missing data.
 * @property {College | null} college - College where the major belongs, represented by a `College` object, or null if not applicable or missing data.
 */
export type UndergradMajor = z.infer<typeof UndergradMajorSchema>;

ResearchPosting Type

/**
 * TypeScript type inferred from the `ResearchPosting` Zod schema.
 *
 * This type represents the structure of a research posting object as defined by the `ResearchPosting` schema.
 *
 * @typedef {Object} ResearchPosting
 * @property {string} title - Title of the research posting, represented by a non-empty string.
 * @property {string} link - URL linking to the research posting, represented by a valid URL string.
 * @property {string | null} applicationDeadline - Application deadline, represented by a non-empty string, or null if not applicable or missing data.
 * @property {string | null} department - Department offering the research posting, represented by a non-empty string, or null if not applicable or missing data.
 * @property {string | null} publicOrPrivate - Indicates whether the posting is public or private, represented by a non-empty string, or null if not applicable or missing data.
 * @property {string | null} hoursPerWeek - Number of hours per week required, represented by a non-empty string, or null if not applicable or missing data.
 * @property {string[] | null} compensationTypes - Types of compensation offered, represented by a non-empty array of non-empty strings, or null if not applicable or missing data.
 */
export type ResearchPosting = z.infer<typeof ResearchPostingSchema>;

:key: License

Usage indicates agreement with the MIT license. More Info.

:seedling: Community

Alt

4.0.1

10 months ago

4.0.0

10 months ago

3.1.1

10 months ago

2.0.1

11 months ago

1.1.0

12 months ago

1.0.10

12 months ago

1.0.8

12 months ago

1.0.6

12 months ago