🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

@stencil/store

Package Overview
Dependencies
Maintainers
5
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stencil/store - npm Package Compare versions

Comparing version
2.2.1
to
2.2.2
+109
-21
dist/index.cjs
'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,

@@ -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);
{
"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"
}