<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM/DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
    <!--<?xml-stylesheet type="text/xsl" href="article.xsl">-->
<article xmlns:ns0="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.2" xml:lang="en">
	<front>
		<journal-meta>
			<journal-id journal-id-type="issn">2303-9868</journal-id>
			<journal-id journal-id-type="eissn">2227-6017</journal-id>
			<journal-title-group>
				<journal-title>Международный научно-исследовательский журнал</journal-title>
			</journal-title-group>
			<issn pub-type="epub">2303-9868</issn>
			<publisher>
				<publisher-name>ООО Цифра</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.60797/IRJ.2026.172.77</article-id>
			<article-categories>
				<subj-group>
					<subject>Brief communication</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>МЕТОДЫ АНАЛИЗА И ВИЗУАЛИЗАЦИИ ЗАВИСИМОСТЕЙ ES-МОДУЛЕЙ В JAVASCRIPT-ПРИЛОЖЕНИЯХ С ПОМОЩЬЮ ГРАФОВЫХ БАЗ ДАННЫХ</article-title>
			</title-group>
			<contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<name>
						<surname>Астахова</surname>
						<given-names>Ирина Федоровна</given-names>
					</name>
					<email>astachova@list.ru</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
				<contrib contrib-type="author">
					<contrib-id contrib-id-type="orcid">https://orcid.org/0009-0005-8770-1081</contrib-id>
					<name>
						<surname>Борисенков</surname>
						<given-names>Дмитрий Васильевич</given-names>
					</name>
					<email>xuser@relex.ru</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
				<contrib contrib-type="author">
					<name>
						<surname>Крючков</surname>
						<given-names>Никита Сергеевич</given-names>
					</name>
					<email>ns.kriuchkov@gmail.ru</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
			</contrib-group>
			<aff id="aff-1">
				<institution-wrap>
					<institution-id institution-id-type="ROR">https://ror.org/0543j5e78</institution-id>
					<institution content-type="education">Воронежский государственный университет</institution>
				</institution-wrap>
			</aff>
			<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2026-10-16">
				<day>16</day>
				<month>10</month>
				<year>2026</year>
			</pub-date>
			<pub-date pub-type="collection">
				<year>2026</year>
			</pub-date>
			<volume>7</volume>
			<issue>172</issue>
			<fpage>1</fpage>
			<lpage>7</lpage>
			<history>
				<date date-type="received" iso-8601-date="2026-07-05">
					<day>05</day>
					<month>07</month>
					<year>2026</year>
				</date>
				<date date-type="accepted" iso-8601-date="2026-09-24">
					<day>24</day>
					<month>09</month>
					<year>2026</year>
				</date>
			</history>
			<permissions>
				<copyright-statement>Copyright: &amp;#x00A9; 2022 The Author(s)</copyright-statement>
				<copyright-year>2022</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
					<license-p>
						This is an open-access article distributed under the terms of the Creative Commons Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See 
						<uri xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</uri>
					</license-p>
					.
				</license>
			</permissions>
			<self-uri xlink:href="https://research-journal.org/archive/10-172-2026-october/10.60797/IRJ.2026.172.77"/>
			<abstract>
				<p>Анализ зависимостей программных модулей в приложениях становиться с каждым годом все более и более важным этапом разработки современных приложений. Создание общей математической модели, описывающей анализ зависимостей на фундаментальном уровне — одна из задач, которые могут позволить ускорить разработку новых утилит для анализа зависимостей для самых разных систем модулей и языков программирования применение графовой БД. В представленной статье была предпринята попытка систематизировать существующие подходы к анализу модульных зависимостей в JavaScript, провести обзор технических решений и обозначить методологические основы будущего исследования. Показано, что применение графового представления и визуализации открывает широкие возможности для получения целостного и наглядного представления архитектуры проекта. Научная новизна работы заключается в адаптации формальных методов анализа к специфике динамической природы JavaScript и в разработке подходов, позволяющих интегрировать визуальные и количественные методы в инструменты поддержки разработки, внедрение в исследование графовой БД [1], [2], [3], [4], [5], а также [6], [7].Результаты планируемого исследования могут быть полезны как для научного сообщества, так и для практикующих разработчиков. Они позволят по-новому взглянуть на архитектуру приложений, выявлять потенциальные проблемы на ранних этапах, повышать прозрачность системы и, в конечном счёте, улучшать качество программного обеспечения.</p>
			</abstract>
			<kwd-group>
				<kwd>лексический анализ</kwd>
				<kwd> регулярные выражения</kwd>
				<kwd> синтаксический анализ</kwd>
				<kwd> ES-модули</kwd>
				<kwd> JavaScript ECMAScript</kwd>
				<kwd> граф</kwd>
				<kwd> визуализация графа</kwd>
				<kwd> граф зависимостей</kwd>
				<kwd> построение графовой БД</kwd>
			</kwd-group>
		</article-meta>
	</front>
	<body>
		<sec>
			<title>HTML-content</title>
			<p>1. Введение</p>
			<p>Графовые базы данных — класс баз данных, в которых данные представлены в виде сущностей и отношений между ними. За счёт того, что структура хранения напрямую отражает структуру связей предметной области, такие базы данных часто обеспечивают более высокую гибкость и производительность при обработке сильно связанных данных по сравнению с реляционными системами. Узлы, или вершины (nodes), — это экземпляры сущностей; рёбра, или связи (edges), — отношения между ними; свойства (properties) содержат описательную информацию, связанную с узлами и рёбрами.</p>
			<p>К преимуществам графовых баз данных обычно относят:</p>
			<p>– гибкую схему данных, не требующую заранее фиксированной структуры таблиц;</p>
			<p>– наглядное представление связей между сущностями, естественное для задач анализа зависимостей;</p>
			<p>– высокую скорость выполнения запросов, связанных с обходом связей, — в отличие от реляционных СУБД, где аналогичные операции требуют дорогостоящих операций соединения таблиц.</p>
			<p>Среди ограничений можно отметить:</p>
			<p>– снижение производительности при выполнении запросов, требующих обхода очень большого числа связей, на графах с миллионами узлов;</p>
			<p>– сравнительно небольшое, по сравнению с реляционными СУБД, сообщество пользователей у ряда графовых платформ, что может затруднять получение технической поддержки при решении нетиповых задач </p>
			<p>[1][2]</p>
			<p>Наиболее распространённой в настоящее время графовой СУБД является Neo4j — платформа для нативного хранения и обработки графовых структур, написанная на Java; название Neo4j иногда расшифровывают как «Network Exploration and Optimization for Java» («исследование и оптимизация сетей для Java»). Neo4j поддерживает свойства ACID (атомарность, согласованность, изолированность и долговечность транзакций), что делает её пригодной в том числе для систем, предъявляющих требования к транзакционной целостности данных </p>
			<p>[1]</p>
			<p>Cypher — декларативный язык запросов, оптимизированный для работы с графовыми базами данных. Он предоставляет удобный синтаксис для описания узлов, рёбер и их атрибутов, а также для формулирования запросов на поиск путей, подграфов и агрегированных характеристик графа </p>
			<p>[3]</p>
			<p>Зачастую разработчики, особенно при работе с крупными JavaScript-проектами, сталкиваются с проблемой усложнения архитектуры приложения из-за разрастания количества модулей и усложнения связей между ними. Отсутствие наглядного представления о зависимостях может привести к дублированию кода, созданию циклических зависимостей и затруднённому сопровождению проекта.</p>
			<p>В связи с этим возникла необходимость в разработке подходов и инструментов, позволяющих анализировать и визуализировать структуру модульных зависимостей в современных JavaScript-приложениях. Это особенно актуально для приложений, использующих стандарт ES-модулей, активно применяемый в экосистеме ECMAScript </p>
			<p>[7]</p>
			<p>Основной </p>
			<p>Актуальность и постановка проблемы</p>
			<p>С ростом масштабов клиентских и серверных JavaScript-приложений возросла потребность в средствах, позволяющих отслеживать архитектурную сложность и выявлять потенциальные проблемы. Одним из ключевых аспектов при разработке современных веб-приложений становится организация модульных зависимостей, от которой напрямую зависит поддерживаемость и масштабируемость системы. Анализ модульных связей помогает упрощать рефакторинг, снижать технический долг, минимизировать риски, связанные с безопасностью, и повышать эффективность процессов разработки. Однако существующие инструменты либо ограничены в функциональности, либо не обладают достаточной гибкостью для анализа сложных, динамически формируемых связей. Это делает задачу комплексного анализа зависимостей особенно актуальной в контексте быстроразвивающейся JavaScript-экосистемы, а специфика самой задачи — большое число слабо структурированных связей между модулями — естественным образом подводит к использованию графовой модели данных и графовых СУБД как средства хранения и анализа таких зависимостей.</p>
			<p>2. Обзор существующих подходов</p>
			<p>Современная экосистема JavaScript предоставляет разработчикам ряд инструментов для анализа и визуализации модульных зависимостей. Наиболее активно применяются утилиты, интегрируемые в сборщики, такие как Webpack и Rollup. К примеру, Webpack Bundle Analyzer </p>
			<p>[12][9]</p>
			<p>Инструмент Dependency Cruiser </p>
			<p>[8][13][14][15][16]</p>
			<p>Отдельного внимания заслуживает Madge </p>
			<p>[10]</p>
			<p>Общей чертой большинства перечисленных решений является то, что они ориентированы преимущественно на технических специалистов и решают прикладные задачи — уменьшение размера сборки, выявление циклов или соблюдение архитектурных правил. При этом отсутствует целостное представление об архитектуре системы в терминах графовой теории или метрик качества кода. Кроме того, эти инструменты слабо адаптированы к научному анализу и не позволяют масштабировать визуализацию на большие проекты с сотнями и тысячами модулей без потери наглядности.</p>
			<p>2.1. Научные подходы к графовому анализу программной архитектуры</p>
			<p>Научное сообщество активно исследует архитектуру программного обеспечения, однако подавляющее большинство таких исследований сосредоточено на языках с более выраженной статической типизацией, таких как Java и C++. Это обусловлено тем, что такие языки предоставляют больше возможностей для глубокого анализа кода на этапе компиляции. Тем не менее полученные в этих работах подходы могут быть адаптированы и для динамических языков, включая JavaScript.</p>
			<p>В частности, в литературе активно изучается применение графов для описания архитектур программ [5], [6]. Работы в этом направлении предлагают представлять программную систему в виде направленного графа, где узлы обозначают модули, классы или функции, а рёбра — зависимости, вызовы или передачи управления. Такой подход позволяет использовать известные из теории графов метрики: степень вершины, центральность, связность, плотность и другие. Это даёт возможность формализованно оценивать сложность архитектуры, выявлять перегруженные компоненты или потенциальные узкие места.</p>
			<p>Некоторые исследования рассматривают возможности визуального анализа программной архитектуры как средства поддержки принятия решений при рефакторинге или при переходе к новым архитектурным стилям. Используются различные техники визуализации, в том числе force-directed layout, иерархические (Sugiyama-style) схемы, а также методы кластеризации и автоматической группировки модулей по архитектурным слоям.</p>
			<p>Стоит отметить, что в контексте JavaScript и особенно ES-модулей научных публикаций пока немного: большинство работ по статическому анализу JavaScript сосредоточено на построении графов вызовов для решения задач безопасности и рефакторинга [4], тогда как задачи архитектурной визуализации модульных зависимостей остаются менее исследованными. Это объясняется относительной новизной стандарта и высокой степенью динамичности JavaScript как языка. Однако именно эта сфера открывает широкое поле для научных исследований, направленных на адаптацию классических методов архитектурного анализа к особенностям современных веб-технологий. Отсутствие типовой модели модульной архитектуры и нестабильность зависимостей в JavaScript требуют разработки специализированных подходов, способных учитывать динамическую природу кода и гибкую структуру проектов.</p>
			<p>3. Методологические аспекты исследования</p>
			<p>Методология, лежащая в основе предлагаемого исследования, ориентирована на построение формальной модели зависимостей между модулями в JavaScript-приложениях, использующих стандарт ES-модулей, с последующей визуализацией и анализом этой структуры. Важной особенностью выбранного подхода является сочетание технических решений — таких как парсинг исходного кода и генерация графов, — с элементами научного анализа, в частности, применением графовых метрик и принципов визуальной аналитики.</p>
			<p>На первом этапе планируется сформировать корпус открытых JavaScript-проектов, размещённых на платформе GitHub, удовлетворяющих следующим критериям: активная разработка, использование ES-модулей в структуре проекта, достаточный масштаб кода (от 100 файлов и более). Для сбора и предварительной фильтрации данных предполагается использовать GitHub API, а также утилиты командной строки, позволяющие производить автоматическую загрузку и очистку репозиториев.</p>
			<p>Следующим ключевым шагом является парсинг структуры исходного кода. Для этого предполагается использовать инструментальные средства, способные обрабатывать синтаксис ECMAScript, например Babel и Acorn. В процессе анализа будут выявлены связи между файлами, выраженные через ключевые конструкции import и export. Особое внимание будет уделено корректной интерпретации относительных и абсолютных путей, разрешению алиасов и обработке потенциально динамических импортов. На этом этапе данные о зависимостях будут трансформированы в представление, пригодное для построения графов — в частности, в виде списков смежности или пар связанных узлов, что соответствует общепринятым способам представления графовых структур в задачах компиляции и статического анализа </p>
			<p>[17][18][19]</p>
			<p>Третьим этапом станет построение ориентированных графов, где каждая вершина будет соответствовать отдельному модулю, а каждое направленное ребро — зависимости между ними. Полученные графы могут содержать сотни и тысячи узлов, поэтому важной задачей становится не только их формальное описание, но и поиск подходящих алгоритмов визуального представления. Предпочтение планируется отдать интерактивным визуализациям, реализуемым средствами JavaScript-библиотек D3.js, Sigma.js или Cytoscape.js. Эти библиотеки позволяют реализовать гибкую навигацию по графу, масштабирование, группировку узлов, а также отображение дополнительных свойств модулей, таких как размер, частота использования или количество входящих/исходящих связей.</p>
			<p>Дополнительно предполагается использование количественного анализа графов, включающего в себя вычисление таких метрик, как средняя степень вершины, плотность графа, диаметр, коэффициент кластеризации и центральность. Эти метрики позволят выявлять узлы с высокой степенью зависимости, потенциальные архитектурные «бутылочные горлышки», а также зоны избыточной связанности, которые могут привести к усложнению сопровождения системы. Отдельный интерес представляет задача выявления циклических зависимостей, для которой в теории графов существуют эффективные алгоритмы поиска всех элементарных циклов ориентированного графа </p>
			<p>[20][21]</p>
			<p>Завершающим этапом станет интерпретация полученных данных и сопоставление количественных характеристик архитектуры с качественными признаками кода. Это позволит выработать гипотезы о корреляции между структурой графа и архитектурной зрелостью проекта, а также наметить пути автоматизированной диагностики и возможного рефакторинга на основе выявленных паттернов.</p>
			<p>Таким образом, методология исследования объединяет технические, визуальные и аналитические подходы, создавая основу для комплексного анализа модульных зависимостей в современных JavaScript-приложениях.</p>
			<p>4. Ожидаемые результаты и научная новизна</p>
			<p>В рамках исследования планируется сформировать набор практических рекомендаций и инструментальных решений для анализа модульной структуры JavaScript-приложений. Ожидается, что результаты позволят более эффективно выявлять узлы архитектурной сложности, предложат новые способы визуального представления и будут способствовать развитию подходов к сопровождению и рефакторингу кода.</p>
			<p>В отличие от Dependency Cruiser </p>
			<p>[8][10]</p>
			<p>5. Представление графа зависимостей в графовой базе
