UNPKG

@progress/sitefinity-widget-designers-sdk

Version:

This package aims to create a parity for widget designer generation similar to the [autogenerated widget designers](https://www.progress.com/documentation/sitefinity-cms/next.js-autogenerated-field-types) in Sitefinity. Due to some limitations in Typescri

105 lines (104 loc) 4.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WidgetMetadata = exports.PropertyMergeStrategy = void 0; const known_keys_1 = require("../symbols/known-keys"); /** * Strategy for the approach on assigning the property metadata. */ var PropertyMergeStrategy; (function (PropertyMergeStrategy) { /** * Do not assign the passed value if a value is already assigned. */ PropertyMergeStrategy["Skip"] = "skip"; /** * Override any previously assigned value with the passed value. */ PropertyMergeStrategy["Override"] = "override"; /** * Merge an already existing property value object with the passed value using Object.assign */ PropertyMergeStrategy["Merge"] = "merge"; })(PropertyMergeStrategy || (exports.PropertyMergeStrategy = PropertyMergeStrategy = {})); /** * Registers metadata on classes and properties. */ class WidgetMetadata { /** * Registers the base metadata property holder. * @param target The decorated class. */ static registerPrototype(target) { this.register(target.prototype); } /** * Registers a property value in the metadata of the class on a given key. * @param target The decorated class. * @param key Propery key. * @param value The property value. */ static registerProperty(target, key, value) { target[known_keys_1.keys.metadata][key] = value; } /** * Registers a property value in the metadata of the class prototype on a given key. * @param target The decorated class. * @param key Propery key. * @param value The property value. */ static registerPrototypeProperty(target, key, value) { this.registerProperty(target.prototype, key, value); } /** * Register a property value in the metadata of the class based on _propName_, _key_ in the property metadata, property.key _value_ and an optional override strategy. * @param target The decorated class. * @param propName The property name. * @param key The key of the metadata value. * @param value The value. * @param override The override strategy for the value: * - skip - if there is already a value assigned * - override - if you wish to force the value even if one is already assigned * - merge - if the value object that is passed needs to be merged with the one that already is assigned * Default is to override. */ static registerPropertyMetadata(target, propName, key, value, override = PropertyMergeStrategy.Override) { this.register(target); this.registerPropertyObject(target, propName); const currentValue = target[known_keys_1.keys.metadata][propName][key]; // undefined or skip or override if (currentValue === undefined || override === PropertyMergeStrategy.Override) { target[known_keys_1.keys.metadata][propName][key] = value; } if (override === PropertyMergeStrategy.Merge) { target[known_keys_1.keys.metadata][propName][key] = Object.assign({}, currentValue, value); } } /** * Register a property value in the metadata of the class prototype based on @param propName, @param key in the property metadata, property.key @param value and an optional override strategy. * @param target The decorated class. * @param propName The property name. * @param key The key of the metadata value. * @param value The value. * @param override The override strategy for the value: * - skip - if there is already a value assigned * - override - if you wish to force the value even if one is already assigned * - merge - if the value object that is passed needs to be merged with the one that already is assigned * Default is to override. */ static registerPrototypePropertyMetadata(target, propName, key, value, override = PropertyMergeStrategy.Override) { this.registerPropertyMetadata(target.prototype, propName, key, value, override); } /** @private */ static register(target) { if (!Object.hasOwn(target, known_keys_1.keys.metadata)) { Object.defineProperty(target, known_keys_1.keys.metadata, { enumerable: true, writable: true, value: {} }); } } /** @private */ static registerPropertyObject(target, key) { if (!target[known_keys_1.keys.metadata][key]) { target[known_keys_1.keys.metadata][key] = { [known_keys_1.keys.name]: key }; } } } exports.WidgetMetadata = WidgetMetadata;