Compare commits

...
Sign in to create a new pull request.

11 commits

5 changed files with 651 additions and 1278 deletions

View file

@ -0,0 +1,41 @@
name: Publish to Forgejo npm Registry
on:
push:
tags:
- "v*"
workflow_dispatch:
jobs:
publish:
runs-on: native
env:
NODE_AUTH_TOKEN: ${{ secrets.FORGEJO_NPM_TOKEN }}
REGISTRY_URL: https://git.mizuki.guru/api/packages/imnyang/npm/
SCOPE: imnyang
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
- name: Configure npm auth for Forgejo registry
run: |
REGISTRY_HOST="${REGISTRY_URL#https://}"
REGISTRY_HOST="${REGISTRY_HOST#http://}"
{
echo "@${SCOPE}:registry=${REGISTRY_URL}"
echo "//${REGISTRY_HOST}:_authToken=${NODE_AUTH_TOKEN}"
echo "always-auth=true"
} > "$HOME/.npmrc"
- name: Install, build, and publish in Nix shell
run: |
source /etc/bashrc
nix shell --extra-experimental-features nix-command --extra-experimental-features flakes nixpkgs#nodejs_24 -c sh -lc '
export COREPACK_HOME="$PWD/.corepack"
export XDG_CACHE_HOME="$PWD/.cache"
mkdir -p "$COREPACK_HOME" "$XDG_CACHE_HOME"
corepack prepare pnpm@10.28.0
corepack pnpm install --frozen-lockfile
corepack pnpm build
corepack pnpm publish --no-git-checks --registry "$REGISTRY_URL"
'

View file

@ -12,11 +12,24 @@
## 설치 ## 설치
```bash ```bash
npm install comcigan.ts # npm npm install @imnyang/comcigan.ts # npm
yarn add comcigan.ts # yarn yarn add @imnyang/comcigan.ts # yarn
pnpm add comcigan.ts # pnpm pnpm add @imnyang/comcigan.ts # pnpm
bun add @imnyang/comcigan.ts
``` ```
## Forgejo 레지스트리에서 설치하기
이 패키지를 Forgejo 레지스트리에서 설치할 때는 설치하는 프로젝트(consumer) 쪽 설정이 필요합니다.
프로젝트 루트의 `.npmrc`에 아래를 추가하세요.
```ini
@imnyang:registry=https://git.mizuki.guru/api/packages/imnyang/npm/
```
패키지가 비공식(private)인 경우에는 인증 토큰도 필요합니다.
## 사용 예시 ## 사용 예시
```typescript ```typescript

View file

@ -1,6 +1,6 @@
{ {
"name": "@imnyang/comcigan.ts", "name": "@imnyang/comcigan.ts",
"version": "0.2.0", "version": "0.3.1",
"description": "A Comcigan parser written in TypeScript", "description": "A Comcigan parser written in TypeScript",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
@ -9,29 +9,40 @@
"url": "git+https://github.com/imnyang/comcigan.ts" "url": "git+https://github.com/imnyang/comcigan.ts"
}, },
"scripts": { "scripts": {
"build": "rimraf dist && tsc", "build": "rm -rf dist && node ./node_modules/typescript/bin/tsc",
"lint": "biome check", "lint": "biome check",
"release": "semantic-release", "release": "semantic-release",
"prepack": "pnpm build", "prepack": "npm run build",
"test": "node -r ts-node/register --test tests/*.test.ts" "test": "node -r ts-node/register --test tests/*.test.ts"
}, },
"keywords": ["comcigan", "parser", "typescript", "school", "korean"], "keywords": [
"comcigan",
"parser",
"typescript",
"school",
"korean"
],
"author": "imnyang <me@imnya.ng>", "author": "imnyang <me@imnya.ng>",
"license": "LGPL-3.0-or-later", "license": "LGPL-3.0-or-later",
"packageManager": "pnpm@9.4.0+sha512.f549b8a52c9d2b8536762f99c0722205efc5af913e77835dbccc3b0b0b2ca9e7dc8022b78062c17291c48e88749c70ce88eb5a74f1fa8c4bf5e18bb46c8bd83a", "publishConfig": {
"registry": "https://git.mizuki.guru/api/packages/imnyang/npm/"
},
"packageManager": "pnpm@10.28.0",
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.8.3", "@biomejs/biome": "^1.9.4",
"@types/node": "^20.14.9", "@types/node": "^20.19.28",
"rimraf": "^5.0.7", "rimraf": "^5.0.10",
"semantic-release": "^24.0.0", "semantic-release": "^24.2.9",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.5.2" "typescript": "^5.9.3"
}, },
"dependencies": { "dependencies": {
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"undici": "^6.20.1" "undici": "^6.23.0"
}, },
"release": { "release": {
"branches": ["release"] "branches": [
"release"
]
} }
} }

1840
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -62,9 +62,9 @@ export default class Comcigan {
const now = data[`자료${dayCode}`] as number[][][][] const now = data[`자료${dayCode}`] as number[][][][]
const getSubject = (code?: number) => const getSubject = (code?: number) =>
code ? subjects[(code / 10 ** (teachersLen + 1)) | 0] : '없음' code ? subjects[(code / 10 ** (teachersLen + 1)) | 0] : ''
const getTeacher = (code?: number) => const getTeacher = (code?: number) =>
code ? teachers[code % 10 ** teachersLen] : '없음' code ? teachers[code % 10 ** teachersLen] : ''
return mergeMap(now.slice(1), original.slice(1), (gNow, gOrigin) => return mergeMap(now.slice(1), original.slice(1), (gNow, gOrigin) =>
mergeMap(gNow.slice(1), gOrigin.slice(1), (cNow, cOrigin) => mergeMap(gNow.slice(1), gOrigin.slice(1), (cNow, cOrigin) =>