You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

@tanstack/angular-store

Package Overview
Dependencies
Maintainers
2
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tanstack/angular-store - npm Package Compare versions

Comparing version
0.4.0
to
0.4.1
+1
-1
dist/cjs/index.cjs.map

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

{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import {\n effect,\n signal,\n type CreateSignalOptions,\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n} from '@angular/core'\nimport type { AnyUpdater, Store } from '@tanstack/store'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function injectStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as TSelected,\n options: CreateSignalOptions<TSelected> & { injector?: Injector } = {\n equal: shallow,\n },\n) {\n !options.injector && assertInInjectionContext(injectStore)\n\n if (!options.injector) {\n options.injector = inject(Injector)\n }\n\n return runInInjectionContext(options.injector, () => {\n const slice = signal(selector(store.state), options)\n\n effect(\n (onCleanup) => {\n const unsub = store.subscribe(() => {\n slice.set(selector(store.state))\n })\n onCleanup(unsub)\n },\n { allowSignalWrites: true },\n )\n\n return slice.asReadonly()\n })\n}\n\nfunction shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["assertInInjectionContext","inject","Injector","runInInjectionContext","signal","effect"],"mappings":";;;AAaO,SAAS,YAKd,OACA,WAAkD,CAAC,MAAM,GACzD,UAAoE;AAAA,EAClE,OAAO;AACT,GACA;AACC,GAAA,QAAQ,YAAYA,KAAA,yBAAyB,WAAW;AAErD,MAAA,CAAC,QAAQ,UAAU;AACb,YAAA,WAAWC,YAAOC,KAAAA,QAAQ;AAAA,EACpC;AAEO,SAAAC,KAAA,sBAAsB,QAAQ,UAAU,MAAM;AACnD,UAAM,QAAQC,KAAAA,OAAO,SAAS,MAAM,KAAK,GAAG,OAAO;AAEnDC,SAAA;AAAA,MACE,CAAC,cAAc;AACP,cAAA,QAAQ,MAAM,UAAU,MAAM;AAClC,gBAAM,IAAI,SAAS,MAAM,KAAK,CAAC;AAAA,QAAA,CAChC;AACD,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,EAAE,mBAAmB,KAAK;AAAA,IAAA;AAG5B,WAAO,MAAM;EAAW,CACzB;AACH;AAEA,SAAS,QAAW,MAAS,MAAS;AACpC,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;;"}
{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import {\n Injector,\n assertInInjectionContext,\n effect,\n inject,\n runInInjectionContext,\n signal,\n} from '@angular/core'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { CreateSignalOptions } from '@angular/core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function injectStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as TSelected,\n options: CreateSignalOptions<TSelected> & { injector?: Injector } = {\n equal: shallow,\n },\n) {\n !options.injector && assertInInjectionContext(injectStore)\n\n if (!options.injector) {\n options.injector = inject(Injector)\n }\n\n return runInInjectionContext(options.injector, () => {\n const slice = signal(selector(store.state), options)\n\n effect(\n (onCleanup) => {\n const unsub = store.subscribe(() => {\n slice.set(selector(store.state))\n })\n onCleanup(unsub)\n },\n { allowSignalWrites: true },\n )\n\n return slice.asReadonly()\n })\n}\n\nfunction shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["assertInInjectionContext","inject","Injector","runInInjectionContext","signal","effect"],"mappings":";;;AAaO,SAAS,YAKd,OACA,WAAkD,CAAC,MAAM,GACzD,UAAoE;AAAA,EAClE,OAAO;AACT,GACA;AACC,GAAA,QAAQ,YAAYA,KAAA,yBAAyB,WAAW;AAErD,MAAA,CAAC,QAAQ,UAAU;AACb,YAAA,WAAWC,YAAOC,KAAAA,QAAQ;AAAA,EACpC;AAEO,SAAAC,KAAA,sBAAsB,QAAQ,UAAU,MAAM;AACnD,UAAM,QAAQC,KAAAA,OAAO,SAAS,MAAM,KAAK,GAAG,OAAO;AAEnDC,SAAA;AAAA,MACE,CAAC,cAAc;AACP,cAAA,QAAQ,MAAM,UAAU,MAAM;AAClC,gBAAM,IAAI,SAAS,MAAM,KAAK,CAAC;AAAA,QAAA,CAChC;AACD,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,EAAE,mBAAmB,KAAK;AAAA,IAAA;AAG5B,WAAO,MAAM;EAAW,CACzB;AACH;AAEA,SAAS,QAAW,MAAS,MAAS;AACpC,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;;"}

@@ -1,7 +0,8 @@

import { type CreateSignalOptions, Injector } from '@angular/core';
import type { AnyUpdater, Store } from '@tanstack/store';
import { Injector, CreateSignalOptions } from '@angular/core';
import { AnyUpdater, Store } from '@tanstack/store';
type NoInfer<T> = [T][T extends any ? 0 : never];
export declare function injectStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected, options?: CreateSignalOptions<TSelected> & {
injector?: Injector;
}): import("@angular/core").Signal<TSelected>;
}): import('@angular/core').Signal<TSelected>;
export {};

@@ -1,7 +0,8 @@

import { type CreateSignalOptions, Injector } from '@angular/core';
import type { AnyUpdater, Store } from '@tanstack/store';
import { Injector, CreateSignalOptions } from '@angular/core';
import { AnyUpdater, Store } from '@tanstack/store';
type NoInfer<T> = [T][T extends any ? 0 : never];
export declare function injectStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected, options?: CreateSignalOptions<TSelected> & {
injector?: Injector;
}): import("@angular/core").Signal<TSelected>;
}): import('@angular/core').Signal<TSelected>;
export {};

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

