typed-snapshot
v0.3.0
Published
Generate typed TypeScript snapshots (const/enum/union) to file.
Maintainers
Readme
typed-snapshot
Generate typed TypeScript snapshots to disk — as a constant, an enum, a union type, an as const object, or an interface — with optional import type headers and timestamps.
Install
npm i typed-snapshotor in a monorepo, add as a local workspace and npm run build inside the package.
Usage
import { writeTypedVariableToFile } from 'typed-snapshot';
await writeTypedVariableToFile({
type: '{ base: Tokens; total: number }',
data: { base: 'USDT', total: 123.4567 },
variableName: 'PORTFOLIO_SALDO',
outputPath: './data/portfolio_saldo.ts',
importPath: '../src/enums/Tokens',
importTypeName: 'Tokens',
includeTimestamp: true,
});Arrays → enum
await writeTypedVariableToFile({
type: 'never', // ignored for enum emission
data: ['BTC', 'ETH', 'USDT'],
variableName: 'Token',
outputPath: './data/Token.ts',
typeFormat: 'enum',
});Arrays → union type
await writeTypedVariableToFile({
type: 'never', // ignored for type emission
data: ['BTCUSDT', 'ETHUSDT'],
variableName: 'Symbol',
outputPath: './data/Symbol.ts',
typeFormat: 'type',
});Arrays → as const object
await writeTypedVariableToFile({
type: 'never', // ignored for asconst emission
data: ['BNB', 'BTC', 'USDT', 'ETH'],
variableName: 'Token',
outputPath: './data/Token.ts',
typeFormat: 'asconst',
});Generates:
export const Token = {
BNB: 'BNB',
BTC: 'BTC',
USDT: 'USDT',
ETH: 'ETH',
} as const;Arrays → interface
await writeTypedVariableToFile({
type: 'never', // ignored for interface emission
data: ['BNB', 'BTC', 'USDT', 'ETH'],
variableName: 'TokenData',
outputPath: './data/TokenData.ts',
typeFormat: 'interface',
});Generates:
export interface TokenData {
BNB: 'BNB';
BTC: 'BTC';
USDT: 'USDT';
ETH: 'ETH';
}API
writeTypedVariableToFile(options): Promise<void>type: string — type annotation for the exported const (plain mode)data: any — data to serializevariableName: string — export name (also used as enum/type name)outputPath: string — file path to writeimportPath?,importTypeName?— optionalimport typeheaderincludeTimestamp?(default true)typeFormat?:'plain' | 'enum' | 'type' | 'asconst' | 'interface'
Helpers are also exported: generateEnumFromArray, generateTypeFromArray, generateAsConstFromArray, generateInterfaceFromArray.
Notes
- The library has zero runtime dependencies. Build with
tsc. - For
enummode, string values must be valid TypeScript identifiers to become keys; otherwise the file falls back to exporting a const array. - For
asconstandinterfacemodes:- String values that are valid TypeScript identifiers use the value as the property key
- Invalid identifiers use
ITEM_${index}as the property key - Number values use
VALUE_${number}as the property key
Contributing
- Fork the repository.
- Create a new branch:
git checkout -b feature-name. - Commit your changes:
git commit -m 'Add some feature'. - Push to the branch:
git push origin feature-name. - Open a pull request.
License
Distributed under the MIT License. See the LICENSE file for more details.
