UNPKG

pk-template

Version:
200 lines 15.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const jslib_1 = __importDefault(require("./jslib")); const styleSheet_1 = require("./styles/styleSheet"); const pathResolver_1 = require("./pathResolver"); const utils_1 = require("./utils"); const trace_1 = require("./trace"); const isHttp_1 = require("../pk-path/isHttp"); const lazy_1 = require("../lazy"); const fs_1 = require("fs"); const pk_yaml_1 = require("../pk-yaml"); class Scope extends pathResolver_1.PathResolver { constructor({ objects, values, uri, parent, styleSheet }) { super(uri); this.object = null; this.log = (...args) => this.trace.log(...args); this.objects = objects; this.values = values; this.pvalues = {}; this.uri = uri; this.parent = parent; this.styleSheet = styleSheet; this.$buildLib = jslib_1.default; this.trace = parent && parent.trace || new trace_1.Trace(''); } add(object) { let scope = this; scope.objects.push(object); } child({ uri, objects, values }, handler) { const scope = new Scope({ objects: objects ? objects : this.objects, values: values || this.values, uri: uri || this.uri, parent: this, styleSheet: this.styleSheet, $buildLib: jslib_1.default, }); const rst = handler(scope); for (const key of Object.keys(scope.values)) { if (key in this.values) { this.values[key] = key in scope.pvalues ? scope.pvalues[key] : scope.values[key]; } } return rst; } child2({ uri, objects, values, orphan }, handler) { objects = objects ? objects : this.objects; uri = uri || this.uri; const scope = new Scope({ objects: orphan ? [] : objects, values: orphan ? utils_1.deepCloneWithFunction(this.values) : this.values, uri: uri || this.uri, parent: orphan ? null : this, styleSheet: this.styleSheet, $buildLib: jslib_1.default, }); if (values) { scope.defineValues(values); } const rst = handler(scope); for (const key of Object.keys(scope.values)) { if (key in this.values) { this.values[key] = key in scope.pvalues ? scope.pvalues[key] : scope.values[key]; } } return rst; } defineValues(values) { for (const key of Object.keys(values)) { if (!(key in this.pvalues)) { this.pvalues[key] = this.values[key]; } } Object.assign(this.values, values); // = { // ...this.values, // ...values, // }; } assignValues(values) { for (const key of Object.keys(values)) { if (key in this.values) { this.values[key] = values[key]; } else { throw this.error(`value ${key} is not defined`); } } } // loader loadText(uri) { uri = this.resolve(uri); try { return { uri, data: isHttp_1.isHttp(uri) ? lazy_1.getSyncRequest()('GET', uri).getBody('utf8') : fs_1.readFileSync(uri, 'utf8') }; } catch (e) { throw this.error(`failed to load ${uri}`, e); } } loadYaml(uri) { const rst = this.loadText(uri); try { return { uri: rst.uri, data: pk_yaml_1.parseYaml(rst.data), }; } catch (e) { throw this.error(`failed to parse yaml ${uri}`, e); } } loadYamlAll(uri) { const rst = this.loadText(uri); try { return { uri: rst.uri, data: pk_yaml_1.parseYamlAll(rst.data), }; } catch (e) { throw this.error(`failed to parse yaml ${uri}`, e); } } // TODO: merge compilePkt in languageSpec.ts loadPkt(uri) { const rst = this.loadText(uri); try { const yamls = pk_yaml_1.parseYamlAsPkt(rst.data, rst.uri); if (yamls.length == 0) { return { uri: rst.uri, data: { header: {}, statements: [] } }; } if (yamls[0] && (yamls[0]['/properties'] || yamls[0]['/schema'] || yamls[0]['/import'] || yamls[0]['/require'])) { const header = yamls[0]; return { uri: rst.uri, data: { header, statements: yamls.slice(1) } }; } return { uri: rst.uri, data: { header: {}, statements: yamls }, }; } catch (e) { throw this.error(`failed to parse yaml ${uri}`, e); } } loadTemplate(uri) { const rst = this.loadText(uri); try { return { uri: rst.uri, data: lazy_1.getUnderscore().template(rst.data), }; } catch (e) { throw this.error(`failed to parse template ${uri}`, e); } } listFiles(uri) { uri = this.resolve(uri); if (isHttp_1.isHttp(uri)) { throw new Error(`cannot get directory listing from ${uri}`); } return { uri, data: fs_1.readdirSync(uri), }; } error(msg, error) { const err = utils_1.pktError(this, error || new Error(msg), msg); return err; } static Create(values, uri, parent, objects, styleSheet) { const scope = new Scope({ objects: objects ? [...objects] : [], values: values ? utils_1.deepCloneWithFunction(values) : {}, uri: uri || '.', styleSheet: styleSheet || (parent ? parent.styleSheet : null), parent: parent || null, trace: new trace_1.Trace('$'), }); return scope; } static CreateRoot(objects, values) { return Scope.Create(values, process.cwd() + '/', null, objects, new styleSheet_1.StyleSheet(null)); } } exports.Scope = Scope; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstdGVtcGxhdGUvc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFHNUIsb0RBQWlEO0FBQ2pELGlEQUE4QztBQUU5QyxtQ0FBMEQ7QUFDMUQsbUNBQWdDO0FBQ2hDLDhDQUEyQztBQUMzQyxrQ0FBd0Q7QUFDeEQsMkJBQStDO0FBQy9DLHdDQUFxRTtBQUdyRSxNQUFhLEtBQU0sU0FBUSwyQkFBWTtJQVlyQyxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBTztRQUMzRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFUYixXQUFNLEdBQW1CLElBQUksQ0FBQztRQTBMOUIsUUFBRyxHQUFHLENBQUMsR0FBRyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUEvSzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLGFBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQVc7UUFDYixJQUFJLEtBQUssR0FBVyxJQUFJLENBQUM7UUFDekIsS0FBSyxDQUFDLE9B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