UNPKG

@stackbit/sdk

Version:
111 lines 4.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extendModelsWithPresetsIds = exports.getPresetDirs = exports.loadPresets = void 0; const lodash_1 = __importDefault(require("lodash")); const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const utils_1 = require("@stackbit/utils"); const config_errors_1 = require("./config-errors"); async function loadPresets({ config, fallbackSrcType, fallbackSrcProjectId }) { const presetFiles = []; const presetsRelDirs = getPresetDirs(config); for (const presetsRelDir of presetsRelDirs) { const presetsDir = path_1.default.join(config.dirPath, presetsRelDir); if (!(await fs_extra_1.default.pathExists(presetsDir))) { continue; } const files = (await fs_extra_1.default.readdir(presetsDir)) .filter((fileName) => ['.json', '.yaml', '.yml'].includes(path_1.default.parse(fileName).ext)) .map((fileName) => path_1.default.join(presetsRelDir, fileName)); presetFiles.push(...files); } const presets = {}; const errors = []; for (const presetFile of presetFiles) { const presetsRelDir = path_1.default.dirname(presetFile); const presetPath = path_1.default.join(config.dirPath, presetFile); let presetData; try { presetData = await (0, utils_1.parseFile)(presetPath); } catch (err) { errors.push(new config_errors_1.ConfigPresetsError(`Error parsing ${presetFile} (${err?.message})`)); continue; } const srcType = presetData.srcType ?? fallbackSrcType; const srcProjectId = presetData.srcProjectId ?? fallbackSrcProjectId; lodash_1.default.forEach(lodash_1.default.get(presetData, 'presets', []), (preset, i) => { const presetId = `${presetFile}:presets[${i}]`; const { thumbnail, ...rest } = preset; presets[presetId] = { ...rest, ...(thumbnail ? { thumbnail: resolveThumbnailPath(thumbnail, presetsRelDir) } : null), modelName: presetData.model, ...(srcType ? { srcType } : null), ...(srcProjectId ? { srcProjectId } : null) }; }); } return { presets, errors }; } exports.loadPresets = loadPresets; function getPresetDirs(config) { const defaultPresetsDirs = ['.stackbit/presets', 'node_modules/@stackbit/components/presets']; if (config.presetSource?.type === 'files' && config.presetSource?.presetDirs) { return [...new Set([...defaultPresetsDirs, ...config.presetSource.presetDirs])]; } return defaultPresetsDirs; } exports.getPresetDirs = getPresetDirs; function extendModelsWithPresetsIds({ models, presets }) { // for older projects that pass the Model, we assume that all presets belong to the same content-source const presetsIdsByContentSourceAndModel = {}; const presetsIdsByModel_deprecated = {}; for (const [presetId, preset] of Object.entries(presets)) { (0, utils_1.append)(presetsIdsByContentSourceAndModel, [preset.srcType, preset.srcProjectId, preset.modelName], presetId); (0, utils_1.append)(presetsIdsByModel_deprecated, preset.modelName, presetId); } // update models with presets IDs return models.map((model) => { let presetIdsForModel; if ('srcType' in model && 'srcProjectId' in model) { // "as" can be removed in typescript 4.3.5 and above const srcType = model.srcType; const srcProjectId = model.srcProjectId; presetIdsForModel = presetsIdsByContentSourceAndModel[srcType]?.[srcProjectId]?.[model.name]; } else { presetIdsForModel = presetsIdsByModel_deprecated[model.name]; } if (!presetIdsForModel) { return model; } return { ...model, presets: presetIdsForModel }; }); } exports.extendModelsWithPresetsIds = extendModelsWithPresetsIds; function resolveThumbnailPath(thumbnail, dir) { if (thumbnail.startsWith('//') || /https?:\/\//.test(thumbnail)) { return thumbnail; } if (thumbnail.startsWith('/')) { if (dir.endsWith('@stackbit/components/presets')) { dir = dir.replace(/\/presets$/, ''); } else { dir = ''; } thumbnail = thumbnail.replace(/^\//, ''); } return path_1.default.join(dir, thumbnail); } //# sourceMappingURL=presets-loader.js.map