@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
JavaScript
;
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;