New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

value-enhancer

Package Overview
Dependencies
Maintainers
1
Versions
87
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

value-enhancer - npm Package Compare versions

Comparing version 1.2.1 to 1.3.0

dist/with-on-val-changed.d.ts

2

dist/value-enhancer.cjs.js

@@ -1,2 +0,2 @@

"use strict";var E=Object.defineProperty,z=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var $=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var l=(r,e,s)=>e in r?E(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s,_=(r,e)=>{for(var s in e||(e={}))$.call(e,s)&&l(r,s,e[s]);if(p)for(var s of p(e))j.call(e,s)&&l(r,s,e[s]);return r},d=(r,e)=>z(r,y(e));var u=(r,e,s)=>(l(r,typeof e!="symbol"?e+"":e,s),s);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class O{constructor(e){u(this,"_subscribers");u(this,"_bSub");u(this,"_bSubDisposer");this._bSub=e}get size(){return this._subscribers?this._subscribers.size:0}invoke(e,s){this._subscribers&&this._subscribers.forEach(i=>i(e,s))}add(e){this._bSub&&(!this._subscribers||this._subscribers.size<=0)&&(this._bSubDisposer=this._bSub()),this._subscribers||(this._subscribers=new Set),this._subscribers.add(e)}remove(e){if(this._subscribers&&this._subscribers.delete(e),this._subscribers&&this._subscribers.size<=0&&this._bSubDisposer){const s=this._bSubDisposer;this._bSubDisposer=null,s()}}clear(){if(this._subscribers&&this._subscribers.clear(),this._bSubDisposer){const e=this._bSubDisposer;this._bSubDisposer=null,e()}}destroy(){this.clear()}}class h{constructor(e,s){u(this,"_subscribers");u(this,"_value");this._value=e;let i;if(s&&(s.compare&&(this.compare=s.compare),s.beforeSubscribe)){const t=s.beforeSubscribe,b=this._setValue.bind(this);i=()=>t(b)}this._subscribers=new O(i)}_setValue(e,s){this.compare(e,this._value)||(this._value=e,this._subscribers.invoke(e,s))}get value(){return this._value}reaction(e){return this._subscribers.add(e),()=>{this._subscribers.remove(e)}}subscribe(e,s){const i=this.reaction(e);return e(this._value,s),i}destroy(){this._subscribers.destroy()}unsubscribe(e){this._subscribers.remove(e)}compare(e,s){return e===s}}class R extends h{constructor(){super(...arguments);u(this,"setValue",this._setValue)}}class S extends h{constructor(s,i,t={}){super(i(s.value),d(_({},t),{beforeSubscribe:b=>{const c=s.subscribe((a,o)=>b(i(a),o));if(t.beforeSubscribe){const a=t.beforeSubscribe(b);if(a)return()=>{c(),a()}}return c}}));u(this,"_srcValue");this._srcValue=()=>i(s.value)}get value(){if(this._subscribers.size<=0){const s=this._srcValue();return this.compare(s,this._value)?this._value:s}return this._value}}function x(r,e=i=>i,s={}){return new S(r,e,s)}class V extends h{constructor(s,i,t={}){super(i(f(s)),d(_({},t),{beforeSubscribe:b=>{let c=f(s);b(i(c));const a=s.map((n,D)=>n.reaction((m,w)=>{c=c.slice(),c[D]=m,b(i(c),w)})),o=()=>a.forEach(n=>n());if(t.beforeSubscribe){const n=t.beforeSubscribe(b);if(n)return()=>{o(),n()}}return o}}));u(this,"_srcValue");this._srcValue=()=>i(f(s))}get value(){if(this._subscribers.size<=0){const s=this._srcValue();return this.compare(s,this._value)?this._value:s}return this._value}}function f(r){return r.map(C)}function C(r){return r.value}function P(r,e=i=>i,s={}){return new V(r,e,s)}function M(r,e,s){Object.keys(e).forEach(i=>{I(r,i,e[i]),s&&s.attach(e[i])})}function I(r,e,s){return Object.defineProperties(r,{[e]:{get(){return s.value}},[`_${e}$`]:{value:s}}),r}function T(r,e,s){Object.keys(e).forEach(i=>{v(r,i,e[i]),s&&s.attach(e[i])})}function v(r,e,s){return Object.defineProperties(r,{[e]:{get(){return s.value},set(i){s.setValue(i)}},[`_${e}$`]:{value:s},[`set${U(e)}`]:{value:(i,t)=>s.setValue(i,t)}}),r}function U(r){return r[0].toUpperCase()+r.slice(1)}class q{constructor(){u(this,"vals",new Set)}attach(e){return this.vals.add(e),e}detach(e){return this.vals.delete(e),e}destroy(){this.vals.forEach(A),this.vals.clear()}}function A(r){r.destroy()}exports.CombinedVal=V;exports.DerivedVal=S;exports.ReadonlyVal=h;exports.Val=R;exports.ValManager=q;exports.bindInstance=v;exports.combine=P;exports.derive=x;exports.withReadonlyValueEnhancer=M;exports.withValueEnhancer=T;
"use strict";var $=Object.defineProperty,z=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var l=(r,e,s)=>e in r?$(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s,_=(r,e)=>{for(var s in e||(e={}))O.call(e,s)&&l(r,s,e[s]);if(V)for(var s of V(e))j.call(e,s)&&l(r,s,e[s]);return r},d=(r,e)=>z(r,C(e));var u=(r,e,s)=>(l(r,typeof e!="symbol"?e+"":e,s),s);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class y{constructor(e){u(this,"_subscribers");u(this,"_bSub");u(this,"_bSubDisposer");this._bSub=e}get size(){return this._subscribers?this._subscribers.size:0}invoke(e,s){this._subscribers&&this._subscribers.forEach(i=>i(e,s))}add(e){this._bSub&&(!this._subscribers||this._subscribers.size<=0)&&(this._bSubDisposer=this._bSub()),this._subscribers||(this._subscribers=new Set),this._subscribers.add(e)}remove(e){if(this._subscribers&&this._subscribers.delete(e),this._subscribers&&this._subscribers.size<=0&&this._bSubDisposer){const s=this._bSubDisposer;this._bSubDisposer=null,s()}}clear(){if(this._subscribers&&this._subscribers.clear(),this._bSubDisposer){const e=this._bSubDisposer;this._bSubDisposer=null,e()}}destroy(){this.clear()}}class h{constructor(e,s){u(this,"_subscribers");u(this,"_value");this._value=e;let i;if(s&&(s.compare&&(this.compare=s.compare),s.beforeSubscribe)){const t=s.beforeSubscribe,b=this._setValue.bind(this);i=()=>t(b)}this._subscribers=new y(i)}_setValue(e,s){this.compare(e,this._value)||(this._value=e,this._subscribers.invoke(e,s))}get value(){return this._value}reaction(e){return this._subscribers.add(e),()=>{this._subscribers.remove(e)}}subscribe(e,s){const i=this.reaction(e);return e(this._value,s),i}destroy(){this._subscribers.destroy()}unsubscribe(e){this._subscribers.remove(e)}compare(e,s){return e===s}}class R extends h{constructor(){super(...arguments);u(this,"setValue",this._setValue)}}class p extends h{constructor(s,i,t={}){super(i(s.value),d(_({},t),{beforeSubscribe:b=>{const c=s.subscribe((a,o)=>b(i(a),o));if(t.beforeSubscribe){const a=t.beforeSubscribe(b);if(a)return()=>{c(),a()}}return c}}));u(this,"_srcValue");this._srcValue=()=>i(s.value)}get value(){if(this._subscribers.size<=0){const s=this._srcValue();return this.compare(s,this._value)?this._value:s}return this._value}}function x(r,e=i=>i,s={}){return new p(r,e,s)}class S extends h{constructor(s,i,t={}){super(i(f(s)),d(_({},t),{beforeSubscribe:b=>{let c=f(s);b(i(c));const a=s.map((n,m)=>n.reaction((w,E)=>{c=c.slice(),c[m]=w,b(i(c),E)})),o=()=>a.forEach(n=>n());if(t.beforeSubscribe){const n=t.beforeSubscribe(b);if(n)return()=>{o(),n()}}return o}}));u(this,"_srcValue");this._srcValue=()=>i(f(s))}get value(){if(this._subscribers.size<=0){const s=this._srcValue();return this.compare(s,this._value)?this._value:s}return this._value}}function f(r){return r.map(P)}function P(r){return r.value}function g(r,e=i=>i,s={}){return new S(r,e,s)}function v(r){r.onValChanged||(r.onValChanged=M)}function M(r,e){const s=this[`_${r}$`]||this[r];if(!(s!=null&&s.reaction))throw new TypeError(`"${r}" is not related to a Val in this instance`);return s.reaction(e)}function T(r,e,s){Object.keys(e).forEach(i=>{I(r,i,e[i]),s&&s.attach(e[i])}),v(r)}function I(r,e,s){return Object.defineProperties(r,{[e]:{get(){return s.value}},[`_${e}$`]:{value:s}}),r}function U(r,e,s){Object.keys(e).forEach(i=>{D(r,i,e[i]),s&&s.attach(e[i])}),v(r)}function D(r,e,s){return Object.defineProperties(r,{[e]:{get(){return s.value},set(i){s.setValue(i)}},[`_${e}$`]:{value:s},[`set${q(e)}`]:{value:(i,t)=>s.setValue(i,t)}}),r}function q(r){return r[0].toUpperCase()+r.slice(1)}class A{constructor(){u(this,"vals",new Set)}attach(e){return this.vals.add(e),e}detach(e){return this.vals.delete(e),e}destroy(){this.vals.forEach(B),this.vals.clear()}}function B(r){r.destroy()}exports.CombinedVal=S;exports.DerivedVal=p;exports.ReadonlyVal=h;exports.Val=R;exports.ValManager=A;exports.bindInstance=D;exports.combine=g;exports.derive=x;exports.withReadonlyValueEnhancer=T;exports.withValueEnhancer=U;
//# sourceMappingURL=value-enhancer.cjs.js.map

@@ -203,2 +203,14 @@ var __defProp = Object.defineProperty;

}
function withOnValChanged(instance) {
if (!instance.onValChanged) {
instance.onValChanged = onValChanged;
}
}
function onValChanged(key, listener) {
const val = this[`_${key}$`] || this[key];
if (!(val == null ? void 0 : val.reaction)) {
throw new TypeError(`"${key}" is not related to a Val in this instance`);
}
return val.reaction(listener);
}
function withReadonlyValueEnhancer(instance, config, valManager) {

@@ -211,2 +223,3 @@ Object.keys(config).forEach((key) => {

});
withOnValChanged(instance);
}

@@ -233,2 +246,3 @@ function bindInstance$1(instance, key, val) {

});
withOnValChanged(instance);
}

