@ostack.tech/kform-scaffolder 0.31.0 → 0.31.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/kform-scaffolder +1 -1
- package/ostack-kform-scaffolder.js +16 -16
- package/ostack-kform-scaffolder.js.map +1 -1
- package/package.json +4 -4
- package/types/SchematicBuilder.d.ts +4 -4
- package/types/SchematicBuilderConfig.d.ts +2 -2
- package/types/SchematicBuilderContext.d.ts +4 -4
- package/types/SchematicKind.d.ts +2 -2
- package/types/index.d.ts +0 -1
- package/types/main.d.ts +1 -1
- package/types/util/preventDrag.d.ts +3 -3
- package/types/util/useLayoutEffect.d.ts +2 -2
- package/webapp/assets/{index-BRrBNKA1.js → index-KfCGahM_.js} +42 -42
- package/webapp/index.html +1 -1
- package/ostack-kform-scaffolder.cjs +0 -1695
- package/ostack-kform-scaffolder.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ostack-kform-scaffolder.cjs","sources":["../../src/Schematic.ts","../../src/scaffolding/kotlin/util/defaultImports.ts","../../src/scaffolding/kotlin/KtFile.ts","../../src/scaffolding/kotlin/util/simpleKtName.ts","../../src/scaffolding/kotlin/util/annotations.ts","../../src/util/join.ts","../../src/scaffolding/scaffolders/scaffoldModels.ts","../../src/scaffolding/scaffolders/scaffoldSchemas.ts","../../src/util/boolDataAttr.ts","../../src/util/preventDrag.ts","../../src/schematicBuilders/util/ChildMarker.tsx","../../src/schematicBuilders/util/ChildRemove.tsx","../../src/schematicBuilders/util/KindSelect.tsx","../../src/schematicBuilders/util/NullableInput.tsx","../../src/schematicBuilders/util/PackageNameInput.tsx","../../src/schematicBuilders/ClassBuilder.tsx","../../src/schematicBuilders/EnumBuilder.tsx","../../src/schematicBuilders/ListableBuilder.tsx","../../src/util/code.ts","../../src/SchematicKind.ts","../../src/scaffolding/scaffold.ts","../../src/SchematicBuilderContext.ts","../../src/actions/LoadSchematic.tsx","../../src/actions/SaveSchematic.tsx","../../src/scaffolding/configScaffolder.ts","../../src/scaffolding/useScaffolder.ts","../../src/actions/ScaffoldToZip.tsx","../../src/configs/util/useConfig.ts","../../src/configs/UseFileBase64SerializerConfig.tsx","../../src/configs/UseTableValuesSerializerConfig.tsx","../../src/scaffolding/templates/Serializer.kt.ejs?raw","../../src/scaffolding/templating/TemplateFile.ts","../../src/scaffolding/templating/EjsTemplateFile.ts","../../src/scaffolding/templating/util/addEjsTemplateFile.ts","../../src/scaffolding/scaffolders/scaffoldSerializer.ts","../../src/scaffolding/templates/Validator.kt.ejs?raw","../../src/scaffolding/scaffolders/scaffoldValidator.ts","../../src/util/useLayoutEffect.ts","../../src/util/useMeasure.ts","../../src/SchematicBuilderConfig.tsx","../../src/SchematicBuilder.tsx","../../src/scaffolding/templating/util/addTemplateFile.ts","../../src/scaffolding/typescript/TsFile.ts"],"sourcesContent":["export interface Schematic {\n id: string;\n kind: string;\n packageSuffix?: string;\n name?: string;\n nullable?: boolean;\n collapsed?: boolean;\n children?: Schematic[];\n childName?: string;\n config?: Record<string, unknown>;\n}\n\nexport function createSchematic(schematic?: Partial<Schematic>): Schematic {\n return {\n id: self.crypto.randomUUID(),\n kind: \"\",\n ...schematic,\n };\n}\n\nexport function moveSchematic(\n schematic: Schematic,\n moveId: string,\n parentId: string,\n sortBefore: string | null,\n): Schematic {\n const { schematic: schematicWithoutFrom, removed: fromSchematic } = remove(\n schematic,\n moveId,\n );\n return add(schematicWithoutFrom!, fromSchematic!, parentId, sortBefore);\n}\n\nfunction remove(\n schematic: Schematic,\n id: string,\n): { schematic: Schematic | null; removed: Schematic | null } {\n if (schematic.id === id) {\n return { schematic: null, removed: schematic };\n }\n if (!schematic.children) {\n return { schematic, removed: null };\n }\n const newChildren = [];\n let removed: Schematic | null = null;\n for (const child of schematic.children) {\n const { schematic: newChild, removed: removedChild } = remove(child, id);\n if (newChild !== null) {\n newChildren.push(newChild);\n }\n if (removedChild !== null) {\n removed = removedChild;\n }\n }\n return { schematic: { ...schematic, children: newChildren }, removed };\n}\n\nfunction add(\n schematic: Schematic,\n toAdd: Schematic,\n parentId: string,\n sortBefore: string | null,\n): Schematic {\n if (schematic.id === parentId) {\n const oldChildren = schematic.children ?? [];\n const index =\n sortBefore === null\n ? oldChildren.length\n : oldChildren.findIndex((c) => c.id === sortBefore);\n return {\n ...schematic,\n children: [\n ...oldChildren.slice(0, index),\n toAdd,\n ...oldChildren.slice(index),\n ],\n };\n }\n if (!schematic.children) {\n return schematic;\n }\n return {\n ...schematic,\n children: schematic.children.map((child) =>\n add(child, toAdd, parentId, sortBefore),\n ),\n };\n}\n","const DEFAULT_IMPORTS = [\n /^kotlin\\.[^.]+$/,\n /^kotlin\\.annotation\\.[^.]+$/,\n /^kotlin\\.collections\\.[^.]+$/,\n /^kotlin\\.comparisons\\.[^.]+$/,\n /^kotlin\\.io\\.[^.]+$/,\n /^kotlin\\.ranges\\.[^.]+$/,\n /^kotlin\\.sequences\\.[^.]+$/,\n /^kotlin\\.text\\.[^.]+$/,\n];\n\nexport function isDefaultKtImport(qualifiedName: string): boolean {\n return DEFAULT_IMPORTS.some((i) => i.test(qualifiedName));\n}\n","import { type ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport { type ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport { isDefaultKtImport } from \"./util/defaultImports.ts\";\n\nexport interface KtFile extends ScaffoldingFile {\n package: string;\n imports: Set<string>;\n declarations: string[];\n}\n\nexport function ktFile(data: ScaffoldingData): KtFile {\n return {\n package: data.currentPackage ?? \"\",\n imports: new Set<string>(),\n declarations: [],\n getContent: ktFileContent,\n };\n}\n\nfunction ktFileContent(this: KtFile): string {\n return (\n [\n // Package\n this.package && `package ${this.package}`,\n\n // Imports\n Array.from(this.imports)\n .filter((i) => !isDefaultKtImport(i))\n .sort()\n .map((i) => `import ${i}`)\n .join(\"\\n\"),\n\n // Declarations\n ...this.declarations,\n ]\n .filter((s) => s)\n .join(\"\\n\\n\") + \"\\n\"\n );\n}\n","export function simpleKtName(qualifiedName: string): string {\n return qualifiedName.substring(qualifiedName.lastIndexOf(\".\") + 1);\n}\n","import { type KtData } from \"../KtData.ts\";\nimport { simpleKtName } from \"./simpleKtName.ts\";\n\nconst JS_EXPORT = \"kotlin.js.JsExport\";\nconst SERIALIZABLE = \"kotlinx.serialization.Serializable\";\n\nexport function annotate(\n annotations: string | string[] | undefined,\n code: string,\n): string {\n if (!annotations || annotations.length === 0) {\n return code;\n }\n return [\n ...(typeof annotations === \"string\" ? [annotations] : annotations),\n code,\n ].join(\"\\n\");\n}\n\nexport function jsExport(code: string, data: KtData): string {\n data.currentFile.imports.add(JS_EXPORT);\n return annotate(`@${simpleKtName(JS_EXPORT)}`, code);\n}\n\nexport function serializable(code: string, data: KtData): string {\n data.currentFile.imports.add(SERIALIZABLE);\n return annotate(`@${simpleKtName(SERIALIZABLE)}`, code);\n}\n","function join(\n s1: string | undefined,\n s2: string | undefined,\n separator: string,\n): string {\n return !s1 || !s2\n ? s1 || s2 || \"\"\n : `${s1}${s1.endsWith(separator) ? \"\" : separator}${s2}`;\n}\n\nexport function joinPaths(\n path1: string | undefined,\n path2: string | undefined,\n): string {\n return join(path1, path2, \"/\");\n}\n\nexport function joinPackages(\n pkg1: string | undefined,\n pkg2: string | undefined,\n): string {\n return join(pkg1, pkg2, \".\");\n}\n","import { type Schematic } from \"../../Schematic.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport { type KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport, serializable } from \"../kotlin/util/annotations.ts\";\nimport { type ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldModels(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n const fileName = joinPaths(data.currentDir, `${schematic.name}.kt`);\n let file = data.files.get(fileName) as KtFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = ktFile(data)));\n }\n scaffoldModelDeclaration(schematic, { ...data, currentFile: file });\n}\n\nfunction scaffoldModelDeclaration(schematic: Schematic, data: KtData): void {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n const nDecls = data.currentFile.declarations.length;\n data.currentFile.declarations.push(\"\");\n const decl =\n schematicKind.scaffoldModel?.(schematic, data) ??\n `typealias ${schematic.name} = ${scaffoldType(schematic, data)}`;\n data.currentFile.declarations[nDecls] = schematicKind.scaffoldModel\n ? jsExport(serializable(decl, data), data)\n : decl;\n}\n\nexport function scaffoldPropertyAnnotations(\n schematic: Schematic,\n data: KtData,\n): string | string[] | undefined {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n return typeof schematicKind.propertyAnnotations === \"function\"\n ? schematicKind.propertyAnnotations(schematic, data)\n : schematicKind.propertyAnnotations;\n}\n\nexport function scaffoldType(schematic: Schematic, data: KtData): string {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n const schematicPackage =\n schematicKind.package ??\n joinPackages(data.currentPackage, schematic.packageSuffix);\n const schematicName = schematic.name || schematicKind.name;\n\n if (schematicPackage !== data.currentPackage) {\n data.currentFile.imports.add(joinPackages(schematicPackage, schematicName));\n }\n\n if (\n schematicKind.package == null &&\n schematicPackage !== data.currentPackage\n ) {\n scaffoldModels(schematic, {\n ...data,\n currentPackage: joinPackages(\n data.currentPackage,\n schematic.packageSuffix,\n ),\n currentDir: joinPaths(\n data.currentDir,\n schematic.packageSuffix?.replace(\".\", \"/\"),\n ),\n });\n } else if (schematicKind.scaffoldModel) {\n scaffoldModelDeclaration(schematic, data);\n }\n\n return (\n (schematicKind.scaffoldType?.(schematic, data) ?? schematicName) +\n (schematic.nullable ? \"?\" : \"\")\n );\n}\n\nexport function scaffoldDefaultValue(\n schematic: Schematic,\n data: KtData,\n): string {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n return schematic.nullable\n ? \"null\"\n : typeof schematicKind.defaultValue === \"function\"\n ? schematicKind.defaultValue(schematic, data)\n : schematicKind.defaultValue;\n}\n","import { type Schematic } from \"../../Schematic.ts\";\nimport { NULLABLE_SCHEMA } from \"../../SchematicKind.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport { type KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport } from \"../kotlin/util/annotations.ts\";\nimport { simpleKtName } from \"../kotlin/util/simpleKtName.ts\";\nimport { type ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldSchemas(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n const fileName = joinPaths(data.currentDir, `${schematic.name}Schema.kt`);\n let file = data.files.get(fileName) as KtFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = ktFile(data)));\n data.files.set(\n joinPaths(data.currentDir, `${schematic.name}Validations.kt`),\n ktFile(data),\n );\n }\n scaffoldSchemaDeclaration(schematic, { ...data, currentFile: file });\n}\n\nfunction scaffoldSchemaDeclaration(schematic: Schematic, data: KtData): void {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n const nDecls = data.currentFile.declarations.length;\n data.currentFile.declarations.push(\"\");\n const decl = `val ${schematic.name}Schema = ${\n schematicKind.scaffoldSchema?.(schematic, data) ??\n `${simpleKtName(schematicKind.schema)}()`\n }`;\n data.currentFile.imports.add(schematicKind.schema);\n data.currentFile.declarations[nDecls] =\n data.currentPath === \"/\" ? jsExport(decl, data) : decl;\n}\n\nexport function scaffoldSchema(schematic: Schematic, data: KtData): string {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n const schematicPackage =\n schematicKind.package ??\n joinPackages(data.currentPackage, schematic.packageSuffix);\n\n let scaffoldedSchema: string;\n if (\n schematicKind.package == null &&\n schematicPackage !== data.currentPackage\n ) {\n scaffoldedSchema = `${schematic.name}Schema`;\n data.currentFile.imports.add(`${schematicPackage}.${scaffoldedSchema}`);\n scaffoldSchemas(schematic, {\n ...data,\n currentPackage: joinPackages(\n data.currentPackage,\n schematic.packageSuffix,\n ),\n currentDir: joinPaths(\n data.currentDir,\n schematic.packageSuffix?.replace(\".\", \"/\"),\n ),\n });\n } else {\n scaffoldedSchema =\n schematicKind.scaffoldSchema?.(schematic, data) ??\n `${simpleKtName(schematicKind.schema)}()`;\n data.currentFile.imports.add(schematicKind.schema);\n }\n\n if (schematic.nullable) {\n data.currentFile.imports.add(NULLABLE_SCHEMA);\n return `${simpleKtName(NULLABLE_SCHEMA)} { ${scaffoldedSchema} }`;\n }\n return scaffoldedSchema;\n}\n","/** Value for a data attribute given a condition. */\nexport function boolDataAttr(\n condition: boolean | null | undefined,\n): string | undefined {\n return condition ? \"\" : undefined;\n}\n","import type * as React from \"react\";\n\n/** Properties used to prevent an element from being dragged. */\nexport const preventDrag = {\n onKeyDown: (evt: React.KeyboardEvent) => evt.stopPropagation(),\n onPointerDown: (evt: React.PointerEvent) => evt.stopPropagation(),\n};\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nexport function ChildMarker() {\n const { schematicKinds, useSchematic, setSchematic } =\n useSchematicBuilderContext();\n const kind = useSchematic((schematic) => schematic.kind);\n const collapsed = useSchematic((schematic) => schematic.collapsed);\n const Builder = schematicKinds.get(kind)?.builder;\n\n return Builder ? (\n <button\n type=\"button\"\n className=\"builder-child-marker\"\n title={collapsed ? \"Expand\" : \"Collapse\"}\n onClick={() =>\n setSchematic((schematic) => ({\n collapsed: !schematic.collapsed,\n }))\n }\n {...preventDrag}\n >\n {collapsed ? \"▸\" : \"▾\"}\n </button>\n ) : (\n <span className=\"builder-child-marker\">•</span>\n );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nexport function ChildRemove() {\n const { removeSchematic } = useSchematicBuilderContext();\n return (\n <button\n className=\"builder-icon-button builder-child-remove\"\n type=\"button\"\n title=\"Remove\"\n onClick={removeSchematic}\n {...preventDrag}\n >\n ×\n </button>\n );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nconst KIND_PLACEHOLDER = \"--KIND--\";\n\nexport function KindSelect() {\n const { schematicKinds, useSchematic, setSchematic, parentChildName } =\n useSchematicBuilderContext();\n const kind = useSchematic((schematic) => schematic.kind);\n\n return (\n <select\n className=\"builder-input builder-schema\"\n value={kind}\n onChange={(evt) => {\n const schematicKind = schematicKinds.get(evt.target.value);\n setSchematic({\n kind: evt.target.value,\n packageSuffix: schematicKind?.defaultPackageSuffix?.(\n parentChildName!,\n ),\n name: schematicKind?.defaultName?.(parentChildName!),\n collapsed: false,\n nullable: schematicKind?.nullable ?? schematicKind?.defaultNullable,\n children: schematicKind?.initChildren?.(parentChildName!),\n });\n }}\n required\n style={{\n width: `calc(${(kind || KIND_PLACEHOLDER).length}ch + 1.85rem)`,\n }}\n {...preventDrag}\n >\n <option>{KIND_PLACEHOLDER}</option>\n {Array.from(schematicKinds.values())\n .filter((kind) => !kind.internal)\n .map((kind) => (\n <option key={kind.kind} value={kind.kind}>\n {kind.kind}\n </option>\n ))}\n </select>\n );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nexport function NullableInput() {\n const { schematicKinds, useSchematic, setSchematic } =\n useSchematicBuilderContext();\n const kind = useSchematic((schematic) => schematic.kind);\n const nullable = useSchematic((schematic) => !!schematic.nullable);\n const schematicKind = schematicKinds.get(kind);\n const showInput = schematicKind && schematicKind.nullable === undefined;\n\n return (\n showInput && (\n <input\n className=\"builder-input builder-nullable\"\n type=\"checkbox\"\n title=\"Nullable?\"\n checked={nullable}\n onChange={(evt) => setSchematic({ nullable: evt.target.checked })}\n {...preventDrag}\n />\n )\n );\n}\n","import * as React from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nconst PACKAGE_PLACEHOLDER = \"package.suffix\";\nconst NAME_PLACEHOLDER = \"ClassName\";\n\nexport function PackageNameInput() {\n const { useSchematic, setSchematic, parentPackage } =\n useSchematicBuilderContext();\n const pkgRef = React.useRef<HTMLInputElement | null>(null);\n const packageSuffix = useSchematic((schematic) => schematic.packageSuffix);\n const name = useSchematic((schematic) => schematic.name);\n\n return (\n <div className=\"builder-package-name\">\n {parentPackage && (\n <span className=\"builder-package-prefix\">{parentPackage}.</span>\n )}\n <input\n className=\"builder-input builder-package\"\n placeholder={PACKAGE_PLACEHOLDER}\n value={packageSuffix ?? \"\"}\n onChange={(evt) => setSchematic({ packageSuffix: evt.target.value })}\n pattern=\"(([a-z_][a-z0-9_]*)(\\.([a-z_][a-z0-9_]*))*)?\"\n style={{ width: `${(packageSuffix || PACKAGE_PLACEHOLDER).length}ch` }}\n {...preventDrag}\n ref={pkgRef}\n />\n <button\n type=\"button\"\n className=\"builder-icon-button builder-edit-package\"\n onClick={() => {\n const pkgInput = pkgRef.current!;\n pkgInput.style.display = \"initial\";\n pkgInput.focus();\n pkgInput.style.display = \"\";\n }}\n >\n 🖉\n </button>\n <span className=\"builder-operator\">.</span>\n <input\n className=\"builder-input builder-name\"\n placeholder={NAME_PLACEHOLDER}\n value={name ?? \"\"}\n onChange={(evt) => setSchematic({ name: evt.target.value })}\n required\n pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n style={{ width: `${(name || NAME_PLACEHOLDER).length}ch` }}\n {...preventDrag}\n />\n </div>\n );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\nimport { NullableInput } from \"./util/NullableInput.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\n\nexport const CLASS_DND_TYPE = \"class-field\";\n\nexport function ClassBuilder() {\n const schematicBuilderContext = useSchematicBuilderContext();\n const { useSchematic, setSchematic, draggedSchematic, disableDrop } =\n schematicBuilderContext;\n const id = useSchematic((schematic) => schematic.id);\n const packageSuffix = useSchematic((schematic) => schematic.packageSuffix);\n const fields =\n useSchematic((schematic: Schematic) => schematic.children) ?? [];\n const shouldIgnoreDrop =\n draggedSchematic != null && draggedSchematic.id === fields.at(-1)?.id;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id: `${id}-append`,\n data: { parentId: id, sortBefore: null, ignored: shouldIgnoreDrop },\n disabled: disableDrop || draggedSchematic?.type !== CLASS_DND_TYPE,\n });\n\n return (\n <div className=\"class-builder builder\">\n <PackageNameInput />\n\n {fields.length === 0 && (\n <div\n className=\"builder-empty\"\n data-over={boolDataAttr(isOver)}\n ref={setDroppableRef}\n >\n No fields.\n </div>\n )}\n\n {fields.length > 0 && (\n <ul className=\"builder-children\">\n {fields.map((field, i) => (\n <SchematicBuilderContext.Provider\n key={field.id}\n value={{\n ...schematicBuilderContext,\n useSchematic: (selector) =>\n useSchematic((schematic) => selector(schematic.children![i])),\n setSchematic: (toSet) =>\n setSchematic((schematic) => ({\n ...schematic,\n children: schematic.children!.map((f) =>\n field === f\n ? {\n ...f,\n ...(typeof toSet === \"function\" ? toSet(f) : toSet),\n }\n : f,\n ),\n })),\n removeSchematic: () =>\n setSchematic((schematic) => ({\n ...schematic,\n children: schematic.children!.filter((f) => f !== field),\n })),\n parentPackage: joinPackages(\n schematicBuilderContext.parentPackage,\n packageSuffix,\n ),\n parentId: id,\n ignoreDrop:\n draggedSchematic != null &&\n draggedSchematic.id === fields[i - 1]?.id,\n }}\n >\n <ClassFieldBuilder />\n </SchematicBuilderContext.Provider>\n ))}\n\n <li\n className=\"builder-child-droppable\"\n data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n ref={setDroppableRef}\n />\n </ul>\n )}\n\n <button\n className=\"builder-input builder-new-child\"\n type=\"button\"\n onClick={() => {\n setSchematic((schematic) => ({\n ...schematic,\n children: [\n ...(schematic.children ?? []),\n createSchematic({ childName: \"\" }),\n ],\n }));\n }}\n {...preventDrag}\n >\n Add field\n </button>\n </div>\n );\n}\n\nconst CHILD_NAME_PLACEHOLDER = \"fieldName\";\n\nexport function ClassFieldBuilder() {\n const schematicBuilderContext = useSchematicBuilderContext();\n const {\n schematicKinds,\n useSchematic,\n setSchematic,\n draggedSchematic,\n parentId,\n disableDrop,\n ignoreDrop,\n } = schematicBuilderContext;\n const id = useSchematic((schematic) => schematic.id);\n const childName = useSchematic((schematic) => schematic.childName);\n const kind = useSchematic((schematic) => schematic.kind);\n const nullable = useSchematic((schematic) => schematic.nullable);\n const collapsed = useSchematic((schematic) => schematic.collapsed);\n const Builder = schematicKinds.get(kind)?.builder;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDraggableRef,\n isDragging,\n } = useDraggable({\n id,\n data: {\n type: CLASS_DND_TYPE,\n node: (\n <>\n {[childName, kind].filter((s) => s).join(\": \")}\n {nullable ? \"?\" : \"\"}\n </>\n ),\n },\n });\n const shouldIgnoreDrop = isDragging || ignoreDrop;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id,\n data: { parentId, sortBefore: id, ignored: shouldIgnoreDrop },\n disabled: disableDrop || draggedSchematic?.type !== CLASS_DND_TYPE,\n });\n\n return (\n <>\n <li\n className=\"builder-child-droppable\"\n data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n ref={setDroppableRef}\n />\n\n <li\n className=\"builder-child class-builder-field\"\n data-dragging={boolDataAttr(isDragging)}\n {...listeners}\n {...attributes}\n ref={setDraggableRef}\n data-collapsible={boolDataAttr(Builder != null)}\n >\n <div className=\"builder-child-content\">\n <ChildMarker />\n <input\n className=\"builder-input class-builder-field-id\"\n placeholder={CHILD_NAME_PLACEHOLDER}\n value={childName}\n onChange={(evt) => setSchematic({ childName: evt.target.value })}\n required\n pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n style={{\n width: `${(childName || CHILD_NAME_PLACEHOLDER).length}ch`,\n }}\n {...preventDrag}\n />\n <span className=\"builder-operator\">∶</span>\n <SchematicBuilderContext.Provider\n value={{ ...schematicBuilderContext, parentChildName: childName }}\n >\n <KindSelect />\n </SchematicBuilderContext.Provider>\n <NullableInput />\n <ChildRemove />\n </div>\n\n {Builder && !collapsed && (\n <SchematicBuilderContext.Provider\n value={{\n ...schematicBuilderContext,\n parentChildName: childName,\n disableDrop: disableDrop || isDragging,\n }}\n >\n <Builder />\n </SchematicBuilderContext.Provider>\n )}\n </li>\n </>\n );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\n\nexport const ENUM_DND_TYPE = \"enum-entry\";\n\nexport function EnumBuilder() {\n const schematicBuilderContext = useSchematicBuilderContext();\n const { useSchematic, setSchematic, draggedSchematic, disableDrop } =\n schematicBuilderContext;\n const id = useSchematic((schematic) => schematic.id);\n const fields =\n useSchematic((schematic: Schematic) => schematic.children) ?? [];\n const shouldIgnoreDrop =\n draggedSchematic != null && draggedSchematic.id === fields.at(-1)?.id;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id: `${id}-append`,\n data: { parentId: id, sortBefore: null, ignored: shouldIgnoreDrop },\n disabled: disableDrop || draggedSchematic?.type !== ENUM_DND_TYPE,\n });\n\n return (\n <div className=\"enum-builder builder\">\n <PackageNameInput />\n\n {fields.length === 0 && (\n <div\n className=\"builder-empty\"\n data-over={boolDataAttr(isOver)}\n ref={setDroppableRef}\n >\n No entries.\n </div>\n )}\n\n {fields.length > 0 && (\n <ul className=\"builder-children\">\n {fields.map((field, i) => (\n <SchematicBuilderContext.Provider\n key={field.id}\n value={{\n ...schematicBuilderContext,\n useSchematic: (selector) =>\n useSchematic((schematic) => selector(schematic.children![i])),\n setSchematic: (toSet) =>\n setSchematic((schematic) => ({\n ...schematic,\n children: schematic.children!.map((f) =>\n field === f\n ? {\n ...f,\n ...(typeof toSet === \"function\" ? toSet(f) : toSet),\n }\n : f,\n ),\n })),\n removeSchematic: () =>\n setSchematic((schematic) => ({\n ...schematic,\n children: schematic.children!.filter((f) => f !== field),\n })),\n parentId: id,\n ignoreDrop:\n draggedSchematic != null &&\n draggedSchematic.id === fields[i - 1]?.id,\n }}\n >\n <EnumEntryBuilder />\n </SchematicBuilderContext.Provider>\n ))}\n\n <li\n className=\"builder-child-droppable\"\n data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n ref={setDroppableRef}\n />\n </ul>\n )}\n\n <button\n className=\"builder-input builder-new-child\"\n type=\"button\"\n onClick={() => {\n setSchematic((schematic) => ({\n ...schematic,\n children: [\n ...(schematic.children ?? []),\n createSchematic({ childName: \"\" }),\n ],\n }));\n }}\n {...preventDrag}\n >\n Add entry\n </button>\n </div>\n );\n}\n\nconst CHILD_NAME_PLACEHOLDER = \"ENTRY_NAME\";\n\nexport function EnumEntryBuilder() {\n const schematicBuilderContext = useSchematicBuilderContext();\n const {\n schematicKinds,\n useSchematic,\n setSchematic,\n draggedSchematic,\n parentId,\n disableDrop,\n ignoreDrop,\n } = schematicBuilderContext;\n const id = useSchematic((schematic) => schematic.id);\n const childName = useSchematic((schematic) => schematic.childName);\n const kind = useSchematic((schematic) => schematic.kind);\n const Builder = schematicKinds.get(kind)?.builder;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDraggableRef,\n isDragging,\n } = useDraggable({\n id,\n data: {\n type: ENUM_DND_TYPE,\n node: <>{[childName, kind].filter((s) => s).join(\": \")}</>,\n },\n });\n const shouldIgnoreDrop = isDragging || ignoreDrop;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id,\n data: { parentId, sortBefore: id, ignored: shouldIgnoreDrop },\n disabled: disableDrop || draggedSchematic?.type !== ENUM_DND_TYPE,\n });\n\n return (\n <>\n <li\n className=\"builder-child-droppable\"\n data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n ref={setDroppableRef}\n />\n\n <li\n className=\"builder-child\"\n data-dragging={boolDataAttr(isDragging)}\n {...listeners}\n {...attributes}\n ref={setDraggableRef}\n data-collapsible={boolDataAttr(Builder != null)}\n >\n <div className=\"builder-child-content\">\n <ChildMarker />\n <input\n className=\"builder-input enum-builder-entry-id\"\n placeholder={CHILD_NAME_PLACEHOLDER}\n value={childName}\n onChange={(evt) => setSchematic({ childName: evt.target.value })}\n required\n pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n style={{\n width: `${(childName || CHILD_NAME_PLACEHOLDER).length}ch`,\n }}\n {...preventDrag}\n />\n <ChildRemove />\n </div>\n </li>\n </>\n );\n}\n","import {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\n\nexport interface ListableBuilderProps {\n showKindSelect?: boolean;\n}\n\nexport function ListableBuilder({\n showKindSelect = true,\n}: ListableBuilderProps) {\n const schematicBuilderContext = useSchematicBuilderContext();\n const { useSchematic, setSchematic } = schematicBuilderContext;\n const id = useSchematic((schematic) => schematic.id);\n\n return (\n <div className=\"listable-builder builder\">\n <SchematicBuilderContext.Provider\n value={{\n ...schematicBuilderContext,\n useSchematic: (selector) =>\n useSchematic((schematic) => selector(schematic.children![0])),\n setSchematic: (toSet) =>\n setSchematic((schematic) => ({\n ...schematic,\n children: [\n {\n ...schematic.children![0],\n ...(typeof toSet === \"function\"\n ? toSet(schematic.children![0])\n : toSet),\n },\n ],\n })),\n removeSchematic: () => {},\n parentId: id,\n }}\n >\n <ListableItemBuilder showKindSelect={showKindSelect} />\n </SchematicBuilderContext.Provider>\n </div>\n );\n}\n\nexport function ListableBuilderWithoutKindSelect() {\n return <ListableBuilder showKindSelect={false} />;\n}\n\nexport type ListableItemBuilderProps = ListableBuilderProps;\n\nexport function ListableItemBuilder({\n showKindSelect = true,\n}: ListableItemBuilderProps) {\n const { schematicKinds, useSchematic } = useSchematicBuilderContext();\n const kind = useSchematic((schematic) => schematic.kind);\n const Builder = schematicKinds.get(kind)?.builder;\n\n return (\n <>\n {showKindSelect && <KindSelect />}\n {Builder && <Builder />}\n </>\n );\n}\n","const LF = /\\r?\\n/;\nconst EMPTY_LINE = /^\\s*$/;\nconst SPACE = /\\s/;\nconst LF_AFFIX = /(^\\r?\\n)|(\\r?\\n$)/g;\n\n/** Tag function used to aid in the construction of code blocks. */\nexport function code(strings: TemplateStringsArray, ...values: any[]): string {\n const minIndent = Math.min(\n ...strings.join(\"\").split(LF).filter(isNotEmpty).map(indentWidth),\n );\n\n let result = \"\";\n for (let i = 0; i < values.length; ++i) {\n const trimmedString = trimNoninitialLines(strings[i], minIndent);\n result += trimmedString;\n result += indentNoninitialLines(\n String(values[i]),\n indentWidth(trimmedString.split(LF).at(-1)!),\n );\n }\n result += trimNoninitialLines(strings.at(-1)!, minIndent);\n return result.replace(LF_AFFIX, \"\");\n}\n\nfunction isNotEmpty(line: string): boolean {\n return !EMPTY_LINE.test(line);\n}\n\nfunction indentWidth(line: string): number {\n let width = 0;\n for (const c of line) {\n if (!SPACE.test(c)) {\n break;\n }\n ++width;\n }\n return width;\n}\n\nfunction indentNoninitialLines(str: string, indentWidth: number): string {\n const lines = str.split(LF);\n const resultLines: string[] = [lines[0]];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n resultLines.push(line && \" \".repeat(indentWidth) + line);\n }\n return resultLines.join(\"\\n\");\n}\n\nfunction trimNoninitialLines(str: string, indentWidth: number): string {\n const lines = str.split(LF);\n const resultLines: string[] = [lines[0]];\n for (let i = 1; i < lines.length; ++i) {\n resultLines.push(lines[i].slice(indentWidth));\n }\n return resultLines.join(\"\\n\");\n}\n","import { pascalCase } from \"change-case\";\nimport type * as React from \"react\";\n\nimport { type KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport { annotate } from \"./scaffolding/kotlin/util/annotations.ts\";\nimport {\n scaffoldDefaultValue,\n scaffoldPropertyAnnotations,\n scaffoldType,\n} from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchema } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { createSchematic, type Schematic } from \"./Schematic.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport { EnumBuilder } from \"./schematicBuilders/EnumBuilder.tsx\";\nimport { ListableBuilder } from \"./schematicBuilders/ListableBuilder.tsx\";\nimport { code } from \"./util/code.ts\";\nimport { joinPaths } from \"./util/join.ts\";\n\nexport const NULLABLE_SCHEMA = \"tech.ostack.kform.schemas.NullableSchema\";\n\n/** Information about a kind of schematic. */\nexport interface SchematicKind {\n kind: string;\n internal?: boolean;\n schema: string;\n package?: string;\n name?: string;\n defaultNullable?: boolean;\n nullable?: boolean;\n defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n builder?: React.ComponentType;\n initChildren?: (childName: string) => Schematic[];\n defaultPackageSuffix?: (childName: string) => string;\n defaultName?: (childName: string) => string;\n scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n scaffoldType?: (schematic: Schematic, data: KtData) => string;\n scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n kind: \"Any\",\n package: \"kotlin\",\n name: \"Any\",\n schema: \"tech.ostack.kform.schemas.AnySchema\",\n nullable: false,\n defaultValue: \"null\",\n scaffoldType: () => \"Any?\",\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n kind: \"BigDecimal\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigDecimal\",\n schema: \"tech.ostack.kform.schemas.BigDecimalSchema\",\n defaultNullable: true,\n defaultValue: \"BigDecimal.ZERO\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n kind: \"BigInteger\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigInteger\",\n schema: \"tech.ostack.kform.schemas.BigIntegerSchema\",\n defaultNullable: true,\n defaultValue: \"BigInteger.ZERO\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n kind: \"Boolean\",\n package: \"kotlin\",\n name: \"Boolean\",\n schema: \"tech.ostack.kform.schemas.BooleanSchema\",\n defaultValue: \"false\",\n};\nexport const byteSchematicKind: SchematicKind = {\n kind: \"Byte\",\n package: \"kotlin\",\n name: \"Byte\",\n schema: \"tech.ostack.kform.schemas.ByteSchema\",\n defaultNullable: true,\n defaultValue: \"0.toByte()\",\n};\nexport const charSchematicKind: SchematicKind = {\n kind: \"Char\",\n package: \"kotlin\",\n name: \"Char\",\n schema: \"tech.ostack.kform.schemas.CharSchema\",\n defaultNullable: true,\n defaultValue: \"0.toChar()\",\n};\nexport const classSchematicKind: SchematicKind = {\n kind: \"Class\",\n schema: \"tech.ostack.kform.schemas.ClassSchema\",\n defaultValue: (schematic) => `${schematic.name}()`,\n builder: ClassBuilder,\n initChildren: () => [],\n defaultPackageSuffix: (childName: string) => childName.toLowerCase(),\n defaultName: (childName: string) => pascalCase(childName),\n scaffoldModel: (schematic, data) =>\n code`\n data class ${schematic.name}(\n ${schematic.children\n ?.map((childSchematic) => {\n const childData = {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n childSchematic.childName,\n ),\n };\n\n return annotate(\n scaffoldPropertyAnnotations(childSchematic, childData),\n `var ${childSchematic.childName}: ${scaffoldType(\n childSchematic,\n childData,\n )} = ${scaffoldDefaultValue(childSchematic, childData)}`,\n );\n })\n .join(\",\\n\")}\n )\n `,\n scaffoldSchema: (schematic, data) =>\n code`\n ClassSchema {\n ${schematic.children\n ?.map(\n (childSchematic) =>\n `${schematic.name}::${childSchematic.childName} { ${scaffoldSchema(\n childSchematic,\n {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n childSchematic.childName,\n ),\n },\n )} }`,\n )\n .join(\"\\n\")}\n }\n `,\n};\nexport const doubleSchematicKind: SchematicKind = {\n kind: \"Double\",\n package: \"kotlin\",\n name: \"Double\",\n schema: \"tech.ostack.kform.schemas.DoubleSchema\",\n defaultNullable: true,\n defaultValue: \"0.0\",\n};\nexport const enumSchematicKind: SchematicKind = {\n kind: \"Enum\",\n schema: \"tech.ostack.kform.schemas.EnumSchema\",\n defaultNullable: true,\n defaultValue: (schematic) =>\n `${schematic.name}.${schematic.children?.[0].childName}`,\n builder: EnumBuilder,\n initChildren: () => [],\n defaultName: (childName: string) => pascalCase(childName),\n scaffoldModel: (schematic) =>\n code`\n enum class ${schematic.name} {\n ${schematic.children\n ?.map((childSchematic) => childSchematic.childName!)\n .join(\",\\n\")}\n }\n `,\n};\nexport const fileSchematicKind: SchematicKind = {\n kind: \"File\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"File\",\n schema: \"tech.ostack.kform.schemas.FileSchema\",\n defaultNullable: true,\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\n \"tech.ostack.kform.datatypes.emptyPlaceholderFile\",\n );\n return \"emptyPlaceholderFile()\";\n },\n propertyAnnotations: (_schematic, data) =>\n data.useFileBase64Serializer\n ? \"@Serializable(with = File.Base64Serializer::class)\"\n : undefined,\n};\nexport const floatSchematicKind: SchematicKind = {\n kind: \"Float\",\n package: \"kotlin\",\n name: \"Float\",\n schema: \"tech.ostack.kform.schemas.FloatSchema\",\n defaultNullable: true,\n defaultValue: \"0f\",\n};\nexport const instantSchematicKind: SchematicKind = {\n kind: \"Instant\",\n package: \"kotlin.time\",\n name: \"Instant\",\n schema: \"tech.ostack.kform.schemas.InstantSchema\",\n defaultNullable: true,\n defaultValue: \"Instant.fromEpochMilliseconds(0)\",\n propertyAnnotations: (_schematic, data) => {\n data.currentFile.imports\n .add(\"kotlin.OptIn\")\n .add(\"kotlin.time.ExperimentalTime\");\n return \"@OptIn(ExperimentalTime::class)\";\n },\n};\nexport const intSchematicKind: SchematicKind = {\n kind: \"Int\",\n package: \"kotlin\",\n name: \"Int\",\n schema: \"tech.ostack.kform.schemas.IntSchema\",\n defaultNullable: true,\n defaultValue: \"0\",\n};\nexport const listSchematicKind: SchematicKind = {\n kind: \"List\",\n package: \"kotlin.collections\",\n name: \"List\",\n schema: \"tech.ostack.kform.schemas.ListSchema\",\n defaultValue: \"emptyList()\",\n builder: ListableBuilder,\n initChildren: () => [createSchematic()],\n scaffoldType: (schematic, data) =>\n `List<${scaffoldType(schematic.children![0], {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n })}>`,\n scaffoldSchema: (schematic, data) =>\n `ListSchema { ${scaffoldSchema(schematic.children![0], {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n })} }`,\n};\nexport const localDateSchematicKind: SchematicKind = {\n kind: \"LocalDate\",\n package: \"kotlinx.datetime\",\n name: \"LocalDate\",\n schema: \"tech.ostack.kform.schemas.LocalDateSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDate(1970, 1, 1)\",\n};\nexport const localDateTimeSchematicKind: SchematicKind = {\n kind: \"LocalDateTime\",\n package: \"kotlinx.datetime\",\n name: \"LocalDateTime\",\n schema: \"tech.ostack.kform.schemas.LocalDateTimeSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDateTime(1970, 1, 1, 0, 0)\",\n};\nexport const longSchematicKind: SchematicKind = {\n kind: \"Long\",\n package: \"kotlin\",\n name: \"Long\",\n schema: \"tech.ostack.kform.schemas.LongSchema\",\n defaultNullable: true,\n defaultValue: \"0L\",\n};\nexport const shortSchematicKind: SchematicKind = {\n kind: \"Short\",\n package: \"kotlin\",\n name: \"Short\",\n schema: \"tech.ostack.kform.schemas.ShortSchema\",\n defaultNullable: true,\n defaultValue: \"0.toShort()\",\n};\nexport const stringSchematicKind: SchematicKind = {\n kind: \"String\",\n package: \"kotlin\",\n name: \"String\",\n schema: \"tech.ostack.kform.schemas.StringSchema\",\n defaultValue: '\"\"',\n};\nexport const tableSchematicKind: SchematicKind = {\n kind: \"Table\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"Table\",\n schema: \"tech.ostack.kform.schemas.TableSchema\",\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\"tech.ostack.kform.datatypes.tableOf\");\n return \"tableOf()\";\n },\n builder: ListableBuilder,\n initChildren: () => [createSchematic()],\n propertyAnnotations: (_schematic, data) =>\n data.useTableValuesSerializer\n ? \"@Serializable(with = Table.ValuesSerializer::class)\"\n : undefined,\n scaffoldType: (schematic, data) =>\n `Table<${scaffoldType(schematic.children![0], {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n })}>`,\n scaffoldSchema: (schematic, data) =>\n `TableSchema { ${scaffoldSchema(schematic.children![0], {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n })} }`,\n};\n\nexport const defaultSchematicKinds = [\n anySchematicKind,\n bigDecimalSchematicKind,\n bigIntegerSchematicKind,\n booleanSchematicKind,\n byteSchematicKind,\n charSchematicKind,\n classSchematicKind,\n doubleSchematicKind,\n enumSchematicKind,\n fileSchematicKind,\n floatSchematicKind,\n instantSchematicKind,\n intSchematicKind,\n listSchematicKind,\n localDateSchematicKind,\n localDateTimeSchematicKind,\n longSchematicKind,\n shortSchematicKind,\n stringSchematicKind,\n tableSchematicKind,\n];\n","import { type Schematic } from \"../Schematic.ts\";\nimport { type SchematicKind } from \"../SchematicKind.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport { type ScaffoldingData } from \"./ScaffoldingData.ts\";\nimport {\n type ScaffoldingFile,\n type ScaffoldingFileContent,\n} from \"./ScaffoldingFile.ts\";\n\nexport interface ScaffoldOptions {\n schematicKinds: Map<string, SchematicKind>;\n basePath?: string;\n basePackage?: string;\n baseDir?: string;\n}\n\nexport type Scaffolder<\n TScaffoldingData extends ScaffoldingData = ScaffoldingData,\n> = (schematic: Schematic, data: TScaffoldingData) => void;\n\nexport interface ScaffoldedFile extends Omit<ScaffoldingFile, \"getContent\"> {\n path: string;\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>;\n}\n\nexport function scaffold(\n schematic: Schematic,\n scaffolders: Scaffolder<any>[],\n options: ScaffoldOptions,\n): ScaffoldedFile[] {\n const files = new Map<string, ScaffoldingFile>();\n const data: ScaffoldingData = {\n schematicKinds: options.schematicKinds,\n rootSchematic: schematic,\n files,\n currentPath: options.basePath ?? \"/\",\n currentPackage: joinPackages(options.basePackage, schematic.packageSuffix),\n currentDir: options.baseDir,\n };\n for (const scaffolder of scaffolders) {\n scaffolder(schematic, data);\n }\n return Array.from(files).map(([path, file]) => ({\n path,\n content: file.getContent(),\n base64: file.base64,\n binary: file.binary,\n executable: file.executable,\n }));\n}\n","import * as React from \"react\";\n\nimport { type Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport { type Schematic } from \"./Schematic.ts\";\nimport { type SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface DraggedSchematic {\n id: string;\n type: string;\n node: React.ReactNode;\n}\n\nexport interface SchematicBuilderContextValue {\n name: string;\n basePath?: string;\n basePackage?: string;\n baseDir?: string | ((schematic: Schematic) => string);\n schematicKinds: Map<string, SchematicKind>;\n scaffolders:\n | Scaffolder<any>[]\n | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n | Record<string, any>\n | ((schematic: Schematic) => Record<string, any>);\n getRootSchematic: () => Schematic;\n useSchematic: <T>(selector: (schematic: Schematic) => T) => T;\n setSchematic: ((schematic: Partial<Schematic>) => void) &\n ((setter: (schematic: Schematic) => Partial<Schematic>) => void);\n removeSchematic: () => void;\n parentPackage?: string;\n parentId?: string;\n parentChildName?: string;\n draggedSchematic: DraggedSchematic | null;\n disableDrop?: boolean;\n ignoreDrop?: boolean;\n latestSchematicFileHandleRef: React.RefObject<FileSystemFileHandle | null>;\n}\n\nexport const SchematicBuilderContext =\n React.createContext<SchematicBuilderContextValue | null>(null);\n\nexport function useSchematicBuilderContext(): SchematicBuilderContextValue {\n const context = React.useContext(SchematicBuilderContext);\n if (context === null) {\n throw new Error(\"Schematic builder not in context.\");\n }\n return context;\n}\n","import { fileOpen } from \"browser-fs-access\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\n\nexport function LoadSchematic() {\n const { name, setSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-load-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const file = await fileOpen({\n extensions: [\".json\"],\n mimeTypes: [\"application/json\"],\n description: \"Form schematic\",\n id: name,\n });\n if (file.handle) {\n latestSchematicFileHandleRef.current = file.handle;\n }\n const content = JSON.parse(await file.text());\n setSchematic(() => content);\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to load schematic: ${err?.toString()}`);\n }\n }}\n title=\"Load schematic\"\n aria-label=\"Load schematic\"\n >\n 📂\n </button>\n );\n}\n","import { fileSave, supported } from \"browser-fs-access\";\n\nimport { type Schematic } from \"../Schematic.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\n\nexport function SaveSchematic() {\n const { name, getRootSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-save-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const schematic: Schematic = getRootSchematic();\n latestSchematicFileHandleRef.current = await fileSave(\n new Blob([JSON.stringify(schematic, null, 2)]),\n {\n fileName: `${schematic.name}-schematic.json`,\n extensions: [\".json\"],\n mimeTypes: [\"application/json\"],\n description: \"Form schematic\",\n id: name,\n },\n latestSchematicFileHandleRef.current,\n );\n if (supported) {\n alert(\n `Schematic saved successfully as “${latestSchematicFileHandleRef.current!.name}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to save schematic: ${err?.toString()}`);\n }\n }}\n title=\"Save schematic\"\n aria-label=\"Save schematic\"\n >\n 💾\n </button>\n );\n}\n","import { type Schematic } from \"../Schematic.ts\";\nimport { type Scaffolder } from \"./scaffold.ts\";\nimport { type ScaffoldingData } from \"./ScaffoldingData.ts\";\n\n/** Returns a new scaffolder with its data merged with the provided data. */\nexport function configScaffolder<TScaffoldingData extends ScaffoldingData>(\n scaffolder: Scaffolder<TScaffoldingData>,\n data: Partial<TScaffoldingData>,\n): Scaffolder<TScaffoldingData> {\n return (schematic: Schematic, originalData: TScaffoldingData) =>\n scaffolder(schematic, { ...originalData, ...data });\n}\n","import * as React from \"react\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\nimport { configScaffolder } from \"./configScaffolder.ts\";\nimport { scaffold, type ScaffoldedFile } from \"./scaffold.ts\";\n\nexport function useScaffolder(): () => ScaffoldedFile[] {\n const {\n basePath,\n basePackage,\n baseDir,\n schematicKinds,\n scaffolders,\n scaffoldingData,\n getRootSchematic,\n } = useSchematicBuilderContext();\n return React.useCallback(() => {\n const schematic = getRootSchematic();\n\n let actualScaffolders =\n typeof scaffolders === \"function\" ? scaffolders(schematic) : scaffolders;\n const actualScaffoldingData =\n typeof scaffoldingData === \"function\"\n ? scaffoldingData(schematic)\n : scaffoldingData;\n\n if (actualScaffoldingData) {\n actualScaffolders = actualScaffolders.map((scaffolder) =>\n configScaffolder(scaffolder, actualScaffoldingData),\n );\n }\n\n return scaffold(schematic, actualScaffolders, {\n schematicKinds,\n basePath,\n basePackage,\n baseDir: typeof baseDir === \"function\" ? baseDir(schematic) : baseDir,\n });\n }, [\n baseDir,\n basePackage,\n basePath,\n getRootSchematic,\n scaffolders,\n scaffoldingData,\n schematicKinds,\n ]);\n}\n","import { fileSave, supported } from \"browser-fs-access\";\nimport JSZip from \"jszip\";\n\nimport { useScaffolder } from \"../scaffolding/useScaffolder.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\n\nlet latestZipFileHandle: FileSystemFileHandle | null = null;\n\nexport function ScaffoldToZip() {\n const { getRootSchematic, name } = useSchematicBuilderContext();\n const scaffold = useScaffolder();\n\n return (\n <button\n className=\"builder-input builder-action builder-scaffold-zip\"\n type=\"submit\"\n onClick={async (evt) => {\n evt.preventDefault();\n try {\n const schematic = getRootSchematic();\n const files = scaffold();\n const zip = new JSZip();\n for (const { path, content, base64, binary, executable } of files) {\n zip.file(path, content, {\n base64,\n binary,\n unixPermissions: executable ? \"755\" : undefined,\n });\n }\n latestZipFileHandle = await fileSave(\n zip.generateAsync({ platform: \"UNIX\", type: \"blob\" }),\n {\n fileName: `${schematic.name}.zip`,\n extensions: [\".zip\"],\n mimeTypes: [\"application/zip\"],\n description: \"Form scaffolding\",\n id: name,\n },\n latestZipFileHandle,\n );\n if (supported) {\n alert(\n `Project scaffolded successfully in “${latestZipFileHandle!.name}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to scaffold project: ${err?.toString()}`);\n }\n }}\n >\n Scaffold 🏗️\n </button>\n );\n}\n","import * as React from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\n\ntype UseConfigReturnType<T = unknown> = [\n T,\n (configValue: T | ((configValue: T) => T)) => void,\n];\n\nexport function useConfig<T = unknown>(\n configName: string,\n): UseConfigReturnType<T | undefined>;\nexport function useConfig<T = unknown>(\n configName: string,\n defaultValue: T,\n): UseConfigReturnType<T>;\nexport function useConfig<T>(\n configName: string,\n defaultValue?: T,\n): UseConfigReturnType<T> {\n const { useSchematic, setSchematic } = useSchematicBuilderContext();\n const configValue = useSchematic(\n (schematic) => (schematic.config?.[configName] ?? defaultValue) as T,\n );\n const setConfigValue = React.useCallback(\n (configValue: T | ((configValue: T) => T)) =>\n setSchematic((schematic) => ({\n config: {\n ...schematic.config,\n [configName]:\n typeof configValue === \"function\"\n ? (configValue as any)(schematic.config?.[configName] as T)\n : configValue,\n },\n })),\n [configName, setSchematic],\n );\n\n return React.useMemo(\n () => [configValue, setConfigValue],\n [configValue, setConfigValue],\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseFileBase64SerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseFileBase64SerializerConfig({\n disabled,\n}: UseFileBase64SerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useFileBase64Serializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>File.Base64Serializer</code>\n </label>\n </div>\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useTableValuesSerializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>Table.ValuesSerializer</code>\n </label>\n </div>\n );\n}\n","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlin.jvm.JvmOverloads\\nimport kotlinx.serialization.json.Json\\n\\n/** Base JSON configuration. */\\nprivate val JSON_CONFIG = Json.Default\\n/** Pretty JSON configuration. */\\nprivate val JSON_CONFIG_PRETTY = Json(JSON_CONFIG) { prettyPrint = true }\\n\\n/** JSON configuration. */\\n@JvmOverloads\\nfun jsonConfig(prettyPrint: Boolean = false): Json =\\n if (prettyPrint) JSON_CONFIG_PRETTY else JSON_CONFIG\\n\\n@JsExport\\n@JvmOverloads\\nfun encode<%= formClass %>ToString(<%= formVar %>: <%= formClass %>, prettyPrint: Boolean = false): String =\\n jsonConfig(prettyPrint).encodeToString(<%= formVar %>)\\n\\n@JsExport\\nfun decode<%= formClass %>FromString(json: String): <%= formClass %> =\\n jsonConfig().decodeFromString(json)\\n\"","import {\n type ScaffoldingFile,\n type ScaffoldingFileContent,\n} from \"../ScaffoldingFile.ts\";\n\nexport interface TemplateFile extends ScaffoldingFile {\n content: ScaffoldingFileContent;\n}\n\nexport type TemplateFileOptions = Omit<ScaffoldingFile, \"getContent\">;\n\nexport function templateFile(\n content: ScaffoldingFileContent,\n options?: TemplateFileOptions,\n): TemplateFile {\n return {\n ...options,\n content,\n getContent: templateFileContent,\n } as TemplateFile;\n}\n\nfunction templateFileContent(this: TemplateFile): ScaffoldingFileContent {\n return this.content;\n}\n","import { type Options, render } from \"ejs\";\n\nimport { type TemplateFile, type TemplateFileOptions } from \"./TemplateFile.ts\";\n\nexport interface EjsTemplateFile extends TemplateFile {\n content: string;\n ejsData?: Record<string, any>;\n ejsOptions?: Omit<Options, \"_with\" | \"strict\" | \"destructuredLocals\">;\n}\n\nexport type EjsTemplateFileOptions = TemplateFileOptions &\n EjsTemplateFile[\"ejsOptions\"];\n\nexport function ejsTemplateFile(\n content: string,\n ejsData?: EjsTemplateFile[\"ejsData\"],\n { base64, binary, executable, ...ejsOptions }: EjsTemplateFileOptions = {},\n): EjsTemplateFile {\n return {\n content,\n ejsData,\n base64,\n binary,\n executable,\n ejsOptions,\n getContent: ejsTemplateFileContent,\n } as EjsTemplateFile;\n}\n\nfunction ejsTemplateFileContent(\n this: EjsTemplateFile,\n): string | Promise<string> {\n return render(this.content, this.ejsData, {\n strict: true,\n destructuredLocals: Object.keys(this.ejsData ?? {}),\n ...this.ejsOptions,\n });\n}\n","import { joinPaths } from \"../../../util/join.ts\";\nimport { type ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport {\n ejsTemplateFile,\n type EjsTemplateFileOptions,\n} from \"../EjsTemplateFile.ts\";\n\nexport function addEjsTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: string,\n ejsData?: Record<string, any>,\n options?: EjsTemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n ejsTemplateFile(content, ejsData, options),\n );\n}\n","import { camelCase } from \"change-case\";\n\nimport { type Schematic } from \"../../Schematic.ts\";\nimport { type ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport serializerKt from \"../templates/Serializer.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldSerializer(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n addEjsTemplateFile(data, `${schematic.name}Serializer.kt`, serializerKt, {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n });\n}\n","export default \"package <%= filePackage %>\\n\\nimport tech.ostack.kform.ExternalContexts\\nimport tech.ostack.kform.FormValidator\\nimport tech.ostack.kform.LocatedValidationError\\nimport tech.ostack.kform.LocatedValidationWarning\\nimport tech.ostack.kform.test.assertContainsMatchingIssue\\nimport tech.ostack.kform.test.assertNotContainsMatchingIssue\\n\\nval <%= formVar %>Validator by lazy { FormValidator(<%= formClass %>Schema) }\\n\\nfun validate<%= formClass %>(\\n <%= formVar %>: <%= formClass %>,\\n path: String,\\n externalContexts: ExternalContexts = emptyMap(),\\n) = <%= formVar %>Validator.validate(<%= formVar %>, path, externalContexts)\\n\\nsuspend fun assert<%= formClass %>ContainsError(\\n path: String,\\n code: String,\\n <%= formVar %>: <%= formClass %>,\\n externalContexts: ExternalContexts = emptyMap(),\\n) =\\n assertContainsMatchingIssue(\\n LocatedValidationError(path, code),\\n validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n )\\n\\nsuspend fun assert<%= formClass %>NotContainsError(\\n path: String,\\n code: String,\\n <%= formVar %>: <%= formClass %>,\\n externalContexts: ExternalContexts = emptyMap(),\\n) =\\n assertNotContainsMatchingIssue(\\n LocatedValidationError(path, code),\\n validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n )\\n\\nsuspend fun assert<%= formClass %>ContainsWarning(\\n path: String,\\n code: String,\\n <%= formVar %>: <%= formClass %>,\\n externalContexts: ExternalContexts = emptyMap(),\\n) =\\n assertContainsMatchingIssue(\\n LocatedValidationWarning(path, code),\\n validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n )\\n\\nsuspend fun assert<%= formClass %>NotContainsWarning(\\n path: String,\\n code: String,\\n <%= formVar %>: <%= formClass %>,\\n externalContexts: ExternalContexts = emptyMap(),\\n) =\\n assertNotContainsMatchingIssue(\\n LocatedValidationWarning(path, code),\\n validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n )\\n\"","import { camelCase } from \"change-case\";\n\nimport { type Schematic } from \"../../Schematic.ts\";\nimport { type ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport validatorKt from \"../templates/Validator.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldValidator(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n addEjsTemplateFile(data, `${schematic.name}Validator.kt`, validatorKt, {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n });\n}\n","import * as React from \"react\";\n\n/** `useLayoutEffect` hook which performs a noop when run on the server. */\nexport const useLayoutEffect =\n typeof document !== \"undefined\" ? React.useLayoutEffect : () => {};\n","import { useLayoutEffect } from \"./useLayoutEffect.ts\";\n\n/**\n * Hook that tracks the dimensions of an HTML element using the Resize Observer\n * API + window resize.\n */\nexport function useMeasure<T extends Element = Element>(\n element: T | null,\n setMeasurement: (measurement: DOMRectReadOnly | undefined) => void,\n) {\n useLayoutEffect(() => {\n if (!element) {\n setMeasurement(undefined);\n return;\n }\n\n const cb = () => setMeasurement(element.getBoundingClientRect());\n cb();\n\n const observer = new ResizeObserver(([entry]) => entry && cb());\n observer.observe(element);\n window.addEventListener(\"resize\", cb);\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", cb);\n setMeasurement(undefined);\n };\n }, [element, setMeasurement]);\n}\n","import * as React from \"react\";\n\nimport { useMeasure } from \"./util/useMeasure.ts\";\n\nexport interface SchematicBuilderConfigProps {\n children?: React.ReactNode;\n}\n\nexport function SchematicBuilderConfig({\n children,\n}: SchematicBuilderConfigProps) {\n const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(\n null,\n );\n const [popoverEl, setPopoverEl] = React.useState<HTMLDivElement | null>(null);\n useMeasure(anchorEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--anchor-top\", `${measurement.top}px`);\n popoverEl.style.setProperty(\"--anchor-left\", `${measurement.left}px`);\n popoverEl.style.setProperty(\"--anchor-bottom\", `${measurement.bottom}px`);\n popoverEl.style.setProperty(\"--anchor-right\", `${measurement.right}px`);\n popoverEl.style.setProperty(\"--anchor-width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--anchor-height\", `${measurement.height}px`);\n }\n });\n useMeasure(popoverEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--height\", `${measurement.height}px`);\n }\n });\n\n return (\n <>\n <button\n type=\"button\"\n className=\"builder-icon-button builder-action builder-config-schematic\"\n popoverTarget=\"builder-config-popover\"\n title=\"Config\"\n aria-label=\"Config\"\n ref={setAnchorEl}\n >\n ⚙️\n </button>\n <div popover=\"\" id=\"builder-config-popover\" ref={setPopoverEl}>\n {children}\n </div>\n </>\n );\n}\n","import {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport * as React from \"react\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nimport { LoadSchematic } from \"./actions/LoadSchematic.tsx\";\nimport { SaveSchematic } from \"./actions/SaveSchematic.tsx\";\nimport { ScaffoldToZip } from \"./actions/ScaffoldToZip.tsx\";\nimport { UseFileBase64SerializerConfig } from \"./configs/UseFileBase64SerializerConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport { configScaffolder } from \"./scaffolding/configScaffolder.ts\";\nimport { type KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport { type Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport { scaffoldModels } from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchemas } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldValidator } from \"./scaffolding/scaffolders/scaffoldValidator.ts\";\nimport { createSchematic, moveSchematic, type Schematic } from \"./Schematic.ts\";\nimport { SchematicBuilderConfig } from \"./SchematicBuilderConfig.tsx\";\nimport {\n type DraggedSchematic,\n SchematicBuilderContext,\n} from \"./SchematicBuilderContext.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport {\n classSchematicKind,\n defaultSchematicKinds,\n type SchematicKind,\n} from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps {\n name?: string;\n title?: React.ReactNode;\n basePath?: string;\n basePackage?: string;\n baseDir?: string | ((schematic: Schematic) => string);\n defaultRootClassPackage?: string;\n defaultRootClassName?: string;\n schematicKinds?: SchematicKind[];\n scaffolders?:\n | Scaffolder<any>[]\n | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n | Record<string, any>\n | ((schematic: Schematic) => Record<string, any>);\n actions?: React.ReactNode;\n configs?: React.ReactNode;\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\n};\n\nexport function SchematicBuilder({\n name = \"kform\",\n title = document.title,\n basePath,\n basePackage,\n baseDir,\n defaultRootClassPackage = \"org.example\",\n defaultRootClassName = \"MyForm\",\n schematicKinds = defaultSchematicKinds,\n scaffolders = [\n configScaffolder(scaffoldSchemas, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n ],\n scaffoldingData = (schematic) => schematic.config,\n actions = (\n <>\n <LoadSchematic />\n <SaveSchematic />\n <ScaffoldToZip />\n </>\n ),\n configs = (\n <>\n <UseFileBase64SerializerConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n}: SchematicBuilderProps) {\n const [useSchematic] = React.useState(() =>\n create(\n persist(\n () =>\n createSchematic({\n kind: classSchematicKind.kind,\n packageSuffix: defaultRootClassPackage,\n name: defaultRootClassName,\n children: [],\n }),\n { name },\n ),\n ),\n );\n const schematicKindsMap = React.useMemo(\n () =>\n new Map(\n schematicKinds\n .sort((t1, t2) => t1.kind.localeCompare(t2.kind))\n .map((t) => [t.kind, t]),\n ),\n [schematicKinds],\n );\n const latestSchematicFileHandleRef =\n React.useRef<FileSystemFileHandle | null>(null);\n\n const [draggedSchematic, setDraggedSchematic] =\n React.useState<DraggedSchematic | null>(null);\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 10, delay: 400, tolerance: 20 },\n }),\n useSensor(KeyboardSensor),\n );\n\n return (\n <SchematicBuilderContext.Provider\n value={{\n name,\n basePath,\n basePackage,\n baseDir,\n schematicKinds: schematicKindsMap,\n scaffolders,\n scaffoldingData,\n getRootSchematic: useSchematic.getState,\n useSchematic: useSchematic as never,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n setSchematic: useSchematic.setState,\n removeSchematic: () => {},\n parentPackage: basePackage,\n draggedSchematic,\n latestSchematicFileHandleRef,\n }}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={(evt) =>\n setDraggedSchematic({\n id: evt.active.id as string,\n ...evt.active.data.current,\n } as DraggedSchematic)\n }\n onDragEnd={(evt) => {\n const { parentId, sortBefore, ignored } =\n evt.over?.data.current ?? {};\n if (!ignored) {\n useSchematic.setState((schematic) =>\n moveSchematic(\n schematic,\n evt.active.id as string,\n parentId,\n sortBefore,\n ),\n );\n }\n setDraggedSchematic(null);\n }}\n >\n <form className=\"builder-root\">\n <header className=\"builder-header\">\n <h1 className=\"builder-title\">{title}</h1>\n <div className=\"builder-actions\">\n {configs && (\n <SchematicBuilderConfig>{configs}</SchematicBuilderConfig>\n )}\n {actions}\n </div>\n </header>\n\n <ClassBuilder />\n </form>\n\n <DragOverlay>\n {draggedSchematic && (\n <div className=\"builder-dragged\">{draggedSchematic.node}</div>\n )}\n </DragOverlay>\n </DndContext>\n </SchematicBuilderContext.Provider>\n );\n}\n","import { joinPaths } from \"../../../util/join.ts\";\nimport { type ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport { type ScaffoldingFileContent } from \"../../ScaffoldingFile.ts\";\nimport { templateFile, type TemplateFileOptions } from \"../TemplateFile.ts\";\n\nexport function addTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: ScaffoldingFileContent,\n options?: TemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n templateFile(content, options),\n );\n}\n","import { type ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport { type TsImport } from \"./TsImport.ts\";\n\nexport interface TsFile extends ScaffoldingFile {\n imports: TsImport[];\n declarations: string[];\n}\n\nexport function tsFile(): TsFile {\n return {\n imports: [],\n declarations: [],\n getContent: tsFileContent,\n };\n}\n\ninterface TsImportStatement {\n moduleName: string;\n namedImports?: Set<string>;\n typedImports?: Set<string>;\n defaultImport?: string;\n namespaceImport?: string;\n}\n\nfunction tsFileContent(this: TsFile): string {\n const importStatements = tsImportsToStatements(this.imports);\n return (\n [\n // Imports\n importStatements\n .sort((i1, i2) => i1.moduleName.localeCompare(i2.moduleName))\n .map((i) => tsImportStatementToString(i))\n .join(\"\\n\"),\n\n // Declarations\n ...this.declarations,\n ]\n .filter((s) => s)\n .join(\"\\n\\n\") + \"\\n\"\n );\n}\n\nfunction tsImportsToStatements(imports: TsImport[]): TsImportStatement[] {\n const importsStatements = new Map<string, TsImportStatement>();\n for (const imp of imports) {\n let statement = importsStatements.get(imp.moduleName);\n if (!statement) {\n importsStatements.set(\n imp.moduleName,\n (statement = { moduleName: imp.moduleName }),\n );\n }\n if (imp.isDefault) {\n statement.defaultImport = imp.name;\n } else if (imp.isNamespace) {\n statement.namespaceImport = imp.name;\n } else if (imp.isType) {\n (statement.typedImports ??= new Set()).add(imp.name);\n } else if (imp.name) {\n (statement.namedImports ??= new Set()).add(imp.name);\n }\n }\n return Array.from(importsStatements.values());\n}\n\nfunction tsImportStatementToString(importStatement: TsImportStatement): string {\n const namedImportsArr = importStatement.namedImports\n ? Array.from(importStatement.namedImports).sort((i1, i2) =>\n i1.localeCompare(i2),\n )\n : [];\n const typedImportsArr = importStatement.typedImports\n ? Array.from(importStatement.typedImports)\n .sort((i1, i2) => i1.localeCompare(i2))\n .map((i) => `type ${i}`)\n : [];\n const namedTypedImports =\n namedImportsArr.length > 0 || typedImportsArr.length > 0\n ? `{ ${[...namedImportsArr, ...typedImportsArr].join(\", \")} }`\n : null;\n const defaultImport = importStatement.defaultImport || null;\n const namespaceImport = importStatement.namespaceImport\n ? `* as ${importStatement.namespaceImport}`\n : null;\n const allImports = [defaultImport, namespaceImport, namedTypedImports]\n .filter((s) => s)\n .join(\", \");\n const moduleName = `\"${importStatement.moduleName}\"`;\n\n return allImports\n ? `import ${allImports} from ${moduleName};`\n : `import ${moduleName};`;\n}\n"],"names":["code","jsx","jsxs","kind","React","useDroppable","CHILD_NAME_PLACEHOLDER","useDraggable","Fragment","indentWidth","pascalCase","fileOpen","fileSave","supported","scaffold","configValue","render","camelCase","create","persist","useSensors","useSensor","PointerSensor","KeyboardSensor","DndContext","closestCenter","DragOverlay"],"mappings":"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"}
|