UNPKG

@pubgcorp/pk-template

Version:
201 lines 15.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Scope = void 0; 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 ? (0, 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: (0, isHttp_1.isHttp)(uri) ? (0, lazy_1.getSyncRequest)()('GET', uri).getBody('utf8') : (0, 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: (0, 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: (0, 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 = (0, 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: (0, lazy_1.getUnderscore)().template(rst.data), }; } catch (e) { throw this.error(`failed to parse template ${uri}`, e); } } listFiles(uri) { uri = this.resolve(uri); if ((0, isHttp_1.isHttp)(uri)) { throw new Error(`cannot get directory listing from ${uri}`); } return { uri, data: (0, fs_1.readdirSync)(uri), }; } error(msg, error) { const err = (0, 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 ? (0, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstdGVtcGxhdGUvc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRzVCLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFFOUMsbUNBQTBEO0FBQzFELG1DQUFnQztBQUNoQyw4Q0FBMkM7QUFDM0Msa0NBQXdEO0FBQ3hELDJCQUErQztBQUMvQyx3Q0FBcUU7QUFHckUsTUFBYSxLQUFNLFNBQVEsMkJBQVk7SUFZckMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQU87UUFDM0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBVGIsV0FBTSxHQUFtQixJQUFJLENBQUM7UUEwTDlCLFFBQUcsR0FBRyxDQUFDLEdBQUcsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBL0s5QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFXO1FBQ2IsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxP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