@netlify/content-engine
Version:
74 lines • 2.92 kB
JavaScript
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
;