akasharender
Version:
Rendering support for generating static HTML websites or EPUB eBooks
154 lines • 29.5 kB
JavaScript
/**
*
* Copyright 2014-2025 David Herron
*
* This file is part of AkashaCMS (http://akashacms.com/).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import path from 'node:path';
import { promises as fsp } from 'node:fs';
import Joi from "joi";
import { lembedModelName } from '../sqdb.js';
;
const joiIsPathsReturnType = Joi.object({
vpath: Joi.string(),
mime: Joi.string().optional().allow(null),
mounted: Joi.string(),
mountPoint: Joi.string(),
pathInMounted: Joi.string(),
mtimeMs: Joi.number(), // .integer(),
info: Joi.any(),
fspath: Joi.string(),
renderPath: Joi.string()
});
export function validatePathsReturnType(obj) {
return joiIsPathsReturnType.validate(obj);
}
;
export const joiAsset = Joi.object({
vpath: Joi.string(),
renderPath: Joi.string(),
mime: Joi.string().optional().allow(null),
mounted: Joi.string(),
mountPoint: Joi.string(),
pathInMounted: Joi.string(),
fspath: Joi.string(),
dirname: Joi.string(),
mtimeMs: Joi.number(), // .integer(),
info: Joi.any()
});
export function validateAsset(obj) {
return joiAsset.validate(obj);
}
export const createAssetsTable = await fsp.readFile(path.join(import.meta.dirname, 'sql', 'create-table-assets.sql'), 'utf-8');
// This function and its siblings exist to avoid
// potential for conflict in initializing the
// variable holding the SQL and invoking
// the SQL to create the table. By placing both
// in the same source file we ensure no conflict.
export async function doCreateAssetsTable(db) {
await db.run(await createAssetsTable);
}
;
export const joiPartial = Joi.object({
vpath: Joi.string(),
renderPath: Joi.string(),
mime: Joi.string().optional().allow(null),
mounted: Joi.string(),
mountPoint: Joi.string(),
pathInMounted: Joi.string(),
fspath: Joi.string(),
dirname: Joi.string(),
mtimeMs: Joi.number(), // .integer(),
info: Joi.any(),
// Added fields
docBody: Joi.string().optional().allow(null),
rendererName: Joi.string().optional().allow(null)
});
export function validatePartial(obj) {
return joiPartial.validate(obj);
}
export const createPartialsTable = await fsp.readFile(path.join(import.meta.dirname, 'sql', 'create-table-partials.sql'), 'utf-8');
export async function doCreatePartialsTable(db) {
await db.run(await createPartialsTable);
}
;
export const joiLayout = Joi.object({
vpath: Joi.string(),
renderPath: Joi.string(),
mime: Joi.string().optional().allow(null),
mounted: Joi.string(),
mountPoint: Joi.string(),
pathInMounted: Joi.string(),
fspath: Joi.string(),
dirname: Joi.string(),
mtimeMs: Joi.number(), // .integer(),
info: Joi.any(),
// Added fields
rendersToHTML: Joi.alternatives()
.try(Joi.boolean(), Joi.number().integer().min(0).max(1)),
docBody: Joi.string().optional().allow(null),
rendererName: Joi.string().min(0).optional().allow(null)
});
export function validateLayout(obj) {
return joiLayout.validate(obj);
}
export const createLayoutsTable = await fsp.readFile(path.join(import.meta.dirname, 'sql', 'create-table-layouts.sql'), 'utf-8');
export async function doCreateLayoutsTable(db) {
await db.run(await createLayoutsTable);
}
;
export const joiDocument = Joi.object({
vpath: Joi.string(),
mime: Joi.string().optional().allow(null),
mounted: Joi.string(),
mountPoint: Joi.string(),
pathInMounted: Joi.string(),
fspath: Joi.string(),
dirname: Joi.string(),
mtimeMs: Joi.number(), // .integer(),
info: Joi.any(),
// Added fields
renderPath: Joi.string(),
rendersToHTML: Joi.alternatives()
.try(Joi.boolean(), Joi.number().integer().min(0).max(1)),
parentDir: Joi.string(),
publicationTime: Joi.number().optional().allow(null),
baseMetadata: Joi.any(),
docMetadata: Joi.any(),
docContent: Joi.string().min(0).optional().allow(null),
docBody: Joi.string().min(0).optional().allow(null),
metadata: Joi.any(),
title: Joi.string().optional().allow(null),
tags: Joi.any(),
layout: Joi.alternatives()
.try(Joi.string(), Joi.allow(null)),
blogtag: Joi.alternatives()
.try(Joi.string(), Joi.allow(null)),
rendererName: Joi.string().min(0).optional().allow(null)
});
export function validateDocument(obj) {
return joiDocument.validate(obj);
}
export const createDocumentsTable = await fsp.readFile(path.join(import.meta.dirname, 'sql', 'create-table-documents.sql'), 'utf-8');
export async function doCreateDocumentsTable(db) {
await db.run(await createDocumentsTable);
}
export const createVecDocumentsTable = await fsp.readFile(path.join(import.meta.dirname, 'sql', 'create-table-vec-documents.sql'), 'utf-8');
export async function doCreateVecDocumentsTable(db) {
if (typeof lembedModelName === 'string') {
await db.run(await createVecDocumentsTable);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NhY2hlL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUF5RDVDLENBQUM7QUFzQkYsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3BDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO0lBQ25CLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6QyxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtJQUNyQixVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtJQUN4QixhQUFhLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtJQUMzQixPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWM7SUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtJQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBUTtJQUk1QyxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBTUEsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQy9CLEtBQUssRUFB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LElBQUksQ0FBQztDQUUzRCxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBUTtJQUlyQyxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFDekIsS0FBSyxFQUFFLDRCQUE0QixDQUFDLEVBQ3hDLE9BQU8sQ0FDZCxDQUFDO0FBRUYsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDeEMsRUFBaUI7SUFFakIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sb0JBQW9CLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUksTUFBTSxHQUFHLENBQUMsUUFBUSxDQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUN6QixLQUFLLEVBQUUsZ0NBQWdDLENBQUMsRUFDNUMsT0FBTyxDQUNkLENBQUM7QUFFRixNQUFNLENBQUMsS0FBSyxVQUFVLHlCQUF5QixDQUMzQyxFQUFpQjtJQUVqQixJQUFJLE9BQU8sZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLHVCQUF1QixDQUFDLENBQUM7SUFDaEQsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDI1IERhdmlkIEhlcnJvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEFrYXNoYUNNUyAoaHR0cDovL2FrYXNoYWNtcy5jb20vKS5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzcCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IEpvaSBmcm9tIFwiam9pXCI7XG5pbXBvcnQgeyBBc3luY0RhdGFiYXNlIH0gZnJvbSAncHJvbWlzZWQtc3FsaXRlMyc7XG5pbXBvcnQgeyBsZW1iZWRNb2RlbE5hbWUgfSBmcm9tICcuLi9zcWRiLmpzJztcblxuLyoqXG4gKiBFdmVyeSBjYWNoZSBlbnRyeSBoYXMgdGhlc2UgZmllbGRzLiAgRm9yXG4gKiBtb3N0IGNhY2hlIHR5cGVzLCB0aGVyZSB3aWxsIGJlIGFkZGl0aW9uYWxcbiAqIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlQ2FjaGVFbnRyeSB7XG5cbiAgICAvKipcbiAgICAgKiBWaXJ0dWFsIHBhdGhcbiAgICAgKi9cbiAgICB2cGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTUlNRSB0eXBlXG4gICAgICovXG4gICAgbWltZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmaWxlLXN5c3RlbSBwYXRoIHdoaWNoIGlzIG1vdW50ZWRcbiAgICAgKiBpbnRvIHRoZSB2aXJ0dWFsIGZpbGUgc3BhY2UuXG4gICAgICovXG4gICAgbW91bnRlZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpcnR1YWwgZGlyZWN0b3J5IG9mIHRoZSBtb3VudFxuICAgICAqIGVudHJ5IGluIHRoZSBkaXJlY3Rvcnkgc3RhY2suXG4gICAgICovXG4gICAgbW91bnRQb2ludDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggdW5kZXJuZWF0aCB0aGUgbW91bnRQb2ludC5cbiAgICAgKi9cbiAgICBwYXRoSW5Nb3VudGVkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBYnNvbHV0ZSBwYXRoIG5hbWUgaW4gdGhlIHBoeXNpY2FsXG4gICAgICogZmlsZXN5c3RlbS5cbiAgICAgKi9cbiAgICBmc3BhdGg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGRpcm5hbWUgZm9yIGZzcGF0aFxuICAgICAqL1xuICAgIGRpcm5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb2RpZmljYXRpb24gdGltZSwgaW4gbWlsaXNlY29uZHMuXG4gICAgICovXG4gICAgbXRpbWVNczogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSW5mbyBvYmplY3QgcHJvdmlkZWQgYnkgU3RhY2tlZERpcnMgYW5kXG4gICAgICogYW5ub3RhdGVkIHdpdGggZ2F0aGVySW5mb0RhdGFcbiAgICAgKi9cbiAgICBpbmZvOiBhbnk7XG59O1xuXG4vKipcbiAqIFR5cGUgZm9yIHJldHVybiBmcm9tIHBhdGhzIG1ldGhvZC4gIFRoZSBmaWVsZHMgaGVyZVxuICogYXJlIHdoYXRzIGluIHRoZSBBc3NldC9MYXlvdXQvUGFydGlhbCBjbGFzc2VzIGFib3ZlXG4gKiBwbHVzIGEgY291cGxlIGZpZWxkcyB0aGF0IG9sZGVyIGNvZGUgZXhwZWN0ZWRcbiAqIGZyb20gdGhlIHBhdGhzIG1ldGhvZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aHNSZXR1cm5UeXBlID0ge1xuICAgIHZwYXRoOiBzdHJpbmcsXG4gICAgbWltZT86IHN0cmluZyxcbiAgICBtb3VudGVkOiBzdHJpbmcsXG4gICAgbW91bnRQb2ludDogc3RyaW5nLFxuICAgIHBhdGhJbk1vdW50ZWQ6IHN0cmluZyxcbiAgICBtdGltZU1zOiBudW1iZXIsXG4gICAgaW5mbzogYW55LFxuICAgIC8vIFRoZXNlIHdpbGwgYmUgY29tcHV0ZWQgaW4gQmFzZUZpbGVDYWNoZVxuICAgIC8vIFRoZXkgd2VyZSByZXR1cm5lZCBpbiBwcmV2aW91cyB2ZXJzaW9ucy5cbiAgICBmc3BhdGg6IHN0cmluZyxcbiAgICByZW5kZXJQYXRoOiBzdHJpbmdcbn07XG5cbmNvbnN0IGpvaUlzUGF0aHNSZXR1cm5UeXBlID0gSm9pLm9iamVjdCh7XG4gICAgdnBhdGg6IEpvaS5zdHJpbmcoKSxcbiAgICBtaW1lOiBKb2kuc3RyaW5nKCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKSxcbiAgICBtb3VudGVkOiBKb2kuc3RyaW5nKCksXG4gICAgbW91bnRQb2ludDogSm9pLnN0cmluZygpLFxuICAgIHBhdGhJbk1vdW50ZWQ6IEpvaS5zdHJpbmcoKSxcbiAgICBtdGltZU1zOiBKb2kubnVtYmVyKCksIC8vIC5pbnRlZ2VyKCksXG4gICAgaW5mbzogSm9pLmFueSgpLFxuICAgIGZzcGF0aDogSm9pLnN0cmluZygpLFxuICAgIHJlbmRlclBhdGg6IEpvaS5zdHJpbmcoKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhdGhzUmV0dXJuVHlwZShvYmo6IGFueSk6IHtcbiAgICBlcnJvcjogYW55LFxuICAgIHZhbHVlOiBQYXRoc1JldHVyblR5cGVcbn0ge1xuICAgIHJldHVybiBqb2lJc1BhdGhzUmV0dXJuVHlwZS52YWxpZGF0ZShvYmopO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLyBBc3NldFxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0RmllbGRzIHtcblxufTtcblxuLyoqXG4gKiBEZXNjcmliZXMgYW4gZW50cnkgaW4gYW4gQXNzZXQgZGlyZWN0b3J5LCBtZWFuaW5nXG4gKiB0aGUgZmlsZXMgd2hpY2ggYXJlIHNpbXBseSBjb3BpZWQgdG8gdGhlIG91dHB1dFxuICogZGlyZWN0b3J5IHdpdGggbm8gcmVuZGVyaW5nIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2V0ID0gQmFzZUNhY2hlRW50cnkgJiBBc3NldEZpZWxkcztcblxuZXhwb3J0IGNvbnN0IGpvaUFzc2V0ID0gSm9pLm9iamVjdCh7XG4gICAgdnBhdGg6IEpvaS5zdHJpbmcoKSxcbiAgICByZW5kZXJQYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgbWltZTogSm9pLnN0cmluZygpLm9wdGlvbmFsKCkuYWxsb3cobnVsbCksXG4gICAgbW91bnRlZDogSm9pLnN0cmluZygpLFxuICAgIG1vdW50UG9pbnQ6IEpvaS5zdHJpbmcoKSxcbiAgICBwYXRoSW5Nb3VudGVkOiBKb2kuc3RyaW5nKCksXG4gICAgZnNwYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgZGlybmFtZTogSm9pLnN0cmluZygpLFxuICAgIG10aW1lTXM6IEpvaS5udW1iZXIoKSwgLy8gLmludGVnZXIoKSxcbiAgICBpbmZvOiBKb2kuYW55KClcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBc3NldChvYmo6IGFueSk6IHtcbiAgICBlcnJvcjogYW55LFxuICAgIHZhbHVlOiBBc3NldFxufSB7XG4gICAgcmV0dXJuIGpvaUFzc2V0LnZhbGlkYXRlKG9iaik7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBc3NldHNUYWJsZSA9IGF3YWl0IGZzcC5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgICAgICAgICAnc3FsJywgJ2NyZWF0ZS10YWJsZS1hc3NldHMuc3FsJyksXG4gICAgICAgICd1dGYtOCdcbik7XG5cbi8vIFRoaXMgZnVuY3Rpb24gYW5kIGl0cyBzaWJsaW5ncyBleGlzdCB0byBhdm9pZFxuLy8gcG90ZW50aWFsIGZvciBjb25mbGljdCBpbiBpbml0aWFsaXppbmcgdGhlXG4vLyB2YXJpYWJsZSBob2xkaW5nIHRoZSBTUUwgYW5kIGludm9raW5nXG4vLyB0aGUgU1FMIHRvIGNyZWF0ZSB0aGUgdGFibGUuICBCeSBwbGFjaW5nIGJvdGhcbi8vIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlIHdlIGVuc3VyZSBubyBjb25mbGljdC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb0NyZWF0ZUFzc2V0c1RhYmxlKFxuICAgIGRiOiBBc3luY0RhdGFiYXNlXG4pIHtcbiAgICBhd2FpdCBkYi5ydW4oYXdhaXQgY3JlYXRlQXNzZXRzVGFibGUpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLyBQYXJ0aWFsXG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbEZpZWxkcyB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIGRvY0JvZHk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBSZW5kZXJlciBjbGFzcy5cbiAgICAgKiBcbiAgICAgKiA/Pz8gVE9ETyBJUyBUSElTIE5FRURFRFxuICAgICAqL1xuICAgIHJlbmRlcmVyTmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUGFydGlhbCA9IEJhc2VDYWNoZUVudHJ5ICYgUGFydGlhbEZpZWxkcztcblxuZXhwb3J0IGNvbnN0IGpvaVBhcnRpYWwgPSBKb2kub2JqZWN0KHtcbiAgICB2cGF0aDogSm9pLnN0cmluZygpLFxuICAgIHJlbmRlclBhdGg6IEpvaS5zdHJpbmcoKSxcbiAgICBtaW1lOiBKb2kuc3RyaW5nKCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKSxcbiAgICBtb3VudGVkOiBKb2kuc3RyaW5nKCksXG4gICAgbW91bnRQb2ludDogSm9pLnN0cmluZygpLFxuICAgIHBhdGhJbk1vdW50ZWQ6IEpvaS5zdHJpbmcoKSxcbiAgICBmc3BhdGg6IEpvaS5zdHJpbmcoKSxcbiAgICBkaXJuYW1lOiBKb2kuc3RyaW5nKCksXG4gICAgbXRpbWVNczogSm9pLm51bWJlcigpLCAvLyAuaW50ZWdlcigpLFxuICAgIGluZm86IEpvaS5hbnkoKSxcblxuICAgIC8vIEFkZGVkIGZpZWxkc1xuICAgIGRvY0JvZHk6IEpvaS5zdHJpbmcoKS5vcHRpb25hbCgpLmFsbG93KG51bGwpLFxuICAgIHJlbmRlcmVyTmFtZTogSm9pLnN0cmluZygpLm9wdGlvbmFsKCkuYWxsb3cobnVsbClcblxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhcnRpYWwob2JqOiBhbnkpOiB7XG4gICAgZXJyb3I6IGFueSxcbiAgICB2YWx1ZTogUGFydGlhbFxufSB7XG4gICAgcmV0dXJuIGpvaVBhcnRpYWwudmFsaWRhdGUob2JqKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBhcnRpYWxzVGFibGUgPSBhd2FpdCBmc3AucmVhZEZpbGUoXG4gICAgICAgIHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLFxuICAgICAgICAgICAgJ3NxbCcsICdjcmVhdGUtdGFibGUtcGFydGlhbHMuc3FsJyksXG4gICAgICAgICd1dGYtOCdcbik7XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvQ3JlYXRlUGFydGlhbHNUYWJsZShcbiAgICBkYjogQXN5bmNEYXRhYmFzZVxuKSB7XG4gICAgYXdhaXQgZGIucnVuKGF3YWl0IGNyZWF0ZVBhcnRpYWxzVGFibGUpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLyBMYXlvdXRcblxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRGaWVsZHMge1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHRlbXBsYXRlIHByb2R1Y2VzXG4gICAgICogSFRNTC5cbiAgICAgKiBcbiAgICAgKiA/Pz8gSVMgVEhJUyBORUVERUQ/XG4gICAgICovXG4gICAgcmVuZGVyc1RvSFRNTDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICovXG4gICAgZG9jQm9keTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIFJlbmRlcmVyIGNsYXNzLlxuICAgICAqIFxuICAgICAqID8/PyBUT0RPIElTIFRISVMgTkVFREVEXG4gICAgICovXG4gICAgcmVuZGVyZXJOYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMYXlvdXQgPSBCYXNlQ2FjaGVFbnRyeSAmIExheW91dEZpZWxkcztcblxuZXhwb3J0IGNvbnN0IGpvaUxheW91dCA9IEpvaS5vYmplY3Qoe1xuXG4gICAgdnBhdGg6IEpvaS5zdHJpbmcoKSxcbiAgICByZW5kZXJQYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgbWltZTogSm9pLnN0cmluZygpLm9wdGlvbmFsKCkuYWxsb3cobnVsbCksXG4gICAgbW91bnRlZDogSm9pLnN0cmluZygpLFxuICAgIG1vdW50UG9pbnQ6IEpvaS5zdHJpbmcoKSxcbiAgICBwYXRoSW5Nb3VudGVkOiBKb2kuc3RyaW5nKCksXG4gICAgZnNwYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgZGlybmFtZTogSm9pLnN0cmluZygpLFxuICAgIG10aW1lTXM6IEpvaS5udW1iZXIoKSwgLy8gLmludGVnZXIoKSxcbiAgICBpbmZvOiBKb2kuYW55KCksXG5cbiAgICAvLyBBZGRlZCBmaWVsZHNcbiAgICByZW5kZXJzVG9IVE1MOiBKb2kuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgLnRyeShcbiAgICAgICAgICAgIEpvaS5ib29sZWFuKCksXG4gICAgICAgICAgICBKb2kubnVtYmVyKCkuaW50ZWdlcigpLm1pbigwKS5tYXgoMSlcbiAgICAgICAgKSxcbiAgICBkb2NCb2R5OiBKb2kuc3RyaW5nKCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKSxcbiAgICByZW5kZXJlck5hbWU6IEpvaS5zdHJpbmcoKS5taW4oMCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKVxuXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5b3V0KG9iajogYW55KToge1xuICAgIGVycm9yOiBhbnksXG4gICAgdmFsdWU6IExheW91dFxufSB7XG4gICAgcmV0dXJuIGpvaUxheW91dC52YWxpZGF0ZShvYmopO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlTGF5b3V0c1RhYmxlID0gYXdhaXQgZnNwLnJlYWRGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSxcbiAgICAgICAgICAgICdzcWwnLCAnY3JlYXRlLXRhYmxlLWxheW91dHMuc3FsJyksXG4gICAgICAgICd1dGYtOCdcbik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb0NyZWF0ZUxheW91dHNUYWJsZShcbiAgICBkYjogQXN5bmNEYXRhYmFzZVxuKSB7XG4gICAgYXdhaXQgZGIucnVuKGF3YWl0IGNyZWF0ZUxheW91dHNUYWJsZSk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vIERvY3VtZW50XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRGaWVsZHMge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpcnR1YWwgcGF0aG5hbWUgdG8gd2hpY2ggdGhpc1xuICAgICAqIGRvY3VtZW50IHJlbmRlcnMgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgcmVuZGVyUGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHRlbXBsYXRlIHByb2R1Y2VzXG4gICAgICogSFRNTC5cbiAgICAgKiBcbiAgICAgKiA/Pz8gSVMgVEhJUyBORUVERUQ/XG4gICAgICovXG4gICAgcmVuZGVyc1RvSFRNTDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2aXJ0dWFsIHBhdGhuYW1lIHRoYXQgaXMgdGhlXG4gICAgICogZGlyZWN0b3J5IG5hbWUgb2YgdGhlIHJlbmRlclBhdGguXG4gICAgICovXG4gICAgLy8gSU4gQkFTRSBDQUNIRSBkaXJuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlydHVhbCBwYXRobmFtZSB0aGF0IGlzIHRoZVxuICAgICAqIHBhcmVudCBkaXJlY3RvcnkgbmFtZSBvZiBkaXJuYW1lLlxuICAgICAqIFxuICAgICAqID8/Pz8/IElTIFRISVMgTkVFREVEXG4gICAgICovXG4gICAgcGFyZW50RGlyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgXCJ0aW1lXCIgKHNlY29uZHMgc2luY2UgSmFuIDEgMTk3MClcbiAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaWNhdGlvbkRhdGVcbiAgICAgKiBmaWVsZCBpbiB0aGUgZG9jdW1lbnQgbWV0YWRhdGEuXG4gICAgICogXG4gICAgICogSU5URUdFUiBHRU5FUkFURUQgQUxXQVlTXG4gICAgICogIEFTIChqc29uX2V4dHJhY3QoaW5mbywgJyQucHVibGljYXRpb25UaW1lJykpIFNUT1JFRFxuICAgICAqL1xuICAgIHB1YmxpY2F0aW9uVGltZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIGZvciB0aGUgYmFzZU1ldGFkYXRhIG9mXG4gICAgICogdGhlIG1vdW50ZWQgdmlydHVhbCBkaXJlY3RvcnkgaW5cbiAgICAgKiB3aGljaCB0aGlzIGZpbGUgaXMgc3RvcmVkLiAgVGhpc1xuICAgICAqIG1ldGFkYXRhIGlzIHVzZWQgaW4gY29tcHV0aW5nIHRoZVxuICAgICAqIGZpbmFsIG1ldGFkYXRhLlxuICAgICAqIFxuICAgICAqIFRFWFQgR0VORVJBVEVEIEFMV0FZU1xuICAgICAqICBBUyAoanNvbl9leHRyYWN0KGluZm8sICckLmJhc2VNZXRhZGF0YScpKSBTVE9SRURcbiAgICAgKi9cbiAgICBiYXNlTWV0YWRhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIGhlYWRlciBtZXRhZGF0YSBvZlxuICAgICAqIHRoZSBkb2N1bWVudC4gIFRoaXMgbWV0YWRhdGEgaXMgdXNlZCxcbiAgICAgKiBhbG9uZyB3aXRoIGRvY01ldGFkYXRhLCBpbiBjb21wdXRpbmcgdGhlXG4gICAgICogZmluYWwgbWV0YWRhdGEuXG4gICAgICovXG4gICAgZG9jTWV0YWRhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IGZvciB0aGUgZG9jdW1lbnQuXG4gICAgICovXG4gICAgZG9jQ29udGVudDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvZHkgcG9ydGlvbiBvZiB0aGUgZG9jdW1lbnQuXG4gICAgICovXG4gICAgZG9jQm9keTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZpbmFsIG1ldGFkYXRhIGZvciB0aGUgZG9jdW1lbnQsXG4gICAgICogd2hpY2ggaXMgY29tcHV0ZWQgZnJvbSBiYXNlTWV0YWRhdGFcbiAgICAgKiBhbmQgZG9jTWV0YWRhdGEuXG4gICAgICogXG4gICAgICogVEVYVCBHRU5FUkFURUQgQUxXQVlTXG4gICAgICogIEFTIChqc29uX2V4dHJhY3QoaW5mbywgJyQubWV0YWRhdGEnKSkgU1RPUkVEXG4gICAgICovXG4gICAgbWV0YWRhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnRpY2xlIHRpdGxlIChpZiBhbnkpXG4gICAgICovXG4gICAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGFnIHN0cmluZ3MgZGVyaXZlZCBmcm9tXG4gICAgICogdGhlIHRhZ3MgZmllbGQgb2YgdGhlIGRvY3VtZW50IG1ldGFkYXRhLlxuICAgICAqIFxuICAgICAqIFRFWFQgR0VORVJBVEVEIEFMV0FZU1xuICAgICAqICBBUyAoanNvbl9leHRyYWN0KGluZm8sICckLm1ldGFkYXRhLnRhZ3MnKSkgU1RPUkVEXG4gICAgICovXG4gICAgdGFnczogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGxheW91dCBmaWVsZFxuICAgICAqIG9mIHRoZSBkb2N1bWVudCBtZXRhZGF0YS5cbiAgICAgKiBcbiAgICAgKiBURVhUIEdFTkVSQVRFRCBBTFdBWVNcbiAgICAgKiAgQVMgKGpzb25fZXh0cmFjdChtZXRhZGF0YSwgJyQubGF5b3V0JykpIFNUT1JFRFxuICAgICAqL1xuICAgIGxheW91dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGJsb2d0YWcgZmllbGRcbiAgICAgKiBvZiB0aGUgZG9jdW1lbnQgbWV0YWRhdGEuXG4gICAgICogXG4gICAgICogVEVYVCBHRU5FUkFURUQgQUxXQVlTXG4gICAgICogIEFTIChqc29uX2V4dHJhY3QobWV0YWRhdGEsICckLmJsb2d0YWcnKSkgU1RPUkVEXG4gICAgICovXG4gICAgYmxvZ3RhZzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIFJlbmRlcmVyIGNsYXNzLlxuICAgICAqIFxuICAgICAqID8/PyBUT0RPIElTIFRISVMgTkVFREVEXG4gICAgICovXG4gICAgcmVuZGVyZXJOYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEb2N1bWVudCA9IEJhc2VDYWNoZUVudHJ5XG4gICAgICAgICAgICAgICAgICAgICAmIERvY3VtZW50RmllbGRzO1xuXG5leHBvcnQgY29uc3Qgam9pRG9jdW1lbnQgPSBKb2kub2JqZWN0KHtcblxuICAgIHZwYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgbWltZTogSm9pLnN0cmluZygpLm9wdGlvbmFsKCkuYWxsb3cobnVsbCksXG4gICAgbW91bnRlZDogSm9pLnN0cmluZygpLFxuICAgIG1vdW50UG9pbnQ6IEpvaS5zdHJpbmcoKSxcbiAgICBwYXRoSW5Nb3VudGVkOiBKb2kuc3RyaW5nKCksXG4gICAgZnNwYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgZGlybmFtZTogSm9pLnN0cmluZygpLFxuICAgIG10aW1lTXM6IEpvaS5udW1iZXIoKSwgLy8gLmludGVnZXIoKSxcbiAgICBpbmZvOiBKb2kuYW55KCksXG5cbiAgICAvLyBBZGRlZCBmaWVsZHNcbiAgICByZW5kZXJQYXRoOiBKb2kuc3RyaW5nKCksXG4gICAgcmVuZGVyc1RvSFRNTDogSm9pLmFsdGVybmF0aXZlcygpXG4gICAgICAgIC50cnkoXG4gICAgICAgICAgICBKb2kuYm9vbGVhbigpLFxuICAgICAgICAgICAgSm9pLm51bWJlcigpLmludGVnZXIoKS5taW4oMCkubWF4KDEpXG4gICAgICAgICksXG4gICAgcGFyZW50RGlyOiBKb2kuc3RyaW5nKCksXG4gICAgcHVibGljYXRpb25UaW1lOiBKb2kubnVtYmVyKCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKSxcbiAgICBiYXNlTWV0YWRhdGE6IEpvaS5hbnkoKSxcbiAgICBkb2NNZXRhZGF0YTogSm9pLmFueSgpLFxuICAgIGRvY0NvbnRlbnQ6IEpvaS5zdHJpbmcoKS5taW4oMCkub3B0aW9uYWwoKS5hbGxvdyhudWxsKSxcbiAgICBkb2NCb2R5OiBKb2kuc3RyaW5nKCkubWluKDApLm9wdGlvbmFsKCkuYWxsb3cobnVsbCksXG4gICAgbWV0YWRhdGE6IEpvaS5hbnkoKSxcbiAgICB0aXRsZTogSm9pLnN0cmluZygpLm9wdGlvbmFsKCkuYWxsb3cobnVsbCksXG4gICAgdGFnczogSm9pLmFueSgpLFxuICAgIGxheW91dDogSm9pLmFsdGVybmF0aXZlcygpXG4gICAgICAgIC50cnkoXG4gICAgICAgICAgICBKb2kuc3RyaW5nKCksXG4gICAgICAgICAgICBKb2kuYWxsb3cobnVsbClcbiAgICAgICAgKSxcbiAgICBibG9ndGFnOiBKb2kuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgLnRyeShcbiAgICAgICAgICAgIEpvaS5zdHJpbmcoKSxcbiAgICAgICAgICAgIEpvaS5hbGxvdyhudWxsKVxuICAgICAgICApLFxuICAgIHJlbmRlcmVyTmFtZTogSm9pLnN0cmluZygpLm1pbigwKS5vcHRpb25hbCgpLmFsbG93KG51bGwpXG5cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVEb2N1bWVudChvYmo6IGFueSk6IHtcbiAgICBlcnJvcjogYW55LFxuICAgIHZhbHVlOiBEb2N1bWVudFxufSB7XG4gICAgcmV0dXJuIGpvaURvY3VtZW50LnZhbGlkYXRlKG9iaik7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEb2N1bWVudHNUYWJsZSA9IGF3YWl0IGZzcC5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgICAgICAgICAnc3FsJywgJ2NyZWF0ZS10YWJsZS1kb2N1bWVudHMuc3FsJyksXG4gICAgICAgICd1dGYtOCdcbik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb0NyZWF0ZURvY3VtZW50c1RhYmxlKFxuICAgIGRiOiBBc3luY0RhdGFiYXNlXG4pIHtcbiAgICBhd2FpdCBkYi5ydW4oYXdhaXQgY3JlYXRlRG9jdW1lbnRzVGFibGUpO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlVmVjRG9jdW1lbnRzVGFibGUgID0gYXdhaXQgZnNwLnJlYWRGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSxcbiAgICAgICAgICAgICdzcWwnLCAnY3JlYXRlLXRhYmxlLXZlYy1kb2N1bWVudHMuc3FsJyksXG4gICAgICAgICd1dGYtOCdcbik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb0NyZWF0ZVZlY0RvY3VtZW50c1RhYmxlKFxuICAgIGRiOiBBc3luY0RhdGFiYXNlXG4pIHtcbiAgICBpZiAodHlwZW9mIGxlbWJlZE1vZGVsTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXdhaXQgZGIucnVuKGF3YWl0IGNyZWF0ZVZlY0RvY3VtZW50c1RhYmxlKTtcbiAgICB9XG59XG4iXX0=