UNPKG

@stackbit/sdk

Version:
114 lines 4.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.matchCMS = void 0; const path_1 = __importDefault(require("path")); const lodash_1 = __importDefault(require("lodash")); const utils_1 = require("@stackbit/utils"); const file_browser_1 = require("./file-browser"); const analyzer_utils_1 = require("./analyzer-utils"); async function matchCMS(options) { const fileBrowser = (0, file_browser_1.getFileBrowserFromOptions)(options); await fileBrowser.listFiles(); let cssMatch = null; await (0, utils_1.forEachPromise)(CSSMatchers, async (cssMatcher) => { if (cssMatcher.match) { const cmsDataResult = await cssMatcher.match(fileBrowser); if (cmsDataResult) { cssMatch = { cmsName: cssMatcher.name, cmsData: cmsDataResult }; return false; } } else if (cssMatcher.matchByPackageName) { const dirs = await (0, analyzer_utils_1.findDirsWithPackageDependency)(fileBrowser, lodash_1.default.castArray(cssMatcher.matchByPackageName)); if (dirs.length === 1) { cssMatch = { cmsName: cssMatcher.name }; return false; } } }); return cssMatch; } exports.matchCMS = matchCMS; const CSSMatchers = [ { name: 'contentful', matchByPackageName: ['gatsby-source-contentful', 'sourcebit-source-contentful', 'contentful', 'contentful-management'] }, { name: 'sanity', match: async (fileBrowser) => { const configFile = 'sanity.json'; const configFileExists = fileBrowser.fileNameExists(configFile); if (!configFileExists) { return null; } const configFilePaths = fileBrowser.getFilePathsForFileName(configFile); const rootConfigPath = await (0, utils_1.findPromise)(configFilePaths, async (configFilePath) => { const config = await fileBrowser.getFileData(configFilePath); return lodash_1.default.has(config, 'root') || lodash_1.default.has(config, 'api'); }); if (rootConfigPath) { const config = await fileBrowser.getFileData(rootConfigPath); return lodash_1.default.omitBy({ studioPath: path_1.default.parse(rootConfigPath).dir, projectId: lodash_1.default.get(config, 'api.projectId'), dataset: lodash_1.default.get(config, 'api.dataset') }, lodash_1.default.isNil); } return null; } }, { name: 'forestry', match: async (fileBrowser) => { const configFolder = '.forestry'; const configFolderExists = fileBrowser.directoryPathExists(configFolder); if (!configFolderExists) { return null; } return { forestryDir: configFolder }; } }, { name: 'netlifycms', match: async (fileBrowser) => { const configFile = 'config.yml'; const configFileExists = fileBrowser.fileNameExists(configFile); if (!configFileExists) { return null; } const configFilePaths = fileBrowser.getFilePathsForFileName(configFile); const netlifyCMSConfigFilePaths = await (0, utils_1.reducePromise)(configFilePaths, async (filePaths, filePath) => { const data = await fileBrowser.getFileData(filePath); const hasBackend = lodash_1.default.has(data, 'backend'); if (!hasBackend) { return filePaths; } const requiredFields = ['backend', 'media_folder', 'collections']; const minNumOfRequiredFields = 2; const numOfRequiredFields = lodash_1.default.reduce(requiredFields, (count, field) => count + (lodash_1.default.has(data, field) ? 1 : 0), 0); if (numOfRequiredFields < minNumOfRequiredFields) { return filePaths; } return filePaths.concat(filePath); }, []); if (netlifyCMSConfigFilePaths.length === 1) { return { configPath: netlifyCMSConfigFilePaths[0] }; } return null; } } ]; //# sourceMappingURL=cms-matcher.js.map