{"_id":"@_o9nix/codemap","_rev":"3-a65a55346e5c3bfc506f795eb3f47060","name":"@_o9nix/codemap","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@_o9nix/codemap","version":"0.1.0","license":"MIT","_id":"@_o9nix/codemap@0.1.0","maintainers":[{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"}],"bin":{"codemap":"bin/codemap.js"},"dist":{"shasum":"11c266337dab637488dc73353c866bec47baf266","tarball":"https://registry.npmjs.org/@_o9nix/codemap/-/codemap-0.1.0.tgz","fileCount":11,"integrity":"sha512-n0lp8miPiX7/DITV+tcrk/vTivbPA2731Kish/RruRIzjivY1CfcT/ErjJtTZIR5NnZ7bgLZylCkjgL31BixKA==","signatures":[{"sig":"MEYCIQDPUiWOVs+yX/joT/wyNSy0nbODJW25GDViftBMt6A+hQIhAKyd+apyPq9YlB6mD8PY+c9Nw1H3+RFidVRoBRkxxSx7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53920},"main":"src/index.js","type":"commonjs","engines":{"node":">=16"},"_npmUser":{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"},"_npmVersion":"10.9.0","description":"Строит интерактивную HTML-карту JS/HTML проекта: граф зависимостей между файлами (import/require и глобальные функции/переменные) + список функций в каждом файле.","directories":{},"_nodeVersion":"22.11.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codemap_0.1.0_1785127252597_0.5813448064658506","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@_o9nix/codemap","version":"0.2.0","license":"MIT","_id":"@_o9nix/codemap@0.2.0","maintainers":[{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"}],"bin":{"codemap":"bin/codemap.js"},"dist":{"shasum":"488689a6267303e38b313ec056b9133f8d54259f","tarball":"https://registry.npmjs.org/@_o9nix/codemap/-/codemap-0.2.0.tgz","fileCount":13,"integrity":"sha512-eB8316CRIZXbdZ3J59jvk4PIW7xkGsk2B+N1HAfvWzqAzDvREVHbpnXzFoAV8l0u4PHWFmVLBu7N1pPoa8Y7lw==","signatures":[{"sig":"MEYCIQD9cgI7+C6R4JTnbheYXzgwox9BoQABJ0ZzHsu/Yt1adAIhAMEMFP7BONXc/PjRTNUA3v7PZF+aIjOhP99ugBtAiw6V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156363},"main":"src/index.js","type":"commonjs","engines":{"node":">=16"},"gitHead":"f18770122a251a786f1690680d1d603d12cea89a","_npmUser":{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"},"_npmVersion":"10.9.0","description":"Строит интерактивную HTML-карту JS/HTML проекта: граф зависимостей между файлами (import/require и глобальные функции/переменные) + список функций в каждом файле.","directories":{},"_nodeVersion":"22.11.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codemap_0.2.0_1785128443415_0.6391600990184356","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@_o9nix/codemap","version":"0.3.0","description":"Строит интерактивную HTML-карту JS/HTML проекта: граф зависимостей между файлами (import/require и глобальные функции/переменные) + список функций в каждом файле.","type":"commonjs","bin":{"codemap":"bin/codemap.js"},"main":"src/index.js","engines":{"node":">=16"},"license":"MIT","dependencies":{},"_id":"@_o9nix/codemap@0.3.0","gitHead":"35eac1c47cb623be2726659a20aec6a7be816d02","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-3UfjoQuA5Vg3WZKMVeipkkENKNIHn6rSkIMrwkTNsVoE3DLJFa8CKg5TPq2pDaf7tkn0QLrhgKvrld8Y3slL7Q==","shasum":"df674c9cd26e7c5b1273da05fbeaf38770e2547e","tarball":"https://registry.npmjs.org/@_o9nix/codemap/-/codemap-0.3.0.tgz","fileCount":11,"unpackedSize":60765,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCmrkPpWY3hKWHIDsqWGBgWjb1sf54FCCExyQAAfcAsfAIgKPEbnJzZubflDz+3x29Bc4orBBHc2aeBX6kO73SOktg="}]},"_npmUser":{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"},"directories":{},"maintainers":[{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codemap_0.3.0_1785131574825_0.9030113181829931"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-27T04:40:52.424Z","modified":"2026-07-27T05:52:55.121Z","0.1.0":"2026-07-27T04:40:52.744Z","0.2.0":"2026-07-27T05:00:43.557Z","0.3.0":"2026-07-27T05:52:54.991Z"},"license":"MIT","description":"Строит интерактивную HTML-карту JS/HTML проекта: граф зависимостей между файлами (import/require и глобальные функции/переменные) + список функций в каждом файле.","maintainers":[{"name":"_o9nix","email":"mayorov00-m-a@yandex.ru"}],"readme":"# codemap\n\nСтроит интерактивную HTML-карту JS/HTML проекта — с двумя вкладками:\n\n1. **Файлы** — граф зависимостей между файлами (import/require, `<script src>`, эвристика глобальных символов)\n2. **Функции / вызовы** — граф вызовов между функциями и методами классов по\n   всему проекту: кто кого вызывает, с фильтром по файлу и поиском. Именно\n   этот граф удобен, чтобы распутывать архитектуру старого проекта — кликаете\n   на функцию и видите всех её вызывающих и всё, что вызывает она.\n\nРаботает без внешних npm-зависимостей — только чистый Node.js (статический\nанализ текста, без исполнения кода и без AST-библиотек).\n\nПонимает два стиля кода:\n- ES-модули / CommonJS (`import`, `require`) — надёжные связи, сплошные линии\n- Классические скрипты через `<script src=\"\">` — плюс эвристика: если файл A\n  объявляет функцию/переменную на верхнем уровне, а в файле B она используется —\n  рисуется связь-догадка (пунктир). Такие связи можно выключить в интерфейсе,\n  если будет слишком шумно.\n\n## Как использовать на разных проектах\n\nЕсть три варианта — от \"сразу и без настройки\" до \"как настоящий npx codemap\".\n\n### Вариант 1: прямой запуск через npx без установки (рекомендую)\n\nРаспакуйте `codemap` один раз в постоянное место, например `~/tools/codemap`.\nПосле этого из **любого** вашего проекта:\n\n```bash\nnpx ~/tools/codemap ./ -o codemap.html --open\n```\n\n`npx` поддерживает запуск из локального пути так же, как из npm-registry —\nничего публиковать не нужно, дополнительно ничего не устанавливается.\n\n### Вариант 2: глобальная команда `codemap` (самый удобный на каждый день)\n\nОдин раз внутри папки codemap:\n\n```bash\nnpm link\n```\n\nПосле этого команда `codemap` доступна глобально в любом терминале, в любом проекте:\n\n```bash\ncd ~/projects/any-old-project\ncodemap . -o codemap.html --open\n```\n\n### Вариант 3: настоящий `npx codemap` из npm-registry\n\nЕсли захотите классический `npx codemap` (как у `create-react-app`), нужно\nопубликовать пакет под своим именем: `npm publish` (потребуется аккаунт на\nnpmjs.com и уникальное имя пакета — `codemap` наверняка уже занят, можно\n`@ваш-ник/codemap`).\n\n## Опции\n\n```\ncodemap [путь] [опции]\n\n  -o, --output <файл>   Куда сохранить HTML (по умолчанию codemap.html)\n  --open                 Открыть результат в браузере сразу после генерации\n  --ignore <a,b,c>       Дополнительные папки для игнорирования\n  -h, --help              Справка\n```\n\n## Вкладка \"Файлы\"\n\n- Узлы — файлы (JS/HTML/CSS), размер узла ~ количество строк\n- Клик по узлу — панель справа: объявленные функции/символы, входящие и\n  исходящие зависимости\n- Поиск по имени файла или символа\n- Фильтры по типу связи (import, script-tag, глобальные символы, порядок загрузки)\n- Переключатель физики раскладки\n\n## Вкладка \"Функции / вызовы\"\n\n- Узлы — функции и методы классов по всему проекту, цвет = файл, в котором\n  объявлены (одинаковый цвет = один файл, легко увидеть модульность)\n- Треугольник = обычная функция, кружок = метод класса\n- Рёбра — вызов A → B, найденный статически в теле функции A\n- Клик по узлу — кто вызывает эту функцию и что вызывает она сама\n- Фильтр по файлу — изолировать только внутренние вызовы одного файла\n  (удобно, когда нужно разобраться в конкретном модуле)\n- Поиск по имени функции/метода/класса\n\n**Как разрешаются вызовы:** `this.method()` внутри класса сначала ищется\nсреди методов того же класса; если не найден — идёт общий поиск по имени\nсреди всех функций/методов проекта. Это эвристика без анализа типов, так что\nна одинаковых именах в разных классах возможна путаница — но для \"вспомнить\nархитектуру старого проекта\" обычно более чем достаточно.\n\n**Что НЕ попадает в граф вызовов** (важно понимать заранее):\n- анонимные функции/колбэки не присвоенные переменной, например прямо внутри\n  `app.get('/x', (req,res) => {...})` или `btn.addEventListener('click', () => {...})`\n- вызовы, где нельзя статически определить, какая функция вызывается\n  (динамический выбор через `obj[methodName]()` и т.п.)\n- сама точка входа выполнения — если функция вызывается напрямую в теле\n  модуля (не внутри другой функции), эта связь не отображается, т.к. граф\n  строится только между именованными функциями/методами\n\n## Известные ограничения\n\nЭто не полноценный парсер AST, а быстрые регулярки — сознательный компромисс,\nчтобы инструмент работал без установки зависимостей и сразу из коробки.\nВозможны:\n- ложные связи по эвристике \"глобальных символов\" при коротких/частых именах\n- пропуск экзотического синтаксиса (динамические `import()`, необычное форматирование)\n\nЕсли нужна более точная карта — можно доустановить `acorn`/`@babel/parser`\nи заменить регулярки в `src/analyzeJs.js` на честный обход AST — структура\nпроекта для этого уже готова (`analyzeJsFile` — единственное место, которое\nнужно менять).\n","readmeFilename":"README.md"}