@ostack.tech/ui-kform-scaffolder 0.6.4 → 0.6.5
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/dist/ostack-ui-kform-scaffolder.js +55 -48
- package/dist/ostack-ui-kform-scaffolder.js.map +1 -1
- package/dist/types/scaffolding/ScaffoldingData.d.ts +7 -0
- package/dist/types/scaffolding/scaffolders/scaffoldSerializer.d.ts +1 -0
- package/dist/webapp/assets/{index-DMkQ0pdl.js → index-Ooi-iJKI.js} +206 -208
- package/dist/webapp/index.html +1 -1
- package/package.json +1 -1
|
@@ -232,6 +232,24 @@ function scaffoldField(schematic, data) {
|
|
|
232
232
|
</ControlField>
|
|
233
233
|
`;
|
|
234
234
|
}
|
|
235
|
+
const jsonSerializerKt = "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<%_ if (includeSerializationFormatVersion) { -%>\n/** Version of the serialization format. */\n@JsExport\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\n\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\n@JvmOverloads\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\n jsonConfig(prettyPrint).encodeToString(externalContexts)\n\n@JsExport\nfun decode<%= formClass %>ExternalContextsFromString(json: String): <%= formClass %>ExternalContexts =\n jsonConfig().decodeFromString(json)\n\n@JvmOverloads\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\n jsonConfig(prettyPrint).encodeToString(response)\n\n@JsExport\nfun decode<%= formClass %>SubmitResponseFromString(json: String): <%= formClass %>SubmitResponse =\n jsonConfig().decodeFromString(json)\n";
|
|
236
|
+
const xmlSerializerKt = "package <%= filePackage %>\n\nimport kotlin.js.JsExport\nimport kotlin.jvm.JvmOverloads\nimport kotlinx.serialization.decodeFromString\nimport kotlinx.serialization.encodeToString\nimport nl.adaptivity.xmlutil.ExperimentalXmlUtilApi\nimport nl.adaptivity.xmlutil.QName\nimport nl.adaptivity.xmlutil.XMLConstants\nimport nl.adaptivity.xmlutil.core.XmlVersion\nimport nl.adaptivity.xmlutil.serialization.DefaultXmlSerializationPolicy\nimport nl.adaptivity.xmlutil.serialization.OutputKind\nimport nl.adaptivity.xmlutil.serialization.XML\nimport nl.adaptivity.xmlutil.serialization.XmlSerializationPolicy\nimport nl.adaptivity.xmlutil.serialization.structure.SafeParentInfo\n\n/** Base XML configuration. */\nprivate val XML_CONFIG = XML {\n recommended_0_91_0 {\n xmlVersion = XmlVersion.XML10\n autoPolymorphic = false\n encodeDefault = XmlSerializationPolicy.XmlEncodeDefault.NEVER\n }\n\n // Set policy on top of the current policy config\n @OptIn(ExperimentalXmlUtilApi::class)\n policy =\n object : DefaultXmlSerializationPolicy(policy) {\n // Serialize properties as elements instead of attributes by default\n override val defaultPrimitiveOutputKind: OutputKind = OutputKind.Element\n\n // Use property names as serial names by default\n override fun effectiveName(\n serializerParent: SafeParentInfo,\n tagParent: SafeParentInfo,\n outputKind: OutputKind,\n useName: XmlSerializationPolicy.DeclaredNameInfo,\n ): QName =\n useName.annotatedName\n ?: serializerParent.elementTypeDescriptor.typeQname\n ?: QName(\n if (outputKind == OutputKind.Element) tagParent.namespace.namespaceURI\n else XMLConstants.NULL_NS_URI,\n useName.serialName,\n )\n }\n}\n/** Pretty XML configuration. */\nprivate val XML_CONFIG_PRETTY = XML_CONFIG.copy { indent = 4 }\n\n/** XML configuration. */\n@JvmOverloads\nfun xmlConfig(prettyPrint: Boolean = false): XML =\n if (prettyPrint) XML_CONFIG_PRETTY else XML_CONFIG\n\n<%_ if (includeSerializationFormatVersion) { -%>\n/** Version of the serialization format. */\n@JsExport\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\n\n<%_ } -%>\n@JsExport\n@JvmOverloads\nfun encode<%= formClass %>ToString(<%= formVar %>: <%= formClass %>, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(<%= formVar %>)\n\n@JsExport\nfun decode<%= formClass %>FromString(xml: String): <%= formClass %> =\n xmlConfig().decodeFromString(xml)\n\n@JvmOverloads\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(externalContexts)\n\n@JsExport\nfun decode<%= formClass %>ExternalContextsFromString(xml: String): <%= formClass %>ExternalContexts =\n xmlConfig().decodeFromString(xml)\n\n@JvmOverloads\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(response)\n\n@JsExport\nfun decode<%= formClass %>SubmitResponseFromString(xml: String): <%= formClass %>SubmitResponse =\n xmlConfig().decodeFromString(xml)\n";
|
|
237
|
+
const DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION = true;
|
|
238
|
+
function scaffoldSerializer(schematic, data) {
|
|
239
|
+
const ejsData = {
|
|
240
|
+
filePackage: data.currentPackage,
|
|
241
|
+
formVar: camelCase(schematic.name),
|
|
242
|
+
formClass: schematic.name,
|
|
243
|
+
formConstant: constantCase(schematic.name),
|
|
244
|
+
includeSerializationFormatVersion: data.includeSerializationFormatVersion ?? DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION
|
|
245
|
+
};
|
|
246
|
+
addEjsTemplateFile(
|
|
247
|
+
data,
|
|
248
|
+
`${schematic.name}Serializer.kt`,
|
|
249
|
+
data.serializationFormat === "xml" ? xmlSerializerKt : jsonSerializerKt,
|
|
250
|
+
ejsData
|
|
251
|
+
);
|
|
252
|
+
}
|
|
235
253
|
function arrayify(value) {
|
|
236
254
|
return value == null ? [] : Array.isArray(value) ? value : [value];
|
|
237
255
|
}
|
|
@@ -273,38 +291,42 @@ const classSchematicKind = {
|
|
|
273
291
|
if (data.currentPath !== "/") {
|
|
274
292
|
return baseModel;
|
|
275
293
|
}
|
|
276
|
-
data.currentFile.imports.add("kotlin.js.ExperimentalJsStatic").add("kotlin.js.JsStatic").add("kotlinx.serialization.EncodeDefault").add("kotlinx.serialization.ExperimentalSerializationApi");
|
|
277
294
|
const classAnnotations = [];
|
|
278
|
-
|
|
279
|
-
"@EncodeDefault",
|
|
280
|
-
"@OptIn(ExperimentalSerializationApi::class)"
|
|
281
|
-
];
|
|
295
|
+
let versionProperty = null;
|
|
282
296
|
if (data.serializationFormat === "xml") {
|
|
283
|
-
data.currentFile.imports.add(
|
|
284
|
-
|
|
297
|
+
data.currentFile.imports.add(
|
|
298
|
+
"nl.adaptivity.xmlutil.serialization.XmlSerialName"
|
|
299
|
+
);
|
|
300
|
+
const namespace = data.xmlNamespace ?? `http://${data.currentPackage.split(".").reverse().join(".")}/schema/${(/* @__PURE__ */ new Date()).getFullYear()}`;
|
|
285
301
|
classAnnotations.push(
|
|
286
|
-
`@XmlSerialName("${schematic.name}", "${
|
|
302
|
+
`@XmlSerialName("${schematic.name}", "${namespace}")`
|
|
287
303
|
);
|
|
288
|
-
versionAnnotations.push("@XmlElement(false)");
|
|
289
|
-
} else {
|
|
290
|
-
data.currentFile.imports.add("kotlinx.serialization.SerialName");
|
|
291
|
-
versionAnnotations.push('@SerialName($$"$version")');
|
|
292
304
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
305
|
+
if (data.includeSerializationFormatVersion ?? DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION) {
|
|
306
|
+
data.currentFile.imports.add("kotlinx.serialization.EncodeDefault").add("kotlinx.serialization.ExperimentalSerializationApi");
|
|
307
|
+
const versionAnnotations = [
|
|
308
|
+
"@EncodeDefault",
|
|
309
|
+
"@OptIn(ExperimentalSerializationApi::class)"
|
|
310
|
+
];
|
|
311
|
+
if (data.serializationFormat === "xml") {
|
|
312
|
+
data.currentFile.imports.add(
|
|
313
|
+
"nl.adaptivity.xmlutil.serialization.XmlElement"
|
|
314
|
+
);
|
|
315
|
+
versionAnnotations.push("@XmlElement(false)");
|
|
316
|
+
} else {
|
|
317
|
+
data.currentFile.imports.add("kotlinx.serialization.SerialName");
|
|
318
|
+
versionAnnotations.push('@SerialName($$"$version")');
|
|
319
|
+
}
|
|
320
|
+
versionProperty = annotate(
|
|
321
|
+
versionAnnotations,
|
|
322
|
+
`internal var version = ${constantCase(schematic.name)}_SERIALIZATION_VERSION`
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
return annotate(classAnnotations, baseModel) + (versionProperty ? ` ${code`
|
|
326
|
+
{
|
|
327
|
+
${versionProperty}
|
|
304
328
|
}
|
|
305
|
-
|
|
306
|
-
`}`
|
|
307
|
-
);
|
|
329
|
+
`}` : "");
|
|
308
330
|
},
|
|
309
331
|
scaffoldField: (schematic, data) => {
|
|
310
332
|
data.currentFile.imports.push(
|
|
@@ -753,7 +775,6 @@ function scaffoldAppComponentFile(schematic, data) {
|
|
|
753
775
|
{ moduleName: "@ostack.tech/ui-kform", name: localeVar },
|
|
754
776
|
{ moduleName: "@ostack.tech/ui-kform", name: "IssuesPanel" },
|
|
755
777
|
{ moduleName: "react", name: "useMemo" },
|
|
756
|
-
{ moduleName: data.kmpModuleName, name: schematic.name },
|
|
757
778
|
{ moduleName: data.kmpModuleName, name: `${schematic.name}FormMode` },
|
|
758
779
|
{ moduleName: data.kmpModuleName, name: `${schematic.name}Schema` },
|
|
759
780
|
{ moduleName: `./api/reportError.ts`, name: "reportError" },
|
|
@@ -774,10 +795,11 @@ function scaffoldAppComponentFile(schematic, data) {
|
|
|
774
795
|
return (
|
|
775
796
|
<FormApp
|
|
776
797
|
schema={${schematic.name}Schema.get()}
|
|
777
|
-
initialValue={
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
798
|
+
initialValue={
|
|
799
|
+
externalContexts.mode !== ${schematic.name}FormMode.NEW
|
|
800
|
+
? externalContexts.initialValue
|
|
801
|
+
: undefined
|
|
802
|
+
}
|
|
781
803
|
externalContexts={useMemo(
|
|
782
804
|
() => ktMapToObject(externalContexts.toMap()),
|
|
783
805
|
[externalContexts],
|
|
@@ -1436,22 +1458,6 @@ function scaffoldResponses(schematic, data) {
|
|
|
1436
1458
|
ejsData
|
|
1437
1459
|
);
|
|
1438
1460
|
}
|
|
1439
|
-
const jsonSerializerKt = "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/** Version of the serialization format. */\n@JsExport\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\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\n@JvmOverloads\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\n jsonConfig(prettyPrint).encodeToString(externalContexts)\n\n@JsExport\nfun decode<%= formClass %>ExternalContextsFromString(json: String): <%= formClass %>ExternalContexts =\n jsonConfig().decodeFromString(json)\n\n@JvmOverloads\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\n jsonConfig(prettyPrint).encodeToString(response)\n\n@JsExport\nfun decode<%= formClass %>SubmitResponseFromString(json: String): <%= formClass %>SubmitResponse =\n jsonConfig().decodeFromString(json)\n";
|
|
1440
|
-
const xmlSerializerKt = "package <%= filePackage %>\n\nimport kotlin.js.JsExport\nimport kotlin.jvm.JvmOverloads\nimport kotlinx.serialization.decodeFromString\nimport kotlinx.serialization.encodeToString\nimport nl.adaptivity.xmlutil.ExperimentalXmlUtilApi\nimport nl.adaptivity.xmlutil.QName\nimport nl.adaptivity.xmlutil.XMLConstants\nimport nl.adaptivity.xmlutil.core.XmlVersion\nimport nl.adaptivity.xmlutil.serialization.DefaultXmlSerializationPolicy\nimport nl.adaptivity.xmlutil.serialization.OutputKind\nimport nl.adaptivity.xmlutil.serialization.XML\nimport nl.adaptivity.xmlutil.serialization.XmlSerializationPolicy\nimport nl.adaptivity.xmlutil.serialization.structure.SafeParentInfo\n\n/** Base XML configuration. */\nprivate val XML_CONFIG = XML {\n recommended_0_91_0 {\n xmlVersion = XmlVersion.XML10\n autoPolymorphic = false\n encodeDefault = XmlSerializationPolicy.XmlEncodeDefault.NEVER\n }\n\n // Set policy on top of the current policy config\n @OptIn(ExperimentalXmlUtilApi::class)\n policy =\n object : DefaultXmlSerializationPolicy(policy) {\n // Serialize properties as elements instead of attributes by default\n override val defaultPrimitiveOutputKind: OutputKind = OutputKind.Element\n\n // Use property names as serial names by default\n override fun effectiveName(\n serializerParent: SafeParentInfo,\n tagParent: SafeParentInfo,\n outputKind: OutputKind,\n useName: XmlSerializationPolicy.DeclaredNameInfo,\n ): QName =\n useName.annotatedName\n ?: serializerParent.elementTypeDescriptor.typeQname\n ?: QName(\n if (outputKind == OutputKind.Element) tagParent.namespace.namespaceURI\n else XMLConstants.NULL_NS_URI,\n useName.serialName,\n )\n }\n}\n/** Pretty XML configuration. */\nprivate val XML_CONFIG_PRETTY = XML_CONFIG.copy { indent = 4 }\n\n/** XML configuration. */\n@JvmOverloads\nfun xmlConfig(prettyPrint: Boolean = false): XML =\n if (prettyPrint) XML_CONFIG_PRETTY else XML_CONFIG\n\n/** Version of the serialization format. */\n@JsExport\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\n\n@JsExport\n@JvmOverloads\nfun encode<%= formClass %>ToString(<%= formVar %>: <%= formClass %>, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(<%= formVar %>)\n\n@JsExport\nfun decode<%= formClass %>FromString(xml: String): <%= formClass %> =\n xmlConfig().decodeFromString(xml)\n\n@JvmOverloads\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(externalContexts)\n\n@JsExport\nfun decode<%= formClass %>ExternalContextsFromString(xml: String): <%= formClass %>ExternalContexts =\n xmlConfig().decodeFromString(xml)\n\n@JvmOverloads\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\n xmlConfig(prettyPrint).encodeToString(response)\n\n@JsExport\nfun decode<%= formClass %>SubmitResponseFromString(xml: String): <%= formClass %>SubmitResponse =\n xmlConfig().decodeFromString(xml)\n";
|
|
1441
|
-
function scaffoldSerializer(schematic, data) {
|
|
1442
|
-
const ejsData = {
|
|
1443
|
-
filePackage: data.currentPackage,
|
|
1444
|
-
formVar: camelCase(schematic.name),
|
|
1445
|
-
formClass: schematic.name,
|
|
1446
|
-
formConstant: constantCase(schematic.name)
|
|
1447
|
-
};
|
|
1448
|
-
addEjsTemplateFile(
|
|
1449
|
-
data,
|
|
1450
|
-
`${schematic.name}Serializer.kt`,
|
|
1451
|
-
data.serializationFormat === "xml" ? xmlSerializerKt : jsonSerializerKt,
|
|
1452
|
-
ejsData
|
|
1453
|
-
);
|
|
1454
|
-
}
|
|
1455
1461
|
const indexScss = '@use "@ostack.tech/ui/scss" as ostack-ui;\n@use "@ostack.tech/ui-kform/scss" as ostack-ui-kform;\n';
|
|
1456
1462
|
function scaffoldStyles(_schematic, data) {
|
|
1457
1463
|
addTemplateFile(data, "index.scss", indexScss);
|
|
@@ -1471,7 +1477,7 @@ function scaffoldViteProject(schematic, data) {
|
|
|
1471
1477
|
formId: kebabCase(schematic.name),
|
|
1472
1478
|
formClass: schematic.name,
|
|
1473
1479
|
formTitle: capitalCase(schematic.name),
|
|
1474
|
-
ostackUiVersion: "0.6.
|
|
1480
|
+
ostackUiVersion: "0.6.5",
|
|
1475
1481
|
kFormVersion: "0.31.6",
|
|
1476
1482
|
dependencyVersions: JSON.parse('{"@eslint/js":"^9.39.1","@fortawesome/fontawesome-svg-core":"^7.1.0","@fortawesome/free-brands-svg-icons":"^7.1.0","@fortawesome/free-regular-svg-icons":"^7.1.0","@fortawesome/free-solid-svg-icons":"^7.1.0","@ostack.tech/kform":"~0.31.6","@ostack.tech/kform-react":"~0.31.6","@ostack.tech/kform-scaffolder":"~0.31.6","@storybook/addon-docs":"^10.1.5","@storybook/addon-links":"^10.1.5","@storybook/react-vite":"^10.1.5","@types/node":"^22.19.2","@types/react":"^19.2.7","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.2","change-case":"^5.4.4","cpy-cli":"^6.0.0","date-fns":"^4.1.0","eslint":"^9.39.1","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24","eslint-plugin-simple-import-sort":"^12.1.1","eslint-plugin-storybook":"^10.1.5","globals":"^16.5.0","happy-dom":"^20.0.11","lint-staged":"^16.2.7","prettier":"^3.7.4","prettier-plugin-jsdoc":"^1.8.0","react":"^19.2.1","react-dom":"^19.2.1","rimraf":"^6.1.2","sass-embedded":"^1.93.3","simple-git-hooks":"^2.13.1","storybook":"^10.1.5","terser":"^5.44.1","tslib":"^2.8.1","typescript":"~5.9.3","typescript-eslint":"^8.49.0","vite":"^7.2.7","vite-plugin-dts":"^4.5.4","vitest":"^4.0.15","zustand":"^5.0.9"}'),
|
|
1477
1483
|
externalContextsData: data.serializationFormat === "json" ? "{}" : `<${schematic.name}ExternalContexts />`,
|
|
@@ -1550,6 +1556,7 @@ function SchematicBuilder({
|
|
|
1550
1556
|
export {
|
|
1551
1557
|
DEFAULT_ACTIVE_PATH_SEARCH_PARAM,
|
|
1552
1558
|
DEFAULT_API_BASE_PATH,
|
|
1559
|
+
DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION,
|
|
1553
1560
|
DEFAULT_JVM_TOOLCHAIN_VERSION,
|
|
1554
1561
|
DEFAULT_LOCALE,
|
|
1555
1562
|
DEFAULT_NODEJS_VERSION,
|