Skip to content

Commit

Permalink
Alpine 3.5.1
Browse files Browse the repository at this point in the history
  • Loading branch information
bep committed Nov 16, 2021
1 parent d49f875 commit 7c4d83e
Show file tree
Hide file tree
Showing 20 changed files with 747 additions and 246 deletions.
124 changes: 88 additions & 36 deletions alpinejs/packages/alpinejs/dist/cdn.js
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,24 @@
};
}

// 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;
Expand All @@ -393,7 +411,7 @@
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) {
Expand All @@ -404,58 +422,56 @@
};
}
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);
}
} else {
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-";
Expand Down Expand Up @@ -911,7 +927,11 @@ Expression: "${expression}"
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) => {
Expand Down Expand Up @@ -1109,15 +1129,17 @@ Expression: "${expression}"
if (typeof value === "object" && value !== null && value.hasOwnProperty("init") && typeof value.init === "function") {
stores[name].init();
}
initInterceptors(stores[name]);
}
function getStores() {
return stores;
}

// 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;
Expand Down Expand Up @@ -1184,16 +1206,18 @@ Expression: "${expression}"
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,
Expand Down Expand Up @@ -1926,6 +1950,11 @@ Expression: "${expression}"
// 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));

Expand Down Expand Up @@ -2124,6 +2153,8 @@ Expression: "${expression}"
return;
if (el.offsetWidth < 1 && el.offsetHeight < 1)
return;
if (el._x_isShown === false)
return;
next(e);
});
}
Expand Down Expand Up @@ -2239,6 +2270,18 @@ Expression: "${expression}"
}});
});
cleanup2(() => 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(/\./))
Expand Down Expand Up @@ -2353,11 +2396,18 @@ Expression: "${expression}"
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);
Expand All @@ -2379,6 +2429,8 @@ Expression: "${expression}"
let dataProviderContext = {};
injectDataProviders(dataProviderContext, magicContext);
let data2 = evaluate(el, expression, {scope: dataProviderContext});
if (data2 === void 0)
data2 = {};
let cleanup22 = injectMagics(data2, el).cleanup;
let reactiveData = reactive(data2);
initInterceptors(reactiveData);
Expand Down
6 changes: 3 additions & 3 deletions alpinejs/packages/alpinejs/dist/cdn.min.js

Large diffs are not rendered by default.

Loading

0 comments on commit 7c4d83e

Please sign in to comment.