@silexlabs/grapesjs-data-source
Version:
Grapesjs Data Source
97 lines • 3.09 kB
JavaScript
;
/**
* Liquid Filter Engine
* Centralized management of Liquid template filters
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLiquidEngine = createLiquidEngine;
exports.validateFilter = validateFilter;
exports.validateFilters = validateFilters;
exports.addFiltersToEngine = addFiltersToEngine;
exports.removeFiltersFromEngine = removeFiltersFromEngine;
exports.initializeFilters = initializeFilters;
const liquid_1 = __importDefault(require("./liquid"));
/**
* Create a Liquid engine with the given filters
*/
function createLiquidEngine(filters) {
const filterMap = new Map(filters.map(f => [f.id, f]));
return {
filters: filterMap,
applyFilter(value, filterId, options) {
const filter = filterMap.get(filterId);
if (!filter) {
throw new Error(`Liquid filter not found: ${filterId}`);
}
return filter.apply(value, options);
},
hasFilter(filterId) {
return filterMap.has(filterId);
},
};
}
/**
* Validate that required filter fields are present
*/
function validateFilter(filter) {
if (!filter.id)
throw new Error('Filter id is required');
if (!filter.label)
throw new Error('Filter label is required');
if (!filter.validate)
throw new Error('Filter validate is required');
if (!filter.output)
throw new Error('Filter output is required');
if (!filter.apply)
throw new Error('Filter apply is required');
}
/**
* Validate multiple filters
*/
function validateFilters(filters) {
filters.forEach(validateFilter);
}
/**
* Add filters to an existing engine
*/
function addFiltersToEngine(engine, filters) {
validateFilters(filters);
const allFilters = [...engine.filters.values(), ...filters];
return createLiquidEngine(allFilters);
}
/**
* Remove filters from an existing engine
*/
function removeFiltersFromEngine(engine, filterIds) {
const remaining = [...engine.filters.values()].filter(f => !filterIds.includes(f.id));
return createLiquidEngine(remaining);
}
/**
* Initialize filters from options
*/
function initializeFilters(editor, options) {
if (typeof options.filters === 'string') {
return [
...(0, liquid_1.default)(editor),
];
}
else {
return options.filters
.flatMap((filter) => {
if (typeof filter === 'string') {
switch (filter) {
case 'liquid': return (0, liquid_1.default)(editor);
default: throw new Error(`Unknown filters ${filter}`);
}
}
else {
return [Object.assign(Object.assign({}, filter), { type: 'filter' })];
}
})
.map((filter) => (Object.assign(Object.assign({}, filter), { type: 'filter' })));
}
}
//# sourceMappingURL=index.js.map