Spaces:
Runtime error
Runtime error
; | |
Object.defineProperty(exports, '__esModule', { value: true }); | |
var runtimeCore = require('@vue/runtime-core'); | |
var shared = require('@vue/shared'); | |
const svgNS = "http://www.w3.org/2000/svg"; | |
const doc = typeof document !== "undefined" ? document : null; | |
const templateContainer = doc && /* @__PURE__ */ doc.createElement("template"); | |
const nodeOps = { | |
insert: (child, parent, anchor) => { | |
parent.insertBefore(child, anchor || null); | |
}, | |
remove: (child) => { | |
const parent = child.parentNode; | |
if (parent) { | |
parent.removeChild(child); | |
} | |
}, | |
createElement: (tag, isSVG, is, props) => { | |
const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0); | |
if (tag === "select" && props && props.multiple != null) { | |
el.setAttribute("multiple", props.multiple); | |
} | |
return el; | |
}, | |
createText: (text) => doc.createTextNode(text), | |
createComment: (text) => doc.createComment(text), | |
setText: (node, text) => { | |
node.nodeValue = text; | |
}, | |
setElementText: (el, text) => { | |
el.textContent = text; | |
}, | |
parentNode: (node) => node.parentNode, | |
nextSibling: (node) => node.nextSibling, | |
querySelector: (selector) => doc.querySelector(selector), | |
setScopeId(el, id) { | |
el.setAttribute(id, ""); | |
}, | |
// __UNSAFE__ | |
// Reason: innerHTML. | |
// Static content here can only come from compiled templates. | |
// As long as the user only uses trusted templates, this is safe. | |
insertStaticContent(content, parent, anchor, isSVG, start, end) { | |
const before = anchor ? anchor.previousSibling : parent.lastChild; | |
if (start && (start === end || start.nextSibling)) { | |
while (true) { | |
parent.insertBefore(start.cloneNode(true), anchor); | |
if (start === end || !(start = start.nextSibling)) | |
break; | |
} | |
} else { | |
templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content; | |
const template = templateContainer.content; | |
if (isSVG) { | |
const wrapper = template.firstChild; | |
while (wrapper.firstChild) { | |
template.appendChild(wrapper.firstChild); | |
} | |
template.removeChild(wrapper); | |
} | |
parent.insertBefore(template, anchor); | |
} | |
return [ | |
// first | |
before ? before.nextSibling : parent.firstChild, | |
// last | |
anchor ? anchor.previousSibling : parent.lastChild | |
]; | |
} | |
}; | |
function patchClass(el, value, isSVG) { | |
const transitionClasses = el._vtc; | |
if (transitionClasses) { | |
value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); | |
} | |
if (value == null) { | |
el.removeAttribute("class"); | |
} else if (isSVG) { | |
el.setAttribute("class", value); | |
} else { | |
el.className = value; | |
} | |
} | |
function patchStyle(el, prev, next) { | |
const style = el.style; | |
const isCssString = shared.isString(next); | |
if (next && !isCssString) { | |
if (prev && !shared.isString(prev)) { | |
for (const key in prev) { | |
if (next[key] == null) { | |
setStyle(style, key, ""); | |
} | |
} | |
} | |
for (const key in next) { | |
setStyle(style, key, next[key]); | |
} | |
} else { | |
const currentDisplay = style.display; | |
if (isCssString) { | |
if (prev !== next) { | |
style.cssText = next; | |
} | |
} else if (prev) { | |
el.removeAttribute("style"); | |
} | |
if ("_vod" in el) { | |
style.display = currentDisplay; | |
} | |
} | |
} | |
const semicolonRE = /[^\\];\s*$/; | |
const importantRE = /\s*!important$/; | |
function setStyle(style, name, val) { | |
if (shared.isArray(val)) { | |
val.forEach((v) => setStyle(style, name, v)); | |
} else { | |
if (val == null) | |
val = ""; | |
{ | |
if (semicolonRE.test(val)) { | |
runtimeCore.warn( | |
`Unexpected semicolon at the end of '${name}' style value: '${val}'` | |
); | |
} | |
} | |
if (name.startsWith("--")) { | |
style.setProperty(name, val); | |
} else { | |
const prefixed = autoPrefix(style, name); | |
if (importantRE.test(val)) { | |
style.setProperty( | |
shared.hyphenate(prefixed), | |
val.replace(importantRE, ""), | |
"important" | |
); | |
} else { | |
style[prefixed] = val; | |
} | |
} | |
} | |
} | |
const prefixes = ["Webkit", "Moz", "ms"]; | |
const prefixCache = {}; | |
function autoPrefix(style, rawName) { | |
const cached = prefixCache[rawName]; | |
if (cached) { | |
return cached; | |
} | |
let name = runtimeCore.camelize(rawName); | |
if (name !== "filter" && name in style) { | |
return prefixCache[rawName] = name; | |
} | |
name = shared.capitalize(name); | |
for (let i = 0; i < prefixes.length; i++) { | |
const prefixed = prefixes[i] + name; | |
if (prefixed in style) { | |
return prefixCache[rawName] = prefixed; | |
} | |
} | |
return rawName; | |
} | |
const xlinkNS = "http://www.w3.org/1999/xlink"; | |
function patchAttr(el, key, value, isSVG, instance) { | |
if (isSVG && key.startsWith("xlink:")) { | |
if (value == null) { | |
el.removeAttributeNS(xlinkNS, key.slice(6, key.length)); | |
} else { | |
el.setAttributeNS(xlinkNS, key, value); | |
} | |
} else { | |
const isBoolean = shared.isSpecialBooleanAttr(key); | |
if (value == null || isBoolean && !shared.includeBooleanAttr(value)) { | |
el.removeAttribute(key); | |
} else { | |
el.setAttribute(key, isBoolean ? "" : value); | |
} | |
} | |
} | |
function patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) { | |
if (key === "innerHTML" || key === "textContent") { | |
if (prevChildren) { | |
unmountChildren(prevChildren, parentComponent, parentSuspense); | |
} | |
el[key] = value == null ? "" : value; | |
return; | |
} | |
const tag = el.tagName; | |
if (key === "value" && tag !== "PROGRESS" && // custom elements may use _value internally | |
!tag.includes("-")) { | |
el._value = value; | |
const oldValue = tag === "OPTION" ? el.getAttribute("value") : el.value; | |
const newValue = value == null ? "" : value; | |
if (oldValue !== newValue) { | |
el.value = newValue; | |
} | |
if (value == null) { | |
el.removeAttribute(key); | |
} | |
return; | |
} | |
let needRemove = false; | |
if (value === "" || value == null) { | |
const type = typeof el[key]; | |
if (type === "boolean") { | |
value = shared.includeBooleanAttr(value); | |
} else if (value == null && type === "string") { | |
value = ""; | |
needRemove = true; | |
} else if (type === "number") { | |
value = 0; | |
needRemove = true; | |
} | |
} | |
try { | |
el[key] = value; | |
} catch (e) { | |
if (!needRemove) { | |
runtimeCore.warn( | |
`Failed setting prop "${key}" on <${tag.toLowerCase()}>: value ${value} is invalid.`, | |
e | |
); | |
} | |
} | |
needRemove && el.removeAttribute(key); | |
} | |
function addEventListener(el, event, handler, options) { | |
el.addEventListener(event, handler, options); | |
} | |
function removeEventListener(el, event, handler, options) { | |
el.removeEventListener(event, handler, options); | |
} | |
function patchEvent(el, rawName, prevValue, nextValue, instance = null) { | |
const invokers = el._vei || (el._vei = {}); | |
const existingInvoker = invokers[rawName]; | |
if (nextValue && existingInvoker) { | |
existingInvoker.value = nextValue; | |
} else { | |
const [name, options] = parseName(rawName); | |
if (nextValue) { | |
const invoker = invokers[rawName] = createInvoker(nextValue, instance); | |
addEventListener(el, name, invoker, options); | |
} else if (existingInvoker) { | |
removeEventListener(el, name, existingInvoker, options); | |
invokers[rawName] = void 0; | |
} | |
} | |
} | |
const optionsModifierRE = /(?:Once|Passive|Capture)$/; | |
function parseName(name) { | |
let options; | |
if (optionsModifierRE.test(name)) { | |
options = {}; | |
let m; | |
while (m = name.match(optionsModifierRE)) { | |
name = name.slice(0, name.length - m[0].length); | |
options[m[0].toLowerCase()] = true; | |
} | |
} | |
const event = name[2] === ":" ? name.slice(3) : shared.hyphenate(name.slice(2)); | |
return [event, options]; | |
} | |
let cachedNow = 0; | |
const p = /* @__PURE__ */ Promise.resolve(); | |
const getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now()); | |
function createInvoker(initialValue, instance) { | |
const invoker = (e) => { | |
if (!e._vts) { | |
e._vts = Date.now(); | |
} else if (e._vts <= invoker.attached) { | |
return; | |
} | |
runtimeCore.callWithAsyncErrorHandling( | |
patchStopImmediatePropagation(e, invoker.value), | |
instance, | |
5, | |
[e] | |
); | |
}; | |
invoker.value = initialValue; | |
invoker.attached = getNow(); | |
return invoker; | |
} | |
function patchStopImmediatePropagation(e, value) { | |
if (shared.isArray(value)) { | |
const originalStop = e.stopImmediatePropagation; | |
e.stopImmediatePropagation = () => { | |
originalStop.call(e); | |
e._stopped = true; | |
}; | |
return value.map((fn) => (e2) => !e2._stopped && fn && fn(e2)); | |
} else { | |
return value; | |
} | |
} | |
const nativeOnRE = /^on[a-z]/; | |
const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => { | |
if (key === "class") { | |
patchClass(el, nextValue, isSVG); | |
} else if (key === "style") { | |
patchStyle(el, prevValue, nextValue); | |
} else if (shared.isOn(key)) { | |
if (!shared.isModelListener(key)) { | |
patchEvent(el, key, prevValue, nextValue, parentComponent); | |
} | |
} else if (key[0] === "." ? (key = key.slice(1), true) : key[0] === "^" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) { | |
patchDOMProp( | |
el, | |
key, | |
nextValue, | |
prevChildren, | |
parentComponent, | |
parentSuspense, | |
unmountChildren | |
); | |
} else { | |
if (key === "true-value") { | |
el._trueValue = nextValue; | |
} else if (key === "false-value") { | |
el._falseValue = nextValue; | |
} | |
patchAttr(el, key, nextValue, isSVG); | |
} | |
}; | |
function shouldSetAsProp(el, key, value, isSVG) { | |
if (isSVG) { | |
if (key === "innerHTML" || key === "textContent") { | |
return true; | |
} | |
if (key in el && nativeOnRE.test(key) && shared.isFunction(value)) { | |
return true; | |
} | |
return false; | |
} | |
if (key === "spellcheck" || key === "draggable" || key === "translate") { | |
return false; | |
} | |
if (key === "form") { | |
return false; | |
} | |
if (key === "list" && el.tagName === "INPUT") { | |
return false; | |
} | |
if (key === "type" && el.tagName === "TEXTAREA") { | |
return false; | |
} | |
if (nativeOnRE.test(key) && shared.isString(value)) { | |
return false; | |
} | |
return key in el; | |
} | |
function defineCustomElement(options, hydrate2) { | |
const Comp = runtimeCore.defineComponent(options); | |
class VueCustomElement extends VueElement { | |
constructor(initialProps) { | |
super(Comp, initialProps, hydrate2); | |
} | |
} | |
VueCustomElement.def = Comp; | |
return VueCustomElement; | |
} | |
const defineSSRCustomElement = (options) => { | |
return defineCustomElement(options, hydrate); | |
}; | |
const BaseClass = typeof HTMLElement !== "undefined" ? HTMLElement : class { | |
}; | |
class VueElement extends BaseClass { | |
constructor(_def, _props = {}, hydrate2) { | |
super(); | |
this._def = _def; | |
this._props = _props; | |
/** | |
* @internal | |
*/ | |
this._instance = null; | |
this._connected = false; | |
this._resolved = false; | |
this._numberProps = null; | |
if (this.shadowRoot && hydrate2) { | |
hydrate2(this._createVNode(), this.shadowRoot); | |
} else { | |
if (this.shadowRoot) { | |
runtimeCore.warn( | |
`Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \`defineSSRCustomElement\`.` | |
); | |
} | |
this.attachShadow({ mode: "open" }); | |
if (!this._def.__asyncLoader) { | |
this._resolveProps(this._def); | |
} | |
} | |
} | |
connectedCallback() { | |
this._connected = true; | |
if (!this._instance) { | |
if (this._resolved) { | |
this._update(); | |
} else { | |
this._resolveDef(); | |
} | |
} | |
} | |
disconnectedCallback() { | |
this._connected = false; | |
runtimeCore.nextTick(() => { | |
if (!this._connected) { | |
render(null, this.shadowRoot); | |
this._instance = null; | |
} | |
}); | |
} | |
/** | |
* resolve inner component definition (handle possible async component) | |
*/ | |
_resolveDef() { | |
this._resolved = true; | |
for (let i = 0; i < this.attributes.length; i++) { | |
this._setAttr(this.attributes[i].name); | |
} | |
new MutationObserver((mutations) => { | |
for (const m of mutations) { | |
this._setAttr(m.attributeName); | |
} | |
}).observe(this, { attributes: true }); | |
const resolve = (def, isAsync = false) => { | |
const { props, styles } = def; | |
let numberProps; | |
if (props && !shared.isArray(props)) { | |
for (const key in props) { | |
const opt = props[key]; | |
if (opt === Number || opt && opt.type === Number) { | |
if (key in this._props) { | |
this._props[key] = shared.toNumber(this._props[key]); | |
} | |
(numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[shared.camelize(key)] = true; | |
} | |
} | |
} | |
this._numberProps = numberProps; | |
if (isAsync) { | |
this._resolveProps(def); | |
} | |
this._applyStyles(styles); | |
this._update(); | |
}; | |
const asyncDef = this._def.__asyncLoader; | |
if (asyncDef) { | |
asyncDef().then((def) => resolve(def, true)); | |
} else { | |
resolve(this._def); | |
} | |
} | |
_resolveProps(def) { | |
const { props } = def; | |
const declaredPropKeys = shared.isArray(props) ? props : Object.keys(props || {}); | |
for (const key of Object.keys(this)) { | |
if (key[0] !== "_" && declaredPropKeys.includes(key)) { | |
this._setProp(key, this[key], true, false); | |
} | |
} | |
for (const key of declaredPropKeys.map(shared.camelize)) { | |
Object.defineProperty(this, key, { | |
get() { | |
return this._getProp(key); | |
}, | |
set(val) { | |
this._setProp(key, val); | |
} | |
}); | |
} | |
} | |
_setAttr(key) { | |
let value = this.getAttribute(key); | |
const camelKey = shared.camelize(key); | |
if (this._numberProps && this._numberProps[camelKey]) { | |
value = shared.toNumber(value); | |
} | |
this._setProp(camelKey, value, false); | |
} | |
/** | |
* @internal | |
*/ | |
_getProp(key) { | |
return this._props[key]; | |
} | |
/** | |
* @internal | |
*/ | |
_setProp(key, val, shouldReflect = true, shouldUpdate = true) { | |
if (val !== this._props[key]) { | |
this._props[key] = val; | |
if (shouldUpdate && this._instance) { | |
this._update(); | |
} | |
if (shouldReflect) { | |
if (val === true) { | |
this.setAttribute(shared.hyphenate(key), ""); | |
} else if (typeof val === "string" || typeof val === "number") { | |
this.setAttribute(shared.hyphenate(key), val + ""); | |
} else if (!val) { | |
this.removeAttribute(shared.hyphenate(key)); | |
} | |
} | |
} | |
} | |
_update() { | |
render(this._createVNode(), this.shadowRoot); | |
} | |
_createVNode() { | |
const vnode = runtimeCore.createVNode(this._def, shared.extend({}, this._props)); | |
if (!this._instance) { | |
vnode.ce = (instance) => { | |
this._instance = instance; | |
instance.isCE = true; | |
{ | |
instance.ceReload = (newStyles) => { | |
if (this._styles) { | |
this._styles.forEach((s) => this.shadowRoot.removeChild(s)); | |
this._styles.length = 0; | |
} | |
this._applyStyles(newStyles); | |
this._instance = null; | |
this._update(); | |
}; | |
} | |
const dispatch = (event, args) => { | |
this.dispatchEvent( | |
new CustomEvent(event, { | |
detail: args | |
}) | |
); | |
}; | |
instance.emit = (event, ...args) => { | |
dispatch(event, args); | |
if (shared.hyphenate(event) !== event) { | |
dispatch(shared.hyphenate(event), args); | |
} | |
}; | |
let parent = this; | |
while (parent = parent && (parent.parentNode || parent.host)) { | |
if (parent instanceof VueElement) { | |
instance.parent = parent._instance; | |
instance.provides = parent._instance.provides; | |
break; | |
} | |
} | |
}; | |
} | |
return vnode; | |
} | |
_applyStyles(styles) { | |
if (styles) { | |
styles.forEach((css) => { | |
const s = document.createElement("style"); | |
s.textContent = css; | |
this.shadowRoot.appendChild(s); | |
{ | |
(this._styles || (this._styles = [])).push(s); | |
} | |
}); | |
} | |
} | |
} | |
function useCssModule(name = "$style") { | |
{ | |
const instance = runtimeCore.getCurrentInstance(); | |
if (!instance) { | |
runtimeCore.warn(`useCssModule must be called inside setup()`); | |
return shared.EMPTY_OBJ; | |
} | |
const modules = instance.type.__cssModules; | |
if (!modules) { | |
runtimeCore.warn(`Current instance does not have CSS modules injected.`); | |
return shared.EMPTY_OBJ; | |
} | |
const mod = modules[name]; | |
if (!mod) { | |
runtimeCore.warn(`Current instance does not have CSS module named "${name}".`); | |
return shared.EMPTY_OBJ; | |
} | |
return mod; | |
} | |
} | |
function useCssVars(getter) { | |
return; | |
} | |
const TRANSITION = "transition"; | |
const ANIMATION = "animation"; | |
const Transition = (props, { slots }) => runtimeCore.h(runtimeCore.BaseTransition, resolveTransitionProps(props), slots); | |
Transition.displayName = "Transition"; | |
const DOMTransitionPropsValidators = { | |
name: String, | |
type: String, | |
css: { | |
type: Boolean, | |
default: true | |
}, | |
duration: [String, Number, Object], | |
enterFromClass: String, | |
enterActiveClass: String, | |
enterToClass: String, | |
appearFromClass: String, | |
appearActiveClass: String, | |
appearToClass: String, | |
leaveFromClass: String, | |
leaveActiveClass: String, | |
leaveToClass: String | |
}; | |
const TransitionPropsValidators = Transition.props = /* @__PURE__ */ shared.extend( | |
{}, | |
runtimeCore.BaseTransitionPropsValidators, | |
DOMTransitionPropsValidators | |
); | |
const callHook = (hook, args = []) => { | |
if (shared.isArray(hook)) { | |
hook.forEach((h2) => h2(...args)); | |
} else if (hook) { | |
hook(...args); | |
} | |
}; | |
const hasExplicitCallback = (hook) => { | |
return hook ? shared.isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false; | |
}; | |
function resolveTransitionProps(rawProps) { | |
const baseProps = {}; | |
for (const key in rawProps) { | |
if (!(key in DOMTransitionPropsValidators)) { | |
baseProps[key] = rawProps[key]; | |
} | |
} | |
if (rawProps.css === false) { | |
return baseProps; | |
} | |
const { | |
name = "v", | |
type, | |
duration, | |
enterFromClass = `${name}-enter-from`, | |
enterActiveClass = `${name}-enter-active`, | |
enterToClass = `${name}-enter-to`, | |
appearFromClass = enterFromClass, | |
appearActiveClass = enterActiveClass, | |
appearToClass = enterToClass, | |
leaveFromClass = `${name}-leave-from`, | |
leaveActiveClass = `${name}-leave-active`, | |
leaveToClass = `${name}-leave-to` | |
} = rawProps; | |
const durations = normalizeDuration(duration); | |
const enterDuration = durations && durations[0]; | |
const leaveDuration = durations && durations[1]; | |
const { | |
onBeforeEnter, | |
onEnter, | |
onEnterCancelled, | |
onLeave, | |
onLeaveCancelled, | |
onBeforeAppear = onBeforeEnter, | |
onAppear = onEnter, | |
onAppearCancelled = onEnterCancelled | |
} = baseProps; | |
const finishEnter = (el, isAppear, done) => { | |
removeTransitionClass(el, isAppear ? appearToClass : enterToClass); | |
removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass); | |
done && done(); | |
}; | |
const finishLeave = (el, done) => { | |
el._isLeaving = false; | |
removeTransitionClass(el, leaveFromClass); | |
removeTransitionClass(el, leaveToClass); | |
removeTransitionClass(el, leaveActiveClass); | |
done && done(); | |
}; | |
const makeEnterHook = (isAppear) => { | |
return (el, done) => { | |
const hook = isAppear ? onAppear : onEnter; | |
const resolve = () => finishEnter(el, isAppear, done); | |
callHook(hook, [el, resolve]); | |
nextFrame(() => { | |
removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass); | |
addTransitionClass(el, isAppear ? appearToClass : enterToClass); | |
if (!hasExplicitCallback(hook)) { | |
whenTransitionEnds(el, type, enterDuration, resolve); | |
} | |
}); | |
}; | |
}; | |
return shared.extend(baseProps, { | |
onBeforeEnter(el) { | |
callHook(onBeforeEnter, [el]); | |
addTransitionClass(el, enterFromClass); | |
addTransitionClass(el, enterActiveClass); | |
}, | |
onBeforeAppear(el) { | |
callHook(onBeforeAppear, [el]); | |
addTransitionClass(el, appearFromClass); | |
addTransitionClass(el, appearActiveClass); | |
}, | |
onEnter: makeEnterHook(false), | |
onAppear: makeEnterHook(true), | |
onLeave(el, done) { | |
el._isLeaving = true; | |
const resolve = () => finishLeave(el, done); | |
addTransitionClass(el, leaveFromClass); | |
forceReflow(); | |
addTransitionClass(el, leaveActiveClass); | |
nextFrame(() => { | |
if (!el._isLeaving) { | |
return; | |
} | |
removeTransitionClass(el, leaveFromClass); | |
addTransitionClass(el, leaveToClass); | |
if (!hasExplicitCallback(onLeave)) { | |
whenTransitionEnds(el, type, leaveDuration, resolve); | |
} | |
}); | |
callHook(onLeave, [el, resolve]); | |
}, | |
onEnterCancelled(el) { | |
finishEnter(el, false); | |
callHook(onEnterCancelled, [el]); | |
}, | |
onAppearCancelled(el) { | |
finishEnter(el, true); | |
callHook(onAppearCancelled, [el]); | |
}, | |
onLeaveCancelled(el) { | |
finishLeave(el); | |
callHook(onLeaveCancelled, [el]); | |
} | |
}); | |
} | |
function normalizeDuration(duration) { | |
if (duration == null) { | |
return null; | |
} else if (shared.isObject(duration)) { | |
return [NumberOf(duration.enter), NumberOf(duration.leave)]; | |
} else { | |
const n = NumberOf(duration); | |
return [n, n]; | |
} | |
} | |
function NumberOf(val) { | |
const res = shared.toNumber(val); | |
{ | |
runtimeCore.assertNumber(res, "<transition> explicit duration"); | |
} | |
return res; | |
} | |
function addTransitionClass(el, cls) { | |
cls.split(/\s+/).forEach((c) => c && el.classList.add(c)); | |
(el._vtc || (el._vtc = /* @__PURE__ */ new Set())).add(cls); | |
} | |
function removeTransitionClass(el, cls) { | |
cls.split(/\s+/).forEach((c) => c && el.classList.remove(c)); | |
const { _vtc } = el; | |
if (_vtc) { | |
_vtc.delete(cls); | |
if (!_vtc.size) { | |
el._vtc = void 0; | |
} | |
} | |
} | |
function nextFrame(cb) { | |
requestAnimationFrame(() => { | |
requestAnimationFrame(cb); | |
}); | |
} | |
let endId = 0; | |
function whenTransitionEnds(el, expectedType, explicitTimeout, resolve) { | |
const id = el._endId = ++endId; | |
const resolveIfNotStale = () => { | |
if (id === el._endId) { | |
resolve(); | |
} | |
}; | |
if (explicitTimeout) { | |
return setTimeout(resolveIfNotStale, explicitTimeout); | |
} | |
const { type, timeout, propCount } = getTransitionInfo(el, expectedType); | |
if (!type) { | |
return resolve(); | |
} | |
const endEvent = type + "end"; | |
let ended = 0; | |
const end = () => { | |
el.removeEventListener(endEvent, onEnd); | |
resolveIfNotStale(); | |
}; | |
const onEnd = (e) => { | |
if (e.target === el && ++ended >= propCount) { | |
end(); | |
} | |
}; | |
setTimeout(() => { | |
if (ended < propCount) { | |
end(); | |
} | |
}, timeout + 1); | |
el.addEventListener(endEvent, onEnd); | |
} | |
function getTransitionInfo(el, expectedType) { | |
const styles = window.getComputedStyle(el); | |
const getStyleProperties = (key) => (styles[key] || "").split(", "); | |
const transitionDelays = getStyleProperties(`${TRANSITION}Delay`); | |
const transitionDurations = getStyleProperties(`${TRANSITION}Duration`); | |
const transitionTimeout = getTimeout(transitionDelays, transitionDurations); | |
const animationDelays = getStyleProperties(`${ANIMATION}Delay`); | |
const animationDurations = getStyleProperties(`${ANIMATION}Duration`); | |
const animationTimeout = getTimeout(animationDelays, animationDurations); | |
let type = null; | |
let timeout = 0; | |
let propCount = 0; | |
if (expectedType === TRANSITION) { | |
if (transitionTimeout > 0) { | |
type = TRANSITION; | |
timeout = transitionTimeout; | |
propCount = transitionDurations.length; | |
} | |
} else if (expectedType === ANIMATION) { | |
if (animationTimeout > 0) { | |
type = ANIMATION; | |
timeout = animationTimeout; | |
propCount = animationDurations.length; | |
} | |
} else { | |
timeout = Math.max(transitionTimeout, animationTimeout); | |
type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; | |
propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; | |
} | |
const hasTransform = type === TRANSITION && /\b(transform|all)(,|$)/.test( | |
getStyleProperties(`${TRANSITION}Property`).toString() | |
); | |
return { | |
type, | |
timeout, | |
propCount, | |
hasTransform | |
}; | |
} | |
function getTimeout(delays, durations) { | |
while (delays.length < durations.length) { | |
delays = delays.concat(delays); | |
} | |
return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i]))); | |
} | |
function toMs(s) { | |
return Number(s.slice(0, -1).replace(",", ".")) * 1e3; | |
} | |
function forceReflow() { | |
return document.body.offsetHeight; | |
} | |
const positionMap = /* @__PURE__ */ new WeakMap(); | |
const newPositionMap = /* @__PURE__ */ new WeakMap(); | |
const TransitionGroupImpl = { | |
name: "TransitionGroup", | |
props: /* @__PURE__ */ shared.extend({}, TransitionPropsValidators, { | |
tag: String, | |
moveClass: String | |
}), | |
setup(props, { slots }) { | |
const instance = runtimeCore.getCurrentInstance(); | |
const state = runtimeCore.useTransitionState(); | |
let prevChildren; | |
let children; | |
runtimeCore.onUpdated(() => { | |
if (!prevChildren.length) { | |
return; | |
} | |
const moveClass = props.moveClass || `${props.name || "v"}-move`; | |
if (!hasCSSTransform( | |
prevChildren[0].el, | |
instance.vnode.el, | |
moveClass | |
)) { | |
return; | |
} | |
prevChildren.forEach(callPendingCbs); | |
prevChildren.forEach(recordPosition); | |
const movedChildren = prevChildren.filter(applyTranslation); | |
forceReflow(); | |
movedChildren.forEach((c) => { | |
const el = c.el; | |
const style = el.style; | |
addTransitionClass(el, moveClass); | |
style.transform = style.webkitTransform = style.transitionDuration = ""; | |
const cb = el._moveCb = (e) => { | |
if (e && e.target !== el) { | |
return; | |
} | |
if (!e || /transform$/.test(e.propertyName)) { | |
el.removeEventListener("transitionend", cb); | |
el._moveCb = null; | |
removeTransitionClass(el, moveClass); | |
} | |
}; | |
el.addEventListener("transitionend", cb); | |
}); | |
}); | |
return () => { | |
const rawProps = runtimeCore.toRaw(props); | |
const cssTransitionProps = resolveTransitionProps(rawProps); | |
let tag = rawProps.tag || runtimeCore.Fragment; | |
prevChildren = children; | |
children = slots.default ? runtimeCore.getTransitionRawChildren(slots.default()) : []; | |
for (let i = 0; i < children.length; i++) { | |
const child = children[i]; | |
if (child.key != null) { | |
runtimeCore.setTransitionHooks( | |
child, | |
runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance) | |
); | |
} else { | |
runtimeCore.warn(`<TransitionGroup> children must be keyed.`); | |
} | |
} | |
if (prevChildren) { | |
for (let i = 0; i < prevChildren.length; i++) { | |
const child = prevChildren[i]; | |
runtimeCore.setTransitionHooks( | |
child, | |
runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance) | |
); | |
positionMap.set(child, child.el.getBoundingClientRect()); | |
} | |
} | |
return runtimeCore.createVNode(tag, null, children); | |
}; | |
} | |
}; | |
const removeMode = (props) => delete props.mode; | |
/* @__PURE__ */ removeMode(TransitionGroupImpl.props); | |
const TransitionGroup = TransitionGroupImpl; | |
function callPendingCbs(c) { | |
const el = c.el; | |
if (el._moveCb) { | |
el._moveCb(); | |
} | |
if (el._enterCb) { | |
el._enterCb(); | |
} | |
} | |
function recordPosition(c) { | |
newPositionMap.set(c, c.el.getBoundingClientRect()); | |
} | |
function applyTranslation(c) { | |
const oldPos = positionMap.get(c); | |
const newPos = newPositionMap.get(c); | |
const dx = oldPos.left - newPos.left; | |
const dy = oldPos.top - newPos.top; | |
if (dx || dy) { | |
const s = c.el.style; | |
s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`; | |
s.transitionDuration = "0s"; | |
return c; | |
} | |
} | |
function hasCSSTransform(el, root, moveClass) { | |
const clone = el.cloneNode(); | |
if (el._vtc) { | |
el._vtc.forEach((cls) => { | |
cls.split(/\s+/).forEach((c) => c && clone.classList.remove(c)); | |
}); | |
} | |
moveClass.split(/\s+/).forEach((c) => c && clone.classList.add(c)); | |
clone.style.display = "none"; | |
const container = root.nodeType === 1 ? root : root.parentNode; | |
container.appendChild(clone); | |
const { hasTransform } = getTransitionInfo(clone); | |
container.removeChild(clone); | |
return hasTransform; | |
} | |
const getModelAssigner = (vnode) => { | |
const fn = vnode.props["onUpdate:modelValue"] || false; | |
return shared.isArray(fn) ? (value) => shared.invokeArrayFns(fn, value) : fn; | |
}; | |
function onCompositionStart(e) { | |
e.target.composing = true; | |
} | |
function onCompositionEnd(e) { | |
const target = e.target; | |
if (target.composing) { | |
target.composing = false; | |
target.dispatchEvent(new Event("input")); | |
} | |
} | |
const vModelText = { | |
created(el, { modifiers: { lazy, trim, number } }, vnode) { | |
el._assign = getModelAssigner(vnode); | |
const castToNumber = number || vnode.props && vnode.props.type === "number"; | |
addEventListener(el, lazy ? "change" : "input", (e) => { | |
if (e.target.composing) | |
return; | |
let domValue = el.value; | |
if (trim) { | |
domValue = domValue.trim(); | |
} | |
if (castToNumber) { | |
domValue = shared.looseToNumber(domValue); | |
} | |
el._assign(domValue); | |
}); | |
if (trim) { | |
addEventListener(el, "change", () => { | |
el.value = el.value.trim(); | |
}); | |
} | |
if (!lazy) { | |
addEventListener(el, "compositionstart", onCompositionStart); | |
addEventListener(el, "compositionend", onCompositionEnd); | |
addEventListener(el, "change", onCompositionEnd); | |
} | |
}, | |
// set value on mounted so it's after min/max for type="range" | |
mounted(el, { value }) { | |
el.value = value == null ? "" : value; | |
}, | |
beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) { | |
el._assign = getModelAssigner(vnode); | |
if (el.composing) | |
return; | |
if (document.activeElement === el && el.type !== "range") { | |
if (lazy) { | |
return; | |
} | |
if (trim && el.value.trim() === value) { | |
return; | |
} | |
if ((number || el.type === "number") && shared.looseToNumber(el.value) === value) { | |
return; | |
} | |
} | |
const newValue = value == null ? "" : value; | |
if (el.value !== newValue) { | |
el.value = newValue; | |
} | |
} | |
}; | |
const vModelCheckbox = { | |
// #4096 array checkboxes need to be deep traversed | |
deep: true, | |
created(el, _, vnode) { | |
el._assign = getModelAssigner(vnode); | |
addEventListener(el, "change", () => { | |
const modelValue = el._modelValue; | |
const elementValue = getValue(el); | |
const checked = el.checked; | |
const assign = el._assign; | |
if (shared.isArray(modelValue)) { | |
const index = shared.looseIndexOf(modelValue, elementValue); | |
const found = index !== -1; | |
if (checked && !found) { | |
assign(modelValue.concat(elementValue)); | |
} else if (!checked && found) { | |
const filtered = [...modelValue]; | |
filtered.splice(index, 1); | |
assign(filtered); | |
} | |
} else if (shared.isSet(modelValue)) { | |
const cloned = new Set(modelValue); | |
if (checked) { | |
cloned.add(elementValue); | |
} else { | |
cloned.delete(elementValue); | |
} | |
assign(cloned); | |
} else { | |
assign(getCheckboxValue(el, checked)); | |
} | |
}); | |
}, | |
// set initial checked on mount to wait for true-value/false-value | |
mounted: setChecked, | |
beforeUpdate(el, binding, vnode) { | |
el._assign = getModelAssigner(vnode); | |
setChecked(el, binding, vnode); | |
} | |
}; | |
function setChecked(el, { value, oldValue }, vnode) { | |
el._modelValue = value; | |
if (shared.isArray(value)) { | |
el.checked = shared.looseIndexOf(value, vnode.props.value) > -1; | |
} else if (shared.isSet(value)) { | |
el.checked = value.has(vnode.props.value); | |
} else if (value !== oldValue) { | |
el.checked = shared.looseEqual(value, getCheckboxValue(el, true)); | |
} | |
} | |
const vModelRadio = { | |
created(el, { value }, vnode) { | |
el.checked = shared.looseEqual(value, vnode.props.value); | |
el._assign = getModelAssigner(vnode); | |
addEventListener(el, "change", () => { | |
el._assign(getValue(el)); | |
}); | |
}, | |
beforeUpdate(el, { value, oldValue }, vnode) { | |
el._assign = getModelAssigner(vnode); | |
if (value !== oldValue) { | |
el.checked = shared.looseEqual(value, vnode.props.value); | |
} | |
} | |
}; | |
const vModelSelect = { | |
// <select multiple> value need to be deep traversed | |
deep: true, | |
created(el, { value, modifiers: { number } }, vnode) { | |
const isSetModel = shared.isSet(value); | |
addEventListener(el, "change", () => { | |
const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map( | |
(o) => number ? shared.looseToNumber(getValue(o)) : getValue(o) | |
); | |
el._assign( | |
el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0] | |
); | |
}); | |
el._assign = getModelAssigner(vnode); | |
}, | |
// set value in mounted & updated because <select> relies on its children | |
// <option>s. | |
mounted(el, { value }) { | |
setSelected(el, value); | |
}, | |
beforeUpdate(el, _binding, vnode) { | |
el._assign = getModelAssigner(vnode); | |
}, | |
updated(el, { value }) { | |
setSelected(el, value); | |
} | |
}; | |
function setSelected(el, value) { | |
const isMultiple = el.multiple; | |
if (isMultiple && !shared.isArray(value) && !shared.isSet(value)) { | |
runtimeCore.warn( | |
`<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.` | |
); | |
return; | |
} | |
for (let i = 0, l = el.options.length; i < l; i++) { | |
const option = el.options[i]; | |
const optionValue = getValue(option); | |
if (isMultiple) { | |
if (shared.isArray(value)) { | |
option.selected = shared.looseIndexOf(value, optionValue) > -1; | |
} else { | |
option.selected = value.has(optionValue); | |
} | |
} else { | |
if (shared.looseEqual(getValue(option), value)) { | |
if (el.selectedIndex !== i) | |
el.selectedIndex = i; | |
return; | |
} | |
} | |
} | |
if (!isMultiple && el.selectedIndex !== -1) { | |
el.selectedIndex = -1; | |
} | |
} | |
function getValue(el) { | |
return "_value" in el ? el._value : el.value; | |
} | |
function getCheckboxValue(el, checked) { | |
const key = checked ? "_trueValue" : "_falseValue"; | |
return key in el ? el[key] : checked; | |
} | |
const vModelDynamic = { | |
created(el, binding, vnode) { | |
callModelHook(el, binding, vnode, null, "created"); | |
}, | |
mounted(el, binding, vnode) { | |
callModelHook(el, binding, vnode, null, "mounted"); | |
}, | |
beforeUpdate(el, binding, vnode, prevVNode) { | |
callModelHook(el, binding, vnode, prevVNode, "beforeUpdate"); | |
}, | |
updated(el, binding, vnode, prevVNode) { | |
callModelHook(el, binding, vnode, prevVNode, "updated"); | |
} | |
}; | |
function resolveDynamicModel(tagName, type) { | |
switch (tagName) { | |
case "SELECT": | |
return vModelSelect; | |
case "TEXTAREA": | |
return vModelText; | |
default: | |
switch (type) { | |
case "checkbox": | |
return vModelCheckbox; | |
case "radio": | |
return vModelRadio; | |
default: | |
return vModelText; | |
} | |
} | |
} | |
function callModelHook(el, binding, vnode, prevVNode, hook) { | |
const modelToUse = resolveDynamicModel( | |
el.tagName, | |
vnode.props && vnode.props.type | |
); | |
const fn = modelToUse[hook]; | |
fn && fn(el, binding, vnode, prevVNode); | |
} | |
function initVModelForSSR() { | |
vModelText.getSSRProps = ({ value }) => ({ value }); | |
vModelRadio.getSSRProps = ({ value }, vnode) => { | |
if (vnode.props && shared.looseEqual(vnode.props.value, value)) { | |
return { checked: true }; | |
} | |
}; | |
vModelCheckbox.getSSRProps = ({ value }, vnode) => { | |
if (shared.isArray(value)) { | |
if (vnode.props && shared.looseIndexOf(value, vnode.props.value) > -1) { | |
return { checked: true }; | |
} | |
} else if (shared.isSet(value)) { | |
if (vnode.props && value.has(vnode.props.value)) { | |
return { checked: true }; | |
} | |
} else if (value) { | |
return { checked: true }; | |
} | |
}; | |
vModelDynamic.getSSRProps = (binding, vnode) => { | |
if (typeof vnode.type !== "string") { | |
return; | |
} | |
const modelToUse = resolveDynamicModel( | |
// resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase | |
vnode.type.toUpperCase(), | |
vnode.props && vnode.props.type | |
); | |
if (modelToUse.getSSRProps) { | |
return modelToUse.getSSRProps(binding, vnode); | |
} | |
}; | |
} | |
const systemModifiers = ["ctrl", "shift", "alt", "meta"]; | |
const modifierGuards = { | |
stop: (e) => e.stopPropagation(), | |
prevent: (e) => e.preventDefault(), | |
self: (e) => e.target !== e.currentTarget, | |
ctrl: (e) => !e.ctrlKey, | |
shift: (e) => !e.shiftKey, | |
alt: (e) => !e.altKey, | |
meta: (e) => !e.metaKey, | |
left: (e) => "button" in e && e.button !== 0, | |
middle: (e) => "button" in e && e.button !== 1, | |
right: (e) => "button" in e && e.button !== 2, | |
exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m)) | |
}; | |
const withModifiers = (fn, modifiers) => { | |
return (event, ...args) => { | |
for (let i = 0; i < modifiers.length; i++) { | |
const guard = modifierGuards[modifiers[i]]; | |
if (guard && guard(event, modifiers)) | |
return; | |
} | |
return fn(event, ...args); | |
}; | |
}; | |
const keyNames = { | |
esc: "escape", | |
space: " ", | |
up: "arrow-up", | |
left: "arrow-left", | |
right: "arrow-right", | |
down: "arrow-down", | |
delete: "backspace" | |
}; | |
const withKeys = (fn, modifiers) => { | |
return (event) => { | |
if (!("key" in event)) { | |
return; | |
} | |
const eventKey = shared.hyphenate(event.key); | |
if (modifiers.some((k) => k === eventKey || keyNames[k] === eventKey)) { | |
return fn(event); | |
} | |
}; | |
}; | |
const vShow = { | |
beforeMount(el, { value }, { transition }) { | |
el._vod = el.style.display === "none" ? "" : el.style.display; | |
if (transition && value) { | |
transition.beforeEnter(el); | |
} else { | |
setDisplay(el, value); | |
} | |
}, | |
mounted(el, { value }, { transition }) { | |
if (transition && value) { | |
transition.enter(el); | |
} | |
}, | |
updated(el, { value, oldValue }, { transition }) { | |
if (!value === !oldValue) | |
return; | |
if (transition) { | |
if (value) { | |
transition.beforeEnter(el); | |
setDisplay(el, true); | |
transition.enter(el); | |
} else { | |
transition.leave(el, () => { | |
setDisplay(el, false); | |
}); | |
} | |
} else { | |
setDisplay(el, value); | |
} | |
}, | |
beforeUnmount(el, { value }) { | |
setDisplay(el, value); | |
} | |
}; | |
function setDisplay(el, value) { | |
el.style.display = value ? el._vod : "none"; | |
} | |
function initVShowForSSR() { | |
vShow.getSSRProps = ({ value }) => { | |
if (!value) { | |
return { style: { display: "none" } }; | |
} | |
}; | |
} | |
const rendererOptions = /* @__PURE__ */ shared.extend({ patchProp }, nodeOps); | |
let renderer; | |
let enabledHydration = false; | |
function ensureRenderer() { | |
return renderer || (renderer = runtimeCore.createRenderer(rendererOptions)); | |
} | |
function ensureHydrationRenderer() { | |
renderer = enabledHydration ? renderer : runtimeCore.createHydrationRenderer(rendererOptions); | |
enabledHydration = true; | |
return renderer; | |
} | |
const render = (...args) => { | |
ensureRenderer().render(...args); | |
}; | |
const hydrate = (...args) => { | |
ensureHydrationRenderer().hydrate(...args); | |
}; | |
const createApp = (...args) => { | |
const app = ensureRenderer().createApp(...args); | |
{ | |
injectNativeTagCheck(app); | |
injectCompilerOptionsCheck(app); | |
} | |
const { mount } = app; | |
app.mount = (containerOrSelector) => { | |
const container = normalizeContainer(containerOrSelector); | |
if (!container) | |
return; | |
const component = app._component; | |
if (!shared.isFunction(component) && !component.render && !component.template) { | |
component.template = container.innerHTML; | |
} | |
container.innerHTML = ""; | |
const proxy = mount(container, false, container instanceof SVGElement); | |
if (container instanceof Element) { | |
container.removeAttribute("v-cloak"); | |
container.setAttribute("data-v-app", ""); | |
} | |
return proxy; | |
}; | |
return app; | |
}; | |
const createSSRApp = (...args) => { | |
const app = ensureHydrationRenderer().createApp(...args); | |
{ | |
injectNativeTagCheck(app); | |
injectCompilerOptionsCheck(app); | |
} | |
const { mount } = app; | |
app.mount = (containerOrSelector) => { | |
const container = normalizeContainer(containerOrSelector); | |
if (container) { | |
return mount(container, true, container instanceof SVGElement); | |
} | |
}; | |
return app; | |
}; | |
function injectNativeTagCheck(app) { | |
Object.defineProperty(app.config, "isNativeTag", { | |
value: (tag) => shared.isHTMLTag(tag) || shared.isSVGTag(tag), | |
writable: false | |
}); | |
} | |
function injectCompilerOptionsCheck(app) { | |
if (runtimeCore.isRuntimeOnly()) { | |
const isCustomElement = app.config.isCustomElement; | |
Object.defineProperty(app.config, "isCustomElement", { | |
get() { | |
return isCustomElement; | |
}, | |
set() { | |
runtimeCore.warn( | |
`The \`isCustomElement\` config option is deprecated. Use \`compilerOptions.isCustomElement\` instead.` | |
); | |
} | |
}); | |
const compilerOptions = app.config.compilerOptions; | |
const msg = `The \`compilerOptions\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka "full build"). Since you are using the runtime-only build, \`compilerOptions\` must be passed to \`@vue/compiler-dom\` in the build setup instead. | |
- For vue-loader: pass it via vue-loader's \`compilerOptions\` loader option. | |
- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader | |
- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`; | |
Object.defineProperty(app.config, "compilerOptions", { | |
get() { | |
runtimeCore.warn(msg); | |
return compilerOptions; | |
}, | |
set() { | |
runtimeCore.warn(msg); | |
} | |
}); | |
} | |
} | |
function normalizeContainer(container) { | |
if (shared.isString(container)) { | |
const res = document.querySelector(container); | |
if (!res) { | |
runtimeCore.warn( | |
`Failed to mount app: mount target selector "${container}" returned null.` | |
); | |
} | |
return res; | |
} | |
if (window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === "closed") { | |
runtimeCore.warn( | |
`mounting on a ShadowRoot with \`{mode: "closed"}\` may lead to unpredictable bugs` | |
); | |
} | |
return container; | |
} | |
let ssrDirectiveInitialized = false; | |
const initDirectivesForSSR = () => { | |
if (!ssrDirectiveInitialized) { | |
ssrDirectiveInitialized = true; | |
initVModelForSSR(); | |
initVShowForSSR(); | |
} | |
} ; | |
exports.Transition = Transition; | |
exports.TransitionGroup = TransitionGroup; | |
exports.VueElement = VueElement; | |
exports.createApp = createApp; | |
exports.createSSRApp = createSSRApp; | |
exports.defineCustomElement = defineCustomElement; | |
exports.defineSSRCustomElement = defineSSRCustomElement; | |
exports.hydrate = hydrate; | |
exports.initDirectivesForSSR = initDirectivesForSSR; | |
exports.render = render; | |
exports.useCssModule = useCssModule; | |
exports.useCssVars = useCssVars; | |
exports.vModelCheckbox = vModelCheckbox; | |
exports.vModelDynamic = vModelDynamic; | |
exports.vModelRadio = vModelRadio; | |
exports.vModelSelect = vModelSelect; | |
exports.vModelText = vModelText; | |
exports.vShow = vShow; | |
exports.withKeys = withKeys; | |
exports.withModifiers = withModifiers; | |
Object.keys(runtimeCore).forEach(function (k) { | |
if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = runtimeCore[k]; | |
}); | |