UNPKG

@silexlabs/grapesjs-data-source

Version:
354 lines 12.6 kB
"use strict"; /* * Silex website builder, free/libre no-code tool for makers. * Copyright (c) 2023 lexoyo and Silex Labs foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.COMPONENT_NAME_PREFIX = exports.NOTIFICATION_GROUP = void 0; exports.getPageQuery = getPageQuery; exports.buildPageQueries = buildPageQueries; exports.getAllDataSources = getAllDataSources; exports.getDataSource = getDataSource; exports.addDataSource = addDataSource; exports.removeDataSource = removeDataSource; exports.refreshDataSources = refreshDataSources; exports.loadPreviewData = loadPreviewData; exports.getPreviewData = getPreviewData; exports.setPreviewData = setPreviewData; exports.setPreviewIndex = setPreviewIndex; exports.clearPreviewData = clearPreviewData; exports.getValue = getValue; exports.getPageExpressions = getPageExpressions; exports.getCompletion = getCompletion; exports.fromStored = fromStored; exports.getExpressionResultType = getExpressionResultType; exports.addFilters = addFilters; exports.removeFilters = removeFilters; exports.getPersistantId = getPersistantId; exports.getOrCreatePersistantId = getOrCreatePersistantId; exports.getState = getState; exports.getStateIds = getStateIds; exports.setState = setState; exports.removeState = removeState; exports.getStateVariableName = getStateVariableName; exports.toExpression = toExpression; exports.createDataSource = createDataSource; // Internal imports const queryBuilder_1 = require("./model/queryBuilder"); const dataSourceManager_1 = require("./model/dataSourceManager"); const dataSourceRegistry_1 = require("./model/dataSourceRegistry"); const previewDataLoader_1 = require("./model/previewDataLoader"); const token_1 = require("./model/token"); const state_1 = require("./model/state"); const utils_1 = require("./utils"); const ExpressionTree_1 = require("./model/ExpressionTree"); const expressionEvaluator_1 = require("./model/expressionEvaluator"); const completion_1 = require("./model/completion"); const canvas_1 = require("./view/canvas"); // =============================== // QUERY GENERATION // =============================== /** * Generate GraphQL query for a single page * Used by both preview and production (11ty site generation) * * @param page - The GrapesJS page to generate query for * @param editor - The GrapesJS editor instance * @returns Record of data source ID to GraphQL query string */ function getPageQuery(page, editor) { return (0, queryBuilder_1.getPageQuery)(page, editor); } /** * Generate queries for multiple pages * Useful for batch operations like static site generation * * @param pages - Array of GrapesJS pages * @param editor - The GrapesJS editor instance * @returns Record of page ID to data source queries */ function buildPageQueries(pages, editor) { return (0, queryBuilder_1.buildPageQueries)(pages, editor); } // =============================== // DATA SOURCE MANAGEMENT // =============================== /** * Get all data sources * @returns Array of all registered data sources */ function getAllDataSources() { return (0, dataSourceRegistry_1.getAllDataSources)(); } /** * Get a specific data source by ID * @param id - The data source ID * @returns The data source or undefined if not found */ function getDataSource(id) { return (0, dataSourceRegistry_1.getDataSource)(id); } /** * Add a new data source * @param dataSource - The data source to add */ function addDataSource(dataSource) { return (0, dataSourceRegistry_1.addDataSource)(dataSource); } /** * Remove a data source * @param dataSource - The data source to remove */ function removeDataSource(dataSource) { return (0, dataSourceRegistry_1.removeDataSource)(dataSource); } /** * Refresh preview data from all data sources * Triggers data loading for the current page */ function refreshDataSources() { return (0, dataSourceManager_1.refreshDataSources)(); } // =============================== // PREVIEW DATA MANAGEMENT // =============================== /** * Load preview data for the current page * @param forceRefresh - If true, bypass query comparison and force refresh * @returns Promise that resolves when data is loaded */ function loadPreviewData(forceRefresh = false) { return (0, previewDataLoader_1.loadPreviewData)(forceRefresh); } /** * Get current preview data * @returns Record of data source ID to preview data */ function getPreviewData() { return (0, previewDataLoader_1.getPreviewData)(); } /** * Set preview data for all data sources * @param data - Record mapping data source IDs to their preview data */ function setPreviewData(data) { (0, dataSourceManager_1.setPreviewData)(data); } /** * Set preview index on an expression of a component */ function setPreviewIndex(expression, index, group) { (0, canvas_1.setPreviewIndex)(expression, index, group); } /** * Clear all preview data */ function clearPreviewData() { return (0, previewDataLoader_1.clearPreviewData)(); } // =============================== // DATA TREE OPERATIONS // =============================== /** * Evaluate an expression with current preview data * @param expression - The expression to evaluate * @param component - The component context * @returns The evaluated result */ function getValue(expression, component, resolvePreviewIndex = true) { const context = { dataSources: getAllDataSources(), filters: (0, dataSourceManager_1.getFilters)(), previewData: (0, previewDataLoader_1.getPreviewData)(), component, resolvePreviewIndex, }; return (0, expressionEvaluator_1.evaluateExpressionTokens)(expression, context); } /** * Get all expressions used by components on a page * @param page - The page to analyze * @returns Array of component expressions */ function getPageExpressions(page) { const manager = (0, dataSourceManager_1.getManager)(); return (0, ExpressionTree_1.getPageExpressions)(manager, page); } /** * Get auto-completion options for expressions * @param options - Completion options including component, expression, etc. * @returns Context with available tokens for completion */ function getCompletion(options) { const manager = (0, dataSourceManager_1.getManager)(); return (0, completion_1.getCompletion)(Object.assign(Object.assign({}, options), { manager })); } /** * Convert a stored token to its full form with methods and properties * @param token - The stored token to convert * @param componentId - The component ID for context (can be null) * @returns The full token with all properties and methods */ function fromStored(token, componentId) { return (0, token_1.fromStored)(token, componentId); } /** * Get the result type of an expression * @param expression - The expression to analyze * @param component - The component context * @returns The field describing the result type, or null if invalid */ function getExpressionResultType(expression, component) { return (0, token_1.getExpressionResultType)(expression, component); } function addFilters(filters) { const currentFilters = (0, dataSourceManager_1.getFilters)(); const newFilters = Array.isArray(filters) ? filters : [filters]; (0, dataSourceManager_1.setFilters)(currentFilters.concat(newFilters)); } /** * Remove filters from the data tree. * Accepts a single Filter or an array of Filters. * Removes by reference. */ function removeFilters(filters) { const currentFilters = (0, dataSourceManager_1.getFilters)(); if (Array.isArray(filters)) { (0, dataSourceManager_1.setFilters)(currentFilters.filter(f => !filters.includes(f))); } else { (0, dataSourceManager_1.setFilters)(currentFilters.filter(f => f !== filters)); } } // =============================== // STATE MANAGEMENT // =============================== /** * Get the persistent ID of a component * @param component - The component to get ID for * @returns The persistent ID or null if not set */ function getPersistantId(component) { return (0, state_1.getPersistantId)(component); } /** * Get or create the persistent ID of a component * @param component - The component to get/create ID for * @returns The persistent ID */ function getOrCreatePersistantId(component) { return (0, state_1.getOrCreatePersistantId)(component); } /** * Get a state from a component * @param component - The component to get state from * @param id - The state ID * @param exported - Whether to get exported (public) or private state * @returns The state or null if not found */ function getState(component, id, exported = true) { return (0, state_1.getState)(component, id, exported); } /** * Get all state IDs from a component * @param component - The component to get state IDs from * @param exported - Whether to get exported (public) or private state IDs * @param before - Optional state ID to get IDs before * @returns Array of state IDs */ function getStateIds(component, exported = true, before) { return (0, state_1.getStateIds)(component, exported, before); } /** * Set a state on a component * @param component - The component to set state on * @param id - The state ID * @param state - The state to set * @param exported - Whether to set as exported (public) or private state * @param index - Optional index to insert at */ function setState(component, id, state, exported = true, index = -1) { return (0, state_1.setState)(component, id, state, exported, index); } /** * Remove a state from a component * @param component - The component to remove state from * @param id - The state ID to remove * @param exported - Whether to remove from exported (public) or private states */ function removeState(component, id, exported = true) { return (0, state_1.removeState)(component, id, exported); } /** * Get the variable name for a state * @param componentId - The component ID * @param stateId - The state ID * @returns The variable name */ function getStateVariableName(componentId, stateId) { return (0, state_1.getStateVariableName)(componentId, stateId); } // =============================== // TOKEN AND EXPRESSION UTILITIES // =============================== /** * Convert JSON or string to an Expression object * @param json - The JSON or string to convert * @returns The Expression object or null if invalid */ function toExpression(json) { return (0, utils_1.toExpression)(json); } // =============================== // UTILITY FUNCTIONS // =============================== /** * Create a data source instance * @param options - The data source configuration * @returns The created data source */ function createDataSource(opts = {}) { return (0, utils_1.createDataSource)(opts); } // =============================== // CONSTANTS // =============================== /** * Notification group name for data source notifications */ exports.NOTIFICATION_GROUP = utils_1.NOTIFICATION_GROUP; /** * Component name prefix for data source components */ exports.COMPONENT_NAME_PREFIX = state_1.COMPONENT_NAME_PREFIX; // =============================== // Types // =============================== __exportStar(require("./types"), exports); //# sourceMappingURL=api.js.map