@silexlabs/grapesjs-data-source
Version:
Grapesjs Data Source
354 lines • 12.6 kB
JavaScript
;
/*
* 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