@vivliostyle/cli 10.0.0 → 10.0.2

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 (36) hide show
  1. package/dist/{chunk-5K3NGLBV.js → chunk-5LYC7YI6.js} +5 -5
  2. package/dist/{chunk-2M2KXPDN.js → chunk-62AC6XGJ.js} +4 -4
  3. package/dist/{chunk-YN3JNBNT.js → chunk-BR2V7MHE.js} +7 -7
  4. package/dist/{chunk-IIKRNYAM.js → chunk-CKXFRCPH.js} +2 -2
  5. package/dist/{chunk-ZIK6DINS.js → chunk-E6QVHS6D.js} +1 -2
  6. package/dist/chunk-E6QVHS6D.js.map +1 -0
  7. package/dist/{chunk-YVNDJXMI.js → chunk-G34B36B2.js} +21 -12
  8. package/dist/chunk-G34B36B2.js.map +1 -0
  9. package/dist/{chunk-5DB6XVJN.js → chunk-LVS2NLYC.js} +2 -2
  10. package/dist/{chunk-RPMMYPTR.js → chunk-O3CBPX4R.js} +18 -11
  11. package/dist/chunk-O3CBPX4R.js.map +1 -0
  12. package/dist/{chunk-MQYXBSRJ.js → chunk-T2VWLU2I.js} +3 -3
  13. package/dist/{chunk-ZKEIYNLT.js → chunk-ZEBXHUJX.js} +4 -1
  14. package/dist/{chunk-ZKEIYNLT.js.map → chunk-ZEBXHUJX.js.map} +1 -1
  15. package/dist/cli.js +1 -1
  16. package/dist/commands/build.js +7 -7
  17. package/dist/commands/create.js +4 -5
  18. package/dist/commands/create.js.map +1 -1
  19. package/dist/commands/init.js +4 -5
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/preview.js +7 -7
  22. package/dist/config/schema.js +2 -2
  23. package/dist/index.js +10 -10
  24. package/dist/node-modules.d.ts +1 -3
  25. package/dist/node-modules.js +1 -1
  26. package/dist/vite-adapter.js +6 -6
  27. package/package.json +2 -2
  28. package/dist/chunk-RPMMYPTR.js.map +0 -1
  29. package/dist/chunk-YVNDJXMI.js.map +0 -1
  30. package/dist/chunk-ZIK6DINS.js.map +0 -1
  31. /package/dist/{chunk-5K3NGLBV.js.map → chunk-5LYC7YI6.js.map} +0 -0
  32. /package/dist/{chunk-2M2KXPDN.js.map → chunk-62AC6XGJ.js.map} +0 -0
  33. /package/dist/{chunk-YN3JNBNT.js.map → chunk-BR2V7MHE.js.map} +0 -0
  34. /package/dist/{chunk-IIKRNYAM.js.map → chunk-CKXFRCPH.js.map} +0 -0
  35. /package/dist/{chunk-5DB6XVJN.js.map → chunk-LVS2NLYC.js.map} +0 -0
  36. /package/dist/{chunk-MQYXBSRJ.js.map → chunk-T2VWLU2I.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveViteConfig
3
- } from "./chunk-5DB6XVJN.js";
3
+ } from "./chunk-LVS2NLYC.js";
4
4
  import {
5
5
  createViteServer,
6
6
  getViewerFullUrl,
@@ -9,16 +9,16 @@ import {
9
9
  mergeInlineConfig,
10
10
  resolveTaskConfig,
11
11
  warnDeprecatedConfig
12
- } from "./chunk-YN3JNBNT.js";
12
+ } from "./chunk-BR2V7MHE.js";
13
13
  import {
14
14
  Logger,
15
15
  isUnicodeSupported,
16
16
  randomBookSymbol,
17
17
  setupConfigFromFlags
18
- } from "./chunk-MQYXBSRJ.js";
18
+ } from "./chunk-T2VWLU2I.js";
19
19
  import {
20
20
  cliVersion
21
- } from "./chunk-ZKEIYNLT.js";
21
+ } from "./chunk-ZEBXHUJX.js";
22
22
  import {
23
23
  __callDispose,
24
24
  __using
@@ -84,4 +84,4 @@ ${blueBright("\u2559\u2500")} ${dim(`Preview URL: ${terminalLink(url, url, { fal
84
84
  export {
85
85
  preview
86
86
  };
87
- //# sourceMappingURL=chunk-5K3NGLBV.js.map
87
+ //# sourceMappingURL=chunk-5LYC7YI6.js.map
@@ -7,14 +7,14 @@ import {
7
7
  vsStaticServePlugin,
8
8
  vsViewerPlugin,
9
9
  warnDeprecatedConfig
10
- } from "./chunk-YN3JNBNT.js";
10
+ } from "./chunk-BR2V7MHE.js";
11
11
  import {
12
12
  Logger,
13
13
  setupConfigFromFlags
14
- } from "./chunk-MQYXBSRJ.js";
14
+ } from "./chunk-T2VWLU2I.js";
15
15
  import {
16
16
  VivliostyleInlineConfig
17
- } from "./chunk-IIKRNYAM.js";
17
+ } from "./chunk-CKXFRCPH.js";
18
18
 
19
19
  // src/vite-adapter.ts
20
20
  import * as v from "valibot";
@@ -53,4 +53,4 @@ async function createVitePlugin(inlineConfig = {}) {
53
53
  export {
54
54
  createVitePlugin
55
55
  };
56
- //# sourceMappingURL=chunk-2M2KXPDN.js.map
56
+ //# sourceMappingURL=chunk-62AC6XGJ.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ importNodeModule
3
+ } from "./chunk-E6QVHS6D.js";
1
4
  import {
2
5
  DetailError,
3
6
  GlobMatcher,
@@ -30,10 +33,10 @@ import {
30
33
  touchTmpFile,
31
34
  useTmpDirectory,
32
35
  writeFileIfChanged
33
- } from "./chunk-MQYXBSRJ.js";
36
+ } from "./chunk-T2VWLU2I.js";
34
37
  import {
35
38
  VivliostyleConfigSchema
36
- } from "./chunk-IIKRNYAM.js";
39
+ } from "./chunk-CKXFRCPH.js";
37
40
  import {
38
41
  CONTAINER_LOCAL_HOSTNAME,
39
42
  CONTAINER_URL,
@@ -54,10 +57,7 @@ import {
54
57
  XML_DECLARATION,
55
58
  cliVersion,
56
59
  viewerRoot
57
- } from "./chunk-ZKEIYNLT.js";
58
- import {
59
- importNodeModule
60
- } from "./chunk-ZIK6DINS.js";
60
+ } from "./chunk-ZEBXHUJX.js";
61
61
  import {
62
62
  __callDispose,
63
63
  __using
@@ -4036,4 +4036,4 @@ export {
4036
4036
  getViewerFullUrl,
4037
4037
  createViteServer
4038
4038
  };
4039
- //# sourceMappingURL=chunk-YN3JNBNT.js.map
4039
+ //# sourceMappingURL=chunk-BR2V7MHE.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CONTAINER_URL,
3
3
  cliVersion
4
- } from "./chunk-ZKEIYNLT.js";
4
+ } from "./chunk-ZEBXHUJX.js";
5
5
 
6
6
  // src/config/schema.ts
7
7
  import { satisfies as semverSatisfies } from "semver";
@@ -1332,4 +1332,4 @@ export {
1332
1332
  VivliostyleTemplateMetadata,
1333
1333
  VivliostylePackageMetadata
1334
1334
  };
1335
- //# sourceMappingURL=chunk-IIKRNYAM.js.map
1335
+ //# sourceMappingURL=chunk-CKXFRCPH.js.map
@@ -3,7 +3,6 @@ var nodeExternalModules = [
3
3
  "@napi-rs/canvas",
4
4
  "@puppeteer/browsers",
5
5
  "command-exists",
6
- "execa",
7
6
  "press-ready",
8
7
  "pdf-lib",
9
8
  "puppeteer-core"
@@ -14,4 +13,4 @@ export {
14
13
  nodeExternalModules,
15
14
  importNodeModule
16
15
  };
17
- //# sourceMappingURL=chunk-ZIK6DINS.js.map
16
+ //# sourceMappingURL=chunk-E6QVHS6D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node-modules.ts"],"sourcesContent":["// List the libraries that are assumed to run in the Node.js environment\n// but are not required to run the Vivliostyle CLI.\n// Mark these modules as dynamic imports to prevent execution failure\n// when trying to import unnecessary modules in a standalone environment.\nexport const nodeExternalModules = [\n '@napi-rs/canvas',\n '@puppeteer/browsers',\n 'command-exists',\n 'press-ready',\n 'pdf-lib',\n 'puppeteer-core',\n] as const;\n\ntype NodeExternalModules = {\n '@napi-rs/canvas': typeof import('@napi-rs/canvas');\n '@puppeteer/browsers': typeof import('@puppeteer/browsers');\n 'command-exists': typeof import('command-exists');\n 'press-ready': typeof import('press-ready');\n 'pdf-lib': typeof import('pdf-lib');\n 'puppeteer-core': typeof import('puppeteer-core');\n};\n\nexport const importNodeModule = <\n T extends (typeof nodeExternalModules)[number],\n>(\n name: T,\n) => import(name) as Promise<NodeExternalModules[T]>;\n"],"mappings":";AAIO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,IAAM,mBAAmB,CAG9B,SACG,OAAO;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveViteConfig
3
- } from "./chunk-5DB6XVJN.js";
3
+ } from "./chunk-LVS2NLYC.js";
4
4
  import {
5
5
  buildWebPublication,
6
6
  cleanupWorkspace,
@@ -16,7 +16,10 @@ import {
16
16
  prepareThemeDirectory,
17
17
  resolveTaskConfig,
18
18
  warnDeprecatedConfig
19
- } from "./chunk-YN3JNBNT.js";
19
+ } from "./chunk-BR2V7MHE.js";
20
+ import {
21
+ importNodeModule
22
+ } from "./chunk-E6QVHS6D.js";
20
23
  import {
21
24
  Logger,
22
25
  copyAssets,
@@ -29,15 +32,12 @@ import {
29
32
  randomBookSymbol,
30
33
  runExitHandlers,
31
34
  setupConfigFromFlags
32
- } from "./chunk-MQYXBSRJ.js";
35
+ } from "./chunk-T2VWLU2I.js";
33
36
  import {
34
37
  CONTAINER_LOCAL_HOSTNAME,
35
38
  CONTAINER_ROOT_DIR,
36
39
  coreVersion
37
- } from "./chunk-ZKEIYNLT.js";
38
- import {
39
- importNodeModule
40
- } from "./chunk-ZIK6DINS.js";
40
+ } from "./chunk-ZEBXHUJX.js";
41
41
  import {
42
42
  __callDispose,
43
43
  __using
@@ -53,6 +53,7 @@ import { cyan as cyan2, gray as gray2 } from "yoctocolors";
53
53
  // src/container.ts
54
54
  import process2 from "node:process";
55
55
  import { fileURLToPath, pathToFileURL } from "node:url";
56
+ import { x } from "tinyexec";
56
57
  import upath from "upath";
57
58
  function toContainerPath(urlOrAbsPath) {
58
59
  if (isValidUri(urlOrAbsPath)) {
@@ -125,11 +126,19 @@ async function runContainer({
125
126
  ...commandArgs
126
127
  ];
127
128
  Logger.debug(`docker ${args.join(" ")}`);
128
- const { execa } = await importNodeModule("execa");
129
- const proc = execa("docker", args, {
130
- stdio: "inherit"
129
+ const proc = x("docker", args, {
130
+ throwOnError: true,
131
+ nodeOptions: {
132
+ stdio: Logger.isInteractive ? "inherit" : void 0
133
+ }
131
134
  });
132
- await proc;
135
+ if (Logger.isInteractive) {
136
+ await proc;
137
+ } else {
138
+ for await (const line of proc) {
139
+ Logger.log(line);
140
+ }
141
+ }
133
142
  } catch (_) {
134
143
  var _error = _, _hasError = true;
135
144
  } finally {
@@ -745,4 +754,4 @@ async function build(inlineConfig, { containerForkMode = false } = {}) {
745
754
  export {
746
755
  build
747
756
  };
748
- //# sourceMappingURL=chunk-YVNDJXMI.js.map
757
+ //# sourceMappingURL=chunk-G34B36B2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/build.ts","../src/container.ts","../src/output/pdf.ts","../src/output/pdf-postprocess.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport terminalLink from 'terminal-link';\nimport upath from 'upath';\nimport { type PreviewServer, build as viteBuild } from 'vite';\nimport { cyan, gray } from 'yoctocolors';\nimport { setupConfigFromFlags } from '../commands/cli-flags.js';\nimport { loadVivliostyleConfig, warnDeprecatedConfig } from '../config/load.js';\nimport { mergeConfig, mergeInlineConfig } from '../config/merge.js';\nimport { isWebPubConfig, resolveTaskConfig } from '../config/resolve.js';\nimport type { ParsedVivliostyleInlineConfig } from '../config/schema.js';\nimport { resolveViteConfig } from '../config/vite.js';\nimport { buildPDFWithContainer } from '../container.js';\nimport { isUnicodeSupported, Logger, randomBookSymbol } from '../logger.js';\nimport { buildPDF } from '../output/pdf.js';\nimport { buildWebPublication } from '../output/webbook.js';\nimport { copyAssets } from '../processor/asset.js';\nimport {\n cleanupWorkspace,\n compile,\n prepareThemeDirectory,\n} from '../processor/compile.js';\nimport { createViteServer } from '../server.js';\nimport { cwd, runExitHandlers } from '../util.js';\n\nexport async function build(\n inlineConfig: ParsedVivliostyleInlineConfig,\n { containerForkMode = false }: { containerForkMode?: boolean } = {},\n) {\n Logger.setLogOptions(inlineConfig);\n if (containerForkMode) {\n Logger.setLogPrefix(gray('[Docker]'));\n }\n Logger.debug('build > inlineConfig %O', inlineConfig);\n\n let vivliostyleConfig =\n (await loadVivliostyleConfig(inlineConfig)) ??\n setupConfigFromFlags(inlineConfig);\n warnDeprecatedConfig(vivliostyleConfig);\n vivliostyleConfig = mergeInlineConfig(vivliostyleConfig, {\n ...inlineConfig,\n quick: false,\n });\n const { inlineOptions } = vivliostyleConfig;\n Logger.debug('build > vivliostyleConfig %O', vivliostyleConfig);\n\n for (let [i, task] of vivliostyleConfig.tasks.entries()) {\n using _ = Logger.startLogging('Start building');\n\n let config = resolveTaskConfig(task, inlineOptions);\n Logger.debug('build > config %O', config);\n const viteConfig = await resolveViteConfig({\n ...config,\n mode: 'build',\n });\n\n let server: PreviewServer | undefined;\n if (!containerForkMode) {\n // build dependents first\n Logger.debug('build > viteConfig.configFile %s', viteConfig.configFile);\n if (viteConfig.configFile && typeof config.serverRootDir === 'string') {\n using _ = Logger.suspendLogging('Building Vite project');\n await viteBuild({\n configFile: viteConfig.configFile,\n root: config.serverRootDir,\n });\n }\n\n if (!inlineConfig.disableServerStartup) {\n server = await createViteServer({\n config,\n viteConfig,\n inlineConfig,\n mode: 'build',\n });\n\n if (server.httpServer) {\n const addressInfo = server.httpServer.address();\n if (addressInfo && typeof addressInfo !== 'string') {\n const actualPort = addressInfo.port;\n vivliostyleConfig = mergeConfig(vivliostyleConfig, {\n temporaryFilePrefix: config.temporaryFilePrefix,\n server: {\n ...server.config.preview,\n port: actualPort,\n },\n });\n config = resolveTaskConfig(\n vivliostyleConfig.tasks[i],\n vivliostyleConfig.inlineOptions,\n );\n }\n }\n }\n\n // build artifacts\n if (isWebPubConfig(config)) {\n await cleanupWorkspace(config);\n await prepareThemeDirectory(config);\n await compile(config);\n await copyAssets(config);\n }\n }\n\n // generate files\n for (const target of config.outputs) {\n let output: string | null = null;\n const { format } = target;\n if (format === 'pdf') {\n if (!containerForkMode && target.renderMode === 'docker') {\n output = await buildPDFWithContainer({\n target,\n config,\n inlineConfig,\n });\n } else {\n output = await buildPDF({ target, config });\n }\n } else if (format === 'webpub' || format === 'epub') {\n output = await buildWebPublication({ target, config });\n }\n if (output && !containerForkMode) {\n const formattedOutput = cyan(\n upath.relative(inlineConfig.cwd ?? cwd, output),\n );\n Logger.logSuccess(\n `Finished building ${terminalLink(\n formattedOutput,\n pathToFileURL(output).href,\n {\n fallback: () => formattedOutput,\n },\n )}`,\n );\n }\n }\n\n await server?.close();\n }\n\n runExitHandlers();\n if (!containerForkMode) {\n const num = vivliostyleConfig.tasks.flatMap((t) => t.output ?? []).length;\n const symbol = isUnicodeSupported\n ? `${num > 1 ? '📚' : randomBookSymbol} `\n : '';\n Logger.log(`${symbol}Built successfully!`);\n }\n}\n","import process from 'node:process';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { x } from 'tinyexec';\nimport upath from 'upath';\nimport type { PdfOutput, ResolvedTaskConfig } from './config/resolve.js';\nimport type { ParsedVivliostyleInlineConfig } from './config/schema.js';\nimport { CONTAINER_LOCAL_HOSTNAME, CONTAINER_ROOT_DIR } from './const.js';\nimport { Logger } from './logger.js';\nimport { importNodeModule } from './node-modules.js';\nimport { getSourceUrl } from './server.js';\nimport { exec, isValidUri, pathEquals } from './util.js';\n\nexport function toContainerPath(urlOrAbsPath: string): string {\n if (isValidUri(urlOrAbsPath)) {\n if (urlOrAbsPath.toLowerCase().startsWith('file')) {\n return pathToFileURL(\n upath.posix.join(\n CONTAINER_ROOT_DIR,\n upath.toUnix(fileURLToPath(urlOrAbsPath)).replace(/^\\w:/, ''),\n ),\n ).href;\n } else {\n return urlOrAbsPath;\n }\n }\n return upath.posix.join(\n CONTAINER_ROOT_DIR,\n upath.toUnix(urlOrAbsPath).replace(/^\\w:/, ''),\n );\n}\n\nexport function collectVolumeArgs(mountPoints: string[]): string[] {\n return mountPoints\n .filter((p, i, array) => {\n if (i !== array.indexOf(p)) {\n // duplicated path\n return false;\n }\n let parent = p;\n while (!pathEquals(parent, upath.dirname(parent))) {\n parent = upath.dirname(parent);\n if (array.includes(parent)) {\n // other mount point contains its directory\n return false;\n }\n }\n return true;\n })\n .map((p) => `${p}:${toContainerPath(p)}`);\n}\n\nexport async function runContainer({\n image,\n userVolumeArgs,\n commandArgs,\n entrypoint,\n env,\n workdir,\n}: {\n image: string;\n userVolumeArgs: string[];\n commandArgs: string[];\n entrypoint?: string;\n env?: [string, string][];\n workdir?: string;\n}) {\n const { default: commandExists } = await importNodeModule('command-exists');\n if (!(await commandExists('docker'))) {\n throw new Error(\n `Docker isn't be installed. To use this feature, you'll need to install Docker.`,\n );\n }\n const version = (\n await exec('docker', ['version', '--format', '{{.Server.Version}}'])\n ).stdout;\n const [major, minor] = version.split('.').map(Number);\n if (major < 20 || (major === 20 && minor < 10)) {\n throw new Error(\n `Docker version ${version} is not supported. Please upgrade to Docker 20.10.0 or later.`,\n );\n }\n\n try {\n using _ = Logger.suspendLogging('Launching docker container');\n const args = [\n 'run',\n ...(Logger.isInteractive ? ['-it'] : []),\n '--rm',\n ...(entrypoint ? ['--entrypoint', entrypoint] : []),\n ...(env ? env.flatMap(([k, v]) => ['-e', `${k}=${v}`]) : []),\n ...(process.env.DEBUG\n ? ['-e', `DEBUG=${process.env.DEBUG}`] // escape seems to work well\n : []),\n ...userVolumeArgs.flatMap((arg) => ['-v', arg]),\n ...(workdir ? ['-w', workdir] : []),\n image,\n ...commandArgs,\n ];\n Logger.debug(`docker ${args.join(' ')}`);\n const proc = x('docker', args, {\n throwOnError: true,\n nodeOptions: {\n stdio: Logger.isInteractive ? 'inherit' : undefined,\n },\n });\n if (Logger.isInteractive) {\n await proc;\n } else {\n for await (const line of proc) {\n Logger.log(line);\n }\n }\n } catch (error) {\n throw new Error(\n 'An error occurred on the running container. Please see logs above.',\n );\n }\n}\n\nexport async function buildPDFWithContainer({\n target,\n config,\n inlineConfig,\n}: {\n target: PdfOutput;\n config: ResolvedTaskConfig;\n inlineConfig: ParsedVivliostyleInlineConfig;\n}): Promise<string | null> {\n const sourceUrl = new URL(await getSourceUrl(config));\n if (sourceUrl.origin === config.rootUrl) {\n sourceUrl.hostname = CONTAINER_LOCAL_HOSTNAME;\n }\n const bypassedOption = {\n ...inlineConfig,\n input: {\n format: 'webbook',\n entry: sourceUrl.href,\n },\n output: [\n {\n ...target,\n path: toContainerPath(target.path),\n },\n ],\n host: CONTAINER_LOCAL_HOSTNAME,\n } satisfies ParsedVivliostyleInlineConfig;\n\n await runContainer({\n image: config.image,\n userVolumeArgs: collectVolumeArgs([\n ...(typeof config.serverRootDir === 'string'\n ? [config.serverRootDir]\n : []),\n upath.dirname(target.path),\n ]),\n env: [['VS_CLI_BUILD_PDF_OPTIONS', JSON.stringify(bypassedOption)]],\n commandArgs: ['build'],\n workdir:\n typeof config.serverRootDir === 'string'\n ? toContainerPath(config.serverRootDir)\n : undefined,\n });\n\n return target.path;\n}\n","import fs from 'node:fs';\nimport { URL } from 'node:url';\nimport type { Browser, Page } from 'puppeteer-core';\nimport terminalLink from 'terminal-link';\nimport upath from 'upath';\nimport { cyan, gray, green, red } from 'yoctocolors';\nimport { launchPreview } from '../browser.js';\nimport type {\n ManuscriptEntry,\n PdfOutput,\n ResolvedTaskConfig,\n} from '../config/resolve.js';\nimport type { Meta, Payload, TOCItem } from '../global-viewer.js';\nimport { Logger } from '../logger.js';\nimport { getViewerFullUrl } from '../server.js';\nimport { pathEquals } from '../util.js';\nimport { type PageSizeData, PostProcess } from './pdf-postprocess.js';\n\nexport async function buildPDF({\n target,\n config,\n}: {\n target: PdfOutput;\n config: ResolvedTaskConfig;\n}): Promise<string | null> {\n Logger.logUpdate(`Launching PDF build environment`);\n\n const viewerFullUrl = await getViewerFullUrl(config);\n Logger.debug('viewerFullUrl', viewerFullUrl);\n\n let lastEntry: ManuscriptEntry | undefined;\n\n function stringifyEntry(entry: ManuscriptEntry) {\n const formattedSourcePath = cyan(\n entry.source.type === 'file'\n ? upath.relative(config.entryContextDir, entry.source.pathname)\n : entry.source.href,\n );\n return `${terminalLink(\n formattedSourcePath,\n entry.source.type === 'file'\n ? `file://${entry.source.pathname}`\n : entry.source.href,\n {\n fallback: () => formattedSourcePath,\n },\n )} ${entry.title ? gray(entry.title) : ''}`;\n }\n\n function handleEntry(response: any) {\n const entry = config.entries.find((entry): entry is ManuscriptEntry => {\n if (!('source' in entry)) {\n return false;\n }\n const url = new URL(response.url());\n return url.protocol === 'file:'\n ? pathEquals(entry.target, url.pathname)\n : pathEquals(\n upath.relative(config.workspaceDir, entry.target),\n url.pathname.substring(1),\n );\n });\n if (entry) {\n if (!lastEntry) {\n lastEntry = entry;\n Logger.logUpdate(stringifyEntry(entry));\n return;\n }\n Logger.logSuccess(stringifyEntry(lastEntry));\n Logger.startLogging(stringifyEntry(entry));\n lastEntry = entry;\n }\n }\n\n const { browser, page } = await launchPreview({\n mode: 'build',\n url: viewerFullUrl,\n config,\n onBrowserOpen: () => {\n Logger.logUpdate('Building pages');\n },\n onPageOpen: async (page) => {\n page.on('pageerror', (error) => {\n Logger.logError(red((error as Error).message));\n });\n\n page.on('console', (msg) => {\n switch (msg.type()) {\n case 'error':\n if (/\\/vivliostyle-viewer\\.js$/.test(msg.location().url ?? '')) {\n Logger.logError(msg.text());\n throw msg.text();\n }\n return;\n case 'debug':\n if (/time slice/.test(msg.text())) {\n return;\n }\n break;\n }\n if (msg.type() === 'error') {\n Logger.logVerbose(red('console.error()'), msg.text());\n } else {\n Logger.logVerbose(gray(`console.${msg.type()}()`), msg.text());\n }\n });\n\n page.on('response', (response) => {\n Logger.debug(\n gray('viewer:response'),\n green(response.status().toString()),\n response.url(),\n );\n\n handleEntry(response);\n\n if (300 > response.status() && 200 <= response.status()) return;\n // file protocol doesn't have status code\n if (response.url().startsWith('file://') && response.ok()) return;\n\n Logger.logError(red(`${response.status()}`), response.url());\n });\n\n await page.setDefaultTimeout(config.timeout);\n },\n });\n\n const browserVersion = await browser.version();\n Logger.debug(green('success'), `browserVersion=${browserVersion}`);\n\n let remainTime = config.timeout;\n const startTime = Date.now();\n\n await page.waitForNetworkIdle();\n await page.waitForFunction(() => !!window.coreViewer);\n\n const { protocol } = browser as Browser & {\n protocol: 'cdp' | 'webDriverBiDi';\n };\n // Only CDP supports emulateMediaType\n if (protocol === 'cdp') {\n await page.emulateMediaType('print');\n }\n await page.waitForFunction(\n /* v8 ignore next */\n () => window.coreViewer.readyState === 'complete',\n { polling: 1000 },\n );\n\n if (lastEntry) {\n Logger.logSuccess(stringifyEntry(lastEntry));\n }\n\n const pageProgression = await page.evaluate(() =>\n /* v8 ignore next 5 */\n document\n .querySelector('#vivliostyle-viewer-viewport')\n ?.getAttribute('data-vivliostyle-page-progression') === 'rtl'\n ? 'rtl'\n : 'ltr',\n );\n const viewerCoreVersion = await page.evaluate(() =>\n /* v8 ignore next 3 */\n document\n .querySelector('#vivliostyle-menu_settings .version')\n ?.textContent?.replace(/^.*?: (\\d[-+.\\w]+).*$/, '$1'),\n );\n const metadata = await loadMetadata(page);\n const toc = await loadTOC(page);\n const pageSizeData = await loadPageSizeData(page);\n\n remainTime -= Date.now() - startTime;\n if (remainTime <= 0) {\n throw new Error('Typesetting process timed out');\n }\n Logger.debug('Remaining timeout:', remainTime);\n\n Logger.logUpdate('Building PDF');\n\n // For Firefox WebDriver BiDi, explicitly set width and height\n // because page.pdf() doesn't support for the preferCSSPageSize option.\n // Use a sufficiently large value to accommodate user-defined page sizes.\n const dimensionSizeForWebDriverBiDi =\n parseInt(process.env.VS_CLI_PDF_BUILD_PDF_PAGE_SIZE || '', 10) || 3780; // 1000mm\n const pdf = await page.pdf({\n margin: {\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n },\n printBackground: true,\n tagged: true,\n // timeout: remainTime,\n ...(protocol === 'webDriverBiDi'\n ? {\n width: dimensionSizeForWebDriverBiDi,\n height: dimensionSizeForWebDriverBiDi,\n }\n : {\n preferCSSPageSize: true,\n }),\n });\n\n await browser.close();\n\n Logger.logUpdate('Processing PDF');\n fs.mkdirSync(upath.dirname(target.path), { recursive: true });\n\n const post = await PostProcess.load(pdf);\n await post.metadata(metadata, {\n pageProgression,\n browserVersion,\n viewerCoreVersion,\n // If custom viewer is set and its version info is not available,\n // there is no guarantee that the default creator option is correct.\n disableCreatorOption: !!config.viewer && !viewerCoreVersion,\n });\n await post.toc(toc);\n await post.setPageBoxes(pageSizeData);\n await post.save(target.path, {\n preflight: target.preflight,\n preflightOption: target.preflightOption,\n image: config.image,\n });\n\n return target.path;\n}\n\nasync function loadMetadata(page: Page): Promise<Meta> {\n return page.evaluate(() => window.coreViewer.getMetadata());\n}\n\n// Show and hide the TOC in order to read its contents.\n// Chromium needs to see the TOC links in the DOM to add\n// the PDF destinations used during postprocessing.\nasync function loadTOC(page: Page): Promise<TOCItem[]> {\n /* v8 ignore start */\n return page.evaluate(\n () =>\n new Promise<TOCItem[]>((resolve) => {\n function listener(payload: Payload) {\n if (payload.a !== 'toc') {\n return;\n }\n window.coreViewer.removeListener('done', listener);\n window.coreViewer.showTOC(false);\n resolve(window.coreViewer.getTOC());\n }\n window.coreViewer.addListener('done', listener);\n window.coreViewer.showTOC(true);\n }),\n );\n /* v8 ignore stop */\n}\n\nasync function loadPageSizeData(page: Page): Promise<PageSizeData[]> {\n /* v8 ignore start */\n return page.evaluate(() => {\n const sizeData: PageSizeData[] = [];\n const pageContainers = document.querySelectorAll(\n '#vivliostyle-viewer-viewport > div > div > div[data-vivliostyle-page-container]',\n ) as NodeListOf<HTMLElement>;\n\n for (const pageContainer of pageContainers) {\n const bleedBox = pageContainer.querySelector(\n 'div[data-vivliostyle-bleed-box]',\n ) as HTMLElement;\n sizeData.push({\n mediaWidth: parseFloat(pageContainer.style.width) * 0.75,\n mediaHeight: parseFloat(pageContainer.style.height) * 0.75,\n bleedOffset: parseFloat(bleedBox?.style.left) * 0.75,\n bleedSize: parseFloat(bleedBox?.style.paddingLeft) * 0.75,\n });\n }\n return sizeData;\n });\n /* v8 ignore stop */\n}\n","import decamelize from 'decamelize';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport type { PDFDocument, PDFRef } from 'pdf-lib';\nimport upath from 'upath';\nimport { v1 as uuid } from 'uuid';\nimport type { PdfOutput, ResolvedTaskConfig } from '../config/resolve.js';\nimport { coreVersion } from '../const.js';\nimport {\n collectVolumeArgs,\n runContainer,\n toContainerPath,\n} from '../container.js';\nimport type { Meta, TOCItem } from '../global-viewer.js';\nimport { Logger } from '../logger.js';\nimport { importNodeModule } from '../node-modules.js';\nimport { isInContainer } from '../util.js';\n\nexport type SaveOption = Pick<PdfOutput, 'preflight' | 'preflightOption'> &\n Pick<ResolvedTaskConfig, 'image'>;\n\nconst prefixes = {\n dcterms: 'http://purl.org/dc/terms/',\n meta: 'http://idpf.org/epub/vocab/package/meta/#',\n};\n\nconst metaTerms = {\n title: `${prefixes.dcterms}title`,\n creator: `${prefixes.dcterms}creator`,\n description: `${prefixes.dcterms}description`,\n subject: `${prefixes.dcterms}subject`,\n contributor: `${prefixes.dcterms}contributor`,\n language: `${prefixes.dcterms}language`,\n role: `${prefixes.meta}role`,\n created: `${prefixes.meta}created`,\n date: `${prefixes.meta}date`,\n};\n\ninterface PDFTocItem extends TOCItem {\n children: PDFTocItem[];\n ref: PDFRef;\n parentRef: PDFRef;\n}\n\nexport interface PageSizeData {\n mediaWidth: number;\n mediaHeight: number;\n bleedOffset: number;\n bleedSize: number;\n}\n\nexport async function pressReadyWithContainer({\n input,\n output,\n preflightOption,\n image,\n}: {\n input: string;\n output: string;\n preflightOption: string[];\n image: string;\n}) {\n await runContainer({\n image,\n entrypoint: 'press-ready',\n userVolumeArgs: collectVolumeArgs([\n upath.dirname(input),\n upath.dirname(output),\n ]),\n commandArgs: [\n 'build',\n '-i',\n toContainerPath(input),\n '-o',\n toContainerPath(output),\n ...preflightOption\n .map((opt) => `--${decamelize(opt, { separator: '-' })}`)\n .filter((str) => /^[\\w-]+/.test(str)),\n ],\n });\n}\n\nexport class PostProcess {\n protected readonly document: PDFDocument;\n\n static async load(pdf: Uint8Array): Promise<PostProcess> {\n const { PDFDocument } = await importNodeModule('pdf-lib');\n const document = await PDFDocument.load(pdf, { updateMetadata: false });\n return new PostProcess(document);\n }\n\n protected constructor(document: PDFDocument) {\n this.document = document;\n }\n\n async save(\n output: string,\n { preflight, preflightOption, image }: SaveOption,\n ) {\n const input = preflight\n ? upath.join(os.tmpdir(), `vivliostyle-cli-${uuid()}.pdf`)\n : output;\n\n const pdf = await this.document.save();\n await fs.promises.writeFile(input, pdf);\n\n if (\n preflight === 'press-ready-local' ||\n (preflight === 'press-ready' && isInContainer())\n ) {\n using _ = Logger.suspendLogging('Running press-ready');\n const { build } = await importNodeModule('press-ready');\n await build({\n ...preflightOption.reduce((acc, opt) => {\n const optName = decamelize(opt, { separator: '-' });\n return optName.startsWith('no-')\n ? {\n ...acc,\n [optName.slice(3)]: false,\n }\n : {\n ...acc,\n [optName]: true,\n };\n }, {}),\n input,\n output,\n });\n } else if (preflight === 'press-ready') {\n using _ = Logger.suspendLogging('Running press-ready');\n await pressReadyWithContainer({\n input,\n output,\n preflightOption,\n image,\n });\n }\n }\n\n async metadata(\n tree: Meta,\n {\n pageProgression,\n browserVersion,\n viewerCoreVersion,\n disableCreatorOption,\n }: {\n pageProgression?: 'ltr' | 'rtl';\n browserVersion?: string;\n viewerCoreVersion?: string;\n disableCreatorOption?: boolean;\n } = {},\n ) {\n const { ReadingDirection } = await importNodeModule('pdf-lib');\n const title = tree[metaTerms.title]?.[0].v;\n if (title) {\n this.document.setTitle(title);\n }\n\n const author = tree[metaTerms.creator]?.map((item) => item.v)?.join('; ');\n if (author) {\n this.document.setAuthor(author);\n }\n\n const subject = tree[metaTerms.description]?.[0].v;\n if (subject) {\n this.document.setSubject(subject);\n }\n\n const keywords = tree[metaTerms.subject]?.map((item) => item.v);\n if (keywords) {\n this.document.setKeywords(keywords);\n }\n\n let creatorOpt = `Vivliostyle.js ${viewerCoreVersion ?? coreVersion}`;\n if (browserVersion) {\n creatorOpt += `; ${browserVersion}`;\n }\n this.document.setCreator(\n disableCreatorOption ? 'Vivliostyle' : `Vivliostyle (${creatorOpt})`,\n );\n\n const language = tree[metaTerms.language]?.[0].v;\n if (language) {\n this.document.setLanguage(language);\n }\n\n const creation = (tree[metaTerms.created] || tree[metaTerms.date])?.[0].v;\n const creationDate = creation && new Date(creation);\n if (creationDate) {\n this.document.setCreationDate(creationDate);\n }\n if (pageProgression === 'rtl') {\n const viewerPrefs = this.document.catalog.getOrCreateViewerPreferences();\n viewerPrefs.setReadingDirection(ReadingDirection.R2L);\n }\n }\n\n async toc(items: TOCItem[]) {\n const { PDFDict, PDFHexString, PDFName, PDFNumber } =\n await importNodeModule('pdf-lib');\n if (!items || !items.length) {\n return;\n }\n\n const addRefs = (items: TOCItem[], parentRef: PDFRef): PDFTocItem[] =>\n items.map((item) => {\n const ref = this.document.context.nextRef();\n return {\n ...item,\n parentRef,\n ref,\n children: addRefs(item.children, ref),\n };\n });\n const countAll = (items: PDFTocItem[]): number =>\n items.reduce((sum, item) => sum + countAll(item.children), items.length);\n const addObjectsToPDF = (items: PDFTocItem[]) => {\n for (const [i, item] of items.entries()) {\n const child = PDFDict.withContext(this.document.context);\n child.set(PDFName.of('Title'), PDFHexString.fromText(item.title));\n child.set(PDFName.of('Dest'), PDFName.of(item.id));\n child.set(PDFName.of('Parent'), item.parentRef);\n const prev = items[i - 1];\n if (prev) {\n child.set(PDFName.of('Prev'), prev.ref);\n }\n const next = items[i + 1];\n if (next) {\n child.set(PDFName.of('Next'), next.ref);\n }\n if (item.children.length) {\n child.set(PDFName.of('First'), item.children[0].ref);\n child.set(\n PDFName.of('Last'),\n item.children[item.children.length - 1].ref,\n );\n child.set(PDFName.of('Count'), PDFNumber.of(countAll(item.children)));\n }\n this.document.context.assign(item.ref, child);\n addObjectsToPDF(item.children);\n }\n };\n\n const outlineRef = this.document.context.nextRef();\n const itemsWithRefs = addRefs(items, outlineRef);\n addObjectsToPDF(itemsWithRefs);\n\n const outline = PDFDict.withContext(this.document.context);\n outline.set(PDFName.of('First'), itemsWithRefs[0].ref);\n outline.set(\n PDFName.of('Last'),\n itemsWithRefs[itemsWithRefs.length - 1].ref,\n );\n outline.set(PDFName.of('Count'), PDFNumber.of(countAll(itemsWithRefs)));\n this.document.context.assign(outlineRef, outline);\n this.document.catalog.set(PDFName.of('Outlines'), outlineRef);\n }\n\n async setPageBoxes(pageSizeData: PageSizeData[]) {\n if (pageSizeData.length + 1 === this.document.getPageCount()) {\n // fix issue #312: Chromium LayoutNGPrinting adds unnecessary blank page\n this.document.removePage(pageSizeData.length);\n }\n if (pageSizeData.length !== this.document.getPageCount()) {\n return;\n }\n for (let i = 0; i < pageSizeData.length; i++) {\n const page = this.document.getPage(i);\n const sizeData = pageSizeData[i];\n if (\n !sizeData.mediaWidth ||\n !sizeData.mediaHeight ||\n isNaN(sizeData.bleedOffset) ||\n isNaN(sizeData.bleedSize)\n ) {\n continue;\n }\n const yOffset = page.getHeight() - sizeData.mediaHeight;\n page.setMediaBox(0, yOffset, sizeData.mediaWidth, sizeData.mediaHeight);\n if (!sizeData.bleedOffset && !sizeData.bleedSize) {\n continue;\n }\n page.setBleedBox(\n sizeData.bleedOffset,\n yOffset + sizeData.bleedOffset,\n sizeData.mediaWidth - sizeData.bleedOffset * 2,\n sizeData.mediaHeight - sizeData.bleedOffset * 2,\n );\n const trimOffset = sizeData.bleedOffset + sizeData.bleedSize;\n page.setTrimBox(\n trimOffset,\n yOffset + trimOffset,\n sizeData.mediaWidth - trimOffset * 2,\n sizeData.mediaHeight - trimOffset * 2,\n );\n }\n }\n}\n"],"mappings":"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","names":["pathToFileURL","terminalLink","upath","cyan","gray","process","_","process","fs","URL","upath","upath","upath","document","_","build","_stack","_error","_hasError","items","upath","entry","URL","page","fs","gray","_stack","_","cyan","upath","terminalLink","pathToFileURL","_error","_hasError"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Logger,
3
3
  useTmpDirectory
4
- } from "./chunk-MQYXBSRJ.js";
4
+ } from "./chunk-T2VWLU2I.js";
5
5
 
6
6
  // src/config/vite.ts
7
7
  import upath from "upath";
@@ -74,4 +74,4 @@ async function resolveViteConfig({
74
74
  export {
75
75
  resolveViteConfig
76
76
  };
77
- //# sourceMappingURL=chunk-5DB6XVJN.js.map
77
+ //# sourceMappingURL=chunk-LVS2NLYC.js.map
@@ -8,12 +8,12 @@ import {
8
8
  registerExitHandler,
9
9
  toTitleCase,
10
10
  whichPm
11
- } from "./chunk-MQYXBSRJ.js";
11
+ } from "./chunk-T2VWLU2I.js";
12
12
  import {
13
13
  ValidString,
14
14
  VivliostyleInlineConfigWithoutChecks,
15
15
  VivliostylePackageMetadata
16
- } from "./chunk-IIKRNYAM.js";
16
+ } from "./chunk-CKXFRCPH.js";
17
17
  import {
18
18
  DEFAULT_CONFIG_FILENAME,
19
19
  DEFAULT_PROJECT_AUTHOR,
@@ -23,10 +23,7 @@ import {
23
23
  cliVersion,
24
24
  coreVersion,
25
25
  languages
26
- } from "./chunk-ZKEIYNLT.js";
27
- import {
28
- importNodeModule
29
- } from "./chunk-ZIK6DINS.js";
26
+ } from "./chunk-ZEBXHUJX.js";
30
27
  import {
31
28
  __callDispose,
32
29
  __using
@@ -39,6 +36,7 @@ import { isUtf8 } from "node:buffer";
39
36
  import fs from "node:fs";
40
37
  import { pathToFileURL } from "node:url";
41
38
  import terminalLink from "terminal-link";
39
+ import { x } from "tinyexec";
42
40
  import upath from "upath";
43
41
  import * as v2 from "valibot";
44
42
  import { cyan, dim as dim2, gray as gray2, green as green2, yellow as yellow2 } from "yoctocolors";
@@ -1035,11 +1033,20 @@ async function performInstallDependencies({
1035
1033
  cwd: cwd2,
1036
1034
  projectPath
1037
1035
  }) {
1038
- const { execa } = await importNodeModule("execa");
1039
- await execa(pm, ["install"], {
1040
- cwd: upath.join(cwd2, projectPath),
1041
- stdio: "inherit"
1036
+ const proc = x(pm, ["install"], {
1037
+ throwOnError: true,
1038
+ nodeOptions: {
1039
+ cwd: upath.join(cwd2, projectPath),
1040
+ stdio: Logger.isInteractive ? "inherit" : void 0
1041
+ }
1042
1042
  });
1043
+ if (Logger.isInteractive) {
1044
+ await proc;
1045
+ } else {
1046
+ for await (const line of proc) {
1047
+ Logger.log(line);
1048
+ }
1049
+ }
1043
1050
  }
1044
1051
  function caveat(message, {
1045
1052
  relativeOutput,
@@ -1073,4 +1080,4 @@ For more information, visit ${terminalLink(yellow2("https://docs.vivliostyle.org
1073
1080
  export {
1074
1081
  create
1075
1082
  };
1076
- //# sourceMappingURL=chunk-RPMMYPTR.js.map
1083
+ //# sourceMappingURL=chunk-O3CBPX4R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/create.ts","../src/create-template.ts","../src/interactive.ts","../src/npm.ts"],"sourcesContent":["import { downloadTemplate } from '@bluwy/giget-core';\nimport { copy } from 'fs-extra/esm';\nimport { isUtf8 } from 'node:buffer';\nimport fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport terminalLink from 'terminal-link';\nimport { x } from 'tinyexec';\nimport upath from 'upath';\nimport * as v from 'valibot';\nimport { cyan, dim, gray, green, yellow } from 'yoctocolors';\nimport {\n type ParsedVivliostyleInlineConfig,\n VivliostyleInlineConfigWithoutChecks,\n VivliostylePackageMetadata,\n} from '../config/schema.js';\nimport {\n cliVersion,\n coreVersion,\n DEFAULT_CONFIG_FILENAME,\n DEFAULT_PROJECT_AUTHOR,\n DEFAULT_PROJECT_TITLE,\n languages,\n TEMPLATE_DEFAULT_FILES,\n TEMPLATE_SETTINGS,\n} from '../const.js';\nimport { format, type TemplateVariable } from '../create-template.js';\nimport {\n askQuestion,\n interactiveLogInfo,\n interactiveLogLoading,\n interactiveLogOutro,\n interactiveLogWarn,\n} from '../interactive.js';\nimport { Logger } from '../logger.js';\nimport {\n createFetch,\n fetchPackageMetadata,\n listVivliostyleThemes,\n type PackageJson,\n} from '../npm.js';\nimport { GlobMatcher } from '../processor/asset.js';\nimport {\n cwd as defaultCwd,\n getDefaultBrowserTag,\n getOsLocale,\n type PackageManager,\n registerExitHandler,\n toTitleCase,\n whichPm,\n} from '../util.js';\n\ntype VivliostylePackageJson = Pick<PackageJson, 'name' | 'version'> & {\n vivliostyle?: VivliostylePackageMetadata;\n};\n\nexport async function create(inlineConfig: ParsedVivliostyleInlineConfig) {\n Logger.setLogOptions(inlineConfig);\n Logger.debug('create > inlineConfig %O', inlineConfig);\n\n const fetch = createFetch(inlineConfig);\n let {\n projectPath,\n cwd = defaultCwd,\n title,\n author,\n language,\n theme,\n template,\n createConfigFileOnly = false,\n } = inlineConfig;\n let extraTemplateVariables: Record<string, unknown> = {};\n let themePackage: VivliostylePackageJson | undefined;\n let installDependencies: boolean | undefined;\n let useLocalTemplate = false;\n\n if (template && !/^([\\w-.]+):/.test(template)) {\n const absTemplatePath = upath.resolve(cwd, template);\n useLocalTemplate =\n fs.existsSync(upath.resolve(cwd, template)) &&\n fs.statSync(upath.resolve(cwd, template)).isDirectory();\n if (useLocalTemplate) {\n template = absTemplatePath;\n interactiveLogInfo(\n `Using the specified local template directory\\n${dim(upath.relative(cwd, absTemplatePath) || '.')}`,\n );\n } else {\n interactiveLogWarn(\n `The specified theme ${green(template)} was not found as a local directory. Proceeding to fetch it from GitHub repository.`,\n );\n }\n }\n\n if (!projectPath) {\n ({ projectPath } = await askProjectPath());\n }\n const dist = upath.join(cwd, projectPath);\n if (createConfigFileOnly) {\n if (fs.existsSync(upath.join(dist, DEFAULT_CONFIG_FILENAME))) {\n throw new Error(`${DEFAULT_CONFIG_FILENAME} already exists. Aborting.`);\n }\n } else if (\n (projectPath === '.' &&\n fs.readdirSync(dist).filter((n) => !n.startsWith('.')).length > 0) ||\n (projectPath !== '.' && fs.existsSync(dist))\n ) {\n throw new Error(`Destination ${dist} is not empty.`);\n }\n\n if (!title) {\n ({ title } = createConfigFileOnly\n ? { title: DEFAULT_PROJECT_TITLE }\n : await askTitle({ projectPath }));\n }\n if (!author) {\n ({ author } = createConfigFileOnly\n ? { author: DEFAULT_PROJECT_AUTHOR }\n : await askAuthor());\n }\n if (!language) {\n ({ language } = createConfigFileOnly\n ? { language: await getOsLocale() }\n : await askLanguage());\n }\n\n if (!createConfigFileOnly) {\n let presetTemplate: (typeof TEMPLATE_SETTINGS)[number] | undefined;\n if (!template) {\n ({ presetTemplate } = await askPresetTemplate());\n if (presetTemplate) {\n template = presetTemplate.template;\n }\n }\n if (!theme) {\n ({ theme, themePackage } = await askTheme({\n presetTemplate,\n template,\n fetch,\n }));\n }\n if (!template) {\n ({ template, extraTemplateVariables } = await askThemeTemplate(\n themePackage?.vivliostyle,\n ));\n }\n ({ installDependencies } = await askInstallDependencies());\n }\n\n const browserType = 'chrome' as const;\n const browserTag = getDefaultBrowserTag(browserType);\n const explicitTemplateVariables = {\n ...extraTemplateVariables,\n projectPath,\n title,\n author,\n language,\n theme: (() => {\n if (!theme) {\n return;\n }\n const arr = theme.map((t) => (t.import ? t : t.specifier));\n return arr.length === 1 ? arr[0] : arr;\n })(),\n themePackage,\n template,\n cliVersion,\n coreVersion,\n browser: { type: browserType, tag: browserTag },\n } satisfies TemplateVariable;\n Logger.debug(\n 'create > explicitTemplateVariables %O',\n explicitTemplateVariables,\n );\n if (createConfigFileOnly) {\n setupConfigFile({\n projectPath,\n cwd,\n templateVariables: {\n ...inlineConfig,\n ...explicitTemplateVariables,\n },\n });\n } else {\n interactiveLogOutro('All configurations are set! Creating your project...');\n using _ = Logger.startLogging(\n useLocalTemplate ? 'Copying a local template' : 'Downloading a template',\n );\n await setupTemplate({\n projectPath,\n cwd,\n template: template!,\n templateVariables: {\n ...inlineConfig,\n ...explicitTemplateVariables,\n },\n useLocalTemplate,\n });\n if (installDependencies) {\n const pm = whichPm();\n using _ = Logger.suspendLogging(`Installing dependencies with ${pm}`);\n await performInstallDependencies({ projectPath, cwd, pm });\n }\n }\n\n const output = createConfigFileOnly\n ? upath.join(dist, DEFAULT_CONFIG_FILENAME)\n : dist;\n const relativeOutput = upath.relative(cwd, output) || '.';\n const formattedOutput = terminalLink(\n cyan(relativeOutput),\n pathToFileURL(output).href,\n { fallback: (text) => text },\n );\n if (createConfigFileOnly) {\n Logger.logSuccess(\n `Successfully created a config file at ${formattedOutput}`,\n );\n } else {\n caveat(`Successfully created a project at ${formattedOutput}`, {\n relativeOutput,\n installDependencies: Boolean(installDependencies),\n });\n }\n}\n\nasync function askProjectPath() {\n return await askQuestion({\n question: {\n projectPath: {\n type: 'text',\n message: 'Where should we create your project?',\n placeholder: 'Specify \".\" to create files in the current directory.',\n required: true,\n },\n },\n schema: v.required(\n v.pick(VivliostyleInlineConfigWithoutChecks, ['projectPath']),\n ),\n });\n}\n\nasync function askTitle({ projectPath }: { projectPath: string }) {\n return await askQuestion({\n question: {\n title: {\n type: 'text',\n message: \"What's the title of your publication?\",\n defaultValue: toTitleCase(projectPath) || DEFAULT_PROJECT_TITLE,\n placeholder: toTitleCase(projectPath) || DEFAULT_PROJECT_TITLE,\n },\n },\n schema: v.required(v.pick(VivliostyleInlineConfigWithoutChecks, ['title'])),\n });\n}\n\nasync function askAuthor() {\n return await askQuestion({\n question: {\n author: {\n type: 'text',\n message: \"What's the author name?\",\n defaultValue: DEFAULT_PROJECT_AUTHOR,\n placeholder: DEFAULT_PROJECT_AUTHOR,\n },\n },\n schema: v.required(\n v.pick(VivliostyleInlineConfigWithoutChecks, ['author']),\n ),\n });\n}\n\nasync function askLanguage() {\n const initialValue = await getOsLocale();\n return await askQuestion({\n question: {\n language: {\n type: 'autocomplete',\n message: \"What's the language?\",\n options: Object.entries(languages).map(([value, displayName]) => ({\n value,\n label: displayName,\n hint: value,\n })),\n initialValue,\n },\n },\n schema: v.required(\n v.pick(VivliostyleInlineConfigWithoutChecks, ['language']),\n ),\n });\n}\n\nexport const PRESET_TEMPLATE_NOT_USE = 'Use templates from the community theme';\n\nasync function askPresetTemplate(): Promise<{\n presetTemplate: (typeof TEMPLATE_SETTINGS)[number] | undefined;\n}> {\n const { presetTemplate } = await askQuestion({\n question: {\n presetTemplate: {\n type: 'select',\n message: \"What's the project template?\",\n options: [\n ...TEMPLATE_SETTINGS,\n {\n value: PRESET_TEMPLATE_NOT_USE,\n label: PRESET_TEMPLATE_NOT_USE,\n hint: 'If a theme includes a template, you can choose it in the next step.',\n },\n ],\n },\n },\n schema: v.object({\n presetTemplate: v.pipe(\n v.string(),\n v.transform((value) =>\n value === PRESET_TEMPLATE_NOT_USE\n ? undefined\n : TEMPLATE_SETTINGS.find((t) => t.value === value),\n ),\n ),\n }),\n });\n return { presetTemplate };\n}\n\nconst TRUNCATE_LENGTH = 60;\nconst truncateString = (str: string) => {\n const trimmed = str.replace(/\\s+/g, ' ');\n return trimmed.length > TRUNCATE_LENGTH\n ? trimmed.slice(0, TRUNCATE_LENGTH) + '…'\n : trimmed;\n};\n\nexport const THEME_ANSWER_NOT_USE = 'Not use Vivliostyle theme';\nexport const THEME_ANSWER_MANUAL = 'Install other themes from npm';\n\nasync function askTheme({\n template,\n presetTemplate,\n fetch,\n}: Pick<ParsedVivliostyleInlineConfig, 'template'> & {\n presetTemplate: (typeof TEMPLATE_SETTINGS)[number] | undefined;\n fetch: ReturnType<typeof createFetch>;\n}): Promise<\n Pick<ParsedVivliostyleInlineConfig, 'theme'> & {\n themePackage: VivliostylePackageJson | undefined;\n }\n> {\n const useCommunityThemes = !presetTemplate && !template;\n const themePackages = await interactiveLogLoading(\n 'Fetching a list of Vivliostyle themes...',\n async () => {\n let themes = (await listVivliostyleThemes({ fetch })).objects;\n if (useCommunityThemes) {\n // Show only community themes\n themes = themes.filter(\n (theme) => !theme.package.name.startsWith('@vivliostyle/'),\n );\n }\n themes.sort((a, b) => {\n // Prioritize packages in the @vivliostyle namespace\n const aIsOfficial = a.package.name.startsWith('@vivliostyle/') ? 1 : 0;\n const bIsOfficial = b.package.name.startsWith('@vivliostyle/') ? 1 : 0;\n return aIsOfficial ^ bIsOfficial\n ? bIsOfficial - aIsOfficial\n : b.downloads.monthly - a.downloads.monthly;\n });\n return themes.map((theme) => theme.package);\n },\n );\n\n let themePackage: VivliostylePackageJson | undefined;\n const fetchedPackages: Record<string, PackageJson> = {};\n const validateThemeMetadataSchema = v.customAsync<string>(async (value) => {\n if (value === THEME_ANSWER_NOT_USE || value === THEME_ANSWER_MANUAL) {\n return true;\n }\n if (typeof value !== 'string') {\n return false;\n }\n fetchedPackages[value] ??= await fetchPackageMetadata({\n fetch,\n packageName: value,\n version: 'latest',\n });\n const pkg = fetchedPackages[value];\n const ret = v.safeParse(\n v.object({\n name: v.string(),\n version: v.string(),\n vivliostyle: v.optional(VivliostylePackageMetadata),\n }),\n pkg,\n );\n if (ret.success) {\n themePackage = ret.output;\n }\n return ret.success;\n }, 'Invalid theme package. Please check the schema of the `vivliostyle` field.');\n\n let { theme } = await askQuestion({\n question: {\n theme: {\n type: 'autocomplete',\n message: \"What's the project theme?\",\n options: [\n ...(!useCommunityThemes\n ? [{ label: THEME_ANSWER_NOT_USE, value: THEME_ANSWER_NOT_USE }]\n : []),\n { label: THEME_ANSWER_MANUAL, value: THEME_ANSWER_MANUAL },\n ...themePackages.map((pkg) => ({\n label: pkg.name,\n value: pkg.name,\n hint: truncateString(pkg.description || ''),\n })),\n ],\n initialValue: themePackages[0].name,\n },\n },\n schema: v.objectAsync({ theme: validateThemeMetadataSchema }),\n validateProgressMessage: 'Fetching package metadata...',\n });\n\n if (theme === THEME_ANSWER_NOT_USE) {\n return { theme: undefined, themePackage: undefined };\n }\n\n if (theme === THEME_ANSWER_MANUAL) {\n theme = await askQuestion({\n question: {\n themeManualInput: {\n type: 'text',\n message: 'Input npm package name:',\n required: true,\n },\n },\n schema: v.objectAsync({\n themeManualInput: v.pipeAsync(\n v.string(),\n v.customAsync(async (packageName) => {\n if (typeof packageName !== 'string') {\n return false;\n }\n try {\n fetchedPackages[packageName] = await fetchPackageMetadata({\n fetch,\n packageName,\n version: 'latest',\n });\n return true;\n } catch (error) {\n return false;\n }\n }, 'Package not found'),\n validateThemeMetadataSchema,\n ),\n }),\n validateProgressMessage: 'Fetching package metadata...',\n }).then((ret) => ret.themeManualInput);\n }\n\n return {\n theme: [\n { specifier: themePackage ? `${theme}@^${themePackage.version}` : theme },\n ],\n themePackage,\n };\n}\n\nasync function askThemeTemplate(\n themeMetadata?: VivliostylePackageMetadata,\n): Promise<\n Required<Pick<ParsedVivliostyleInlineConfig, 'template'>> & {\n extraTemplateVariables: Record<string, unknown>;\n }\n> {\n const themeTemplate = themeMetadata?.template;\n const options = Object.entries(themeTemplate || {}).map(([value, tmpl]) => ({\n label: tmpl.name || value,\n value,\n hint: truncateString(tmpl.description || ''),\n }));\n if (!themeTemplate || options.length === 0) {\n interactiveLogWarn(\n 'The chosen theme does not set template settings. Applying the minimal template.',\n );\n return {\n template: TEMPLATE_SETTINGS.find((t) => t.value === 'minimal')!.template,\n extraTemplateVariables: {},\n };\n }\n\n const { usingTemplate } = await askQuestion({\n question: {\n usingTemplate: {\n type: 'autocomplete',\n message: 'Which template do you want to use?',\n options,\n },\n },\n schema: v.object({\n usingTemplate: v.pipe(\n v.string(),\n v.transform((input) => themeTemplate[input]),\n ),\n }),\n });\n\n let extraTemplateVariables: Record<string, unknown> = {};\n if (usingTemplate.prompt?.length) {\n extraTemplateVariables = await askQuestion({\n question: Object.fromEntries(\n usingTemplate.prompt.map((q) => [q.name, q]),\n ),\n });\n }\n return { template: usingTemplate.source, extraTemplateVariables };\n}\n\nasync function askInstallDependencies() {\n return await askQuestion({\n question: {\n installDependencies: {\n type: 'select',\n message:\n 'Should we install dependencies? (You can install them later.)',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n },\n schema: v.object({\n installDependencies: v.boolean(),\n }),\n });\n}\n\nasync function setupTemplate({\n cwd,\n projectPath,\n template,\n templateVariables,\n useLocalTemplate,\n}: Required<\n Pick<ParsedVivliostyleInlineConfig, 'cwd' | 'projectPath' | 'template'>\n> & {\n templateVariables: Record<string, unknown>;\n useLocalTemplate?: boolean;\n}) {\n if (useLocalTemplate) {\n const matcher = new GlobMatcher([\n {\n patterns: ['**'],\n ignore: ['**/node_modules/**', '**/.git/**'],\n dot: true,\n cwd: template,\n },\n ]);\n const files = await matcher.glob({ followSymbolicLinks: true });\n Logger.debug('setupTemplate > files from local template %O', files);\n for (const file of files) {\n const targetPath = upath.join(cwd, projectPath, file);\n fs.mkdirSync(upath.dirname(targetPath), { recursive: true });\n await copy(upath.join(template, file), targetPath);\n }\n } else {\n // `downloadTemplate` deletes the destination directory for rollback purposes\n // when template download fails. To prevent this behavior from deleting\n // the current directory, create a temporary directory and copy the template\n // to its final location.\n // https://github.com/bluwy/giget-core/blob/2247658f4cc3240e8dc3819c782355fe4b535214/src/utils.js#L195\n const tmpDownloadDir = upath.join(\n cwd,\n projectPath,\n `.vs-template-${Date.now()}`,\n );\n Logger.debug('setupTemplate > tmpDownloadDir %s', tmpDownloadDir);\n const cleanupExitHandler = registerExitHandler(\n `Removing the temporary directory: ${tmpDownloadDir}`,\n () => {\n fs.rmSync(tmpDownloadDir, { recursive: true, force: true });\n },\n );\n\n await downloadTemplate(template, { dir: tmpDownloadDir });\n for (const entry of fs.readdirSync(tmpDownloadDir)) {\n fs.renameSync(\n upath.join(tmpDownloadDir, entry),\n upath.join(cwd, projectPath, entry),\n );\n }\n cleanupExitHandler()?.();\n }\n for (const [file, content] of Object.entries(TEMPLATE_DEFAULT_FILES)) {\n const targetPath = upath.join(cwd, projectPath, file);\n if (fs.existsSync(targetPath)) {\n continue;\n }\n fs.mkdirSync(upath.dirname(targetPath), { recursive: true });\n fs.writeFileSync(targetPath, content, 'utf8');\n }\n\n const replaceTemplateVariable = (dir: string) => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const entryPath = upath.join(dir, entry.name);\n if (entry.isDirectory()) {\n replaceTemplateVariable(entryPath);\n } else {\n const buf = fs.readFileSync(entryPath);\n if (!isUtf8(buf)) {\n continue;\n }\n fs.writeFileSync(\n entryPath,\n format(buf.toString(), templateVariables),\n 'utf8',\n );\n }\n }\n };\n replaceTemplateVariable(upath.join(cwd, projectPath));\n}\n\nfunction setupConfigFile({\n cwd,\n projectPath,\n templateVariables,\n}: Required<Pick<ParsedVivliostyleInlineConfig, 'cwd' | 'projectPath'>> & {\n templateVariables: Record<string, unknown>;\n}) {\n const targetPath = upath.join(cwd, projectPath, DEFAULT_CONFIG_FILENAME);\n const content = TEMPLATE_DEFAULT_FILES[DEFAULT_CONFIG_FILENAME];\n fs.mkdirSync(upath.dirname(targetPath), { recursive: true });\n fs.writeFileSync(targetPath, format(content, templateVariables), 'utf8');\n}\n\nasync function performInstallDependencies({\n pm,\n cwd,\n projectPath,\n}: Required<Pick<ParsedVivliostyleInlineConfig, 'cwd' | 'projectPath'>> & {\n pm: PackageManager;\n}) {\n const proc = x(pm, ['install'], {\n throwOnError: true,\n nodeOptions: {\n cwd: upath.join(cwd, projectPath),\n stdio: Logger.isInteractive ? 'inherit' : undefined,\n },\n });\n if (Logger.isInteractive) {\n await proc;\n } else {\n for await (const line of proc) {\n Logger.log(line);\n }\n }\n}\n\nfunction caveat(\n message: string,\n {\n relativeOutput,\n installDependencies,\n }: { relativeOutput: string; installDependencies: boolean },\n): void {\n const steps = [];\n if (relativeOutput !== '.') {\n steps.push(`Navigate to ${green(relativeOutput)}`);\n }\n if (!installDependencies) {\n steps.push(`${cyan('npm install')} to install dependencies`);\n }\n steps.push('Create and edit Markdown files');\n steps.push(\n `Modify the ${cyan('entry')} field in ${green('vivliostyle.config.js')}`,\n );\n steps.push(`${cyan('npm run preview')} to open a preview browser window`);\n steps.push(`${cyan('npm run build')} to generate the output file`);\n\n Logger.logSuccess(message);\n Logger.log(\n `\nNext steps:\n${steps.map((s, i) => gray(`${i + 1}. `) + s).join('\\n')}\n\nFor more information, visit ${terminalLink(yellow('https://docs.vivliostyle.org'), 'https://docs.vivliostyle.org', { fallback: (text) => text })}.\n\n🖋 Happy writing!`,\n );\n}\n","import { camelCase, capitalCase, kebabCase, snakeCase } from 'change-case';\nimport Handlebars from 'handlebars';\nimport { titleCase } from 'title-case';\nimport {\n type ParsedVivliostyleInlineConfig,\n ThemeSpecifier,\n VivliostylePackageMetadata,\n} from './config/schema.js';\nimport type { PackageJson } from './npm.js';\n\nexport type VivliostylePackageJson = Pick<PackageJson, 'name' | 'version'> & {\n vivliostyle?: VivliostylePackageMetadata;\n};\n\nexport interface TemplateVariable\n extends Omit<ParsedVivliostyleInlineConfig, 'theme'> {\n projectPath: string;\n title: string;\n author: string;\n language: string;\n theme?: ThemeSpecifier;\n themePackage?: VivliostylePackageJson;\n cliVersion: string;\n coreVersion: string;\n}\n\nfunction upper(text: string) {\n return text && text.toUpperCase();\n}\nHandlebars.registerHelper('upper', upper);\n\nfunction lower(text: string) {\n return text && text.toLowerCase();\n}\nHandlebars.registerHelper('lower', lower);\n\nfunction capital(text: string) {\n return text && capitalCase(text);\n}\nHandlebars.registerHelper('capital', capital);\n\nfunction camel(text: string) {\n return text && camelCase(text);\n}\nHandlebars.registerHelper('camel', camel);\n\nfunction snake(text: string) {\n return text && snakeCase(text);\n}\nHandlebars.registerHelper('snake', snake);\n\nfunction kebab(text: string) {\n return text && kebabCase(text);\n}\nHandlebars.registerHelper('kebab', kebab);\n\nfunction proper(text: string) {\n return text && titleCase(text);\n}\nHandlebars.registerHelper('proper', proper);\n\nfunction lorem() {\n return 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Odio, maxime et saepe facilis dolor aut maiores cupiditate rem voluptatem placeat accusamus voluptates laborum ratione enim blanditiis nisi voluptas non mollitia.';\n}\nHandlebars.registerHelper('lorem', lorem);\n\nfunction json(data: unknown) {\n return JSON.stringify(data);\n}\nHandlebars.registerHelper('json', json);\n\nexport function format(text: string, context: unknown) {\n const template = Handlebars.compile(text.toString(), { noEscape: true });\n return template(context);\n}\n","import {\n AutocompletePrompt,\n getColumns,\n isCancel,\n MultiSelectPrompt,\n SelectPrompt,\n type State,\n TextPrompt,\n} from '@clack/core';\nimport type {\n AutocompleteOptions,\n MultiSelectOptions,\n Option,\n SelectOptions,\n TextOptions,\n} from '@clack/prompts';\nimport { limitOptions } from '@clack/prompts';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor, erase } from 'sisteransi';\nimport * as v from 'valibot';\nimport {\n blueBright,\n dim,\n gray,\n green,\n hidden,\n inverse,\n redBright,\n strikethrough,\n yellow,\n yellowBright,\n} from 'yoctocolors';\nimport {\n PromptOption,\n SelectPromptOption,\n ValidString,\n} from './config/schema.js';\nimport { isUnicodeSupported, Logger } from './logger.js';\n\ntype DistributiveOmit<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n\nexport async function askQuestion<\n T extends object,\n S extends v.ObjectSchema<any, any> | v.ObjectSchemaAsync<any, any>,\n>(_: {\n question: Record<\n keyof v.InferInput<S>,\n DistributiveOmit<PromptOption, 'name'>\n >;\n schema: S;\n validateProgressMessage?: string;\n}): Promise<S extends undefined ? T : v.InferOutput<NonNullable<S>>>;\n\nexport async function askQuestion<T extends object>(_: {\n question: Record<string, DistributiveOmit<PromptOption, 'name'>>;\n schema?: undefined;\n validateProgressMessage?: string;\n}): Promise<T>;\n\nexport async function askQuestion<\n S extends v.ObjectSchema<any, any> | v.ObjectSchemaAsync<any, any>,\n>({\n question: questions,\n schema,\n validateProgressMessage,\n}: {\n question: Record<\n keyof v.InferInput<S>,\n DistributiveOmit<PromptOption, 'name'>\n >;\n schema?: S;\n validateProgressMessage?: string;\n}): Promise<any> {\n const response: Record<string, unknown> = {};\n\n // Repeat until the input passes the validation\n while (true) {\n for (const [name, question] of Object.entries(questions)) {\n let result: unknown;\n\n // Maximum number of items to display at once.\n const maxItems = 10;\n const normalizeOptions = (options: SelectPromptOption[]) =>\n options.map((v) => (typeof v === 'string' ? { value: v } : v));\n const validate = (value: unknown = '') => {\n if (!question.required || 'defaultValue' in question) {\n return;\n }\n const { success, issues } = v.safeParse(ValidString, value);\n return success ? undefined : issues[0].message;\n };\n\n if (import.meta.env?.VITEST) {\n // For testing, safely assign the name property using a type assertion\n (question as any).name = name;\n }\n if (question.type === 'text') {\n result = await textPrompt({ ...question, validate });\n } else if (question.type === 'select') {\n result = await selectPrompt({\n ...question,\n options: normalizeOptions(question.options),\n maxItems,\n });\n } else if (question.type === 'multiSelect') {\n result = await multiSelectPrompt({\n ...question,\n options: normalizeOptions(question.options),\n maxItems,\n });\n } else if (question.type === 'autocomplete') {\n result = await autocompletePrompt({\n ...question,\n options: normalizeOptions(question.options),\n maxItems,\n validate,\n });\n } else if (question.type === 'autocompleteMultiSelect') {\n result = await autocompleteMultiSelectPrompt({\n ...question,\n options: normalizeOptions(question.options),\n maxItems,\n });\n } else {\n result = question satisfies never;\n }\n if (isCancel(result)) {\n process.exit(0);\n }\n response[name] = result;\n }\n\n let result: v.SafeParseResult<any>;\n if (schema && schema.async) {\n result = await interactiveLogLoading(validateProgressMessage ?? '', () =>\n v.safeParseAsync(schema, response),\n );\n } else if (schema) {\n result = v.safeParse(schema, response);\n } else {\n return response;\n }\n\n const { success, output, issues } = result;\n if (success) {\n return output;\n }\n interactiveLogWarn(issues[0].message);\n }\n}\n\nconst promptStateSymbol = {\n initial: isUnicodeSupported ? '◆' : '*',\n active: isUnicodeSupported ? '◆' : '*',\n cancel: isUnicodeSupported ? '■' : 'x',\n submit: isUnicodeSupported ? '◇' : 'o',\n error: isUnicodeSupported ? '▲' : 'x',\n} as const satisfies { [key in State]: string };\nconst radioActiveSymbol = isUnicodeSupported ? '◉' : '>';\nconst radioInactiveSymbol = isUnicodeSupported ? '◯' : ' ';\nconst checkboxActiveSymbol = isUnicodeSupported ? '◼' : '[+]';\nconst checkboxInactiveSymbol = isUnicodeSupported ? '◻' : '[ ]';\n\nconst labelToString = <Value>(option: Option<Value>) =>\n option.label ?? String(option.value ?? '');\nconst renderListOption =\n <Value>(multiSelect: boolean, selectedValues?: Value[]) =>\n (option: Option<Value>, active: boolean) => {\n const Y = multiSelect ? checkboxActiveSymbol : radioActiveSymbol;\n const N = multiSelect ? checkboxInactiveSymbol : radioInactiveSymbol;\n if (option.disabled) {\n return `${gray(N)} ${gray(labelToString(option))} ${gray('(disabled)')}`;\n }\n return `${\n (multiSelect && selectedValues?.includes(option.value)) ||\n (!multiSelect && active)\n ? green(Y)\n : dim(N)\n } ${\n active\n ? `${labelToString(option)}${option.hint ? ` ${dim(`(${option.hint})`)}` : ''}`\n : dim(labelToString(option))\n }`;\n };\n\nfunction textPrompt(opts: TextOptions) {\n return new TextPrompt({\n ...opts,\n input: Logger.stdin,\n output: Logger.stdout,\n signal: Logger.signal,\n render() {\n const symbol = promptStateSymbol[this.state];\n const placeholder = opts.placeholder\n ? inverse(opts.placeholder[0]) + dim(opts.placeholder.slice(1))\n : inverse(hidden('_'));\n const userInput = !this.userInput\n ? placeholder\n : this.userInputWithCursor;\n const value = this.value ?? '';\n\n switch (this.state) {\n case 'error': {\n const errorText = this.error ? ` ${yellow(this.error)}` : '';\n return `${yellow('║')}\\n${yellow(`${symbol}─`)} ${opts.message}\\n ${userInput}\\n${errorText}`;\n }\n case 'submit': {\n const valueText = value ? ` ${dim(value)}` : '';\n return `${blueBright('║')}\\n${blueBright(`${symbol}─`)} ${opts.message}\\n${blueBright('║')}${valueText}`;\n }\n case 'cancel': {\n const valueText = value ? ` ${strikethrough(dim(value))}` : '';\n return `${gray('║')}\\n${gray(`${symbol}─`)} ${opts.message}\\n${valueText}`;\n }\n default:\n return `${blueBright('║')}\\n${blueBright(`${symbol}─`)} ${opts.message}\\n ${userInput}\\n`;\n }\n },\n }).prompt() as Promise<string | symbol>;\n}\n\nfunction selectPrompt<Value>(opts: SelectOptions<Value>, multiple = false) {\n return new (multiple ? MultiSelectPrompt : SelectPrompt)({\n ...opts,\n input: Logger.stdin,\n output: Logger.stdout,\n signal: Logger.signal,\n render() {\n const symbol = promptStateSymbol[this.state];\n const values = [this.value].flat() as Value[];\n const selected = this.options.filter((o) => values.includes(o.value));\n const label =\n selected.length > 0 ? selected.map(labelToString).join(', ') : 'none';\n\n switch (this.state) {\n case 'submit': {\n return `${blueBright('║')}\\n${blueBright(`${symbol}─`)} ${opts.message}\\n${blueBright('║')} ${dim(label)}`;\n }\n case 'cancel': {\n return `${gray('║')}\\n${gray(`${symbol}─`)} ${opts.message}\\n ${strikethrough(dim(label))}`;\n }\n default: {\n const indents = ' ';\n const displayingOptions = limitOptions({\n output: opts.output,\n cursor: this.cursor,\n options: this.options,\n maxItems: opts.maxItems,\n columnPadding: indents.length,\n style: renderListOption(\n multiple,\n Array.isArray(this.value) ? this.value : [],\n ),\n });\n return `${blueBright('║')}\\n${blueBright(`${symbol}─`)} ${opts.message}\\n ${displayingOptions.join(`\\n${indents}`)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Value | symbol>;\n}\n\nfunction multiSelectPrompt<Value>(opts: MultiSelectOptions<Value>) {\n return selectPrompt<Value>(opts, true) as Promise<Value[] | symbol>;\n}\n\nfunction autocompletePrompt<Value>(\n opts: AutocompleteOptions<Value>,\n multiple = false,\n) {\n return new AutocompletePrompt({\n ...opts,\n multiple,\n initialValue: opts.initialValue ? [opts.initialValue] : undefined,\n filter: (searchText, option) => {\n if (!searchText) {\n return true;\n }\n const label = (option.label ?? String(option.value ?? '')).toLowerCase();\n const hint = (option.hint ?? '').toLowerCase();\n const value = String(option.value).toLowerCase();\n const term = searchText.toLowerCase();\n return (\n label.includes(term) || hint.includes(term) || value.includes(term)\n );\n },\n input: Logger.stdin,\n output: Logger.stdout,\n signal: Logger.signal,\n render() {\n const symbol = promptStateSymbol[this.state];\n const selected = this.options.filter((o) =>\n this.selectedValues.includes(o.value),\n );\n const label =\n selected.length > 0 ? selected.map(labelToString).join(', ') : 'none';\n\n switch (this.state) {\n case 'submit': {\n return `${blueBright('║')}\\n${blueBright(`${symbol}─`)} ${opts.message}\\n${blueBright('║')} ${dim(label)}`;\n }\n case 'cancel': {\n const userInputText = this.userInput\n ? ` ${strikethrough(dim(this.userInput))}`\n : '';\n return `${gray('║')}\\n${gray(`${symbol}─`)} ${opts.message}\\n${userInputText}`;\n }\n default: {\n const indents = ' ';\n let searchText = '';\n if (this.isNavigating || (opts.placeholder && !this.userInput)) {\n const searchTextValue = opts.placeholder ?? this.userInput;\n searchText = searchTextValue ? ` ${dim(searchTextValue)}` : '';\n } else {\n searchText = ` ${this.userInputWithCursor}`;\n }\n const matches =\n this.filteredOptions.length !== this.options.length\n ? dim(\n ` (${this.filteredOptions.length} match${this.filteredOptions.length === 1 ? '' : 'es'})`,\n )\n : '';\n const headings = [\n blueBright('║'),\n `${blueBright(`${symbol}─`)} ${opts.message}`,\n `${indents}${dim('Search:')}${searchText}${matches}`,\n ];\n if (this.filteredOptions.length === 0 && this.userInput) {\n headings.push(`${indents}${yellow('No matches found')}`);\n }\n if (this.state === 'error') {\n headings.push(`${indents}${yellow(`Error: ${this.error ?? ''}`)}`);\n }\n const footers = [\n multiple\n ? `${indents}${dim('↑/↓ to navigate • Space/Tab: select • Enter: confirm • Type: to search')}`\n : `${indents}${dim('↑/↓ to select • Enter: confirm • Type: to search')}`,\n ];\n const displayingOptions = limitOptions({\n output: opts.output,\n cursor: this.cursor,\n options: this.filteredOptions,\n maxItems: opts.maxItems,\n columnPadding: indents.length,\n rowPadding: headings.length + footers.length,\n style: renderListOption(multiple, this.selectedValues),\n });\n return [\n ...headings,\n ...displayingOptions.map((s) => `${indents}${s}`),\n ...footers,\n ].join('\\n');\n }\n }\n },\n }).prompt() as Promise<Value | symbol>;\n}\n\nfunction autocompleteMultiSelectPrompt<Value>(\n opts: AutocompleteOptions<Value>,\n) {\n return autocompletePrompt<Value>(opts, true) as Promise<Value[] | symbol>;\n}\n\nexport async function interactiveLogLoading<T>(\n message: string,\n fn: () => Promise<T>,\n deferredTimeMs = 300,\n): Promise<T> {\n if (!Logger.isInteractive) {\n return await fn();\n }\n\n const output = Logger.stdout;\n const columns = getColumns(output);\n const showMessage = (msg: string) => {\n const wrapped = wrapAnsi(msg, columns, { hard: true, trim: false });\n output.write(wrapped);\n return () => {\n const prevLines = wrapped.split('\\n');\n if (prevLines.length > 1) {\n output.write(cursor.up(prevLines.length - 1));\n }\n output.write(cursor.to(0));\n output.write(erase.down());\n };\n };\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n let clearMessage: (() => void) | undefined;\n const promise = new Promise<void>((resolve) => {\n timer = setTimeout(() => {\n output.write(`${blueBright('║')}\\n`);\n clearMessage = showMessage(\n `${blueBright(`${promptStateSymbol.active}─`)} ${dim(message)}\\n`,\n );\n resolve();\n }, deferredTimeMs);\n });\n const result = await fn()\n .then((r) => {\n if (!clearMessage) {\n return r;\n }\n return new Promise<T>((resolve) =>\n setTimeout(() => resolve(r), deferredTimeMs),\n );\n })\n .catch(async (e) => {\n await promise;\n clearMessage?.();\n showMessage(\n `${redBright(`${promptStateSymbol.error}─`)} ${dim(message)}\\n\\n`,\n );\n throw e;\n });\n clearTimeout(timer);\n if (clearMessage) {\n clearMessage();\n showMessage(\n `${blueBright(`${promptStateSymbol.submit}─`)} ${dim(message)}\\n`,\n );\n }\n return result;\n}\n\nexport function interactiveLogInfo(message: string) {\n if (import.meta.env?.VITEST) {\n return;\n }\n Logger.stdout.write(\n `${blueBright(`${promptStateSymbol.submit}─`)} ${message.split('\\n').join(`\\n${blueBright('║')} `)}\\n`,\n );\n}\n\nexport function interactiveLogWarn(message: string) {\n if (import.meta.env?.VITEST) {\n return;\n }\n Logger.stdout.write(\n `${yellowBright(`${promptStateSymbol.error}─`)} ${yellowBright(message.split('\\n').join(`\\n${yellowBright('║')} `))}\\n`,\n );\n}\n\nexport function interactiveLogOutro(message: string) {\n if (import.meta.env?.VITEST) {\n return;\n }\n Logger.stdout.write(`${blueBright('║')}\\n${blueBright('╙─')} ${message}\\n\\n`);\n}\n","import { fetch as _fetch } from 'node-fetch-native';\nimport { createProxy } from 'node-fetch-native/proxy';\n\nexport interface PackageJson {\n name: string;\n version: string;\n description?: string;\n dependencies?: Record<string, string>;\n dist?: {\n fileCount: number;\n integrity: string;\n shasum: string;\n signatures: {\n keyid: string;\n sig: string;\n }[];\n tarball: string;\n unpackedSize: number;\n };\n vivliostyle?: unknown;\n}\n\nexport interface PackageSearchResult {\n objects: {\n downloads: {\n monthly: number;\n weekly: number;\n };\n package: Omit<PackageJson, 'vivliostyle'>;\n searchScore: number;\n updated: string;\n }[];\n total: number;\n time: string;\n}\n\nexport function createFetch(options: {\n proxyServer?: string;\n proxyBypass?: string;\n proxyUser?: string;\n proxyPass?: string;\n}): typeof _fetch {\n const url = options.proxyServer ?? process.env.HTTP_PROXY;\n const proxy = url\n ? createProxy({\n url,\n noProxy: options.proxyBypass ?? process.env.NO_PROXY ?? undefined,\n })\n : undefined;\n const token =\n options.proxyUser && options.proxyPass\n ? `Basic ${Buffer.from(\n `${options.proxyUser}:${options.proxyPass}`,\n ).toString('base64')}`\n : undefined;\n if (proxy && token) {\n // Find kProxyHeaders symbol\n // https://github.com/nodejs/undici/blob/3d231da2d7ddb7d9354f67ddd86af02890d29d71/lib/dispatcher/proxy-agent.js\n const proxyHeadersKey = Object.getOwnPropertySymbols(proxy.dispatcher).find(\n (symbol) => symbol.description === 'proxy headers',\n );\n if (proxyHeadersKey) {\n (\n proxy.dispatcher as unknown as {\n [key: typeof proxyHeadersKey]: Record<string, string>;\n }\n )[proxyHeadersKey]['proxy-authorization'] = token;\n }\n }\n return (url, fetchOptions) =>\n _fetch(url, { ...(proxy ?? {}), ...fetchOptions }).then((response) => {\n if (!response.ok) {\n throw new Error(\n `Failed to fetch ${url}: ${response.status} ${response.statusText}`,\n );\n }\n return response;\n });\n}\n\nexport async function listVivliostyleThemes({\n fetch,\n}: {\n fetch: typeof globalThis.fetch;\n}): Promise<PackageSearchResult> {\n const keyword = 'vivliostyle-theme';\n return await fetch(\n `https://registry.npmjs.org/-/v1/search?text=keywords:${keyword}&size=250`,\n ).then((response) => response.json());\n}\n\nexport async function fetchPackageMetadata({\n fetch,\n packageName,\n version,\n}: {\n fetch: typeof globalThis.fetch;\n packageName: string;\n version: string;\n}): Promise<PackageJson> {\n return fetch(`https://registry.npmjs.org/${packageName}/${version}`).then(\n (response) => response.json(),\n );\n}\n"],"mappings":"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","names":["v","dim","gray","green","yellow","result","v","success","issues","url","cwd","dim","green","_stack","_","_error","_hasError","theme","gray","yellow"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  VivliostyleInlineConfig
3
- } from "./chunk-IIKRNYAM.js";
3
+ } from "./chunk-CKXFRCPH.js";
4
4
  import {
5
5
  DEFAULT_BROWSER_VERSIONS,
6
6
  EMPTY_DATA_URI,
7
7
  languages
8
- } from "./chunk-ZKEIYNLT.js";
8
+ } from "./chunk-ZEBXHUJX.js";
9
9
 
10
10
  // src/commands/cli-flags.ts
11
11
  import "commander";
@@ -1472,4 +1472,4 @@ export {
1472
1472
  getAssetMatcher,
1473
1473
  copyAssets
1474
1474
  };
1475
- //# sourceMappingURL=chunk-MQYXBSRJ.js.map
1475
+ //# sourceMappingURL=chunk-T2VWLU2I.js.map
@@ -290,6 +290,9 @@ var coreVersion = (() => {
290
290
  if (import.meta.env?.VITEST) {
291
291
  return "0.0.1";
292
292
  }
293
+ if (!viewerRoot) {
294
+ return "Unknown";
295
+ }
293
296
  const pkg = JSON.parse(
294
297
  fs.readFileSync(upath.join(viewerRoot, "package.json"), "utf8")
295
298
  );
@@ -328,4 +331,4 @@ export {
328
331
  coreVersion,
329
332
  versionForDisplay
330
333
  };
331
- //# sourceMappingURL=chunk-ZKEIYNLT.js.map
334
+ //# sourceMappingURL=chunk-ZEBXHUJX.js.map