1 | import type { Config } from './generateCode.js'
|
2 |
|
3 | export type CodeGeneratorImplementation = (config: Config) => CodeGeneratorImplementationResult
|
4 | type CodeGeneratorImplementationResult = string
|
5 |
|
6 | interface CodeGeneratorResult {
|
7 | moduleName: string
|
8 | code: string
|
9 | }
|
10 |
|
11 | export type CodeGenerator = (config: Config) => CodeGeneratorResult
|
12 |
|
13 | export type CodeGeneratorConstructor = (
|
14 | moduleName: string,
|
15 | codeGenerator: CodeGeneratorImplementation,
|
16 | ) => { moduleName: string; generate: CodeGenerator }
|
17 |
|
18 | export const createCodeGenerator: CodeGeneratorConstructor = (moduleName: string, codeGeneratorImplementation) => {
|
19 | const generate = (config: Config) => {
|
20 | const code = codeGeneratorImplementation(config)
|
21 | return {
|
22 | code,
|
23 | moduleName,
|
24 | }
|
25 | }
|
26 | return { moduleName, generate }
|
27 | }
|