Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function sc(vnodes: VNodes): VNodes {
if (process.env.NODE_ENV !== 'production') {
assert.isTrue(isArray(vnodes), 'sc() api can only work with arrays.');
}
// We have to mark the vnodes collection as dynamic so we can later on
// choose to use the snabbdom virtual dom diffing algo instead of our
// static dummy algo.
markAsDynamicChildren(vnodes);
return vnodes;
}
function recursivelyDisconnectChildren(vnodes: VNodes) {
for (let i = 0, len = vnodes.length; i < len; i += 1) {
const vnode: VCustomElement | VNode | null = vnodes[i];
if (!isNull(vnode) && isArray(vnode.children) && !isUndefined(vnode.elm)) {
// vnode is a VElement with children
if (isUndefined((vnode as any).ctor)) {
// it is a VElement, just keep looking (recursively)
recursivelyDisconnectChildren(vnode.children);
} else {
// it is a VCustomElement, disconnect it and ignore its children
resetComponentStateWhenRemoved(getAssociatedVM(vnode.elm as HTMLElement));
}
}
}
}
}
});
},
() => {
// post
isUpdatingTemplate = isUpdatingTemplateInception;
vmBeingRendered = vmOfTemplateBeingUpdatedInception;
if (process.env.NODE_ENV !== 'production') {
endMeasure('render', vm);
}
}
);
if (process.env.NODE_ENV !== 'production') {
assert.invariant(
isArray(vnodes),
`Compiler should produce html functions that always return an array.`
);
}
return vnodes;
}
function addNS(vnode: VElement) {
const { data, children, sel } = vnode;
data.ns = NamespaceAttributeForSVG;
// TODO [#1275]: review why `sel` equal `foreignObject` should get this `ns`
if (isArray(children) && sel !== 'foreignObject') {
for (let j = 0, n = children.length; j < n; ++j) {
const childNode = children[j];
if (childNode != null && childNode.hook === ElementHook) {
addNS(childNode as VElement);
}
}
}
}
export function h(sel: string, data: ElementCompilerData, children: VNodes): VElement {
const vmBeingRendered = getVMBeingRendered();
if (process.env.NODE_ENV !== 'production') {
assert.isTrue(isString(sel), `h() 1st argument sel must be a string.`);
assert.isTrue(isObject(data), `h() 2nd argument data must be an object.`);
assert.isTrue(isArray(children), `h() 3rd argument children must be an array.`);
assert.isTrue(
'key' in data,
` <${sel}> "key" attribute is invalid or missing for ${vmBeingRendered}. Key inside iterator is either undefined or null.`
);
// checking reserved internal data properties
assert.isFalse(
data.className && data.classMap,
`vnode.data.className and vnode.data.classMap ambiguous declaration.`
);
assert.isFalse(
data.styleMap && data.style,
`vnode.data.styleMap and vnode.data.style ambiguous declaration.`
);
if (data.style && !isString(data.style)) {
logError(
`Invalid 'style' attribute passed to <${sel}> is ignored. This attribute must be a string value.`,
export function f(items: any[]): any[] {
if (process.env.NODE_ENV !== 'production') {
assert.isTrue(isArray(items), 'flattening api can only work with arrays.');
}
const len = items.length;
const flattened: VNodes = [];
// TODO [#1276]: compiler should give us some sort of indicator when a vnodes collection is dynamic
sc(flattened);
for (let j = 0; j < len; j += 1) {
const item = items[j];
if (isArray(item)) {
ArrayPush.apply(flattened, item);
} else {
ArrayPush.call(flattened, item);
}
}
return flattened;
}
let j = 0;
let { value, done: last } = next;
let keyMap: Record;
let iterationError: string | undefined;
if (process.env.NODE_ENV !== 'production') {
keyMap = ObjectCreate(null);
}
while (last === false) {
// implementing a look-back-approach because we need to know if the element is the last
next = iterator.next();
last = next.done;
// template factory logic based on the previous collected value
const vnode = factory(value, j, j === 0, last);
if (isArray(vnode)) {
ArrayPush.apply(list, vnode);
} else {
ArrayPush.call(list, vnode);
}
if (process.env.NODE_ENV !== 'production') {
const vnodes = isArray(vnode) ? vnode : [vnode];
forEach.call(vnodes, (childVnode: VNode | null) => {
if (!isNull(childVnode) && isObject(childVnode) && !isUndefined(childVnode.sel)) {
const { key } = childVnode;
if (isString(key) || isNumber(key)) {
if (keyMap[key] === 1 && isUndefined(iterationError)) {
iterationError = `Duplicated "key" attribute value for "<${childVnode.sel}>" in ${vmBeingRendered} for item number ${j}. A key with value "${childVnode.key}" appears more than once in the iteration. Key values must be unique numbers or strings.`;
}
keyMap[key] = 1;
} else if (isUndefined(iterationError)) {
export function renderComponent(vm: VM): VNodes {
if (process.env.NODE_ENV !== 'production') {
assert.invariant(vm.isDirty, `${vm} is not dirty.`);
}
vm.tro.reset();
const vnodes = invokeComponentRenderMethod(vm);
vm.isDirty = false;
vm.isScheduled = false;
if (process.env.NODE_ENV !== 'production') {
assert.invariant(
isArray(vnodes),
`${vm}.render() should always return an array of vnodes instead of ${vnodes}`
);
}
return vnodes;
}