From 747d6506e4686d4803e53d03d4fa45f293371737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guilherme=20Ara=C3=BAjo?= Date: Tue, 2 Dec 2025 19:30:19 -0300 Subject: [PATCH 1/4] refactor: remove glob --- npm-shrinkwrap.json | 120 ++++++++----------------------------- package.json | 1 - src/loaders/javascript.mjs | 20 ++++--- src/loaders/markdown.mjs | 5 +- 4 files changed, 42 insertions(+), 104 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 27c29dbe..8663462a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -22,7 +22,6 @@ "estree-util-to-js": "^2.0.0", "estree-util-visit": "^2.0.0", "github-slugger": "^2.0.0", - "glob": "^11.0.3", "globals": "^16.4.0", "hast-util-to-string": "^3.0.1", "hastscript": "^9.0.1", @@ -555,29 +554,11 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -3647,6 +3628,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4303,12 +4285,14 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/emoji-regex-xs": { @@ -4910,6 +4894,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -4982,28 +4967,6 @@ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "license": "ISC" }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5016,20 +4979,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "16.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", @@ -5576,20 +5525,6 @@ "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -6162,15 +6097,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -7164,6 +7090,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -7344,6 +7271,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { @@ -7443,22 +7371,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -8189,6 +8101,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -8335,6 +8248,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -8353,6 +8267,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -8367,6 +8282,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8376,12 +8292,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8391,6 +8309,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8417,6 +8336,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -8433,6 +8353,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8445,6 +8366,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9182,6 +9104,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -9200,6 +9123,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9217,6 +9141,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9226,12 +9151,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9241,6 +9168,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9255,6 +9183,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9267,6 +9196,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" diff --git a/package.json b/package.json index add0728e..90ae857d 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ "estree-util-to-js": "^2.0.0", "estree-util-visit": "^2.0.0", "github-slugger": "^2.0.0", - "glob": "^11.0.3", "globals": "^16.4.0", "hast-util-to-string": "^3.0.1", "hastscript": "^9.0.1", diff --git a/src/loaders/javascript.mjs b/src/loaders/javascript.mjs index 78fd2c45..49a65f06 100644 --- a/src/loaders/javascript.mjs +++ b/src/loaders/javascript.mjs @@ -1,9 +1,11 @@ +// @ts-check + 'use strict'; +import { globSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { extname } from 'node:path'; -import { globSync } from 'glob'; import { VFile } from 'vfile'; /** @@ -14,17 +16,21 @@ const createLoader = () => { * Loads the JavaScript source files and transforms them into VFiles * * @param {string | Array} searchPath + * @returns {Promise} */ - const loadFiles = searchPath => { - const resolvedFiles = globSync(searchPath).filter( + const loadFiles = async searchPath => { + const resolvedFiles = globSync(searchPath); + const jsFiles = resolvedFiles.filter( filePath => extname(filePath) === '.js' ); - return resolvedFiles.map(async filePath => { - const fileContents = await readFile(filePath, 'utf-8'); + return Promise.all( + jsFiles.map(async filePath => { + const fileContents = await readFile(filePath, 'utf-8'); - return new VFile({ path: filePath, value: fileContents }); - }); + return new VFile({ path: filePath, value: fileContents }); + }) + ); }; return { loadFiles }; diff --git a/src/loaders/markdown.mjs b/src/loaders/markdown.mjs index 5e92904c..83ed2f89 100644 --- a/src/loaders/markdown.mjs +++ b/src/loaders/markdown.mjs @@ -1,9 +1,11 @@ +// @ts-check + 'use strict'; +import { globSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { extname } from 'node:path'; -import { globSync } from 'glob'; import { VFile } from 'vfile'; /** @@ -19,6 +21,7 @@ const createLoader = () => { * @param {Array | undefined} [ignorePath] A glob/path of files to ignore * The input string can be a simple path (relative or absolute) * The input string can also be any allowed glob string + * @returns {Promise} * * @see https://code.visualstudio.com/docs/editor/glob-patterns */ From d33209bd5d6aa30dc7628cb70ccb7285332a6598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guilherme=20Ara=C3=BAjo?= Date: Tue, 2 Dec 2025 19:30:42 -0300 Subject: [PATCH 2/4] test(loaders): create unit tests --- src/loaders/__tests__/javascript.test.mjs | 45 +++++++++++++++++ src/loaders/__tests__/markdown.test.mjs | 61 +++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/loaders/__tests__/javascript.test.mjs create mode 100644 src/loaders/__tests__/markdown.test.mjs diff --git a/src/loaders/__tests__/javascript.test.mjs b/src/loaders/__tests__/javascript.test.mjs new file mode 100644 index 00000000..425899fb --- /dev/null +++ b/src/loaders/__tests__/javascript.test.mjs @@ -0,0 +1,45 @@ +// @ts-check + +'use strict'; + +import assert from 'node:assert/strict'; +import { describe, it, mock } from 'node:test'; + +import { VFile } from 'vfile'; + +const fakeFiles = [ + '/fake/path/file1.js', + '/fake/path/file2.js', + '/fake/path/not-a-js-file.txt', +]; + +const fakeContent = 'const a = 1;'; + +mock.module('node:fs', { + namedExports: { + globSync: () => fakeFiles, + }, +}); + +mock.module('node:fs/promises', { + namedExports: { + readFile: () => Promise.resolve(fakeContent), + }, +}); + +const createLoader = (await import('../javascript.mjs')).default; + +describe('javascript-loader', () => { + it('should load javascript files into VFiles', async () => { + const loader = createLoader(); + const vfiles = await loader.loadFiles('*.js'); + + assert.strictEqual(vfiles.length, 2); // Ignored the .txt file + + assert.ok(vfiles[0] instanceof VFile); + assert.strictEqual(vfiles[0].path, fakeFiles[0]); + assert.strictEqual(vfiles[0].value, fakeContent); + assert.strictEqual(vfiles[1].path, fakeFiles[1]); + assert.strictEqual(vfiles[1].value, fakeContent); + }); +}); diff --git a/src/loaders/__tests__/markdown.test.mjs b/src/loaders/__tests__/markdown.test.mjs new file mode 100644 index 00000000..a7ba7fd4 --- /dev/null +++ b/src/loaders/__tests__/markdown.test.mjs @@ -0,0 +1,61 @@ +// @ts-check + +'use strict'; + +import assert from 'node:assert/strict'; +import { describe, it, mock } from 'node:test'; +import { isDeepStrictEqual } from 'node:util'; + +import { VFile } from 'vfile'; + +const fakeContent = '# Hello'; +mock.module('node:fs/promises', { + namedExports: { + readFile: () => Promise.resolve(fakeContent), + }, +}); + +mock.module('node:fs', { + namedExports: { + globSync: (/** @type {string[]} */ path) => { + if (isDeepStrictEqual(path, ['ignore.md'])) { + return ['/fake/path/file2.md']; + } + return [ + '/fake/path/file1.md', + '/fake/path/file2.md', + '/fake/path/not-a-md-file.txt', + ]; + }, + }, +}); + +const { default: createLoader } = await import('../markdown.mjs'); + +describe('markdown-loader', () => { + it('should load markdown files into VFiles', async () => { + const fakeFiles = [ + '/fake/path/file1.md', + '/fake/path/file2.md', + '/fake/path/not-a-md-file.txt', + ]; + + const loader = createLoader(); + const vfiles = await loader.loadFiles(['*.md']); + + assert.strictEqual(vfiles.length, 2); + assert.ok(vfiles[0] instanceof VFile); + assert.strictEqual(vfiles[0].path, fakeFiles[0]); + assert.strictEqual(vfiles[0].value, fakeContent); + assert.strictEqual(vfiles[1].path, fakeFiles[1]); + assert.strictEqual(vfiles[1].value, fakeContent); + }); + + it('should ignore specified files', async () => { + const loader = createLoader(); + const vfiles = await loader.loadFiles(['*.md'], ['ignore.md']); + + assert.strictEqual(vfiles.length, 1); + assert.strictEqual(vfiles[0].path, '/fake/path/file1.md'); + }); +}); From 61beafa75f2caf8637b0c6fba66a95fb2d46c321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guilherme=20Ara=C3=BAjo?= Date: Tue, 2 Dec 2025 19:36:19 -0300 Subject: [PATCH 3/4] fix: add missing await --- src/generators/ast-js/index.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generators/ast-js/index.mjs b/src/generators/ast-js/index.mjs index 15497900..98141cbe 100644 --- a/src/generators/ast-js/index.mjs +++ b/src/generators/ast-js/index.mjs @@ -30,7 +30,7 @@ export default { const { loadFiles } = createJsLoader(); // Load all of the Javascript sources into memory - const sourceFiles = loadFiles(options.input ?? []); + const sourceFiles = await loadFiles(options.input ?? []); const { parseJsSources } = createJsParser(); From a04bbe8626345472c080faef6417e60e83e7e3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guilherme=20Ara=C3=BAjo?= Date: Tue, 2 Dec 2025 19:36:59 -0300 Subject: [PATCH 4/4] chore: remove ts directive --- src/loaders/__tests__/javascript.test.mjs | 2 -- src/loaders/__tests__/markdown.test.mjs | 2 -- src/loaders/javascript.mjs | 2 -- src/loaders/markdown.mjs | 2 -- 4 files changed, 8 deletions(-) diff --git a/src/loaders/__tests__/javascript.test.mjs b/src/loaders/__tests__/javascript.test.mjs index 425899fb..8b615884 100644 --- a/src/loaders/__tests__/javascript.test.mjs +++ b/src/loaders/__tests__/javascript.test.mjs @@ -1,5 +1,3 @@ -// @ts-check - 'use strict'; import assert from 'node:assert/strict'; diff --git a/src/loaders/__tests__/markdown.test.mjs b/src/loaders/__tests__/markdown.test.mjs index a7ba7fd4..376528d1 100644 --- a/src/loaders/__tests__/markdown.test.mjs +++ b/src/loaders/__tests__/markdown.test.mjs @@ -1,5 +1,3 @@ -// @ts-check - 'use strict'; import assert from 'node:assert/strict'; diff --git a/src/loaders/javascript.mjs b/src/loaders/javascript.mjs index 49a65f06..f7c1b27a 100644 --- a/src/loaders/javascript.mjs +++ b/src/loaders/javascript.mjs @@ -1,5 +1,3 @@ -// @ts-check - 'use strict'; import { globSync } from 'node:fs'; diff --git a/src/loaders/markdown.mjs b/src/loaders/markdown.mjs index 83ed2f89..f3c64d48 100644 --- a/src/loaders/markdown.mjs +++ b/src/loaders/markdown.mjs @@ -1,5 +1,3 @@ -// @ts-check - 'use strict'; import { globSync } from 'node:fs';