UNPKG

@codama/renderers-core

Version:

Core types and helpers for Codama renderers to use

1 lines 6.43 kB
{"version":3,"sources":["../src/index.ts","../src/fs.ts","../src/RenderMap.ts","../src/writeRenderMapVisitor.ts"],"sourcesContent":["export * from './fs';\nexport * from './RenderMap';\nexport * from './writeRenderMapVisitor';\n","import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\n\nimport { CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE, CodamaError } from '@codama/errors';\n\nexport function readJson<T extends object>(value: string): T {\n if (!__NODEJS__) {\n throw new CodamaError(CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE, { fsFunction: 'readFileSync' });\n }\n\n return JSON.parse(readFileSync(value, 'utf-8')) as T;\n}\n\nexport const createDirectory = (path: string): void => {\n if (!__NODEJS__) {\n throw new CodamaError(CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE, { fsFunction: 'mkdirSync' });\n }\n\n mkdirSync(path, { recursive: true });\n};\n\nexport const deleteDirectory = (path: string): void => {\n if (!__NODEJS__) {\n throw new CodamaError(CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE, { fsFunction: 'rmSync' });\n }\n\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n};\n\nexport const createFile = (path: string, content: string): void => {\n if (!__NODEJS__) {\n throw new CodamaError(CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE, { fsFunction: 'writeFileSync' });\n }\n\n const directory = path.substring(0, path.lastIndexOf('/'));\n if (!existsSync(directory)) {\n createDirectory(directory);\n }\n writeFileSync(path, content);\n};\n","import { CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND, CodamaError } from '@codama/errors';\n\nimport { createFile } from './fs';\n\nexport class RenderMap {\n protected readonly _map: Map<string, string> = new Map();\n\n add(relativePath: string, code: string): RenderMap {\n this._map.set(relativePath, code);\n return this;\n }\n\n remove(relativePath: string): RenderMap {\n this._map.delete(relativePath);\n return this;\n }\n\n mergeWith(...others: RenderMap[]): RenderMap {\n others.forEach(other => {\n other._map.forEach((code, relativePath) => {\n this.add(relativePath, code);\n });\n });\n return this;\n }\n\n isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n has(key: string): boolean {\n return this._map.has(key);\n }\n\n get(key: string): string {\n const value = this.safeGet(key);\n if (value === undefined) {\n throw new CodamaError(CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND, { key });\n }\n return value;\n }\n\n safeGet(key: string): string | undefined {\n return this._map.get(key);\n }\n\n contains(key: string, value: RegExp | string): boolean {\n const content = this.get(key);\n return typeof value === 'string' ? content.includes(value) : value.test(content);\n }\n\n async mapContentAsync(fn: (content: string) => Promise<string>): Promise<RenderMap> {\n await Promise.all(\n [...this._map.entries()].map(async ([relativePath, code]) => {\n this._map.set(relativePath, await fn(code));\n }),\n );\n return this;\n }\n\n mapContent(fn: (content: string) => string): RenderMap {\n this._map.forEach((code, relativePath) => {\n this._map.set(relativePath, fn(code));\n });\n return this;\n }\n\n write(path: string): void {\n this._map.forEach((code, relativePath) => {\n createFile(`${path}/${relativePath}`, code);\n });\n }\n}\n","import { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { RenderMap } from './RenderMap';\n\nexport function writeRenderMapVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<RenderMap, TNodeKind>,\n path: string,\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, renderMap => renderMap.write(path));\n}\n"],"mappings":"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","names":["import_errors"]}