@vivliostyle/cli 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +90 -88
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +5 -0
  4. package/dist/browser.js.map +1 -1
  5. package/dist/build.d.ts +1 -5
  6. package/dist/build.d.ts.map +1 -1
  7. package/dist/build.js +80 -26
  8. package/dist/build.js.map +1 -1
  9. package/dist/commands/build.js +2 -0
  10. package/dist/commands/build.js.map +1 -1
  11. package/dist/commands/build.parser.d.ts +1 -1
  12. package/dist/commands/build.parser.d.ts.map +1 -1
  13. package/dist/commands/build.parser.js +7 -3
  14. package/dist/commands/build.parser.js.map +1 -1
  15. package/dist/commands/init.js +1 -0
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/init.parser.d.ts.map +1 -1
  18. package/dist/commands/init.parser.js +5 -2
  19. package/dist/commands/init.parser.js.map +1 -1
  20. package/dist/commands/preview.js +2 -0
  21. package/dist/commands/preview.js.map +1 -1
  22. package/dist/commands/preview.parser.d.ts.map +1 -1
  23. package/dist/commands/preview.parser.js +6 -2
  24. package/dist/commands/preview.parser.js.map +1 -1
  25. package/dist/const.d.ts +8 -2
  26. package/dist/const.d.ts.map +1 -1
  27. package/dist/const.js +27 -5
  28. package/dist/const.js.map +1 -1
  29. package/dist/container.js +5 -6
  30. package/dist/container.js.map +1 -1
  31. package/dist/init.d.ts +1 -0
  32. package/dist/init.d.ts.map +1 -1
  33. package/dist/init.js +4 -3
  34. package/dist/init.js.map +1 -1
  35. package/dist/{config.d.ts → input/config.d.ts} +24 -13
  36. package/dist/input/config.d.ts.map +1 -0
  37. package/dist/{config.js → input/config.js} +105 -89
  38. package/dist/input/config.js.map +1 -0
  39. package/dist/{input.d.ts → input/input-types.d.ts} +1 -1
  40. package/dist/input/input-types.d.ts.map +1 -0
  41. package/dist/{input.js → input/input-types.js} +3 -3
  42. package/dist/input/input-types.js.map +1 -0
  43. package/dist/output/epub.d.ts +10 -0
  44. package/dist/output/epub.d.ts.map +1 -0
  45. package/dist/output/epub.js +542 -0
  46. package/dist/output/epub.js.map +1 -0
  47. package/dist/{output.d.ts → output/output-types.d.ts} +8 -3
  48. package/dist/output/output-types.d.ts.map +1 -0
  49. package/dist/{output.js → output/output-types.js} +7 -4
  50. package/dist/output/output-types.js.map +1 -0
  51. package/dist/{postprocess.d.ts → output/pdf-postprocess.d.ts} +4 -4
  52. package/dist/output/pdf-postprocess.d.ts.map +1 -0
  53. package/dist/{postprocess.js → output/pdf-postprocess.js} +7 -8
  54. package/dist/output/pdf-postprocess.js.map +1 -0
  55. package/dist/{pdf.d.ts → output/pdf.d.ts} +3 -3
  56. package/dist/output/pdf.d.ts.map +1 -0
  57. package/dist/{pdf.js → output/pdf.js} +12 -13
  58. package/dist/output/pdf.js.map +1 -0
  59. package/dist/output/webbook.d.ts +21 -0
  60. package/dist/output/webbook.d.ts.map +1 -0
  61. package/dist/output/webbook.js +251 -0
  62. package/dist/output/webbook.js.map +1 -0
  63. package/dist/preview.d.ts +1 -1
  64. package/dist/preview.d.ts.map +1 -1
  65. package/dist/preview.js +7 -6
  66. package/dist/preview.js.map +1 -1
  67. package/dist/{builder.d.ts → processor/compile.d.ts} +9 -6
  68. package/dist/processor/compile.d.ts.map +1 -0
  69. package/dist/{builder.js → processor/compile.js} +81 -76
  70. package/dist/processor/compile.js.map +1 -0
  71. package/dist/processor/html.d.ts +59 -0
  72. package/dist/processor/html.d.ts.map +1 -0
  73. package/dist/processor/html.js +294 -0
  74. package/dist/processor/html.js.map +1 -0
  75. package/dist/processor/markdown.d.ts.map +1 -0
  76. package/dist/processor/markdown.js.map +1 -0
  77. package/dist/{theme.d.ts → processor/theme.d.ts} +1 -1
  78. package/dist/processor/theme.d.ts.map +1 -0
  79. package/dist/{theme.js → processor/theme.js} +6 -8
  80. package/dist/processor/theme.js.map +1 -0
  81. package/dist/schema/pubManifest.d.ts.map +1 -1
  82. package/dist/schema/pubManifest.js +19 -21
  83. package/dist/schema/pubManifest.js.map +1 -1
  84. package/dist/schema/vivliostyle.d.ts.map +1 -1
  85. package/dist/schema/vivliostyle.js +3 -5
  86. package/dist/schema/vivliostyle.js.map +1 -1
  87. package/dist/server.d.ts.map +1 -1
  88. package/dist/server.js +18 -16
  89. package/dist/server.js.map +1 -1
  90. package/dist/util.d.ts +14 -0
  91. package/dist/util.d.ts.map +1 -1
  92. package/dist/util.js +111 -16
  93. package/dist/util.js.map +1 -1
  94. package/package.json +31 -15
  95. package/types/custom.d.ts +4 -0
  96. package/types/jsdom.d.ts +14 -0
  97. package/vendors/README.md +10 -0
  98. package/vendors/build.js +27 -0
  99. package/vendors/index.d.ts +4 -0
  100. package/vendors/index.src.js +9 -0
  101. package/dist/builder.d.ts.map +0 -1
  102. package/dist/builder.js.map +0 -1
  103. package/dist/config.d.ts.map +0 -1
  104. package/dist/config.js.map +0 -1
  105. package/dist/epub.d.ts +0 -6
  106. package/dist/epub.d.ts.map +0 -1
  107. package/dist/epub.js +0 -18
  108. package/dist/epub.js.map +0 -1
  109. package/dist/html.d.ts +0 -17
  110. package/dist/html.d.ts.map +0 -1
  111. package/dist/html.js +0 -60
  112. package/dist/html.js.map +0 -1
  113. package/dist/input.d.ts.map +0 -1
  114. package/dist/input.js.map +0 -1
  115. package/dist/markdown.d.ts.map +0 -1
  116. package/dist/markdown.js.map +0 -1
  117. package/dist/output.d.ts.map +0 -1
  118. package/dist/output.js.map +0 -1
  119. package/dist/pdf.d.ts.map +0 -1
  120. package/dist/pdf.js.map +0 -1
  121. package/dist/postprocess.d.ts.map +0 -1
  122. package/dist/postprocess.js.map +0 -1
  123. package/dist/theme.d.ts.map +0 -1
  124. package/dist/theme.js.map +0 -1
  125. package/dist/webbook.d.ts +0 -7
  126. package/dist/webbook.d.ts.map +0 -1
  127. package/dist/webbook.js +0 -99
  128. package/dist/webbook.js.map +0 -1
  129. /package/dist/{markdown.d.ts → processor/markdown.d.ts} +0 -0
  130. /package/dist/{markdown.js → processor/markdown.js} +0 -0