@@ -235,0 +249,0 @@ function bindInstance(instance, key, val) {

import type { ExtractValValue } from "./combine";
import type { ReadonlyVal } from "./readonly-val";
import type { ValManager } from "./val-manager";
import type { WithOnValChanged } from "./with-on-val-changed";
declare type IntersectionFromUnion<TUnion> = (TUnion extends any ? (arg: TUnion) => void : never) extends (arg: infer TArg) => void ? TArg : never;
declare type ExtractReadonlyValKeys<TInstance, TKey = keyof TInstance> = TKey extends Extract<keyof TInstance, string> ? TInstance[TKey] extends ReadonlyVal ? TKey : never : never;
export declare type ReadonlyValEnhancer<TVal, TKey extends string> = Readonly<Record<TKey, ExtractValValue<TVal>> & Record<`_${TKey}$`, TVal>>;
export declare type ReadonlyValEnhancedProps<TVal, TKey extends string> = Readonly<Record<TKey, ExtractValValue<TVal>> & Record<`_${TKey}$`, TVal>>;
export declare type ReadonlyValEnhancerConfig = Record<string, ReadonlyVal>;
declare type ToReadonlyValUnion<TConfig, TKey = ExtractReadonlyValKeys<TConfig>> = TKey extends ExtractReadonlyValKeys<TConfig> ? ReadonlyValEnhancer<TConfig[TKey], TKey> : never;
export declare type ReadonlyValEnhancedResult<TConfig> = IntersectionFromUnion<ToReadonlyValUnion<TConfig>>;
declare type ToReadonlyValUnion<TConfig, TKey = ExtractReadonlyValKeys<TConfig>> = TKey extends ExtractReadonlyValKeys<TConfig> ? ReadonlyValEnhancedProps<TConfig[TKey], TKey> : never;
export declare type ReadonlyValEnhancedResult<TConfig> = WithOnValChanged<TConfig, IntersectionFromUnion<ToReadonlyValUnion<TConfig>>>;
/**

@@ -43,4 +44,5 @@ * Bind ReadonlyVals/Vals `value` and itself to properties of an instance.

* - `obj._isApple$`, the `isApple$`
* - `obj.onValChanged(key: "apple" | "isApple", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>
*/
export declare function withReadonlyValueEnhancer<TInstance, TConfig extends ReadonlyValEnhancerConfig>(instance: TInstance, config: TConfig, valManager?: ValManager): void;
export declare function withReadonlyValueEnhancer<TInstance extends ReadonlyValEnhancedResult<TConfig>, TConfig extends ReadonlyValEnhancerConfig>(instance: TInstance, config: TConfig, valManager?: ValManager): void;
export {};
import type { ExtractValMeta, ExtractValValue } from "./combine";
import type { Val } from "./val";
import type { ValManager } from "./val-manager";
import type { WithOnValChanged } from "./with-on-val-changed";
declare type IntersectionFromUnion<TUnion> = (TUnion extends any ? (arg: TUnion) => void : never) extends (arg: infer TArg) => void ? TArg : never;
declare type ExtractValKeys<TInstance, TKey = keyof TInstance> = TKey extends Extract<keyof TInstance, string> ? TInstance[TKey] extends Val ? TKey : never : never;
export declare type ValEnhancer<TVal, TKey extends string> = Readonly<Record<`_${TKey}$`, TVal> & Record<`set${Capitalize<TKey>}`, (value: ExtractValValue<TVal>, meta?: ExtractValMeta<TVal>) => void>> & Record<TKey, ExtractValValue<TVal>>;
declare type ValEnhancedProps<TVal, TKey extends string> = Readonly<Record<`_${TKey}$`, TVal> & Record<`set${Capitalize<TKey>}`, (value: ExtractValValue<TVal>, meta?: ExtractValMeta<TVal>) => void>> & Record<TKey, ExtractValValue<TVal>>;
export declare type ValEnhancerConfig = Record<string, Val>;
declare type ToValUnion<TConfig, TKey = ExtractValKeys<TConfig>> = TKey extends ExtractValKeys<TConfig> ? ValEnhancer<TConfig[TKey], TKey> : never;
export declare type ValEnhancedResult<TConfig> = IntersectionFromUnion<ToValUnion<TConfig>>;
declare type ToValUnion<TConfig, TKey = ExtractValKeys<TConfig>> = TKey extends ExtractValKeys<TConfig> ? ValEnhancedProps<TConfig[TKey], TKey> : never;
export declare type ValEnhancedResult<TConfig> = WithOnValChanged<TConfig, IntersectionFromUnion<ToValUnion<TConfig>>>;
/**

@@ -45,4 +46,5 @@ * Bind Vals `value`, `setValue` and itself to properties of an instance.

* - `obj._banana$`, the `banana$`
* - `obj.onValChanged(key: "apple" | "isApple", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>
*/
export declare function withValueEnhancer<TInstance, TConfig extends ValEnhancerConfig>(instance: TInstance, config: TConfig, valManager?: ValManager): void;
export declare function withValueEnhancer<TInstance extends ValEnhancedResult<TConfig>, TConfig extends ValEnhancerConfig>(instance: TInstance, config: TConfig, valManager?: ValManager): void;
export declare type BindVal = <TKey extends string, TValue, TMeta>(key: TKey, val: Val<TValue, TMeta>) => Val<TValue, TMeta>;

@@ -59,3 +61,3 @@ /**

*/
export declare function bindInstance<TInstance, TKey extends string, TValue, TMeta>(instance: TInstance, key: TKey, val: Val<TValue, TMeta>): ValEnhancer<TValue, TKey> & TInstance;
export declare function bindInstance<TInstance, TKey extends string, TValue, TMeta>(instance: TInstance, key: TKey, val: Val<TValue, TMeta>): ValEnhancedProps<TValue, TKey> & TInstance;
export {};
{
"name": "value-enhancer",
"version": "1.2.1",
"version": "1.3.0",
"private": false,

@@ -5,0 +5,0 @@ "description": "A tiny library to enhance value with reactive wrapper.",

@@ -103,2 +103,3 @@ # value-enhancer

- `obj._banana$`, the `banana$`
- `obj.onValChanged(key: "apple" | "banana", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>

@@ -139,2 +140,3 @@ ### Bind ReadonlyVals/Vals To An Instance

- `obj._isApple$`, the `isApple$`
- `obj.onValChanged(key: "apple" | "isApple", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>

@@ -141,0 +143,0 @@ ### ValManager

@@ -6,2 +6,4 @@ /* eslint-disable @typescript-eslint/ban-types */

import type { ValManager } from "./val-manager";
import type { WithOnValChanged } from "./with-on-val-changed";
import { withOnValChanged } from "./with-on-val-changed";

@@ -23,3 +25,3 @@ type IntersectionFromUnion<TUnion> = (

export type ReadonlyValEnhancer<TVal, TKey extends string> = Readonly<
export type ReadonlyValEnhancedProps<TVal, TKey extends string> = Readonly<
Record<TKey, ExtractValValue<TVal>> & Record<`_${TKey}$`, TVal>

@@ -34,7 +36,8 @@ >;

> = TKey extends ExtractReadonlyValKeys<TConfig>
? ReadonlyValEnhancer<TConfig[TKey], TKey>
? ReadonlyValEnhancedProps<TConfig[TKey], TKey>
: never;
export type ReadonlyValEnhancedResult<TConfig> = IntersectionFromUnion<
ToReadonlyValUnion<TConfig>
export type ReadonlyValEnhancedResult<TConfig> = WithOnValChanged<
TConfig,
IntersectionFromUnion<ToReadonlyValUnion<TConfig>>
>;

@@ -75,5 +78,6 @@

* - `obj._isApple$`, the `isApple$`
* - `obj.onValChanged(key: "apple" | "isApple", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>
*/
export function withReadonlyValueEnhancer<
TInstance,
TInstance extends ReadonlyValEnhancedResult<TConfig>,
TConfig extends ReadonlyValEnhancerConfig

@@ -87,2 +91,3 @@ >(instance: TInstance, config: TConfig, valManager?: ValManager): void {

});
withOnValChanged(instance);
}

@@ -103,3 +108,3 @@

val: ReadonlyVal<TValue, TMeta>
): ReadonlyValEnhancer<TValue, TKey> & TInstance {
): ReadonlyValEnhancedProps<TValue, TKey> & TInstance {
Object.defineProperties(instance, {

@@ -115,3 +120,3 @@ [key]: {

});
return instance as ReadonlyValEnhancer<TValue, TKey> & TInstance;
return instance as ReadonlyValEnhancedProps<TValue, TKey> & TInstance;
}

@@ -6,2 +6,4 @@ /* eslint-disable @typescript-eslint/ban-types */

import type { ValManager } from "./val-manager";
import type { WithOnValChanged } from "./with-on-val-changed";
import { withOnValChanged } from "./with-on-val-changed";

@@ -23,3 +25,3 @@ type IntersectionFromUnion<TUnion> = (

export type ValEnhancer<TVal, TKey extends string> = Readonly<
type ValEnhancedProps<TVal, TKey extends string> = Readonly<
Record<`_${TKey}$`, TVal> &

@@ -39,7 +41,8 @@ Record<

> = TKey extends ExtractValKeys<TConfig>
? ValEnhancer<TConfig[TKey], TKey>
? ValEnhancedProps<TConfig[TKey], TKey>
: never;
export type ValEnhancedResult<TConfig> = IntersectionFromUnion<
ToValUnion<TConfig>
export type ValEnhancedResult<TConfig> = WithOnValChanged<
TConfig,
IntersectionFromUnion<ToValUnion<TConfig>>
>;

@@ -82,8 +85,8 @@

* - `obj._banana$`, the `banana$`
* - `obj.onValChanged(key: "apple" | "isApple", listener)`, equals to calling <code>obj[\`_${key}$\`].reaction</code>
*/
export function withValueEnhancer<TInstance, TConfig extends ValEnhancerConfig>(
instance: TInstance,
config: TConfig,
valManager?: ValManager
): void {
export function withValueEnhancer<
TInstance extends ValEnhancedResult<TConfig>,
TConfig extends ValEnhancerConfig
>(instance: TInstance, config: TConfig, valManager?: ValManager): void {
Object.keys(config).forEach(key => {

@@ -95,2 +98,3 @@ bindInstance(instance, key, config[key]);

});
withOnValChanged(instance);
}

@@ -117,3 +121,3 @@

val: Val<TValue, TMeta>
): ValEnhancer<TValue, TKey> & TInstance {
): ValEnhancedProps<TValue, TKey> & TInstance {
Object.defineProperties(instance, {

@@ -135,3 +139,3 @@ [key]: {

});
return instance as ValEnhancer<TValue, TKey> & TInstance;
return instance as ValEnhancedProps<TValue, TKey> & TInstance;
}

@@ -138,0 +142,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc