UNPKG

@platform/cell.typesystem

Version:

The 'strongly typed sheets' system of the CellOS.

102 lines (101 loc) 4.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeBuilderType = void 0; var tslib_1 = require("tslib"); var common_1 = require("../common"); var TypeSystem_core_1 = require("../TypeSystem.core"); var TypeBuilderProp_1 = require("./TypeBuilderProp"); var TypeBuilderType = (function () { function TypeBuilderType(args) { var _this = this; this._props = []; this.onPropChange = function (e) { if (e.prop === 'column') { _this.onColumnChange(e.value); } }; var validation = TypeSystem_core_1.TypeScript.validate.objectTypename(args.typename); if (!validation.isValid) { throw new Error(validation.error); } var startColumn = (0, common_1.defaultValue)(args.startColumn, 0); if (typeof startColumn === 'string') { if (!common_1.coord.cell.isColumn(startColumn)) { throw new Error("The given start-column key (" + startColumn + ") is not a valid column"); } startColumn = common_1.coord.cell.toAxisIndex('COLUMN', startColumn); } if (typeof startColumn === 'number' && startColumn < 0) { throw new Error("The given start-column index (" + startColumn + ") is less than zero"); } this.uri = common_1.Uri.ns(args.uri); this.typename = (args.typename || '').trim(); this.startColumn = startColumn; } Object.defineProperty(TypeBuilderType.prototype, "props", { get: function () { return this._props; }, enumerable: false, configurable: true }); TypeBuilderType.prototype.toString = function () { return this.uri.toString(); }; TypeBuilderType.prototype.toObject = function () { return { columns: {} }; }; TypeBuilderType.prototype.prop = function (name, arg) { name = (name || '').trim(); var validName = TypeSystem_core_1.TypeScript.validate.propname(name); if (validName.error) { throw new Error(validName.error); } var exists = this.props.some(function (prop) { return prop.toObject().name === name; }); if (exists) { var err = "A property named '" + name + "' has already been added"; throw new Error(err); } var onChange = this.onPropChange; var column = this.nextColumn(typeof arg === 'object' ? arg.column : undefined); var toBuilder = function (arg) { var options = typeof arg === 'string' || arg === undefined ? { type: arg } : arg; return TypeBuilderProp_1.TypeBuilderProp.create((0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { column: column, name: name, onChange: onChange })); }; var builder = typeof arg === 'function' ? TypeBuilderProp_1.TypeBuilderProp.create({ column: column, name: name, onChange: onChange }) : toBuilder(arg); if (typeof arg === 'function') { arg(builder); } this._props.push(builder); return this; }; TypeBuilderType.prototype.nextColumn = function (input) { var column = -1; if (input !== undefined) { column = typeof input === 'string' ? common_1.coord.cell.toAxisIndex('COLUMN', input) : input; } else { if (this._lastColumn === undefined) { column = this.startColumn; } else { column = this._lastColumn + 1; } } if (this._lastColumn === undefined || column > this._lastColumn) { this._lastColumn = column; } return column; }; TypeBuilderType.prototype.onColumnChange = function (key) { var index = common_1.coord.cell.toAxisIndex('COLUMN', key); if (this._lastColumn === undefined || index > this._lastColumn) { this._lastColumn = index; } }; TypeBuilderType.create = function (args) { return new TypeBuilderType(args); }; return TypeBuilderType; }()); exports.TypeBuilderType = TypeBuilderType;