@leancodepl/cyberware-contract-generator-dart
v10.2.0
Published
Generates Dart code from a JSON Schema contract.
Readme
@leancodepl/cyberware-contract-generator-dart
Generates Dart extension type files from an "@leancodepl/cyberware-contract" Zod schema, producing type-safe JS
interop code for Flutter web applications.
Installation
npm install @leancodepl/cyberware-contract-generator-dartAPI
generate(config, outputDir)
Generates Dart extension type files from an iframe contract schema. Produces three files in the output directory:
contract.dart, types.dart, and connect_to_host.dart.
Parameters:
config(Pick<CyberwareContractGeneratorDartConfig, "schema">) - Configuration containing the Zod contract schemaoutputDir(string) - Absolute or relative path to the directory where Dart files will be written
cyberwareContractGeneratorDartConfigSchema
Validates the configuration for the Dart code generator.
Type: Zod schema that validates to CyberwareContractGeneratorDartConfig
Shape:
schema(z.ZodType<ContractSchemaType>) - A Zod contract schema created withmkZodContractSchemafrom"@leancodepl/cyberware-contract"outputDir(string) - Directory where Dart files will be written
CyberwareContractGeneratorDartConfig
TypeScript type inferred from cyberwareContractGeneratorDartConfigSchema.
Usage Examples
CLI
Run the generator from the command line:
npx cyberware-contract-generator-dartPass a custom config path:
npx cyberware-contract-generator-dart --config ./my-config.mjsConfiguration file
Create an cyberware-contract-generator-dart.config.mjs in your project root:
import { z } from "zod"
import { methodDef, mkZodContractSchema } from "@leancodepl/cyberware-contract"
const schema = mkZodContractSchema({
hostMethods: {
navigateTo: methodDef({ params: z.object({ path: z.string() }) }),
},
remoteMethods: {
getCurrentPath: methodDef({ returns: z.string() }),
},
remoteParams: { userId: z.string().optional() },
})
export default {
schema,
outputDir: "./lib/generated",
}Programmatic usage
import { generate } from "@leancodepl/cyberware-contract-generator-dart"
import { mkZodContractSchema, methodDef } from "@leancodepl/cyberware-contract"
import { z } from "zod"
const schema = mkZodContractSchema({
hostMethods: {
navigateTo: methodDef({ params: z.object({ path: z.string() }) }),
},
remoteMethods: {
getCurrentPath: methodDef({ returns: z.string() }),
},
remoteParams: { userId: z.string() },
})
await generate({ schema }, "./lib/generated")Validating configuration
import { cyberwareContractGeneratorDartConfigSchema } from "@leancodepl/cyberware-contract-generator-dart"
const config = cyberwareContractGeneratorDartConfigSchema.parse({
schema: myContractSchema,
outputDir: "./lib/generated",
})Generated output
The generator produces three Dart files:
contract.dart- Extension types wrappingJSObjectfor method parameters and result typedefstypes.dart- Host/remote method abstractions, JS interop bridge types, URL parameter accessors, andConnectToHostStatetypedefconnect_to_host.dart- TypedconnectToHostfunction wiring remote methods and returning host methods
Configuration
The CLI searches for config files in the following order:
cyberware-contract-generator-dart.config.jscyberware-contract-generator-dart.config.cjscyberware-contract-generator-dart.config.mjs
Alternatively, pass an explicit path with --config / -c.
