Update
This commit is contained in:
@@ -5,7 +5,11 @@ const effectQueue = new Set();
|
|||||||
let isFlushing = false;
|
let isFlushing = false;
|
||||||
const MOUNTED_NODES = new WeakMap();
|
const MOUNTED_NODES = new WeakMap();
|
||||||
const reactiveCache = new WeakMap();
|
const reactiveCache = new WeakMap();
|
||||||
|
const DANGEROUS_PROTOCOLS = /^(javascript|data|vbscript):/i;
|
||||||
|
const sanitizeUrl = (url) => {
|
||||||
|
const str = String(url ?? '').trim().toLowerCase();
|
||||||
|
return DANGEROUS_PROTOCOLS.test(str) ? '#' : str;
|
||||||
|
};
|
||||||
const doc = document;
|
const doc = document;
|
||||||
const createEl = (t) => doc.createElement(t);
|
const createEl = (t) => doc.createElement(t);
|
||||||
const createText = (t) => doc.createTextNode(String(t ?? ""));
|
const createText = (t) => doc.createTextNode(String(t ?? ""));
|
||||||
@@ -61,7 +65,7 @@ const $ = (val, key = null) => {
|
|||||||
return sig;
|
return sig;
|
||||||
};
|
};
|
||||||
|
|
||||||
const $C = (fn) => {
|
const Computed = (fn) => {
|
||||||
const subs = new Set();
|
const subs = new Set();
|
||||||
let cached, dirty = true;
|
let cached, dirty = true;
|
||||||
|
|
||||||
@@ -89,7 +93,7 @@ const $C = (fn) => {
|
|||||||
return sig;
|
return sig;
|
||||||
};
|
};
|
||||||
|
|
||||||
const $O = (obj) => {
|
const Store = (obj) => {
|
||||||
if (obj === null || typeof obj !== "object" || obj._isSig) return obj;
|
if (obj === null || typeof obj !== "object" || obj._isSig) return obj;
|
||||||
if (reactiveCache.has(obj)) return reactiveCache.get(obj);
|
if (reactiveCache.has(obj)) return reactiveCache.get(obj);
|
||||||
|
|
||||||
@@ -105,7 +109,7 @@ const $O = (obj) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const value = Reflect.get(target, key);
|
const value = Reflect.get(target, key);
|
||||||
return (typeof value === "object" && value !== null) ? $O(value) : value;
|
return (typeof value === "object" && value !== null) ? Store(value) : value;
|
||||||
},
|
},
|
||||||
set(target, key, value) {
|
set(target, key, value) {
|
||||||
const prev = Reflect.get(target, key);
|
const prev = Reflect.get(target, key);
|
||||||
@@ -205,7 +209,8 @@ const Tag = (tag, props = {}, children = []) => {
|
|||||||
el[k] = !!val;
|
el[k] = !!val;
|
||||||
val ? el.setAttribute(k, "") : el.removeAttribute(k);
|
val ? el.setAttribute(k, "") : el.removeAttribute(k);
|
||||||
} else {
|
} else {
|
||||||
el.setAttribute(k, val);
|
const finalVal = (k === 'src' || k === 'href') ? sanitizeUrl(val) : val;
|
||||||
|
el.setAttribute(k, finalVal);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (typeof v === "function") {
|
if (typeof v === "function") {
|
||||||
@@ -419,7 +424,7 @@ const Mount = (component, target) => {
|
|||||||
return instance;
|
return instance;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SigPro = { $, $C, $O, untrack, Render, Effect, Watch, Tag, If, For, Router, Mount, Share, Use };
|
const SigPro = { $, Computed, Store, untrack, Render, Effect, Watch, Tag, If, For, Router, Mount, Share, Use };
|
||||||
|
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
Object.assign(window, SigPro);
|
Object.assign(window, SigPro);
|
||||||
@@ -433,5 +438,6 @@ if (typeof window !== "undefined") {
|
|||||||
window.SigPro = Object.freeze(SigPro);
|
window.SigPro = Object.freeze(SigPro);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { $, $C, $O, untrack, Render, Effect, Watch, Tag, If, For, Router, Mount, Share, Use };
|
export { $, Computed, Store, untrack, Render, Effect, Watch, Tag, If, For, Router, Mount, Share, Use };
|
||||||
|
export { Tag as jsx, Tag as jsxs, Tag as Fragment };
|
||||||
export default SigPro;
|
export default SigPro;
|
||||||
Reference in New Issue
Block a user