
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
The Last Atom. Высокоуровневая система управления состоянием с Dependency Injection, пространствами имен и умными фасадами.
Пакет alak — это вершина пирамиды. Он объединяет мощь nucleus и atom в целостную архитектуру приложения.
В метафоре "Вселенной", Alak — это Организм. Он организует отдельные атомы в союзы (Unions), управляет их жизненным циклом и обеспечивает связь между ними.
npm install alak
В больших приложениях сложно управлять тысячами атомов вручную. Alak решает эту проблему через:
Группа атомов, живущих в одном контексте (namespace). Например, UserUnion может содержать атомы Profile, Settings, Auth.
Вам не нужно импортировать инстансы атомов. Вы запрашиваете их через фасад, и Alak находит (или создает) их для вас.
Alak сканирует методы ваших моделей. Если метод называется определенным образом (например, _counter$up), он автоматически подписывается на соответствующие изменения.
Модели наследуются от UnionModel (для синглтонов) или UnionMultiModel (для фабрик).
import { UnionModel } from 'alak'
// Модель счетчика
class Counter extends UnionModel<'myApp'> {
count = 0
increment() { this.count++ }
}
// Модель статистики, которая следит за счетчиком
class Stats extends UnionModel<'myApp'> {
totalClicks = 0
// МАГИЯ: Авто-подписка на Counter.count
// _$counter_count_up -> слушать изменения 'count' в атоме 'counter'
_$counter_count_up(val: number) {
this.totalClicks++
console.log(`Счетчик изменился на ${val}, всего кликов: ${this.totalClicks}`)
}
// Локальная подписка (на свои свойства)
_totalClicks$up(val: number) {
if (val >= 10) console.log('Achievement Unlocked!')
}
}
import { UnionConstructor } from 'alak'
const { facade } = UnionConstructor({
namespace: 'myApp', // Уникальное имя союза
models: {
counter: Counter,
stats: Stats
}
})
Фасад предоставляет "умный" доступ к атомам.
// Чтение (State)
console.log(facade.counterState.count) // 0
// Действие (Action)
facade.counterAtom.actions.increment()
// -> "Счетчик изменился на 1, всего кликов: 1"
// Прямой доступ к ядру (Core/Nucleus)
facade.counterCore.count.up(v => console.log('Direct sub:', v))
Alak использует символ $ (или _ в legacy режиме) для парсинга намерений разработчика.
Формат: _property$trigger
_count$up(val): При каждом изменении this.count._count$next(val): При следующем изменении._count$once(val): Один раз.Формат: _$atomName_property_trigger
_$user_isLoggedIn_up(val): Слушать свойство isLoggedIn в атоме user.Формат: _on$EventName
_on$init(): Вызывается сразу после инициализации атома._on$UserLogout(data): Слушать глобальное событие UserLogout.Фасад генерирует удобные свойства для доступа к разным аспектам атомов:
facade.userState): Только значения (чтение/запись). Самый чистый синтаксис.facade.userAtom.actions): Методы бизнес-логики.facade.userCore): Низкоуровневые Nucleus (для ручных подписок).facade.userAtom): Сам инстанс атома.facade.states.*: Объект со всеми стейтами.facade.cores.*: Объект со всеми ядрами.facade.actions.*: Объект со всеми методами.Чтобы injectFacade знал о типах вашего приложения в любом файле:
import { injectFacade } from 'alak'
// 1. Декларация типов (обычно в d.ts файле)
declare module 'alak/namespaces' {
interface ActiveUnions {
myApp: typeof MyUnionInstance // Тип, возвращаемый UnionConstructor
}
}
// 2. Использование в любом месте
const app = injectFacade('myApp') // Полная типизация!
app.counterState.count // number
Лицензия: TVR
FAQs
Alak Atom
The npm package alak receives a total of 496 weekly downloads. As such, alak popularity was classified as not popular.
We found that alak demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.