Skip to Content
ExportsProgrammatic Usage Examples

Programmatic Usage Examples

Real-world recipes using @zamdevio/i18nprune/config and @zamdevio/i18nprune/core.

1. Pre-commit Validation Hook

// scripts/validate-i18n.ts import { resolveContext, scanProjectDynamicKeySites } from '@zamdevio/i18nprune/core'; import { exactLiteralKeys } from '@zamdevio/i18nprune/core'; const ctx = resolveContext(); const dynamicSites = scanProjectDynamicKeySites(ctx); if (dynamicSites.length > 0) { console.warn(`${dynamicSites.length} dynamic translation keys found.`); process.exit(1); }

2. Custom Report Generator

import { resolveContext, collectStringLeaves, scanSources, readJsonFile, exactLiteralKeys, } from '@zamdevio/i18nprune/core'; const ctx = resolveContext(); const sourceData = readJsonFile(ctx.paths.sourceLocale); const usedKeys = new Set(exactLiteralKeys(scanSources(ctx.paths.srcRoot), ctx.config.functions)); const unused = collectStringLeaves(sourceData) .map((l) => l.path) .filter((k) => !usedKeys.has(k)); console.log('Unused keys:', unused);

3. Config in Library / Monorepo

import { defineConfig } from '@zamdevio/i18nprune/config'; export default defineConfig({ source: 'packages/design-system/locales/en.json', localesDir: 'packages/design-system/locales', src: 'packages/**/*.{ts,tsx}', functions: ['t'], });

4. Testing Context Resolution

import { resolveContext, clearContextCache } from '@zamdevio/i18nprune/core'; test('resolves context correctly', () => { clearContextCache(); const ctx = resolveContext(fixturePath); expect(ctx.meta.fieldSources.source).toBe('file'); });

5. Namespaced imports (same API, grouped)

import { context, extractor, dynamic, validate, files } from '@zamdevio/i18nprune/core'; const ctx = context.resolveContext(); const usage = extractor.scanProjectLiteralKeyUsage(ctx); const sites = dynamic.scanProjectDynamicKeySites(ctx); const raw = files.readJsonFile(ctx.paths.sourceLocale); const missing = validate.computeMissingLiteralKeys(ctx, raw);

More examples coming as the ecosystem grows.

Pro tip: Always call clearContextCache() in tests or when switching projects.