@@ -1,24 +1,15 @@
1
- import AjvModule from 'ajv';
2
- import AjvFormatsModule from 'ajv-formats';
3
- import betterAjvErrors from 'better-ajv-errors';
4
1
  import chalk from 'chalk';
5
2
  import cheerio from 'cheerio';
6
3
  import fs from 'fs';
7
- import path from 'upath';
8
4
  import { pathToFileURL } from 'url';
9
- import { getExecutableBrowserPath } from './browser.js';
10
- import { MANIFEST_FILENAME, TOC_FILENAME, TOC_TITLE } from './const.js';
11
- import { CONTAINER_IMAGE } from './container.js';
12
- import { openEpubToTmpDirectory } from './epub.js';
13
- import { detectInputFormat, detectManuscriptMediaType, } from './input.js';
14
- import { readMarkdownMetadata } from './markdown.js';
15
- import { checkOutputFormat, checkPreflightMode, checkRenderMode, detectOutputFormat, } from './output.js';
16
- import { vivliostyleConfigSchema } from './schema/vivliostyle.js';
17
- import { parsePackageName } from './theme.js';
18
- import { cwd, debug, DetailError, filterRelevantAjvErrors, isUrlString, log, logWarn, readJSON, statFileSync, touchTmpFile, } from './util.js';
19
- // FIXME: https://github.com/ajv-validator/ajv/issues/2047
20
- const Ajv = AjvModule.default;
21
- const addFormats = AjvFormatsModule.default;
5
+ import { getExecutableBrowserPath } from '../browser.js';
6
+ import { COVER_HTML_FILENAME, EPUB_OUTPUT_VERSION, MANIFEST_FILENAME, TOC_FILENAME, TOC_TITLE, } from '../const.js';
7
+ import { CONTAINER_IMAGE } from '../container.js';
8
+ import { detectInputFormat, detectManuscriptMediaType, } from '../input/input-types.js';
9
+ import { checkOutputFormat, checkPreflightMode, checkRenderMode, detectOutputFormat, } from '../output/output-types.js';
10
+ import { readMarkdownMetadata } from '../processor/markdown.js';
11
+ import { parsePackageName } from '../processor/theme.js';
12
+ import { DetailError, assertVivliostyleConfigSchema, cwd, debug, isUrlString, log, logWarn, openEpubToTmpDirectory, readJSON, statFileSync, touchTmpFile, upath, } from '../util.js';
22
13
  const DEFAULT_TIMEOUT = 2 * 60 * 1000; // 2 minutes
