smithery/jikime

jikime-lang-javascript

JavaScript ES2024+ development specialist covering Node.js 22 LTS, Bun 1.x (serve, SQLite, S3, shell, test), Deno 2.x, testing (Vitest, Jest), linting (ESLint 9, Biome), and backend frameworks (Express, Fastify, Hono).

Installation

$ npx skills add smithery/jikime --skill jikime-lang-javascript

Summary

  • JavaScript ES2024+ development specialist covering Node.js 22 LTS, Bun 1.x (serve, SQLite, S3, shell, test), Deno 2.x, testing (Vitest, Jest), linting (ESLint 9, Biome), and backend frameworks (Express, Fastify, Hono).
  • Use when developing JavaScript APIs, web applications, or Node.js projects.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/jikime · top by installs.

npx skills add smithery/jikime

Browse all from smithery/jikime

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,400 B
  • docs SUMMARY.md 324 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

JavaScript Development Guide

JavaScript ES2024+ / Node.js 22 개발을 위한 간결한 가이드.

Quick Reference

용도 도구 특징
Runtime Node.js 22 LTS, 안정적
Runtime Bun 빠름, 올인원
Framework Express 미니멀, 유연
Framework Fastify 빠름, 스키마
Testing Vitest 빠름, ESM

Project Setup

# Node.js
npm init -y
npm install express

# Bun
bun init
bun add express

Express Patterns

Basic API

import express from 'express';

const app = express();
app.use(express.json());

// Routes
app.get('/api/users', async (req, res) => {
  const users = await UserService.list();
  res.json(users);
});

app.get('/api/users/:id', async (req, res) => {
  const user = await UserService.get(req.params.id);
  if (!user) {
    return res.status(404).json({ error: 'Not found' });
  }
  res.json(user);
});

app.post('/api/users', async (req, res) => {
  const user = await UserService.create(req.body);
  res.status(201).json(user);
});

app.listen(3000);

Middleware

// Error handler
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Something went wrong' });
});

// Auth middleware
const authenticate = async (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) {
    return res.status(401).json({ error: 'No token' });
  }

  const user = await verifyToken(token);
  if (!user) {
    return res.status(401).json({ error: 'Invalid token' });
  }

  req.user = user;
  next();
};

app.get('/api/me', authenticate, (req, res) => {
  res.json(req.user);
});

Bun Patterns

HTTP Server

// Bun native server
Bun.serve({
  port: 3000,
  async fetch(req) {
    const url = new URL(req.url);

    if (url.pathname === '/api/users' && req.method === 'GET') {
      const users = await getUsers();
      return Response.json(users);
    }

    return new Response('Not Found', { status: 404 });
  },
});

SQLite (Built-in)

import { Database } from 'bun:sqlite';

const db = new Database('app.db');

db.run(`
  CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE
  )
`);

const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
insert.run('John', '[email protected]');

const users = db.query('SELECT * FROM users').all();

Modern JavaScript

ES2024 Features

// Array grouping
const grouped = Object.groupBy(users, user => user.role);

// Promise.withResolvers
const { promise, resolve, reject } = Promise.withResolvers();

// Top-level await
const config = await loadConfig();

// Optional chaining & nullish coalescing
const name = user?.profile?.name ?? 'Anonymous';

Async Patterns

// Promise.all for parallel
const [users, posts] = await Promise.all([
  fetchUsers(),
  fetchPosts()
]);

// Promise.allSettled for error tolerance
const results = await Promise.allSettled([
  fetchUser(1),
  fetchUser(2),
  fetchUser(3)
]);

// Async iterator
async function* fetchPages() {
  let page = 1;
  while (true) {
    const data = await fetchPage(page++);
    if (!data.length) break;
    yield data;
  }
}

for await (const page of fetchPages()) {
  console.log(page);
}

Testing with Vitest

import { describe, it, expect, vi } from 'vitest';

describe('UserService', () => {
  it('creates user successfully', async () => {
    const user = await UserService.create({
      name: 'John',
      email: '[email protected]'
    });

    expect(user.id).toBeDefined();
    expect(user.name).toBe('John');
  });

  it('throws on duplicate email', async () => {
    await expect(
      UserService.create({ name: 'John', email: '[email protected]' })
    ).rejects.toThrow('Email already exists');
  });
});

// Mocking
vi.mock('./database', () => ({
  query: vi.fn(() => Promise.resolve([{ id: 1, name: 'John' }]))
}));

Project Structure

project/
├── src/
│   ├── index.js
│   ├── routes/
│   ├── services/
│   ├── models/
│   └── middleware/
├── tests/
├── package.json
└── README.md

Best Practices

  • ESM: "type": "module" 사용
  • Async/Await: Promise 체인 대신 async/await
  • Error Handling: try/catch와 에러 미들웨어 사용
  • 환경변수: dotenv 또는 Bun 내장 사용
  • Validation: Zod로 입력 검증

Last Updated: 2026-01-21 Version: 2.0.0