55*
66*/
77
8- import { basename , dirname , extname , join } from "../src/deno_ral/path.ts" ;
8+ import { basename , dirname , extname , join , relative } from "../src/deno_ral/path.ts" ;
99import { parseFormatString } from "../src/core/pandoc/pandoc-formats.ts" ;
1010import { kMetadataFormat , kOutputExt } from "../src/config/constants.ts" ;
1111import { safeExistsSync } from "../src/core/path.ts" ;
@@ -73,11 +73,14 @@ export function outputForInput(
7373 input : string ,
7474 to : string ,
7575 projectOutDir ?: string ,
76+ projectRoot ?: string ,
7677 // deno-lint-ignore no-explicit-any
7778 metadata ?: Record < string , any > ,
7879) {
7980 // TODO: Consider improving this (e.g. for cases like Beamer, or typst)
80- const dir = dirname ( input ) ;
81+ projectRoot = projectRoot ?? findProjectDir ( input ) ;
82+ projectOutDir = projectOutDir ?? findProjectOutputDir ( projectRoot ) ;
83+ const dir = projectRoot ? relative ( projectRoot , dirname ( input ) ) : dirname ( input ) ;
8184 let stem = basename ( input , extname ( input ) ) ;
8285 let ext = metadata ?. [ kMetadataFormat ] ?. [ to ] ?. [ kOutputExt ] ;
8386
@@ -139,11 +142,11 @@ export function outputForInput(
139142 }
140143 }
141144
142- const outputPath = projectOutDir
143- ? join ( dir , projectOutDir , `${ stem } .${ outputExt } ` )
144- : join ( dir , `${ stem } .${ outputExt } ` ) ;
145- const supportPath = projectOutDir
146- ? join ( dir , projectOutDir , `${ stem } _files` )
145+ const outputPath : string = projectRoot && projectOutDir
146+ ? join ( projectRoot , projectOutDir , dir , `${ stem } .${ outputExt } ` )
147+ : join ( dir , `${ stem } .${ outputExt } ` ) ;
148+ const supportPath : string = projectRoot && projectOutDir
149+ ? join ( projectRoot , projectOutDir , dir , `${ stem } _files` )
147150 : join ( dir , `${ stem } _files` ) ;
148151
149152 return {
@@ -152,8 +155,13 @@ export function outputForInput(
152155 } ;
153156}
154157
155- export function siteOutputForInput ( input : string ) {
156- const dir = join ( dirname ( input ) , "_site" ) ;
158+ export function projectOutputForInput ( input : string ) {
159+ const projectDir = findProjectDir ( input ) ;
160+ const projectOutDir = findProjectOutputDir ( projectDir ) ;
161+ if ( ! projectDir ) {
162+ throw new Error ( "No project directory found" ) ;
163+ }
164+ const dir = join ( projectDir , projectOutDir , relative ( projectDir , dirname ( input ) ) ) ;
157165 const stem = basename ( input , extname ( input ) ) ;
158166
159167 const outputPath = join ( dir , `${ stem } .html` ) ;
0 commit comments