UNPKG

@b-side/parser

Version:

HTML Parser used to parse HTML string and bind data to it.

106 lines 3.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setWindowRef = exports.getWindow = exports.getDocument = exports.FindEndOfStringDelimiter = exports.ValueDelimiter = exports.getConstructorMethods = void 0; const getConstructorMethods = (data) => { const methods = {}; let obj = data; do { Reflect.ownKeys(obj).forEach((key) => { const currentObj = obj; if (typeof key === 'string' && ![ 'constructor', 'connected', 'disconnected', 'connectedCallback', 'disconnectedCallback', 'adoptedCallback', '@b-side', ].includes(key) && !Object.prototype.hasOwnProperty.call(methods, key)) { const descriptor = Reflect.getOwnPropertyDescriptor(obj, key); if (descriptor) { if (descriptor.get) { Object.defineProperty(methods, key, { enumerable: true, get: descriptor.get.bind(data), set: descriptor.set?.bind(data), }); } else if (typeof descriptor.value === 'function') { methods[key] = descriptor.value.bind(data); } else { Object.defineProperty(methods, key, { enumerable: true, get: () => currentObj[key], }); } } } }); if (!Object.getPrototypeOf(obj).constructor['@b-side']) { break; } } while ((obj = Reflect.getPrototypeOf(obj))); return methods; }; exports.getConstructorMethods = getConstructorMethods; exports.ValueDelimiter = { '{{': ['}}', true], '(': [')', true], '<!--': ['-->', false], '<': ['>', false], '"': ['"', true], "'": ["'", true], '`': ['`', true], }; const FindEndOfStringDelimiter = (string, startValueDelimiter) => { let nbOfInstance = 0; let index = -1; const [endValueDelimiter, increaseCount] = exports.ValueDelimiter[startValueDelimiter]; if (!endValueDelimiter) { throw new Error(`Undefined delimiter [${startValueDelimiter}]`); } do { index++; if (increaseCount && startValueDelimiter !== endValueDelimiter && string.substring(index, index + endValueDelimiter.length) === startValueDelimiter) { nbOfInstance++; } if (string.substring(index, index + endValueDelimiter.length) === endValueDelimiter) { nbOfInstance--; } } while (((string.substring(index, index + endValueDelimiter.length) !== endValueDelimiter && nbOfInstance > -1) || nbOfInstance > -1) && index < string.length); if (nbOfInstance !== -1) { throw Error(`End of string delimiter '${endValueDelimiter}' not found in ${string}`); } return [string.substring(0, index), index + endValueDelimiter.length]; }; exports.FindEndOfStringDelimiter = FindEndOfStringDelimiter; let WindowObj = typeof window !== 'undefined' ? window : undefined; let DocumentObj = typeof window !== 'undefined' ? window.document : undefined; const getDocument = () => { if (!DocumentObj) { throw new Error('document is undefined'); } return DocumentObj; }; exports.getDocument = getDocument; const getWindow = () => { if (!WindowObj) { throw new Error('window is undefined'); } return WindowObj; }; exports.getWindow = getWindow; const setWindowRef = (WindoRef) => { WindowObj = WindoRef; DocumentObj = WindoRef.document; }; exports.setWindowRef = setWindowRef; //# sourceMappingURL=utils.js.map