UNPKG

noodl-loader

Version:

Loader for noodl applications

157 lines 7.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createExtractor = void 0; const tslib_1 = require("tslib"); const noodl_core_1 = require("noodl-core"); const yaml_1 = require("yaml"); const asset_1 = tslib_1.__importDefault(require("./asset")); const extract_documents_1 = tslib_1.__importDefault(require("./presets/extract-documents")); const extract_images_1 = tslib_1.__importDefault(require("./presets/extract-images")); const extract_pages_1 = tslib_1.__importDefault(require("./presets/extract-pages")); const extract_scripts_1 = tslib_1.__importDefault(require("./presets/extract-scripts")); const extract_videos_1 = tslib_1.__importDefault(require("./presets/extract-videos")); const yaml_2 = require("../internal/yaml"); const replace_1 = require("../utils/replace"); const c = tslib_1.__importStar(require("../constants")); function createExtractor(loader) { const { BREAK, REMOVE, SKIP } = yaml_2.visit; function extract(value, { as, include, prepare, use: useProp = [] } = {}) { var _a; return tslib_1.__awaiter(this, void 0, void 0, function* () { if ((0, yaml_2.isPair)(value)) { if ((0, yaml_2.isNode)(value.value)) { value = value.value; } else { throw new Error(`The value ${value.value} is not a compatible node to visit`); } } const use = [...noodl_core_1.fp.toArr(useProp)]; for (const preset of noodl_core_1.fp.toArr(include)) { if (preset === 'any') { use.length = 0; use.push(extract_documents_1.default, extract_images_1.default, extract_pages_1.default, extract_scripts_1.default, extract_videos_1.default); break; } else if (preset === 'documents') { use.push(extract_documents_1.default); } else if (preset === 'images') { use.push(extract_images_1.default); } else if (preset === 'pages') { use.push({ extract: extract_pages_1.default, once: true }); } else if (preset === 'scripts') { use.push(extract_scripts_1.default); } else if (preset === 'videos') { use.push(extract_videos_1.default); } } let state = { assets: [], assetIds: [] }; let assets = []; if (prepare) { const updatedState = prepare(state); if (updatedState) state = Object.assign(Object.assign({}, state), updatedState); } const control = { BREAK, REMOVE, SKIP, }; const createAsset = (propsOrType, props) => { const asset = propsOrType instanceof asset_1.default ? propsOrType : new asset_1.default(); if (noodl_core_1.is.str(propsOrType)) { asset.type = propsOrType; } else if (propsOrType instanceof asset_1.default) { // } else if (noodl_core_1.is.obj(propsOrType)) { if (propsOrType.id) asset.setId(propsOrType.id); if (propsOrType.type) asset.type = propsOrType.type; if (noodl_core_1.is.obj(propsOrType.props)) asset.merge(propsOrType.props); } if (noodl_core_1.is.obj(props)) asset.merge(props); const assetId = asset.getId(); if (assetId && !state.assetIds.includes(assetId)) { state.assetIds.push(assetId); } if (!assets.includes(asset)) assets.push(asset); return asset; }; const extractFnOptions = { assets, config: loader.config, cadlEndpoint: loader.cadlEndpoint, control, createAsset, state, }; if (loader.config) { const baseUrl = loader.config.get('cadlBaseUrl') || ''; const assetsUrl = (0, replace_1.replacePlaceholders)(((_a = loader.cadlEndpoint) === null || _a === void 0 ? void 0 : _a.assetsUrl) || '', { cadlBaseUrl: baseUrl }); extractFnOptions.baseUrl = baseUrl; extractFnOptions.assetsUrl = assetsUrl; } yield (0, yaml_1.visitAsync)(value, (key, node, path) => tslib_1.__awaiter(this, void 0, void 0, function* () { for (const fnOrObject of use) { let fn; let obj; if (noodl_core_1.is.fnc(fnOrObject)) { fn = fnOrObject; } else if (noodl_core_1.is.obj(fnOrObject)) { const { extract } = fnOrObject, opts = tslib_1.__rest(fnOrObject, ["extract"]); fn = extract; obj = Object.assign({}, opts); } let result = fn === null || fn === void 0 ? void 0 : fn(key, node, path, extractFnOptions); if (noodl_core_1.is.promise(result)) result = (yield result); if (obj === null || obj === void 0 ? void 0 : obj.once) use.splice(use.indexOf(fnOrObject), 1); if (result === BREAK) { return BREAK; } else if (result === REMOVE) { return REMOVE; } else if (result === SKIP) { return SKIP; } else if ((0, yaml_2.isNode)(result)) { return result; } else if ((0, yaml_2.isPair)(result)) { return result; } } })); if (as !== 'array') { const mapping = {}; for (const asset of assets) mapping[asset.getId()] = asset; return mapping; } return assets; }); } Object.defineProperty(extract, c.idKey, { configurable: false, enumerable: false, writable: false, value: c._id.extractor, }); return extract; } exports.createExtractor = createExtractor; exports.default = createExtractor; //# sourceMappingURL=extractor.js.map