UNPKG

@lightweightform/kotlin-cli

Version:

LF Kotlin CLI Plugin

114 lines 5.18 kB
"use strict"; /* * @license * Copyright Lightweightform. All Rights Reserved. * * Use of this source code is governed by an Apache2.0-style license that can be * found at https://www.apache.org/licenses/LICENSE-2.0 */ Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("../../utils"); var template_manager_1 = require("../template.manager"); var record_schema_1 = require("../schema/record.schema"); var RecordStorage = /** @class */ (function () { function RecordStorage() { } RecordStorage.createRecordStorage = function (schema, basePackage, directory, name, isRoot) { var _this = this; if (isRoot === void 0) { isRoot = false; } utils_1.createIfCondition(!isRoot, directory); var fields = []; var importPackages = []; Object.keys(schema.fieldsSchemas).forEach(function (fieldName) { var fieldSchema = schema.fieldsSchemas[fieldName]; var isRecordSchema = fieldSchema.type === 'record'; var isListSchema = fieldSchema.type === 'list' || fieldSchema.type === 'table'; var isPairSchema = fieldSchema.type === 'tuple'; var isNullable = fieldSchema.isNullable; var isClientOnly = fieldSchema.isClientOnly; var isCheckboxGroupSchema = record_schema_1.RecordSchema.isCheckboxGroupSchema(fieldSchema.elementsSchema); var fieldType = ''; switch (fieldSchema.type) { case 'record': fieldType = utils_1.camelCase(fieldName); RecordStorage.createRecordStorage(fieldSchema, basePackage + "." + fieldName.toLowerCase(), directory + "/" + fieldName.toLowerCase(), fieldName); break; case 'table': case 'list': fieldType = utils_1.camelCase(fieldName) + "Entry"; var childSchema = fieldSchema.elementsSchema || fieldSchema.rowsSchema; if (isCheckboxGroupSchema) { fieldType = utils_1.camelCase(childSchema.type); } else { RecordStorage.createRecordStorage(childSchema, basePackage + "." + fieldName.toLowerCase(), directory + "/" + fieldName.toLowerCase(), fieldType); } break; case 'tuple': importPackages = _this._importPackageIfNotExists(importPackages, 'pt.lightweightform.kotlin.schema.PairSchema'); utils_1.throwIfCondition(fieldSchema.elementsSchemas.length !== 2, 'LF-KOTLIN only support Pairs at this moment'); isPairSchema = true; break; case 'number': fieldType = 'Long'; break; default: fieldType = utils_1.camelCase(fieldSchema.type.replace('Schema', '')); if (fieldType === 'Date') { fieldType = 'String'; } break; } fields.push({ fieldName: fieldName, fieldType: fieldType, isNullable: isNullable, isList: isListSchema, isPairSchema: isPairSchema, isRecord: isRecordSchema, isClientOnly: isClientOnly, defaultValue: _this._getDefaultValue(fieldType, isNullable, isListSchema), isStringType: fieldType === 'String' }); if (isClientOnly) { importPackages = _this._importPackageIfNotExists(importPackages, 'kotlinx.serialization.Optional'); } if (isRecordSchema || (isListSchema && !isCheckboxGroupSchema)) { importPackages = _this._importPackageIfNotExists(importPackages, basePackage + "." + fieldName.toLowerCase() + "." + fieldType); } }); // Write Record Storage class var className = utils_1.camelCase(name); utils_1.writeFile(directory + "/" + className + ".kt", template_manager_1.default.loadRecordStorage({ package: "" + basePackage, className: utils_1.camelCase(name), fields: fields, importPackages: importPackages, })); }; RecordStorage._getDefaultValue = function (fieldType, isNullable, isListSchema) { if (isNullable) { return 'null'; } if (isListSchema) { return 'mutableListOf()'; } switch (fieldType.toLowerCase()) { case 'string': return '""'; case 'boolean': return 'false'; default: return 'null'; } }; RecordStorage._importPackageIfNotExists = function (importPackages, packageToImport) { if (importPackages.indexOf(packageToImport) === -1) { importPackages.push(packageToImport); } return importPackages; }; return RecordStorage; }()); exports.RecordStorage = RecordStorage; //# sourceMappingURL=record.storage.js.map