npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

class_orm

v1.0.9

Published

1. В конфиг (путь по умолчанию в Windows: `C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg`) добавить строчки: ``` replication: replSetName: имя_replica_set ``` В тестах используется `rs0` имя replica set. 2. Перезапустить службу:

Downloads

20

Readme

Подключение replica set в MongoDB для работы транзакций:

  1. В конфиг (путь по умолчанию в Windows: C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg) добавить строчки:
    replication:
        replSetName: имя_replica_set
    В тестах используется rs0 имя replica set.
  2. Перезапустить службу:
    • Windows: net stop MongoDB && net start MongoDB
    • Linux: sudo systemctl stop mongod && sudo systemctl start mongod
  3. Подключиться к MongoDB серверу используя MongoDB Shell (для Windows скачать по ссылке на официальном сайте), пример для локальной БД с настройками по умолчанию:
    mongo --host 127.0.0.1 --port 27017
  4. Инициализировать replica set:
    rs.initiate()

После этого для переключения между обычным режимом и replica set будет достаточно 1-2 пунктов.

Тесты, запускаемые через npm test автоматически пропускают те из них, которые не подходят для текущей конфигурации.

Краткое описание классов

BaseEntity — базовый класс для работы с базой, остальные классы сущностей наследуют его. Хранит поля:

  • static entityConstructors: Map<string, any> — map конструкторов для восстановления из документа БД
  • static entityId: WeakEntityCollection — класс для хранения прокси, используемых для отслеживания изменения полей через get/set
  • onChangeCallback?: { remove: (item: BaseEntity) => void; insert: (item: BaseEntity) => void } — объект с методами вызова при изменении/удалении
  • _id: ObjectId — идентификатор экземпляра класса
  • _changedProperties: Set<string> — set изменённых полей экземпляра класса с момента создания или последней записи в БД

Методы представляют возможности по записи в базу одного/нескольких экземпляров класса (включая возможность рекурсивного сохранения всех вложенных классов), запросе одного экземпляра из базы, пополнени/очистке списка изменённых полей.


LazyPromise — класс ленивой загрузки экземпляров классов из БД. Хранит поля:

  • static promises: WeakEntityCollection — список promise ленивой загрузки всех экземпляров класса
  • promise?: Promise<T> — promise загрузки текущего экземпляра
  • _id: ObjectId — идентификатор в базе
  • collectionName: string — имя коллекции в базе

Тип export type Lazy<T extends BaseEntity> = T | LazyPromise<T> предоставляет обёртку для типа лениво загружаемых полей или полноценных экземпляров класса.


WeakEntityCollection — класс для сборки мусора тех экземпляров классов, которые более не нужны:

  • map: Map<string, WeakRef<any>> — карте текущих экземпляров классов
  • registry: FinalizationRegistry<string> — список более не нужных экземпляров классов

EntitySerializer — класс для сериализации/десериализации объектов, способен также сериализировать и восстанавливать Array/Map/Set. Поля:

  • static serializedCollections: Map<string, any[]> — хранилище уже сериализованных объектов по классам, очищается при вызове getSerializedCollections()
  • static processedEntities: Set<string> — хранилище ссылок на уже сериализованные объекты, очищается при вызове getSerializedCollections()
  • static serializationHandlers: { [key: string]: (val: any, recursively: boolean) => SerializedValue } — обработчики сериализации отдельных классов

CacheList — класс закэшированного списка заданного размера, хранит данные в комбинации Array+Map, при доступе к отдельным элементам повышает их позицию в Array, неиспользуемые автоматически сдвигаются в конец пока не удалятся.

  • cacheSize: number — максимальный размер кэша
  • indexList: WrapEntity[] — список объектов, обёрнутых во WrapItem, хранящий указатель на объект и индекс закэшированном списке
  • map: MapInterface<WrapEntity> — обёртка для Map<string, WrapEntity> с дополнительными методами для удобства работы внутри закэшированного списка

SortedList — класс сортированного списка:

  • доступна сортировка по одному полю (для полей типов, реализующих оператор сравнения) или с помощью произвольной функции
  • доступна фильтрация по Partial<T>
  • доступна выборка по интервалу (со строгими или нестрогими границами)

Поля:

  • items: T[] — сами объекты
  • compareFn: (a: T, b: T) => number — функция сравнения
  • compareKey?: MaybeBasePropertyKeys<T> — поля для фильтрации/обрезки по промежутку значений

Замена функции сортировки невозможна, для этого создаётся новый экземпляр с новой сортировкой.


Collections — класс, комбинирующий в себе произвольное количество SortedList с разными сортировками и возможностью задания автоматического удаления значений из Collections. Стандартные возможности работы с SortedList также доступны (например, обрезание списка по интервалу значений)Ж

  • indices: { [name: string]: SortedList<T> } — хранилище всех вариантов сортировки экземпляров T
  • shouldAutoUpdate: boolean — флаг автоматического вызова обновления/удаления экземпляра T из всех SortedList при соответствующих действиях над экземпляом T

DatabaseCollections — расширение Collections возможностью сохранения/загрузки содержимого из БД.


MongoDBService — класс работы с MongoDB БД и сериализуемыми коллекциями в формате Map<string, any[]> и записью сериализованных данных по кускам:

  • client: MongoClient — клиент MongoDB
  • static db: Db — конкретная база MongoDB