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

natan

v1.2.0

Published

smart config loader and builder

Downloads

5

Readme

natan

Загрузчик конфигураций, умеет:

  • Загружать файлы с расширениями: json, js
  • Накладывать конфигурационные файлы, в соответствии с заданной иерархией
  • Интерполировать значения, для мелкой автоматизации
npm i natan --save

Overlapping

В контексте наложения используются следующие типы файлов:

  • Узловой файл:
    • Непосредственно загружаемый из приложения или наследуемый файл
    • Может иметь зависимости:
      • Наследуемый файл
      • Дефолтный файл
      • Локальный файл
  • Дефолтный файл:
    • Узловой файл перекрывает дефолтный файл
    • Не имеет зависимостей
  • Локальный файл:
    • Локальный файл перекрывает узловой файл
    • Не имеет зависимостей

Для определения иерархии наложения можно использовать:

  • Соглашение:
    • Наследуемый файл:
      • Расположен на одну директорию ниже узлового файла
      • Имеет тоже имя, что и узловой, но может иметь другое расширение
    • Дефолный файл:
      • Расположен в той же директории, что и узловой
      • Имеет имя default, и одно из разрешенных расширений
    • Локальный файл:
      • Расположен в той же директории, что и узловой
      • Имеет имя узлового, с добавлением постфикса .local и разрешенное расширение файла
  • Конфигурацию:
    • Наследуемый файл: добавлением поля __parent__ в узловой файл
    • Дефолтный файл: добавлением поля __default__ в узловой файл
    • Локальный файл: добавлением поля __local__ в узловой файл

example-config

var natan = require('natan')
var config = natan('node_modules/example-config/dashboard/dev') 
console.info(config)

/*
{ onTopTest: 'dashboard/dev!',
  logger: { transports: { Console: { level: 'debug', debugStdout: true, colorize: true } } },
  ports: { server: 7070, dashboard: 9090 },
  serverAddress: 'http://localhost:7070',
  someRegExp: /^(\d+)$/,
  storage: '/tmp/' }
*/

В данной примере:

  • Загружается узловой файл: dashboard/dev.json
  • Загружается дефолный файл узлового: dashboard/default.json
  • Загружается наследуемый файл узлового: dev.json
  • Загружается дефолтный файл наследуемого: default.json
  • Файлы накладываются в соответствие со своей иерархией
  • Значения интерполируются

Наложение может быть отключено:

  • Заданием переменной окружения: NATAN_OVERLAPPING=false
  • Передачей вторым аргументом: natan(path, { useInterpolating: false })

Interpolating

Интерполяция была задумана как мелкая автоматизация, для случаев когда:

  • Значения зависят от других значения
  • Значения являются вычисляемыми

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

// root.json
{
    "ports": { "server": 100000, "dashboard": 8080 } }
}

// server.json
{
    "__parent__": "root",
    "dashboardAddress": "http://localhost:k{ ports.dashboard }"
}

Или задать временной интервал в человеко читаемом формате:

{
    "updateInterval": "t{ one minute }"
}

Или вычислить абсолютный путь к хранилищу, относительно рабочей директории:

{
    "storage": "p{ ./storage }"
}

Или сделать что-нибудь безумное:

{
    "workerName": "f{ 'worker-' + require('os').hostname() + '-' + Date.now() }" 
}

Или определить пороговый размер файла:

{
  "trashhold": "b{ 10 MB }"
}

Возможно человеко читаемо записать некоторый лимит:

{
  "limit": "n{ 150 000 000 }"
}

Полный список интерполируемых значений:

  • k{ ... } - определяет значение по существующему ключу
  • t{ ... } - определяет временной интервал в миллисукундах, используется библиотека human-interval
  • p{ ... } - определяет абсолютный путь, относительно рабочий директории
  • r{ ... } - вычисляет регулярное выражение, аналог вызова new RegExp('...')
  • b{ ... } - переводит размер файла в число, используется библиотека human2bytes
  • n{ ... } - удаляет пробелы и не числовые символы, заменяет запятые на точки, для того чтобы сконвертировать значение в число
  • f{ ... } - вычисляет значение функции, функции интерполируются в последнюю очередь, в качестве this используется текущая вычисленная конфигурация.

Интерполяция может быть отключена:

  • Заданием переменной окружения: NATAN_INTERPOLATING=false
  • Передачей вторым аргументом: natan(path, { useInterpolating: false })

Debug

  • Можно запустить тесты cd node_modules/natan && npm run test
  • Можно увидеть этапы сборки конфигурации задав: DEBUG=natan
  • Можно воспользоваться отладочными утилитами: natan-test-config и natan-test-configs
PATH="$PATH:$PWD/node_modules/.bin"
natan-test-config -c node_modules/natan/example-config/dashboard/dev

natan-test-config

PATH="$PATH:$PWD/node_modules/.bin"
natan-test-configs -d node_modules/natan/example-config/

natan-test-configs