diff options
Diffstat (limited to 'alpinejs/packages/alpinejs/dist/module.cjs.js')
-rw-r--r-- | alpinejs/packages/alpinejs/dist/module.cjs.js | 124 |
1 files changed, 88 insertions, 36 deletions
diff --git a/alpinejs/packages/alpinejs/dist/module.cjs.js b/alpinejs/packages/alpinejs/dist/module.cjs.js index d77e293..dd47192 100644 --- a/alpinejs/packages/alpinejs/dist/module.cjs.js +++ b/alpinejs/packages/alpinejs/dist/module.cjs.js @@ -1637,6 +1637,24 @@ function injectMagics(obj, el) { }; } +// packages/alpinejs/src/utils/error.js +function tryCatch(el, expression, callback, ...args) { + try { + return callback(...args); + } catch (e) { + handleError(e, el, expression); + } +} +function handleError(error2, el, expression = void 0) { + Object.assign(error2, {el, expression}); + console.warn(`Alpine Expression Error: ${error2.message} + +${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); + setTimeout(() => { + throw error2; + }, 0); +} + // packages/alpinejs/src/evaluator.js function evaluate(el, expression, extras = {}) { let result; @@ -1658,7 +1676,7 @@ function normalEvaluator(el, expression) { if (typeof expression === "function") { return generateEvaluatorFromFunction(dataStack, expression); } - let evaluator = generateEvaluatorFromString(dataStack, expression); + let evaluator = generateEvaluatorFromString(dataStack, expression, el); return tryCatch.bind(null, el, expression, evaluator); } function generateEvaluatorFromFunction(dataStack, func) { @@ -1669,39 +1687,49 @@ function generateEvaluatorFromFunction(dataStack, func) { }; } var evaluatorMemo = {}; -function generateFunctionFromString(expression) { +function generateFunctionFromString(expression, el) { if (evaluatorMemo[expression]) { return evaluatorMemo[expression]; } let AsyncFunction = Object.getPrototypeOf(async function() { }).constructor; - let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression) || /^(let|const)/.test(expression) ? `(() => { ${expression} })()` : expression; - let func = new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`); + let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression) || /^(let|const)\s/.test(expression) ? `(() => { ${expression} })()` : expression; + const safeAsyncFunction = () => { + try { + return new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`); + } catch (error2) { + handleError(error2, el, expression); + return Promise.resolve(); + } + }; + let func = safeAsyncFunction(); evaluatorMemo[expression] = func; return func; } -function generateEvaluatorFromString(dataStack, expression) { - let func = generateFunctionFromString(expression); +function generateEvaluatorFromString(dataStack, expression, el) { + let func = generateFunctionFromString(expression, el); return (receiver = () => { }, {scope = {}, params = []} = {}) => { func.result = void 0; func.finished = false; let completeScope = mergeProxies([scope, ...dataStack]); - let promise = func(func, completeScope); - if (func.finished) { - runIfTypeOfFunction(receiver, func.result, completeScope, params); - } else { - promise.then((result) => { - runIfTypeOfFunction(receiver, result, completeScope, params); - }); + if (typeof func === "function") { + let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression)); + if (func.finished) { + runIfTypeOfFunction(receiver, func.result, completeScope, params, el); + } else { + promise.then((result) => { + runIfTypeOfFunction(receiver, result, completeScope, params, el); + }).catch((error2) => handleError(error2, el, expression)); + } } }; } -function runIfTypeOfFunction(receiver, value, scope, params) { +function runIfTypeOfFunction(receiver, value, scope, params, el) { if (typeof value === "function") { let result = value.apply(scope, params); if (result instanceof Promise) { - result.then((i) => runIfTypeOfFunction(receiver, i, scope, params)); + result.then((i) => runIfTypeOfFunction(receiver, i, scope, params)).catch((error2) => handleError(error2, el, value)); } else { receiver(result); } @@ -1709,18 +1737,6 @@ function runIfTypeOfFunction(receiver, value, scope, params) { receiver(value); } } -function tryCatch(el, expression, callback, ...args) { - try { - return callback(...args); - } catch (e) { - console.warn(`Alpine Expression Error: ${e.message} - -Expression: "${expression}" - -`, el); - throw e; - } -} // packages/alpinejs/src/directives.js var prefixAsString = "x-"; @@ -2176,7 +2192,11 @@ window.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value document.visibilityState === "visible" ? requestAnimationFrame(show) : setTimeout(show); }; if (value) { - el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow(); + if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) { + el._x_transition.enter && (Object.entries(el._x_transition.enter.during).length || Object.entries(el._x_transition.enter.start).length || Object.entries(el._x_transition.enter.end).length) ? el._x_transition.in(show) : clickAwayCompatibleShow(); + } else { + el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow(); + } return; } el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => { @@ -2374,6 +2394,7 @@ function store(name, value) { if (typeof value === "object" && value !== null && value.hasOwnProperty("init") && typeof value.init === "function") { stores[name].init(); } + initInterceptors(stores[name]); } function getStores() { return stores; @@ -2381,8 +2402,9 @@ function getStores() { // packages/alpinejs/src/clone.js var isCloning = false; -function skipDuringClone(callback) { - return (...args) => isCloning || callback(...args); +function skipDuringClone(callback, fallback = () => { +}) { + return (...args) => isCloning ? fallback(...args) : callback(...args); } function clone(oldEl, newEl) { newEl._x_dataStack = oldEl._x_dataStack; @@ -2449,16 +2471,18 @@ var Alpine = { get raw() { return raw; }, - version: "3.4.2", + version: "3.5.1", flushAndStopDeferringMutations, disableEffectScheduling, stopObservingMutations, setReactivityEngine, + skipDuringClone, addRootSelector, deferMutations, mapAttributes, evaluateLater, setEvaluator, + mergeProxies, destroyTree, closestRoot, interceptor, @@ -2515,6 +2539,11 @@ magic("watch", (el) => (key, callback) => { // packages/alpinejs/src/magics/$store.js magic("store", getStores); +// packages/alpinejs/src/magics/$data.js +magic("data", (el) => { + return mergeProxies(closestDataStack(el)); +}); + // packages/alpinejs/src/magics/$root.js magic("root", (el) => closestRoot(el)); @@ -2713,6 +2742,8 @@ function on(el, event, modifiers, callback) { return; if (el.offsetWidth < 1 && el.offsetHeight < 1) return; + if (el._x_isShown === false) + return; next(e); }); } @@ -2828,6 +2859,18 @@ directive("model", (el, {modifiers, expression}, {effect: effect3, cleanup}) => }}); }); cleanup(() => removeListener()); + let evaluateSetModel = evaluateLater(el, `${expression} = __placeholder`); + el._x_model = { + get() { + let result; + evaluate2((value) => result = value); + return result; + }, + set(value) { + evaluateSetModel(() => { + }, {scope: {__placeholder: value}}); + } + }; el._x_forceModelUpdate = () => { evaluate2((value) => { if (value === void 0 && expression.match(/\./)) @@ -2942,11 +2985,18 @@ function applyBindingsObject(el, expression, original, effect3) { cleanupRunners.pop()(); getBindings((bindings) => { let attributes = Object.entries(bindings).map(([name, value]) => ({name, value})); - attributesOnly(attributes).forEach(({name, value}, index) => { - attributes[index] = { - name: `x-bind:${name}`, - value: `"${value}"` - }; + attributes = attributes.filter((attr) => { + return !(typeof attr.value === "object" && !Array.isArray(attr.value) && attr.value !== null); + }); + let staticAttributes = attributesOnly(attributes); + attributes = attributes.map((attribute) => { + if (staticAttributes.find((attr) => attr.name === attribute.name)) { + return { + name: `x-bind:${attribute.name}`, + value: `"${attribute.value}"` + }; + } + return attribute; }); directives(el, attributes, original).map((handle) => { cleanupRunners.push(handle.runCleanups); @@ -2968,6 +3018,8 @@ directive("data", skipDuringClone((el, {expression}, {cleanup}) => { let dataProviderContext = {}; injectDataProviders(dataProviderContext, magicContext); let data2 = evaluate(el, expression, {scope: dataProviderContext}); + if (data2 === void 0) + data2 = {}; let cleanup2 = injectMagics(data2, el).cleanup; let reactiveData = reactive(data2); initInterceptors(reactiveData); |