UNPKG

@netlify/content-engine

Version:
74 lines 2.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isFile = void 0; const path_1 = __importDefault(require("path")); const core_utils_1 = require("../../core-utils"); const mime_1 = __importDefault(require("mime")); const is_relative_1 = __importDefault(require("is-relative")); const is_relative_url_1 = __importDefault(require("is-relative-url")); const get_value_at_1 = require("../../utils/get-value-at"); const datastore_1 = require("../../datastore"); const getFirstValueAt = (node, selector) => { let value = (0, get_value_at_1.getValueAt)(node, selector); while (Array.isArray(value)) { value = value[0]; } return value; }; const withBaseDir = (dir) => (p) => path_1.default.posix.join(dir, (0, core_utils_1.slash)(p)); const findAncestorNode = (childNode, predicate) => { let node = childNode; do { if (predicate(node)) { return node; } node = (0, datastore_1.getNode)(node.parent); } while (node !== undefined); return null; }; const getBaseDir = (node) => { if (node) { const { dir } = findAncestorNode(node, (node) => node.internal.type === `File`) || { dir: `` }; return typeof dir === `string` ? dir : null; } return null; }; const getAbsolutePath = (node, relativePath) => { const dir = getBaseDir(node); const withDir = withBaseDir(dir ?? ``); return dir ? Array.isArray(relativePath) ? relativePath.map(withDir) : withDir(relativePath) : null; }; const getFilePath = (fieldPath, relativePath) => { const [typeName, ...selector] = Array.isArray(fieldPath) ? fieldPath : fieldPath.split(`.`); if (typeName === `File`) return null; const looksLikeFile = !path_1.default.isAbsolute(relativePath) && mime_1.default.getType(relativePath) !== null && // FIXME: Do we need all of this? mime_1.default.getType(relativePath) !== `application/x-msdownload` && (0, is_relative_1.default)(relativePath) && (0, is_relative_url_1.default)(relativePath); if (!looksLikeFile) return null; const normalizedPath = (0, core_utils_1.slash)(relativePath); const node = (0, datastore_1.getNodesByType)(typeName).find((node) => getFirstValueAt(node, selector) === normalizedPath); return node ? getAbsolutePath(node, normalizedPath) : null; }; const isFile = (fieldPath, relativePath) => { const filePath = getFilePath(fieldPath, relativePath); if (!filePath) return false; const filePathExists = (0, datastore_1.getNodesByType)(`File`).some((node) => node.absolutePath === filePath); return filePathExists; }; exports.isFile = isFile; //# sourceMappingURL=is-file.js.map