@b-side/parser
Version:
HTML Parser used to parse HTML string and bind data to it.
106 lines • 3.95 kB
JavaScript
;
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