@stencil/store
Advanced tools
+109
-21
| 'use strict'; | ||
| var core = require('@stencil/core'); | ||
| var StencilCore = require('@stencil/core'); | ||
| function _interopNamespaceDefault(e) { | ||
| var n = Object.create(null); | ||
| if (e) { | ||
| Object.keys(e).forEach(function (k) { | ||
| if (k !== 'default') { | ||
| var d = Object.getOwnPropertyDescriptor(e, k); | ||
| Object.defineProperty(n, k, d.get ? d : { | ||
| enumerable: true, | ||
| get: function () { return e[k]; } | ||
| }); | ||
| } | ||
| }); | ||
| } | ||
| n.default = e; | ||
| return Object.freeze(n); | ||
| } | ||
| var StencilCore__namespace = /*#__PURE__*/_interopNamespaceDefault(StencilCore); | ||
| const appendToMap = (map, propName, value) => { | ||
| const items = map.get(propName); | ||
| if (!items) { | ||
| map.set(propName, [value]); | ||
| let refs = map.get(propName); | ||
| if (!refs) { | ||
| refs = []; | ||
| map.set(propName, refs); | ||
| } | ||
| else if (!items.includes(value)) { | ||
| items.push(value); | ||
| if (!refs.some((ref) => ref.deref() === value)) { | ||
| refs.push(new WeakRef(value)); | ||
| } | ||
@@ -39,7 +59,14 @@ }; | ||
| for (let key of map.keys()) { | ||
| map.set(key, map.get(key).filter(isConnected)); | ||
| const refs = map.get(key).filter((ref) => { | ||
| const elm = ref.deref(); | ||
| return elm && isConnected(elm); | ||
| }); | ||
| map.set(key, refs); | ||
| } | ||
| }, 2_000); | ||
| const core = StencilCore__namespace; | ||
| const forceUpdate = core.forceUpdate; | ||
| const getRenderingRef = core.getRenderingRef; | ||
| const stencilSubscription = () => { | ||
| if (typeof core.getRenderingRef !== 'function') { | ||
| if (typeof getRenderingRef !== 'function' || typeof forceUpdate !== 'function') { | ||
| // If we are not in a stencil project, we do nothing. | ||
@@ -49,2 +76,4 @@ // This function is not really exported by @stencil/core. | ||
| } | ||
| const ensureForceUpdate = forceUpdate; | ||
| const ensureGetRenderingRef = getRenderingRef; | ||
| const elmsToUpdate = new Map(); | ||
@@ -54,3 +83,3 @@ return { | ||
| get: (propName) => { | ||
| const elm = core.getRenderingRef(); | ||
| const elm = ensureGetRenderingRef(); | ||
| if (elm) { | ||
@@ -61,5 +90,11 @@ appendToMap(elmsToUpdate, propName, elm); | ||
| set: (propName) => { | ||
| const elements = elmsToUpdate.get(propName); | ||
| if (elements) { | ||
| elmsToUpdate.set(propName, elements.filter(core.forceUpdate)); | ||
| const refs = elmsToUpdate.get(propName); | ||
| if (refs) { | ||
| const nextRefs = refs.filter((ref) => { | ||
| const elm = ref.deref(); | ||
| if (!elm) | ||
| return false; | ||
| return ensureForceUpdate(elm); | ||
| }); | ||
| elmsToUpdate.set(propName, nextRefs); | ||
| } | ||
@@ -69,3 +104,9 @@ cleanupElements(elmsToUpdate); | ||
| reset: () => { | ||
| elmsToUpdate.forEach((elms) => elms.forEach(core.forceUpdate)); | ||
| elmsToUpdate.forEach((refs) => { | ||
| refs.forEach((ref) => { | ||
| const elm = ref.deref(); | ||
| if (elm) | ||
| ensureForceUpdate(elm); | ||
| }); | ||
| }); | ||
| cleanupElements(elmsToUpdate); | ||
@@ -78,4 +119,7 @@ }, | ||
| const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => { | ||
| const unwrappedState = unwrap(defaultState); | ||
| let states = new Map(Object.entries(unwrappedState ?? {})); | ||
| const resolveDefaultState = () => (unwrap(defaultState) ?? {}); | ||
| const initialState = resolveDefaultState(); | ||
| let states = new Map(Object.entries(initialState)); | ||
| const proxyAvailable = typeof Proxy !== 'undefined'; | ||
| const plainState = proxyAvailable ? null : {}; | ||
| const handlers = { | ||
@@ -92,3 +136,6 @@ dispose: [], | ||
| // otherwise, the state won't be properly reset | ||
| states = new Map(Object.entries(unwrap(defaultState) ?? {})); | ||
| states = new Map(Object.entries(resolveDefaultState())); | ||
| if (!proxyAvailable) { | ||
| syncPlainStateKeys(); | ||
| } | ||
| handlers.reset.forEach((cb) => cb()); | ||
@@ -110,8 +157,10 @@ }; | ||
| states.set(propName, value); | ||
| if (!proxyAvailable) { | ||
| ensurePlainProperty(propName); | ||
| } | ||
| handlers.set.forEach((cb) => cb(propName, value, oldValue)); | ||
| } | ||
| }; | ||
| const state = (typeof Proxy === 'undefined' | ||
| ? {} | ||
| : new Proxy(unwrappedState, { | ||
| const state = (proxyAvailable | ||
| ? new Proxy(initialState, { | ||
| get(_, propName) { | ||
@@ -136,3 +185,7 @@ return get(propName); | ||
| }, | ||
| })); | ||
| }) | ||
| : (() => { | ||
| syncPlainStateKeys(); | ||
| return plainState; | ||
| })()); | ||
| const on = (eventName, callback) => { | ||
@@ -150,3 +203,6 @@ handlers[eventName].push(callback); | ||
| }; | ||
| const resetHandler = () => cb(unwrap(defaultState)[propName]); | ||
| const resetHandler = () => { | ||
| const snapshot = resolveDefaultState(); | ||
| cb(snapshot[propName]); | ||
| }; | ||
| // Register the handlers | ||
@@ -194,2 +250,34 @@ const unSet = on('set', setHandler); | ||
| }; | ||
| function ensurePlainProperty(key) { | ||
| if (proxyAvailable || !plainState) { | ||
| return; | ||
| } | ||
| if (Object.prototype.hasOwnProperty.call(plainState, key)) { | ||
| return; | ||
| } | ||
| Object.defineProperty(plainState, key, { | ||
| configurable: true, | ||
| enumerable: true, | ||
| get() { | ||
| return get(key); | ||
| }, | ||
| set(value) { | ||
| set(key, value); | ||
| }, | ||
| }); | ||
| } | ||
| function syncPlainStateKeys() { | ||
| if (proxyAvailable || !plainState) { | ||
| return; | ||
| } | ||
| const knownKeys = new Set(states.keys()); | ||
| for (const key of Object.keys(plainState)) { | ||
| if (!knownKeys.has(key)) { | ||
| delete plainState[key]; | ||
| } | ||
| } | ||
| for (const key of knownKeys) { | ||
| ensurePlainProperty(key); | ||
| } | ||
| } | ||
| return { | ||
@@ -196,0 +284,0 @@ state, |
+90
-21
@@ -1,10 +0,11 @@ | ||
| import { getRenderingRef, forceUpdate } from '@stencil/core'; | ||
| import * as StencilCore from '@stencil/core'; | ||
| const appendToMap = (map, propName, value) => { | ||
| const items = map.get(propName); | ||
| if (!items) { | ||
| map.set(propName, [value]); | ||
| let refs = map.get(propName); | ||
| if (!refs) { | ||
| refs = []; | ||
| map.set(propName, refs); | ||
| } | ||
| else if (!items.includes(value)) { | ||
| items.push(value); | ||
| if (!refs.some((ref) => ref.deref() === value)) { | ||
| refs.push(new WeakRef(value)); | ||
| } | ||
@@ -37,7 +38,14 @@ }; | ||
| for (let key of map.keys()) { | ||
| map.set(key, map.get(key).filter(isConnected)); | ||
| const refs = map.get(key).filter((ref) => { | ||
| const elm = ref.deref(); | ||
| return elm && isConnected(elm); | ||
| }); | ||
| map.set(key, refs); | ||
| } | ||
| }, 2_000); | ||
| const core = StencilCore; | ||
| const forceUpdate = core.forceUpdate; | ||
| const getRenderingRef = core.getRenderingRef; | ||
| const stencilSubscription = () => { | ||
| if (typeof getRenderingRef !== 'function') { | ||
| if (typeof getRenderingRef !== 'function' || typeof forceUpdate !== 'function') { | ||
| // If we are not in a stencil project, we do nothing. | ||
@@ -47,2 +55,4 @@ // This function is not really exported by @stencil/core. | ||
| } | ||
| const ensureForceUpdate = forceUpdate; | ||
| const ensureGetRenderingRef = getRenderingRef; | ||
| const elmsToUpdate = new Map(); | ||
@@ -52,3 +62,3 @@ return { | ||
| get: (propName) => { | ||
| const elm = getRenderingRef(); | ||
| const elm = ensureGetRenderingRef(); | ||
| if (elm) { | ||
@@ -59,5 +69,11 @@ appendToMap(elmsToUpdate, propName, elm); | ||
| set: (propName) => { | ||
| const elements = elmsToUpdate.get(propName); | ||
| if (elements) { | ||
| elmsToUpdate.set(propName, elements.filter(forceUpdate)); | ||
| const refs = elmsToUpdate.get(propName); | ||
| if (refs) { | ||
| const nextRefs = refs.filter((ref) => { | ||
| const elm = ref.deref(); | ||
| if (!elm) | ||
| return false; | ||
| return ensureForceUpdate(elm); | ||
| }); | ||
| elmsToUpdate.set(propName, nextRefs); | ||
| } | ||
@@ -67,3 +83,9 @@ cleanupElements(elmsToUpdate); | ||
| reset: () => { | ||
| elmsToUpdate.forEach((elms) => elms.forEach(forceUpdate)); | ||
| elmsToUpdate.forEach((refs) => { | ||
| refs.forEach((ref) => { | ||
| const elm = ref.deref(); | ||
| if (elm) | ||
| ensureForceUpdate(elm); | ||
| }); | ||
| }); | ||
| cleanupElements(elmsToUpdate); | ||
@@ -76,4 +98,7 @@ }, | ||
| const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => { | ||
| const unwrappedState = unwrap(defaultState); | ||
| let states = new Map(Object.entries(unwrappedState ?? {})); | ||
| const resolveDefaultState = () => (unwrap(defaultState) ?? {}); | ||
| const initialState = resolveDefaultState(); | ||
| let states = new Map(Object.entries(initialState)); | ||
| const proxyAvailable = typeof Proxy !== 'undefined'; | ||
| const plainState = proxyAvailable ? null : {}; | ||
| const handlers = { | ||
@@ -90,3 +115,6 @@ dispose: [], | ||
| // otherwise, the state won't be properly reset | ||
| states = new Map(Object.entries(unwrap(defaultState) ?? {})); | ||
| states = new Map(Object.entries(resolveDefaultState())); | ||
| if (!proxyAvailable) { | ||
| syncPlainStateKeys(); | ||
| } | ||
| handlers.reset.forEach((cb) => cb()); | ||
@@ -108,8 +136,10 @@ }; | ||
| states.set(propName, value); | ||
| if (!proxyAvailable) { | ||
| ensurePlainProperty(propName); | ||
| } | ||
| handlers.set.forEach((cb) => cb(propName, value, oldValue)); | ||
| } | ||
| }; | ||
| const state = (typeof Proxy === 'undefined' | ||
| ? {} | ||
| : new Proxy(unwrappedState, { | ||
| const state = (proxyAvailable | ||
| ? new Proxy(initialState, { | ||
| get(_, propName) { | ||
@@ -134,3 +164,7 @@ return get(propName); | ||
| }, | ||
| })); | ||
| }) | ||
| : (() => { | ||
| syncPlainStateKeys(); | ||
| return plainState; | ||
| })()); | ||
| const on = (eventName, callback) => { | ||
@@ -148,3 +182,6 @@ handlers[eventName].push(callback); | ||
| }; | ||
| const resetHandler = () => cb(unwrap(defaultState)[propName]); | ||
| const resetHandler = () => { | ||
| const snapshot = resolveDefaultState(); | ||
| cb(snapshot[propName]); | ||
| }; | ||
| // Register the handlers | ||
@@ -192,2 +229,34 @@ const unSet = on('set', setHandler); | ||
| }; | ||
| function ensurePlainProperty(key) { | ||
| if (proxyAvailable || !plainState) { | ||
| return; | ||
| } | ||
| if (Object.prototype.hasOwnProperty.call(plainState, key)) { | ||
| return; | ||
| } | ||
| Object.defineProperty(plainState, key, { | ||
| configurable: true, | ||
| enumerable: true, | ||
| get() { | ||
| return get(key); | ||
| }, | ||
| set(value) { | ||
| set(key, value); | ||
| }, | ||
| }); | ||
| } | ||
| function syncPlainStateKeys() { | ||
| if (proxyAvailable || !plainState) { | ||
| return; | ||
| } | ||
| const knownKeys = new Set(states.keys()); | ||
| for (const key of Object.keys(plainState)) { | ||
| if (!knownKeys.has(key)) { | ||
| delete plainState[key]; | ||
| } | ||
| } | ||
| for (const key of knownKeys) { | ||
| ensurePlainProperty(key); | ||
| } | ||
| } | ||
| return { | ||
@@ -194,0 +263,0 @@ state, |
+1
-1
@@ -1,2 +0,2 @@ | ||
| export declare const appendToMap: <K, V>(map: Map<K, V[]>, propName: K, value: V) => void; | ||
| export declare const appendToMap: <K, V extends Object>(map: Map<K, WeakRef<V>[]>, propName: K, value: V) => void; | ||
| export declare const debounce: <T extends (...args: any[]) => any>(fn: T, ms: number) => ((...args: Parameters<T>) => void); |
+14
-13
| { | ||
| "name": "@stencil/store", | ||
| "author": "StencilJS Team", | ||
| "version": "2.2.1", | ||
| "version": "2.2.2", | ||
| "description": "Store is a lightweight shared state library by the StencilJS core team. Implements a simple key/value map that efficiently re-renders components when necessary.", | ||
@@ -36,7 +36,7 @@ "license": "MIT", | ||
| "scripts": { | ||
| "build": "run-s build.*", | ||
| "build.clean": "rm -rf dist", | ||
| "build": "run-s build.clean build.rollup", | ||
| "build.clean": "rimraf dist", | ||
| "build.rollup": "rollup -c rollup.config.js", | ||
| "prettier": "npm run prettier.base -- --write", | ||
| "prettier.base": "prettier --cache 'src/**/*.ts'", | ||
| "prettier.base": "prettier --cache \"src/**/*.ts\"", | ||
| "prettier.dry-run": "npm run prettier.base -- --list-different", | ||
@@ -57,14 +57,15 @@ "release": "np", | ||
| "@ionic/prettier-config": "^4.0.0", | ||
| "@rollup/plugin-typescript": "^12.1.2", | ||
| "@stencil/core": "^4.27.1", | ||
| "@types/node": "^24.0.3", | ||
| "@vitest/coverage-v8": "^3.0.7", | ||
| "@rollup/plugin-typescript": "^12.3.0", | ||
| "@stencil/core": "^4.38.2", | ||
| "@types/node": "^24.9.2", | ||
| "@vitest/coverage-v8": "^4.0.5", | ||
| "np": "^10.2.0", | ||
| "npm-run-all2": "^8.0.1", | ||
| "prettier": "^3.5.2", | ||
| "rollup": "^4.34.8", | ||
| "typescript": "~5.9.2", | ||
| "vitest": "^3.0.7" | ||
| "npm-run-all2": "^8.0.4", | ||
| "prettier": "^3.6.2", | ||
| "rimraf": "^6.0.1", | ||
| "rollup": "^4.52.5", | ||
| "typescript": "~5.9.3", | ||
| "vitest": "^4.0.5" | ||
| }, | ||
| "prettier": "@ionic/prettier-config" | ||
| } |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
32408
17.84%713
27.78%12
9.09%