UNPKG

@sap/cds

Version:

SAP Cloud Application Programming Model - CDS for Node.js

60 lines (48 loc) 2.17 kB
module.exports = exports = load exports.parsed = get const cds = require ('../index.js') const outbox_cds = cds.env.requires.queue?.model const [ outbox ] = cds.resolve (outbox_cds) || [] const TRACE = cds.debug('trace') if (TRACE) { TRACE?.time('require cds.compiler'.padEnd(22)) require('@sap/cds-compiler/lib/compiler') TRACE?.timeEnd('require cds.compiler'.padEnd(22)) } function load (models, options) { const files = cds.resolve (models, options) if (!files || cds.watched && files == outbox) return Promise.reject (new cds.error ({ message: `Couldn't find a CDS model for '${models}' in ${cds.root}`, files: cds.resolve(models,false)?.filter (f => f !== outbox_cds), code: 'MODEL_NOT_FOUND', })) return get (files, options, 'inferred') } function get (files, options, _flavor) { const o = typeof options === 'string' ? { flavor:options } : options || {} if (!files) files = ['*']; else if (!Array.isArray(files)) files = [files] if (o.files || o.flavor === 'files') return cds.resolve(files,o) if (o.sources || o.flavor === 'sources') return _sources4 (cds.resolve(files,o)) if (!o.silent) TRACE?.time('cds.compile *.cds'.padEnd(22)) const csn = cds.compile (files,o, o.parse ? 'parsed' : o.plain ? 'xtended' : o.clean ? 'xtended' : // for compatibility o.flavor || _flavor || 'parsed' ) return csn.then?.(_finalize) || _finalize(csn) function _finalize (csn) { if (outbox) csn.$sources = csn.$sources.filter (f => f !== outbox) if (!o.silent) cds.emit ('loaded', csn) if (!o.silent) TRACE?.timeEnd('cds.compile *.cds'.padEnd(22)) return csn } async function _sources4 (files) { const {relative} = cds.utils.path, {readFile} = cds.utils.fs.promises const all = await Promise.all (files.map (f => readFile(f,'utf-8'))) return files.reduce ((d,f,i) => (d[relative(cds.root,f)] = all[i], d),{}) } } exports.properties = (...args) => (exports.properties = require('./etc/properties').read) (...args) exports.yaml = (...args) => (exports.yaml = require('./etc/yaml').read) (...args) exports.csv = (...args) => (exports.csv = require('./etc/csv').read) (...args)