Skip to main content

stacks-cron

Use when working with cron expressions in a Stacks application - parsing cron syntax, registering OS-level cron jobs, or low-level scheduling. Covers @stacksjs/cron. For higher-level scheduling, see stacks-scheduler.

소스 정보

저장소
stacksjs/stacks
최근 소스 활동
2026년 8월 29일 17:05
감지된 SKILL.md 언어
영어
스타
631
포크
20

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
stacks-cron
description
Use when working with cron expressions in a Stacks application - parsing cron syntax, registering OS-level cron jobs, or low-level scheduling. Covers @stacksjs/cron. For higher-level scheduling, see stacks-scheduler.
license
MIT
compatibility
Bun >= 1.3.0, TypeScript
allowed-tools
Read Edit Write Bash Grep Glob
# Stacks Cron Low-level cron expression parser and OS-level job registration. For most scheduling tasks, use `@stacksjs/scheduler` instead. ## Key Paths - Core package: `storage/framework/core/cron/src/` - Package: `@stacksjs/cron` ## Source Files ``` cron/src/ ├── index.ts # Re-exports ├── parser.ts # Cron expression parser (parseCron) ├── types.ts # Type definitions └── bun-cron.d.ts # Bun.cron type declarations ``` ## API ### parse ```typescript import { parse } from '@stacksjs/cron' function parse(expression: string, relativeDate?: Date | number): Date | null ``` Parses a cron expression and returns the next matching UTC date. Falls back to native `Bun.cron.parse()` if available. ```typescript parse('0 0 * * *') // Next midnight UTC parse('*/5 * * * *') // Next 5-minute mark parse('0 9 * * MON-FRI') // Next weekday at 9 AM parse('0 0 1 * *', new Date()) // Next 1st of month from now ``` ### parseCron (Native Implementation) ```typescript import { parseCron } from '@stacksjs/cron' function parseCron(expression: string, relativeDate?: Date | number): Date | null ``` Full 5-field cron parser supporting: | Field | Values | Special Characters | |-------|--------|--------------------| | Minute | 0-59 | `*` `,` `-` `/` | | Hour | 0-23 | `*` `,` `-` `/` | | Day of Month | 1-31 | `*` `,` `-` `/` | | Month | 1-12 or JAN-DEC | `*` `,` `-` `/` | | Day of Week | 0-6 or SUN-SAT | `*` `,` `-` `/` | ### Nicknames | Nickname | Equivalent | |----------|-----------| | `@yearly` / `@annually` | `0 0 1 1 *` | | `@monthly` | `0 0 1 * *` | | `@weekly` | `0 0 * * 0` | | `@daily` / `@midnight` | `0 0 * * *` | | `@hourly` | `0 * * * *` | ### register ```typescript import { register } from '@stacksjs/cron' async function register(path: string, schedule: string, title: string): Promise<void> ``` Registers an OS-level cron job. Requires Bun.cron support. - `path` — path to the script (must export `scheduled(controller)` handler) - `schedule` — cron expression - `title` — job identifier (alphanumeric, hyphens, underscores only) ### remove ```typescript import { remove } from '@stacksjs/cron' async function remove(title: string): Promise<void> ``` Removes a registered cron job by title. ## Types ```typescript type CatchCallbackFn = (error: Error) => void type ProtectCallbackFn = () => void type IntRange<Min, Max> // TypeScript utility for bounded integer ranges ``` ## Cron Expression Examples ```typescript parse('*/5 * * * *') // Every 5 minutes parse('0 */2 * * *') // Every 2 hours parse('0 9,17 * * *') // At 9 AM and 5 PM parse('0 0 * * MON') // Every Monday at midnight parse('0 0 1,15 * *') // 1st and 15th of each month parse('30 4 * * SUN') // Sundays at 4:30 AM ``` ## Gotchas - **Low-level primitive** — for most use cases, prefer `@stacksjs/scheduler` which provides `.daily()`, `.hourly()`, etc. - **UTC dates** — `parse()` returns UTC dates, not local time - **POSIX OR logic** — when both dayOfMonth and dayOfWeek are specified (not `*`), matches if EITHER matches - **Named values** — supports JAN-DEC and SUN-SAT (case-insensitive) - **Searches up to ~4 years** — parser iterates forward to find the next match, stops after ~4 years - **OS-level registration** — `register()` requires Bun.cron support (not available in all environments) - **`register()` scripts must export `scheduled()`** — the target file must have a `scheduled(controller)` handler
GitHub에서 보기