@lightweightform/kotlin-cli
Version:
LF Kotlin CLI Plugin
114 lines • 5.18 kB
JavaScript
"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