{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n effect,\n signal,\n type CreateSignalOptions,\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n} from '@angular/core'\nimport type { AnyUpdater, Store } from '@tanstack/store'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function injectStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as TSelected,\n options: CreateSignalOptions<TSelected> & { injector?: Injector } = {\n equal: shallow,\n },\n) {\n !options.injector && assertInInjectionContext(injectStore)\n\n if (!options.injector) {\n options.injector = inject(Injector)\n }\n\n return runInInjectionContext(options.injector, () => {\n const slice = signal(selector(store.state), options)\n\n effect(\n (onCleanup) => {\n const unsub = store.subscribe(() => {\n slice.set(selector(store.state))\n })\n onCleanup(unsub)\n },\n { allowSignalWrites: true },\n )\n\n return slice.asReadonly()\n })\n}\n\nfunction shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":[],"mappings":";AAaO,SAAS,YAKd,OACA,WAAkD,CAAC,MAAM,GACzD,UAAoE;AAAA,EAClE,OAAO;AACT,GACA;AACC,GAAA,QAAQ,YAAY,yBAAyB,WAAW;AAErD,MAAA,CAAC,QAAQ,UAAU;AACb,YAAA,WAAW,OAAO,QAAQ;AAAA,EACpC;AAEO,SAAA,sBAAsB,QAAQ,UAAU,MAAM;AACnD,UAAM,QAAQ,OAAO,SAAS,MAAM,KAAK,GAAG,OAAO;AAEnD;AAAA,MACE,CAAC,cAAc;AACP,cAAA,QAAQ,MAAM,UAAU,MAAM;AAClC,gBAAM,IAAI,SAAS,MAAM,KAAK,CAAC;AAAA,QAAA,CAChC;AACD,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,EAAE,mBAAmB,KAAK;AAAA,IAAA;AAG5B,WAAO,MAAM;EAAW,CACzB;AACH;AAEA,SAAS,QAAW,MAAS,MAAS;AACpC,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;"}
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n Injector,\n assertInInjectionContext,\n effect,\n inject,\n runInInjectionContext,\n signal,\n} from '@angular/core'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { CreateSignalOptions } from '@angular/core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function injectStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as TSelected,\n options: CreateSignalOptions<TSelected> & { injector?: Injector } = {\n equal: shallow,\n },\n) {\n !options.injector && assertInInjectionContext(injectStore)\n\n if (!options.injector) {\n options.injector = inject(Injector)\n }\n\n return runInInjectionContext(options.injector, () => {\n const slice = signal(selector(store.state), options)\n\n effect(\n (onCleanup) => {\n const unsub = store.subscribe(() => {\n slice.set(selector(store.state))\n })\n onCleanup(unsub)\n },\n { allowSignalWrites: true },\n )\n\n return slice.asReadonly()\n })\n}\n\nfunction shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":[],"mappings":";AAaO,SAAS,YAKd,OACA,WAAkD,CAAC,MAAM,GACzD,UAAoE;AAAA,EAClE,OAAO;AACT,GACA;AACC,GAAA,QAAQ,YAAY,yBAAyB,WAAW;AAErD,MAAA,CAAC,QAAQ,UAAU;AACb,YAAA,WAAW,OAAO,QAAQ;AAAA,EACpC;AAEO,SAAA,sBAAsB,QAAQ,UAAU,MAAM;AACnD,UAAM,QAAQ,OAAO,SAAS,MAAM,KAAK,GAAG,OAAO;AAEnD;AAAA,MACE,CAAC,cAAc;AACP,cAAA,QAAQ,MAAM,UAAU,MAAM;AAClC,gBAAM,IAAI,SAAS,MAAM,KAAK,CAAC;AAAA,QAAA,CAChC;AACD,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,EAAE,mBAAmB,KAAK;AAAA,IAAA;AAG5B,WAAO,MAAM;EAAW,CACzB;AACH;AAEA,SAAS,QAAW,MAAS,MAAS;AACpC,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;"}
{
"name": "@tanstack/angular-store",
"author": "Tanner Linsley",
"version": "0.4.0",
"version": "0.4.1",
"license": "MIT",

@@ -44,10 +44,10 @@ "repository": "tanstack/store",

"dependencies": {
"@tanstack/store": "0.3.1"
"@tanstack/store": "0.4.1"
},
"devDependencies": {
"@analogjs/vite-plugin-angular": "^0.2.32",
"@angular/core": "^17.1.2",
"@angular/common": "^17.1.2",
"@angular/compiler": "^17.1.2",
"@angular/compiler-cli": "^17.1.2",
"@angular/core": "^17.1.2",
"@angular/platform-browser": "^17.1.2",

@@ -61,11 +61,3 @@ "@angular/platform-browser-dynamic": "^17.1.2",

},
"scripts": {
"clean": "rimraf ./dist && rimraf ./coverage",
"test:eslint": "eslint --ext .ts,.tsx ./src",
"test:types": "tsc",
"test:lib": "vitest",
"test:lib:dev": "pnpm run test:lib --watch",
"test:build": "publint --strict",
"build": "vite build"
}
"scripts": {}
}
import {
effect,
signal,
type CreateSignalOptions,
Injector,
assertInInjectionContext,
effect,
inject,
runInInjectionContext,
signal,
} from '@angular/core'
import type { AnyUpdater, Store } from '@tanstack/store'
import type { CreateSignalOptions } from '@angular/core'

@@ -12,0 +12,0 @@ type NoInfer<T> = [T][T extends any ? 0 : never]

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

import { describe, expect, test } from 'vitest'
import { Component, effect } from '@angular/core'

@@ -2,0 +3,0 @@ import { TestBed } from '@angular/core/testing'