23
14
  const DEFAULT_ASSETS = [
24
15
  '**/*.png',
@@ -37,7 +28,7 @@ export function validateTimeoutFlag(val) {
37
28
  return Number.isFinite(+val) && +val > 0 ? +val * 1000 : DEFAULT_TIMEOUT;
38
29
  }
39
30
  export function contextResolve(context, loc) {
40
- return loc && path.resolve(context, loc);
31
+ return loc && upath.resolve(context, loc);
41
32
  }
42
33
  function normalizeEntry(e) {
43
34
  if (typeof e === 'object') {
@@ -52,19 +43,19 @@ export function parseTheme({ theme, context, workspaceDir, themesDir, }) {
52
43
  if (isUrlString(specifier)) {
53
44
  return {
54
45
  type: 'uri',
55
- name: path.basename(specifier),
46
+ name: upath.basename(specifier),
56
47
  location: specifier,
57
48
  };
58
49
  }
59
50
  // bare .css file
60
- const stylePath = path.resolve(context, specifier);
51
+ const stylePath = upath.resolve(context, specifier);
61
52
  if (fs.existsSync(stylePath) && stylePath.endsWith('.css')) {
62
- const sourceRelPath = path.relative(context, stylePath);
53
+ const sourceRelPath = upath.relative(context, stylePath);
63
54
  return {
64
55
  type: 'file',
65
- name: path.basename(specifier),
56
+ name: upath.basename(specifier),
66
57
  source: stylePath,
67
- location: path.resolve(workspaceDir, sourceRelPath),
58
+ location: upath.resolve(workspaceDir, sourceRelPath),
68
59
  };
69
60
  }
70
61
  // node_modules, local pkg
@@ -80,7 +71,7 @@ export function parseTheme({ theme, context, workspaceDir, themesDir, }) {
80
71
  let name = parsed.name;
81
72
  let resolvedSpecifier = specifier;
82
73
  if (parsed.type === 'directory' && parsed.fetchSpec) {
83
- const pkgJsonPath = path.join(parsed.fetchSpec, 'package.json');
74
+ const pkgJsonPath = upath.join(parsed.fetchSpec, 'package.json');
84
75
  if (fs.existsSync(pkgJsonPath)) {
85
76
  const packageJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
86
77
  name = packageJson.name;
@@ -94,7 +85,7 @@ export function parseTheme({ theme, context, workspaceDir, themesDir, }) {
94
85
  type: 'package',
95
86
  name,
96
87
  specifier: resolvedSpecifier,
97
- location: path.join(themesDir, 'packages', name),
88
+ location: upath.join(themesDir, 'packages', name),
98
89
  importPath,
99
90
  };
100
91
  }
@@ -116,7 +107,7 @@ function parsePageSize(size) {
116
107
  }
117
108
  }
118
109
  function parseFileMetadata({ type, sourcePath, workspaceDir, themesDir, }) {
119
- const sourceDir = path.dirname(sourcePath);
110
+ const sourceDir = upath.dirname(sourcePath);
120
111
  let title;
121
112
  let themes;
122
113
  if (type === 'text/markdown') {
@@ -145,7 +136,7 @@ export async function collectVivliostyleConfig(cliFlags) {
145
136
  let config;
146
137
  let jsonRaw;
147
138
  try {
148
- if (path.extname(configPath) === '.json') {
139
+ if (upath.extname(configPath) === '.json') {
149
140
  jsonRaw = fs.readFileSync(configPath, 'utf8');
150
141
  config = JSON.parse(jsonRaw);
151
142
  }
@@ -157,28 +148,25 @@ export async function collectVivliostyleConfig(cliFlags) {
157
148
  const thrownError = error;
158
149
  throw new DetailError(`An error occurred on loading a config file: ${configPath}`, thrownError.stack ?? thrownError.message);
159
150
  }
160
- const ajv = new Ajv({ strict: false });
161
- addFormats(ajv);
162
- const validate = ajv.compile(vivliostyleConfigSchema);
163
- const valid = validate(config);
164
- if (!valid) {
165
- const message = `Validation of vivliostyle.config failed. Please check the schema: ${configPath}`;
166
- const detailMessage = validate.errors &&
167
- betterAjvErrors(vivliostyleConfigSchema, config, filterRelevantAjvErrors(validate.errors), typeof jsonRaw === 'string' ? { json: jsonRaw } : { indent: 2 });
168
- throw detailMessage
169
- ? new DetailError(message, detailMessage)
170
- : new Error(message);
151
+ try {
152
+ assertVivliostyleConfigSchema(config, typeof jsonRaw === 'string' ? { json: jsonRaw } : { indent: 2 });
153
+ }
154
+ catch (error) {
155
+ const thrownError = error;
156
+ throw new DetailError(`Validation of vivliostyle.config failed. Please check the schema: ${configPath}`, typeof thrownError === 'string'
157
+ ? thrownError
158
+ : thrownError.stack ?? thrownError.message);
171
159
  }
172
160
  return config;
173
161
  };
174
162
  let configEntry = {};
175
163
  let vivliostyleConfigPath;
176
164
  if (cliFlags.configPath) {
177
- vivliostyleConfigPath = path.resolve(cwd, cliFlags.configPath);
165
+ vivliostyleConfigPath = upath.resolve(cwd, cliFlags.configPath);
178
166
  }
179
167
  else {
180
168
  vivliostyleConfigPath = ['.js', '.mjs', '.cjs']
181
- .map((ext) => path.join(cwd, `vivliostyle.config${ext}`))
169
+ .map((ext) => upath.join(cwd, `vivliostyle.config${ext}`))
182
170
  .find((p) => fs.existsSync(p));
183
171
  }
184
172
  // let vivliostyleConfig: VivliostyleConfigSchema | undefined;
@@ -189,10 +177,10 @@ export async function collectVivliostyleConfig(cliFlags) {
189
177
  };
190
178
  }
191
179
  else if (cliFlags.input &&
192
- path.basename(cliFlags.input).startsWith('vivliostyle.config')) {
180
+ upath.basename(cliFlags.input).startsWith('vivliostyle.config')) {
193
181
  // Load an input argument as a Vivliostyle config
194
182
  try {
195
- const inputPath = path.resolve(cwd, cliFlags.input);
183
+ const inputPath = upath.resolve(cwd, cliFlags.input);
196
184
  const inputConfig = await load(inputPath);
197
185
  cliFlags = {
198
186
  ...cliFlags,
@@ -209,6 +197,9 @@ export async function collectVivliostyleConfig(cliFlags) {
209
197
  logWarn(chalk.yellowBright("'--executable-chromium' option was deprecated and will be removed in a future release. Please replace with '--executable-browser' option."));
210
198
  cliFlags.executableBrowser = cliFlags.executableChromium;
211
199
  }
200
+ if (cliFlags.verbose) {
201
+ logWarn(chalk.yellowBright("'--verbose' option was deprecated and will be removed in a future release. Please replace with '--log-level verbose' option."));
202
+ }
212
203
  return {
213
204
  cliFlags,
214
205
  ...configEntry,
@@ -220,24 +211,24 @@ export async function mergeConfig(cliFlags, config, context) {
220
211
  debug('vivliostyle.config.js', config);
221
212
  let entryContextDir;
222
213
  let workspaceDir;
223
- if (cliFlags.input && isUrlString(cliFlags.input)) {
214
+ if (cliFlags.input && !config && isUrlString(cliFlags.input)) {
224
215
  workspaceDir = entryContextDir = cwd;
225
216
  }
226
217
  else {
227
- entryContextDir = path.resolve(cliFlags.input
228
- ? path.dirname(path.resolve(context, cliFlags.input))
218
+ entryContextDir = upath.resolve(cliFlags.input && !config
219
+ ? upath.dirname(upath.resolve(context, cliFlags.input))
229
220
  : contextResolve(context, config?.entryContext) ?? context);
230
221
  workspaceDir =
231
222
  contextResolve(context, config?.workspaceDir) ?? entryContextDir;
232
223
  }
233
- const themesDir = path.join(workspaceDir, 'themes');
224
+ const themesDir = upath.join(workspaceDir, 'themes');
234
225
  const includeAssets = config?.includeAssets
235
226
  ? Array.isArray(config.includeAssets)
236
227
  ? config.includeAssets
237
228
  : [config.includeAssets]
238
229
  : DEFAULT_ASSETS;
239
- const language = cliFlags.language ?? config?.language ?? null;
240
- const readingProgression = config?.readingProgression ?? undefined;
230
+ const language = cliFlags.language ?? config?.language ?? undefined;
231
+ const readingProgression = cliFlags.readingProgression ?? config?.readingProgression ?? undefined;
241
232
  const sizeFlag = cliFlags.size ?? config?.size;
242
233
  const size = sizeFlag ? parsePageSize(sizeFlag) : undefined;
243
234
  const cropMarks = cliFlags.cropMarks ?? false;
@@ -264,7 +255,6 @@ export async function mergeConfig(cliFlags, config, context) {
264
255
  hardLineBreaks: config?.vfm?.hardLineBreaks ?? false,
265
256
  disableFormatHtml: config?.vfm?.disableFormatHtml ?? false,
266
257
  };
267
- const verbose = cliFlags.verbose ?? false;
268
258
  const timeout = cliFlags.timeout ?? config?.timeout ?? DEFAULT_TIMEOUT;
269
259
  const sandbox = cliFlags.sandbox ?? true;
270
260
  const browserType = cliFlags.browser ?? config?.browser ?? 'chromium';
@@ -273,6 +263,9 @@ export async function mergeConfig(cliFlags, config, context) {
273
263
  const httpServer = cliFlags.http ?? config?.http ?? false;
274
264
  const viewer = cliFlags.viewer ?? config?.viewer ?? undefined;
275
265
  const viewerParam = cliFlags.viewerParam ?? config?.viewerParam ?? undefined;
266
+ const logLevel = cliFlags.logLevel ??
267
+ ((cliFlags.verbose && 'verbose') || undefined) ??
268
+ 'silent';
276
269
  const rootThemes = cliFlags.theme
277
270
  ? [
278
271
  parseTheme({
@@ -296,16 +289,23 @@ export async function mergeConfig(cliFlags, config, context) {
296
289
  return cliFlags.targets.map(({ path: outputPath, format }) => {
297
290
  if (format === 'pdf') {
298
291
  return {
299
- path: path.resolve(outputPath),
292
+ path: upath.resolve(outputPath),
300
293
  format,
301
294
  renderMode,
302
295
  preflight,
303
296
  preflightOption,
304
297
  };
305
298
  }
299
+ else if (format === 'epub') {
300
+ return {
301
+ path: upath.resolve(outputPath),
302
+ format,
303
+ version: EPUB_OUTPUT_VERSION,
304
+ };
305
+ }
306
306
  else {
307
307
  return {
308
- path: path.resolve(outputPath),
308
+ path: upath.resolve(outputPath),
309
309
  format,
310
310
  };
311
311
  }
@@ -314,7 +314,7 @@ export async function mergeConfig(cliFlags, config, context) {
314
314
  if (config?.output) {
315
315
  return (Array.isArray(config.output) ? config.output : [config.output]).map((target) => {
316
316
  const targetObj = typeof target === 'string' ? { path: target } : target;
317
- const outputPath = path.resolve(context, targetObj.path);
317
+ const outputPath = upath.resolve(context, targetObj.path);
318
318
  const format = targetObj.format ?? detectOutputFormat(outputPath);
319
319
  if (!checkOutputFormat(format)) {
320
320
  throw new Error(`Unknown format: ${format}`);
@@ -347,7 +347,7 @@ export async function mergeConfig(cliFlags, config, context) {
347
347
  const filename = config?.title ? `${config.title}.pdf` : 'output.pdf';
348
348
  return [
349
349
  {
350
- path: path.resolve(context, filename),
350
+ path: upath.resolve(context, filename),
351
351
  format: 'pdf',
352
352
  renderMode,
353
353
  preflight,
@@ -376,7 +376,6 @@ export async function mergeConfig(cliFlags, config, context) {
376
376
  readingProgression,
377
377
  vfmOptions,
378
378
  cover,
379
- verbose,
380
379
  timeout,
381
380
  sandbox,
382
381
  executableBrowser,
@@ -385,6 +384,7 @@ export async function mergeConfig(cliFlags, config, context) {
385
384
  httpServer,
386
385
  viewer,
387
386
  viewerParam,
387
+ logLevel,
388
388
  };
389
389
  if (!cliFlags.input && !config) {
390
390
  throw new Error('No input is set. Please set an appropriate entry or a Vivliostyle config file.');
@@ -399,19 +399,19 @@ export async function mergeConfig(cliFlags, config, context) {
399
399
  async function composeSingleInputConfig(otherConfig, cliFlags, config) {
400
400
  debug('entering single entry config mode');
401
401
  let sourcePath;
402
- let workspaceDir;
403
402
  let input;
403
+ const title = cliFlags.title ?? config?.title;
404
+ const author = cliFlags.author ?? config?.author;
405
+ const workspaceDir = otherConfig.workspaceDir;
404
406
  const entries = [];
405
407
  const exportAliases = [];
406
408
  const tmpPrefix = `.vs-${Date.now()}.`;
407
409
  if (cliFlags.input && isUrlString(cliFlags.input)) {
408
410
  sourcePath = cliFlags.input;
409
- workspaceDir = otherConfig.workspaceDir;
410
411
  input = { format: 'webbook', entry: sourcePath };
411
412
  }
412
413
  else {
413
- sourcePath = path.resolve(cliFlags.input);
414
- workspaceDir = path.dirname(sourcePath);
414
+ sourcePath = upath.resolve(cliFlags.input);
415
415
  input = detectInputFormat(sourcePath);
416
416
  // Check file exists
417
417
  statFileSync(sourcePath);
@@ -420,8 +420,9 @@ async function composeSingleInputConfig(otherConfig, cliFlags, config) {
420
420
  // Single input file; create temporary file
421
421
  const type = detectManuscriptMediaType(sourcePath);
422
422
  const metadata = parseFileMetadata({ type, sourcePath, workspaceDir });
423
- const target = path
424
- .resolve(workspaceDir, `${tmpPrefix}${path.basename(sourcePath)}`)
423
+ const relDir = upath.relative(otherConfig.entryContextDir, upath.dirname(sourcePath));
424
+ const target = upath
425
+ .resolve(workspaceDir, relDir, `${tmpPrefix}${upath.basename(sourcePath)}`)
425
426
  .replace(/\.md$/, '.html');
426
427
  await touchTmpFile(target);
427
428
  const themes = metadata.themes ?? [...otherConfig.rootThemes];
@@ -435,35 +436,41 @@ async function composeSingleInputConfig(otherConfig, cliFlags, config) {
435
436
  });
436
437
  exportAliases.push({
437
438
  source: target,
438
- target: path.resolve(workspaceDir, path.basename(sourcePath).replace(/\.md$/, '.html')),
439
+ target: upath.resolve(upath.dirname(target), upath.basename(sourcePath).replace(/\.md$/, '.html')),
439
440
  });
440
441
  }
442
+ let fallbackTitle;
441
443
  const manifestDeclaration = await (async () => {
442
444
  if (input.format === 'markdown') {
443
445
  // create temporary manifest file
444
- const manifestPath = path.resolve(workspaceDir, `${tmpPrefix}${MANIFEST_FILENAME}`);
446
+ const manifestPath = upath.resolve(workspaceDir, `${tmpPrefix}${MANIFEST_FILENAME}`);
445
447
  await touchTmpFile(manifestPath);
446
448
  exportAliases.push({
447
449
  source: manifestPath,
448
- target: path.resolve(workspaceDir, MANIFEST_FILENAME),
450
+ target: upath.resolve(workspaceDir, MANIFEST_FILENAME),
449
451
  });
450
- return {
451
- manifestPath,
452
- manifestAutoGenerate: {
453
- title: cliFlags.title ??
454
- config?.title ??
455
- (entries.length === 1 && entries[0].title
456
- ? entries[0].title
457
- : path.basename(sourcePath)),
458
- author: cliFlags.author ?? config?.author ?? '',
459
- },
460
- };
452
+ fallbackTitle =
453
+ entries.length === 1 && entries[0].title
454
+ ? entries[0].title
455
+ : upath.basename(sourcePath);
456
+ return { manifestPath, needToGenerateManifest: true };
461
457
  }
462
458
  else if (input.format === 'html' || input.format === 'webbook') {
463
- return { webbookEntryPath: input.entry };
459
+ const url = isUrlString(input.entry)
460
+ ? new URL(input.entry)
461
+ : pathToFileURL(input.entry);
462
+ // Ensures trailing slash or explicit HTML extensions
463
+ if ((url.protocol === 'http:' || url.protocol === 'https:') &&
464
+ !url.pathname.endsWith('/') &&
465
+ !/\.html?$/.test(url.pathname)) {
466
+ url.pathname = `${url.pathname}/`;
467
+ }
468
+ return {
469
+ webbookEntryUrl: url.href,
470
+ };
464
471
  }
465
472
  else if (input.format === 'pub-manifest') {
466
- return { manifestPath: input.entry, manifestAutoGenerate: null };
473
+ return { manifestPath: input.entry };
467
474
  }
468
475
  else if (input.format === 'epub-opf') {
469
476
  return { epubOpfPath: input.entry };
@@ -482,19 +489,22 @@ async function composeSingleInputConfig(otherConfig, cliFlags, config) {
482
489
  entries,
483
490
  input,
484
491
  exportAliases,
492
+ title: title || fallbackTitle,
493
+ author: author,
485
494
  };
486
495
  }
487
496
  async function composeProjectConfig(otherConfig, cliFlags, config, context) {
488
497
  debug('entering project config mode');
489
498
  const { entryContextDir, workspaceDir, themesDir, themeIndexes, rootThemes, outputs, } = otherConfig;
490
- const pkgJsonPath = path.resolve(entryContextDir, 'package.json');
499
+ const pkgJsonPath = upath.resolve(entryContextDir, 'package.json');
491
500
  const pkgJson = fs.existsSync(pkgJsonPath)
492
501
  ? readJSON(pkgJsonPath)
493
502
  : undefined;
494
503
  if (pkgJson) {
495
504
  debug('located package.json path', pkgJsonPath);
496
505
  }
497
- const autoGeneratedTocPath = path.resolve(workspaceDir, typeof config?.toc === 'string' ? config.toc : TOC_FILENAME);
506
+ const autoGeneratedTocPath = upath.resolve(workspaceDir, typeof config?.toc === 'string' ? config.toc : TOC_FILENAME);
507
+ const autoGeneratedCoverPah = upath.resolve(workspaceDir, COVER_HTML_FILENAME);
498
508
  const projectTitle = cliFlags.title ?? config?.title ?? pkgJson?.name;
499
509
  const projectAuthor = cliFlags.author ?? config?.author ?? pkgJson?.author;
500
510
  function parseEntry(entry) {
@@ -515,9 +525,9 @@ async function composeProjectConfig(otherConfig, cliFlags, config, context) {
515
525
  themes,
516
526
  };
517
527
  }
518
- const sourcePath = path.resolve(entryContextDir, entry.path); // abs
519
- const contextEntryPath = path.relative(entryContextDir, sourcePath); // rel
520
- const targetPath = path
528
+ const sourcePath = upath.resolve(entryContextDir, entry.path); // abs
529
+ const contextEntryPath = upath.relative(entryContextDir, sourcePath); // rel
530
+ const targetPath = upath
521
531
  .resolve(workspaceDir, contextEntryPath)
522
532
  .replace(/\.md$/, '.html');
523
533
  if (!isUrlString(sourcePath)) {
@@ -555,13 +565,13 @@ async function composeProjectConfig(otherConfig, cliFlags, config, context) {
555
565
  if (!entries.length) {
556
566
  throw new Error('The entry fields seems to be empty. Make sure your Vivliostyle configuration.');
557
567
  }
558
- let fallbackProjectTitle = '';
568
+ let fallbackProjectTitle;
559
569
  if (!projectTitle) {
560
570
  if (entries.length === 1 && entries[0].title) {
561
571
  fallbackProjectTitle = entries[0].title;
562
572
  }
563
573
  else {
564
- fallbackProjectTitle = path.basename(outputs[0].path);
574
+ fallbackProjectTitle = upath.basename(outputs[0].path);
565
575
  log(`\n${chalk.yellow('Could not find any appropriate publication title. We set ')}${chalk.bold.yellow(`"${fallbackProjectTitle}"`)}${chalk.yellow(' as a fallback.')}`);
566
576
  }
567
577
  }
@@ -573,19 +583,25 @@ async function composeProjectConfig(otherConfig, cliFlags, config, context) {
573
583
  themes: [...rootThemes],
574
584
  });
575
585
  }
586
+ if (config?.cover && !entries.find(({ rel }) => rel === 'cover')) {
587
+ entries.unshift({
588
+ rel: 'cover',
589
+ target: autoGeneratedCoverPah,
590
+ themes: [],
591
+ });
592
+ }
576
593
  return {
577
594
  ...otherConfig,
578
595
  entries,
579
596
  input: {
580
597
  format: 'pub-manifest',
581
- entry: path.join(workspaceDir, MANIFEST_FILENAME),
598
+ entry: upath.join(workspaceDir, MANIFEST_FILENAME),
582
599
  },
583
600
  exportAliases: [],
584
- manifestPath: path.join(workspaceDir, MANIFEST_FILENAME),
585
- manifestAutoGenerate: {
586
- title: projectTitle || fallbackProjectTitle,
587
- author: projectAuthor || '',
588
- },
601
+ manifestPath: upath.join(workspaceDir, MANIFEST_FILENAME),
602
+ title: projectTitle || fallbackProjectTitle,
603
+ author: projectAuthor,
604
+ needToGenerateManifest: true,
589
605
  };
590
606
  }
591
607
  export function checkUnusedCliFlags(config, cliFlags) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/input/config.ts"],"names":[],"mappings":"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"}
@@ -31,4 +31,4 @@ export declare const manuscriptMediaTypes: readonly ["text/markdown", "text/html
31
31
  export type ManuscriptMediaType = typeof manuscriptMediaTypes[number];
32
32
  export declare function detectManuscriptMediaType(entry: string): ManuscriptMediaType;
33
33
  export {};
34
- //# sourceMappingURL=input.d.ts.map
34
+ //# sourceMappingURL=input-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-types.d.ts","sourceRoot":"","sources":["../../src/input/input-types.ts"],"names":[],"mappings":"AAGA,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,MAAM,EAAE,CAAC,CAAC;CACX;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB,CAAC,UAAU,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAgB,SAAQ,gBAAgB,CAAC,MAAM,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAa,SAAQ,gBAAgB,CAAC,SAAS,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB,CAAC,cAAc,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4BAA4B;AAC5B,MAAM,WAAW,SAAU,SAAQ,gBAAgB,CAAC,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAa,SAAQ,gBAAgB,CAAC,UAAU,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,SAAS,GACT,YAAY,CAAC;AAEjB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAc5D;AAED,eAAO,MAAM,oBAAoB,kEAIvB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEtE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAM5E"}
@@ -1,7 +1,7 @@
1
1
  import { lookup as mime } from 'mime-types';
2
- import path from 'upath';
2
+ import { upath } from '../util.js';
3
3
  export function detectInputFormat(entry) {
4
- const lowerCasedExt = path.extname(entry).toLowerCase();
4
+ const lowerCasedExt = upath.extname(entry).toLowerCase();
5
5
  if (lowerCasedExt === '.md' || lowerCasedExt === '.markdown') {
6
6
  return { format: 'markdown', entry };
7
7
  }
@@ -31,4 +31,4 @@ export function detectManuscriptMediaType(entry) {
31
31
  }
32
32
  throw new Error(`Invalid manuscript type ${mediaType} detected: ${entry}`);
33
33
  }
34
- //# sourceMappingURL=input.js.map
34
+ //# sourceMappingURL=input-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-types.js","sourceRoot":"","sources":["../../src/input/input-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA4CnC,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,WAAW,EAAE;QAC5D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KACtC;SAAM,IAAI,aAAa,KAAK,OAAO,IAAI,aAAa,KAAK,SAAS,EAAE;QACnE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;KAC1C;SAAM,IAAI,aAAa,KAAK,OAAO,EAAE;QACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KAClC;SAAM,IAAI,aAAa,KAAK,MAAM,EAAE;QACnC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KACtC;SAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;QACtE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;KACrC;IACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,eAAe;IACf,WAAW;IACX,uBAAuB;CACf,CAAC;AAGX,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,oBAAoB,CAAC,QAAQ,CAAC,SAAgC,CAAC,EAAE;QACnE,OAAO,SAAgC,CAAC;KACzC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,cAAc,KAAK,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PublicationManifest } from '../schema/publication.schema.js';
2
+ export declare function exportEpub({ webpubDir, entryHtmlFile, entryContextUrl, manifest, target, epubVersion, }: {
3
+ webpubDir: string;
4
+ entryHtmlFile?: string;
5
+ entryContextUrl?: string;
6
+ manifest: PublicationManifest;
7
+ target: string;
8
+ epubVersion: '3.0';
9
+ }): Promise<void>;
10
+ //# sourceMappingURL=epub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epub.d.ts","sourceRoot":"","sources":["../../src/output/epub.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAKV,mBAAmB,EAEpB,MAAM,iCAAiC,CAAC;AAkFzC,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,aAAa,EACb,eAAe,EACf,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,CAAC;CACpB,iBA0OA"}