From f86120feafed20047f7930fbedc9317637f8f98f Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 29 Aug 2022 12:42:37 -0600 Subject: [PATCH] resolves #1 add support for base key on scan action --- packages/collector-extension/lib/index.js | 7 ++-- .../test/collector-extension-test.js | 42 ++++++++++++++++++- .../code/extended-pdf-converter.rb | 5 +++ .../ROOT/pages/outside-start-path.adoc | 0 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb rename packages/collector-extension/test/fixtures/test-at-start-path/{not-docs => other-docs}/modules/ROOT/pages/outside-start-path.adoc (100%) diff --git a/packages/collector-extension/lib/index.js b/packages/collector-extension/lib/index.js index e363d26..d955204 100644 --- a/packages/collector-extension/lib/index.js +++ b/packages/collector-extension/lib/index.js @@ -9,6 +9,7 @@ const getUserCacheDir = require('cache-directory') const globStream = require('glob-stream') const invariably = { false: () => false, void: () => undefined } const ospath = require('path') +const { posix: path } = ospath const runCommand = require('./util/run-command.js') const { pipeline, Writable } = require('stream') const yaml = require('js-yaml') @@ -80,7 +81,7 @@ module.exports.register = function () { } } for (const scan of scans) { - for (const file of await srcFs(scan.dir, scan.files)) { + for (const file of await srcFs(scan.dir, scan.files, scan.base)) { let existingFile if (file.path === 'antora.yml') { const generated = yaml.load(file.contents) @@ -154,14 +155,14 @@ function getBaseCacheDir ({ dir: dot, runtime: { cacheDir: preferredDir } }) { : expandPath(preferredDir, { dot }) } -function srcFs (cwd, globs = ['**/*']) { +function srcFs (cwd, globs = '**/*', base) { return new Promise((resolve, reject, cache = Object.create(null), accum = []) => { pipeline( globStream(globs, Object.assign({ cwd, cache }, GLOB_OPTS)), forEach(({ path: abspathPosix }, _, done) => { if (cache[abspathPosix].constructor === Array) return done() // detects some directories const abspath = ospath.sep === '\\' ? ospath.normalize(abspathPosix) : abspathPosix - const relpath = abspath.substr(cwd.length + 1) + const relpath = base ? path.join('.', base, abspath.substr(cwd.length + 1)) : abspath.substr(cwd.length + 1) fsp.stat(abspath).then( (stat) => { if (stat.isDirectory()) return done() // detects directories that slipped through cache check diff --git a/packages/collector-extension/test/collector-extension-test.js b/packages/collector-extension/test/collector-extension-test.js index 0316cc3..167fa1b 100644 --- a/packages/collector-extension/test/collector-extension-test.js +++ b/packages/collector-extension/test/collector-extension-test.js @@ -418,7 +418,7 @@ describe('collector extension', () => { it('should collect files without running command if only scan key is specified', async () => { const collectorConfig = { - scan: { dir: 'not-docs' }, + scan: { dir: 'other-docs' }, } await runScenario({ repoName: 'test-at-start-path', @@ -435,10 +435,48 @@ describe('collector extension', () => { }) }) + it('should rebase files if base key is set on scan', async () => { + const collectorConfig = { + scan: { dir: 'code', base: 'modules/extend/examples' }, + } + await runScenario({ + repoName: 'test-at-start-path', + startPath: 'docs', + collectorConfig, + before: (contentAggregate) => { + expect(contentAggregate).to.have.lengthOf(1) + expect(contentAggregate[0].files).to.be.empty() + }, + after: (contentAggregate) => { + expect(contentAggregate[0].files).to.have.lengthOf(1) + expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + }, + }) + }) + + it('should drop leading / on value of base key', async () => { + const collectorConfig = { + scan: { dir: 'code', base: '/modules/extend/examples' }, + } + await runScenario({ + repoName: 'test-at-start-path', + startPath: 'docs', + collectorConfig, + before: (contentAggregate) => { + expect(contentAggregate).to.have.lengthOf(1) + expect(contentAggregate[0].files).to.be.empty() + }, + after: (contentAggregate) => { + expect(contentAggregate[0].files).to.have.lengthOf(1) + expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + }, + }) + }) + it('should collect files from multiple scan dirs', async () => { const collectorConfig = { run: { command: 'node .gen-start-page.js', dir: '.' }, - scan: [{ dir: './build' }, { dir: 'not-docs' }], + scan: [{ dir: './build' }, { dir: 'other-docs' }], } await runScenario({ repoName: 'test-at-start-path', diff --git a/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb b/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb new file mode 100644 index 0000000..bc6a925 --- /dev/null +++ b/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb @@ -0,0 +1,5 @@ +class ExtendedPDFConverter < (Asciidoctor::Converter.for 'pdf') + register_for 'pdf' + + # overrides go here +end diff --git a/packages/collector-extension/test/fixtures/test-at-start-path/not-docs/modules/ROOT/pages/outside-start-path.adoc b/packages/collector-extension/test/fixtures/test-at-start-path/other-docs/modules/ROOT/pages/outside-start-path.adoc similarity index 100% rename from packages/collector-extension/test/fixtures/test-at-start-path/not-docs/modules/ROOT/pages/outside-start-path.adoc rename to packages/collector-extension/test/fixtures/test-at-start-path/other-docs/modules/ROOT/pages/outside-start-path.adoc -- GitLab