данных: иллюстративный пример</p>
			<p>Чтобы показать, как описанная выше методология может быть реализована на практике, рассмотрим иллюстративный пример небольшого гипотетического JavaScript-приложения, состоящего из девяти ES-модулей: точки входа app.js, модуля маршрутизации router.js, модуля состояния store.js, двух модулей представления views/home.js и views/profile.js, модуля обращения к API api/users.js, модуля низкоуровневых HTTP-запросов api/http.js, вспомогательного модуля utils/format.js и файла конфигурации config.js. Связи импорта между этими модулями образуют граф зависимостей, показанный на рисунке 1.</p>
			<fig id="F1">
				<label>Figure 1</label>
				<caption>
					<p>Граф зависимостей ES-модулей гипотетического приложения (иллюстративный пример)</p>
				</caption>
				<alt-text>Граф зависимостей ES-модулей гипотетического приложения (иллюстративный пример)</alt-text>
				<graphic ns0:href="/media/images/2026-10-01/d1efdc74-baff-4137-90db-c37f82fce71e.jpg"/>
			</fig>
			<p>В модели графовой базы данных каждый модуль естественно представляется узлом с меткой Module и свойством path, а каждая связь import — направленным ребром DEPENDS_ON. Загрузка такого графа в Neo4j может быть выполнена, например, следующим набором инструкций на языке Cypher:</p>
			<p>После загрузки графа становятся доступны аналитические запросы, которые в существующих инструментах статического анализа (Dependency Cruiser, Madge) либо отсутствуют, либо требуют написания дополнительного кода. Так, поиск модулей с наибольшим количеством входящих зависимостей — потенциальных «узких мест» архитектуры — выполняется запросом:</p>
			<p>Поиск циклических зависимостей — одна из типовых задач архитектурного анализа — формулируется как поиск замкнутого пути в графе:</p>
			<p>а вычисление средней степени вершины графа, характеризующей его общую связность, — агрегирующим запросом:</p>
			<p>Приведённый пример носит иллюстративный характер и не заменяет полноценной апробации методики на корпусе реальных проектов, которая является следующим этапом исследования (раздел 5). Тем не менее он показывает, что граф зависимостей ES-модулей может быть напрямую отображён в модель свойств графовой базы данных без потери информации и что типовые задачи архитектурного анализа — поиск циклов, оценка связности и выявление наиболее зависимых модулей — можно сформулировать компактными запросами на языке Cypher, не прибегая к отдельной реализации соответствующих алгоритмов.</p>
			<p>6. Заключение</p>
			<p>В условиях постоянного роста сложности JavaScript-приложений задача анализа и визуализации модульных зависимостей приобретает особую актуальность. ES-модули, являясь основой современной модульной системы в экосистеме ECMAScript, создают структурные связи, которые требуют осмысленного подхода к организации и контролю. Существующие инструменты статического анализа — Webpack Bundle Analyzer, Rollup Plugin Visualizer, Dependency Cruiser, Madge — решают отдельные прикладные задачи, но не предоставляют единого представления архитектуры в терминах графовой теории и не позволяют формулировать произвольные аналитические запросы к графу зависимостей.</p>
			<p>В настоящей статье предложен подход, устраняющий этот пробел за счёт представления графа зависимостей ES-модулей в графовой базе данных Neo4j. Систематизированы существующие инструменты и научные работы по графовому анализу программной архитектуры, сформулированы методологические основы дальнейшего исследования — от сбора корпуса открытых проектов и парсинга исходного кода до вычисления графовых метрик, — а на иллюстративном примере показано, как граф зависимостей загружается в графовую базу данных и как типовые задачи архитектурного анализа (поиск циклов, оценка связности, выявление наиболее зависимых модулей) решаются запросами на языке Cypher.</p>
			<p>Дальнейшие шаги исследования будут направлены на реализацию программного прототипа, сбор эмпирических данных на основе анализа открытых репозиториев с GitHub и оценку предложенного подхода на корпусе реальных проектов в сопоставлении с существующими инструментами. Полученные результаты, как ожидается, станут вкладом в развитие области анализа программной архитектуры на языке JavaScript.</p>
		</sec>
		<sec sec-type="supplementary-material">
			<title>Additional File</title>
			<p>The additional file for this article can be found as follows:</p>
			<supplementary-material xmlns:xlink="http://www.w3.org/1999/xlink" id="S1" xlink:href="https://doi.org/10.5334/cpsy.78.s1">
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/26526.docx">26526.docx</inline-supplementary-material>]-->
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/26526.pdf">26526.pdf</inline-supplementary-material>]-->
				<label>Online Supplementary Material</label>
				<caption>
					<p>
						Further description of analytic pipeline and patient demographic information. DOI:
						<italic>
							<uri>https://doi.org/10.60797/IRJ.2026.172.77</uri>
						</italic>
					</p>
				</caption>
			</supplementary-material>
		</sec>
	</body>
	<back>
		<ack>
			<title>Acknowledgements</title>
			<p>Авторы выражают благодарность рецензенту за проделанную работу.</p>
		</ack>
		<sec>
			<title>Competing Interests</title>
			<p/>
		</sec>
		<ref-list>
			<ref id="B1">
				<label>1</label>
				<mixed-citation publication-type="confproc">Ковалев М.С. Оптимизация хранения и обработки графовых данных в гибридных системах: комбинация NoSQL и графовых СУБД для масштабируемых решений / М.С. Ковалев // Молодой учёный. — 2025. — № 20(571). — С. 30–32. </mixed-citation>
			</ref>
			<ref id="B2">
				<label>2</label>
				<mixed-citation publication-type="confproc">Angles R. Survey of graph database models / R. Angles, C. Gutierrez // ACM Computing Surveys (CSUR). — 2008. — Vol. 40, № 1. — Art. 1.</mixed-citation>
			</ref>
			<ref id="B3">
				<label>3</label>
				<mixed-citation publication-type="confproc">Arora R. Using dependency graphs to support collaboration over GitHub: the Neo4j graph database approach / R. Arora, S. Goel, R.K. Mittal // 2016 Ninth International Conference on Contemporary Computing (IC3). — IEEE, 2016. — P. 1–7.</mixed-citation>
			</ref>
			<ref id="B4">
				<label>4</label>
				<mixed-citation publication-type="confproc">Antal G. Static JavaScript call graphs: a comparative study / G. Antal, P. Hegedűs, Z. Tóth [et al.] // 2018 IEEE 18th International Working Conference on Source Code Analysis and Manipulation (SCAM). — 2018. — P. 177–186.</mixed-citation>
			</ref>
			<ref id="B5">
				<label>5</label>
				<mixed-citation publication-type="confproc">Lanza M. Understanding software evolution using a combination of software visualization and software metrics / M. Lanza, S. Ducasse // Proc. of LMO'02. — Paris : Lavoisier, 2002. — P. 135–149.</mixed-citation>
			</ref>
			<ref id="B6">
				<label>6</label>
				<mixed-citation publication-type="confproc">Zimmermann T. Mining version histories to guide software changes / T. Zimmermann [и др.] // IEEE Transactions on Software Engineering. — 2005. — Vol. 31, № 6. — P. 429–445.</mixed-citation>
			</ref>
			<ref id="B7">
				<label>7</label>
				<mixed-citation publication-type="confproc">ECMAScript Language Specification. — URL: https://262.ecma-international.org (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B8">
				<label>8</label>
				<mixed-citation publication-type="confproc">Dependency Cruiser Documentation. — URL: https://github.com/sverweij/dependency-cruiser (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B9">
				<label>9</label>
				<mixed-citation publication-type="confproc">Rollup Plugin Visualizer. — URL: https://www.npmjs.com/package/rollup-plugin-visualizer (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B10">
				<label>10</label>
				<mixed-citation publication-type="confproc">Madge — Create graphs from module dependencies. — URL: https://github.com/pahen/madge (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B11">
				<label>11</label>
				<mixed-citation publication-type="confproc">Флэнаган Д. JavaScript : подробное руководство / Д. Флэнаган. — 6-е изд. — СПб. : Символ-Плюс, 2012. — 1080 с.</mixed-citation>
			</ref>
			<ref id="B12">
				<label>12</label>
				<mixed-citation publication-type="confproc">Webpack. — URL: https://webpack.js.org (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B13">
				<label>13</label>
				<mixed-citation publication-type="confproc">Detect circular dependencies in modules compiled with Webpack. — URL: https://github.com/aackerman/circular-dependency-plugin (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B14">
				<label>14</label>
				<mixed-citation publication-type="confproc">ECMAScript parsing infrastructure for multipurpose analysis. — URL: https://github.com/jquery/esprima (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B15">
				<label>15</label>
				<mixed-citation publication-type="confproc">Esprima-compatible JavaScript parser. — URL: https://github.com/eslint/espree (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B16">
				<label>16</label>
				<mixed-citation publication-type="confproc">Escope, an ECMAScript scope analyzer. — URL: https://github.com/estools/escope (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B17">
				<label>17</label>
				<mixed-citation publication-type="confproc">Ахо А.В. Компиляторы: принципы, технологии и инструментарий / А.В. Ахо [и др.]. — 2-е изд. — Москва : Вильямс, 2008. — 1184 с.</mixed-citation>
			</ref>
			<ref id="B18">
				<label>18</label>
				<mixed-citation publication-type="confproc">AST explorer. — URL: https://astexplorer.net (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B19">
				<label>19</label>
				<mixed-citation publication-type="confproc">The ESTree Spec. — URL: https://github.com/estree/estree (accessed: 22.08.2026).</mixed-citation>
			</ref>
			<ref id="B20">
				<label>20</label>
				<mixed-citation publication-type="confproc">Johnson D.B. Finding all the elementary circuits of a directed graph / D.B. Johnson // SIAM Journal on Computing. — 1975. — Vol. 4, № 1. — P. 77–84.</mixed-citation>
			</ref>
			<ref id="B21">
				<label>21</label>
				<mixed-citation publication-type="confproc">Meyer F. Search all elementary cycles in a given directed graph. — URL: http://normalisiert.de/code/java/elementaryCycles.zip (accessed: 22.08.2026).</mixed-citation>
			</ref>
		</ref-list>
	</back>
	<fundings/>
</article>