@vivliostyle/cli 9.8.4 → 10.0.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.
- package/README.md +74 -30
- package/dist/{chunk-LI2REENX.js → chunk-2M2KXPDN.js} +16 -17
- package/dist/chunk-2M2KXPDN.js.map +1 -0
- package/dist/{chunk-PBAUN5CU.js → chunk-5DB6XVJN.js} +2 -2
- package/dist/chunk-5DB6XVJN.js.map +1 -0
- package/dist/{chunk-HYY2WKJZ.js → chunk-5K3NGLBV.js} +6 -7
- package/dist/chunk-5K3NGLBV.js.map +1 -0
- package/dist/{chunk-YUYXQJDY.js → chunk-IIKRNYAM.js} +470 -238
- package/dist/chunk-IIKRNYAM.js.map +1 -0
- package/dist/{chunk-MDTA37GZ.js → chunk-MQYXBSRJ.js} +397 -88
- package/dist/chunk-MQYXBSRJ.js.map +1 -0
- package/dist/chunk-RPMMYPTR.js +1076 -0
- package/dist/chunk-RPMMYPTR.js.map +1 -0
- package/dist/{chunk-PPI5DA75.js → chunk-YN3JNBNT.js} +425 -374
- package/dist/chunk-YN3JNBNT.js.map +1 -0
- package/dist/{chunk-QOPM72CS.js → chunk-YVNDJXMI.js} +32 -33
- package/dist/chunk-YVNDJXMI.js.map +1 -0
- package/dist/{chunk-FXUEYQRY.js → chunk-ZIK6DINS.js} +3 -3
- package/dist/chunk-ZIK6DINS.js.map +1 -0
- package/dist/chunk-ZKEIYNLT.js +331 -0
- package/dist/chunk-ZKEIYNLT.js.map +1 -0
- package/dist/cli.js +7 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.js +29 -17
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.js +64 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.js +23 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/preview.js +26 -20
- package/dist/commands/preview.js.map +1 -1
- package/dist/config/schema.d.ts +9034 -4436
- package/dist/config/schema.js +20 -4
- package/dist/index.d.ts +46 -7
- package/dist/index.js +24 -16
- package/dist/index.js.map +1 -1
- package/dist/node-modules.d.ts +5 -5
- package/dist/node-modules.js +1 -1
- package/dist/vite-adapter.d.ts +1 -0
- package/dist/vite-adapter.js +6 -6
- package/package.json +38 -27
- package/dist/chunk-3VKIUKTD.js +0 -89
- package/dist/chunk-3VKIUKTD.js.map +0 -1
- package/dist/chunk-4IIM6RSG.js +0 -71
- package/dist/chunk-4IIM6RSG.js.map +0 -1
- package/dist/chunk-FXUEYQRY.js.map +0 -1
- package/dist/chunk-HYY2WKJZ.js.map +0 -1
- package/dist/chunk-LI2REENX.js.map +0 -1
- package/dist/chunk-MDTA37GZ.js.map +0 -1
- package/dist/chunk-PBAUN5CU.js.map +0 -1
- package/dist/chunk-PPI5DA75.js.map +0 -1
- package/dist/chunk-QOPM72CS.js.map +0 -1
- package/dist/chunk-YUYXQJDY.js.map +0 -1
- package/types/playwright.d.ts +0 -49
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveViteConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5DB6XVJN.js";
|
|
4
4
|
import {
|
|
5
5
|
buildWebPublication,
|
|
6
6
|
cleanupWorkspace,
|
|
7
7
|
compile,
|
|
8
|
-
copyAssets,
|
|
9
8
|
createViteServer,
|
|
10
|
-
getFullBrowserName,
|
|
11
9
|
getSourceUrl,
|
|
12
10
|
getViewerFullUrl,
|
|
13
11
|
isWebPubConfig,
|
|
@@ -18,13 +16,12 @@ import {
|
|
|
18
16
|
prepareThemeDirectory,
|
|
19
17
|
resolveTaskConfig,
|
|
20
18
|
warnDeprecatedConfig
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import {
|
|
23
|
-
importNodeModule
|
|
24
|
-
} from "./chunk-FXUEYQRY.js";
|
|
19
|
+
} from "./chunk-YN3JNBNT.js";
|
|
25
20
|
import {
|
|
26
21
|
Logger,
|
|
22
|
+
copyAssets,
|
|
27
23
|
cwd,
|
|
24
|
+
exec,
|
|
28
25
|
isInContainer,
|
|
29
26
|
isUnicodeSupported,
|
|
30
27
|
isValidUri,
|
|
@@ -32,12 +29,15 @@ import {
|
|
|
32
29
|
randomBookSymbol,
|
|
33
30
|
runExitHandlers,
|
|
34
31
|
setupConfigFromFlags
|
|
35
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-MQYXBSRJ.js";
|
|
36
33
|
import {
|
|
37
34
|
CONTAINER_LOCAL_HOSTNAME,
|
|
38
35
|
CONTAINER_ROOT_DIR,
|
|
39
36
|
coreVersion
|
|
40
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-ZKEIYNLT.js";
|
|
38
|
+
import {
|
|
39
|
+
importNodeModule
|
|
40
|
+
} from "./chunk-ZIK6DINS.js";
|
|
41
41
|
import {
|
|
42
42
|
__callDispose,
|
|
43
43
|
__using
|
|
@@ -51,12 +51,9 @@ import { build as viteBuild } from "vite";
|
|
|
51
51
|
import { cyan as cyan2, gray as gray2 } from "yoctocolors";
|
|
52
52
|
|
|
53
53
|
// src/container.ts
|
|
54
|
-
import
|
|
55
|
-
import process from "node:process";
|
|
54
|
+
import process2 from "node:process";
|
|
56
55
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
57
|
-
import { promisify } from "node:util";
|
|
58
56
|
import upath from "upath";
|
|
59
|
-
var execFileAsync = promisify(execFile);
|
|
60
57
|
function toContainerPath(urlOrAbsPath) {
|
|
61
58
|
if (isValidUri(urlOrAbsPath)) {
|
|
62
59
|
if (urlOrAbsPath.toLowerCase().startsWith("file")) {
|
|
@@ -104,12 +101,7 @@ async function runContainer({
|
|
|
104
101
|
`Docker isn't be installed. To use this feature, you'll need to install Docker.`
|
|
105
102
|
);
|
|
106
103
|
}
|
|
107
|
-
const
|
|
108
|
-
"version",
|
|
109
|
-
"--format",
|
|
110
|
-
"{{.Server.Version}}"
|
|
111
|
-
]);
|
|
112
|
-
const version = versionCmd.stdout.trim();
|
|
104
|
+
const version = (await exec("docker", ["version", "--format", "{{.Server.Version}}"])).stdout;
|
|
113
105
|
const [major, minor] = version.split(".").map(Number);
|
|
114
106
|
if (major < 20 || major === 20 && minor < 10) {
|
|
115
107
|
throw new Error(
|
|
@@ -126,7 +118,7 @@ async function runContainer({
|
|
|
126
118
|
"--rm",
|
|
127
119
|
...entrypoint ? ["--entrypoint", entrypoint] : [],
|
|
128
120
|
...env ? env.flatMap(([k, v]) => ["-e", `${k}=${v}`]) : [],
|
|
129
|
-
...
|
|
121
|
+
...process2.env.DEBUG ? ["-e", `DEBUG=${process2.env.DEBUG}`] : [],
|
|
130
122
|
...userVolumeArgs.flatMap((arg) => ["-v", arg]),
|
|
131
123
|
...workdir ? ["-w", workdir] : [],
|
|
132
124
|
image,
|
|
@@ -237,14 +229,15 @@ async function pressReadyWithContainer({
|
|
|
237
229
|
});
|
|
238
230
|
}
|
|
239
231
|
var PostProcess = class _PostProcess {
|
|
240
|
-
|
|
241
|
-
this.document = document2;
|
|
242
|
-
}
|
|
232
|
+
document;
|
|
243
233
|
static async load(pdf) {
|
|
244
234
|
const { PDFDocument } = await importNodeModule("pdf-lib");
|
|
245
235
|
const document2 = await PDFDocument.load(pdf, { updateMetadata: false });
|
|
246
236
|
return new _PostProcess(document2);
|
|
247
237
|
}
|
|
238
|
+
constructor(document2) {
|
|
239
|
+
this.document = document2;
|
|
240
|
+
}
|
|
248
241
|
async save(output, { preflight, preflightOption, image }) {
|
|
249
242
|
const input = preflight ? upath2.join(os.tmpdir(), `vivliostyle-cli-${uuid()}.pdf`) : output;
|
|
250
243
|
const pdf = await this.document.save();
|
|
@@ -511,18 +504,19 @@ async function buildPDF({
|
|
|
511
504
|
await page2.setDefaultTimeout(config.timeout);
|
|
512
505
|
}
|
|
513
506
|
});
|
|
514
|
-
const
|
|
515
|
-
const browserVersion = `${browserName}/${await browser.version()}`;
|
|
507
|
+
const browserVersion = await browser.version();
|
|
516
508
|
Logger.debug(green("success"), `browserVersion=${browserVersion}`);
|
|
517
509
|
let remainTime = config.timeout;
|
|
518
510
|
const startTime = Date.now();
|
|
519
|
-
await page.
|
|
511
|
+
await page.waitForNetworkIdle();
|
|
520
512
|
await page.waitForFunction(() => !!window.coreViewer);
|
|
521
|
-
|
|
513
|
+
const { protocol } = browser;
|
|
514
|
+
if (protocol === "cdp") {
|
|
515
|
+
await page.emulateMediaType("print");
|
|
516
|
+
}
|
|
522
517
|
await page.waitForFunction(
|
|
523
518
|
/* v8 ignore next */
|
|
524
519
|
() => window.coreViewer.readyState === "complete",
|
|
525
|
-
void 0,
|
|
526
520
|
{ polling: 1e3 }
|
|
527
521
|
);
|
|
528
522
|
if (lastEntry) {
|
|
@@ -549,6 +543,7 @@ async function buildPDF({
|
|
|
549
543
|
}
|
|
550
544
|
Logger.debug("Remaining timeout:", remainTime);
|
|
551
545
|
Logger.logUpdate("Building PDF");
|
|
546
|
+
const dimensionSizeForWebDriverBiDi = parseInt(process.env.VS_CLI_PDF_BUILD_PDF_PAGE_SIZE || "", 10) || 3780;
|
|
552
547
|
const pdf = await page.pdf({
|
|
553
548
|
margin: {
|
|
554
549
|
top: 0,
|
|
@@ -557,9 +552,14 @@ async function buildPDF({
|
|
|
557
552
|
left: 0
|
|
558
553
|
},
|
|
559
554
|
printBackground: true,
|
|
560
|
-
|
|
561
|
-
tagged: true
|
|
555
|
+
tagged: true,
|
|
562
556
|
// timeout: remainTime,
|
|
557
|
+
...protocol === "webDriverBiDi" ? {
|
|
558
|
+
width: dimensionSizeForWebDriverBiDi,
|
|
559
|
+
height: dimensionSizeForWebDriverBiDi
|
|
560
|
+
} : {
|
|
561
|
+
preferCSSPageSize: true
|
|
562
|
+
}
|
|
563
563
|
});
|
|
564
564
|
await browser.close();
|
|
565
565
|
Logger.logUpdate("Processing PDF");
|
|
@@ -624,8 +624,7 @@ async function loadPageSizeData(page) {
|
|
|
624
624
|
|
|
625
625
|
// src/core/build.ts
|
|
626
626
|
async function build(inlineConfig, { containerForkMode = false } = {}) {
|
|
627
|
-
Logger.
|
|
628
|
-
Logger.setCustomLogger(inlineConfig.logger);
|
|
627
|
+
Logger.setLogOptions(inlineConfig);
|
|
629
628
|
if (containerForkMode) {
|
|
630
629
|
Logger.setLogPrefix(gray2("[Docker]"));
|
|
631
630
|
}
|
|
@@ -746,4 +745,4 @@ async function build(inlineConfig, { containerForkMode = false } = {}) {
|
|
|
746
745
|
export {
|
|
747
746
|
build
|
|
748
747
|
};
|
|
749
|
-
//# sourceMappingURL=chunk-
|
|
748
|
+
//# sourceMappingURL=chunk-YVNDJXMI.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 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 { execa } = await importNodeModule('execa');\n const proc = execa('docker', args, {\n stdio: 'inherit',\n });\n await proc;\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,12 +1,12 @@
|
|
|
1
1
|
// src/node-modules.ts
|
|
2
2
|
var nodeExternalModules = [
|
|
3
3
|
"@napi-rs/canvas",
|
|
4
|
+
"@puppeteer/browsers",
|
|
4
5
|
"command-exists",
|
|
5
6
|
"execa",
|
|
6
7
|
"press-ready",
|
|
7
8
|
"pdf-lib",
|
|
8
|
-
"
|
|
9
|
-
"playwright-core/lib/server"
|
|
9
|
+
"puppeteer-core"
|
|
10
10
|
];
|
|
11
11
|
var importNodeModule = (name) => import(name);
|
|
12
12
|
|
|
@@ -14,4 +14,4 @@ export {
|
|
|
14
14
|
nodeExternalModules,
|
|
15
15
|
importNodeModule
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-ZIK6DINS.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 'execa',\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 execa: typeof import('execa');\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;AAAA,EACA;AACF;AAYO,IAAM,mBAAmB,CAG9B,SACG,OAAO;","names":[]}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
// src/const.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import resolvePkg from "resolve-pkg";
|
|
5
|
+
import upath from "upath";
|
|
6
|
+
var MANIFEST_FILENAME = "publication.json";
|
|
7
|
+
var TOC_FILENAME = "index.html";
|
|
8
|
+
var TOC_TITLE = "Table of Contents";
|
|
9
|
+
var COVER_HTML_FILENAME = "cover.html";
|
|
10
|
+
var COVER_HTML_IMAGE_ALT = "Cover image";
|
|
11
|
+
var XML_DECLARATION = '<?xml version="1.0" encoding="UTF-8"?>';
|
|
12
|
+
var EPUB_OUTPUT_VERSION = "3.0";
|
|
13
|
+
var EPUB_NS = "http://www.idpf.org/2007/ops";
|
|
14
|
+
var EPUB_CONTAINER_XML = `${XML_DECLARATION}
|
|
15
|
+
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
|
|
16
|
+
<rootfiles>
|
|
17
|
+
<rootfile full-path="EPUB/content.opf" media-type="application/oebps-package+xml" />
|
|
18
|
+
</rootfiles>
|
|
19
|
+
</container>`;
|
|
20
|
+
var EPUB_LANDMARKS_TITLE = "Landmarks";
|
|
21
|
+
var EPUB_LANDMARKS_TOC_ENTRY = TOC_TITLE;
|
|
22
|
+
var EPUB_LANDMARKS_COVER_ENTRY = "Cover Page";
|
|
23
|
+
var EMPTY_DATA_URI = "data:,";
|
|
24
|
+
var VIEWER_ROOT_PATH = "/__vivliostyle-viewer";
|
|
25
|
+
var CONTAINER_URL = "ghcr.io/vivliostyle/cli";
|
|
26
|
+
var CONTAINER_ROOT_DIR = "/data";
|
|
27
|
+
var CONTAINER_LOCAL_HOSTNAME = "host.docker.internal";
|
|
28
|
+
var DEFAULT_BROWSER_VERSIONS = {
|
|
29
|
+
chrome: { "linux": "143.0.7499.42", "linux_arm": "143.0.7499.42", "mac": "143.0.7499.42", "mac_arm": "143.0.7499.42", "win32": "143.0.7499.42", "win64": "143.0.7499.42" },
|
|
30
|
+
chromium: { "linux": "1557241", "linux_arm": "1557267", "mac": "1557267", "mac_arm": "1557281", "win32": "1557270", "win64": "1557225" },
|
|
31
|
+
firefox: { "linux": "stable_146.0", "linux_arm": "stable_146.0", "mac": "stable_146.0", "mac_arm": "stable_146.0", "win32": "stable_146.0", "win64": "stable_146.0" }
|
|
32
|
+
};
|
|
33
|
+
var DEFAULT_CONFIG_FILENAME = "vivliostyle.config.js";
|
|
34
|
+
var DEFAULT_PROJECT_TITLE = "My Title";
|
|
35
|
+
var DEFAULT_PROJECT_AUTHOR = "My Name";
|
|
36
|
+
var TEMPLATE_SETTINGS = [
|
|
37
|
+
{
|
|
38
|
+
value: "minimal",
|
|
39
|
+
label: "Minimal",
|
|
40
|
+
hint: "Use a minimal template with empty content",
|
|
41
|
+
template: "gh:vivliostyle/vivliostyle-cli/templates/minimal"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
value: "basic",
|
|
45
|
+
label: "Basic",
|
|
46
|
+
hint: "Use a basic template with starter content",
|
|
47
|
+
template: "gh:vivliostyle/vivliostyle-cli/templates/basic"
|
|
48
|
+
}
|
|
49
|
+
];
|
|
50
|
+
var TEMPLATE_DEFAULT_FILES = {
|
|
51
|
+
"package.json": (
|
|
52
|
+
/* json */
|
|
53
|
+
`{
|
|
54
|
+
"name": "{{kebab title}}",
|
|
55
|
+
"description": "{{proper title}}",
|
|
56
|
+
"author": "{{author}}",
|
|
57
|
+
"version": "0.0.0",
|
|
58
|
+
"type": "module",
|
|
59
|
+
"private": true,
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "vivliostyle build",
|
|
62
|
+
"preview": "vivliostyle preview"
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"@vivliostyle/cli": "{{cliVersion}}"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
`
|
|
69
|
+
),
|
|
70
|
+
[DEFAULT_CONFIG_FILENAME]: (
|
|
71
|
+
/* js */
|
|
72
|
+
`// @ts-check
|
|
73
|
+
import { defineConfig } from '@vivliostyle/cli';
|
|
74
|
+
|
|
75
|
+
export default defineConfig({
|
|
76
|
+
title: "{{proper title}}",
|
|
77
|
+
author: "{{author}}",
|
|
78
|
+
{{#if language}}
|
|
79
|
+
language: "{{language}}",
|
|
80
|
+
{{/if}}
|
|
81
|
+
{{#if size}}
|
|
82
|
+
size: "{{size}}",
|
|
83
|
+
{{/if}}
|
|
84
|
+
{{#if theme}}
|
|
85
|
+
theme: {{json theme}},
|
|
86
|
+
{{/if}}
|
|
87
|
+
{{#if browser}}
|
|
88
|
+
browser: "{{browser.type}}{{#if browser.tag}}@{{browser.tag}}{{/if}}",
|
|
89
|
+
{{/if}}
|
|
90
|
+
image: "${CONTAINER_URL}:{{cliVersion}}",
|
|
91
|
+
entry: ["manuscript.md"],
|
|
92
|
+
});
|
|
93
|
+
`
|
|
94
|
+
)
|
|
95
|
+
};
|
|
96
|
+
var languages = {
|
|
97
|
+
aa: "Afar",
|
|
98
|
+
ab: "Abkhazian",
|
|
99
|
+
af: "Afrikaans",
|
|
100
|
+
ak: "Akan",
|
|
101
|
+
am: "Amharic",
|
|
102
|
+
an: "Aragonese",
|
|
103
|
+
ar: "Arabic",
|
|
104
|
+
"ar-001": "Modern Standard Arabic",
|
|
105
|
+
as: "Assamese",
|
|
106
|
+
az: "Azerbaijani",
|
|
107
|
+
ba: "Bashkir",
|
|
108
|
+
be: "Belarusian",
|
|
109
|
+
bg: "Bulgarian",
|
|
110
|
+
bm: "Bambara",
|
|
111
|
+
bn: "Bangla",
|
|
112
|
+
bo: "Tibetan",
|
|
113
|
+
br: "Breton",
|
|
114
|
+
bs: "Bosnian",
|
|
115
|
+
ca: "Catalan",
|
|
116
|
+
ce: "Chechen",
|
|
117
|
+
co: "Corsican",
|
|
118
|
+
cs: "Czech",
|
|
119
|
+
cu: "Church Slavic",
|
|
120
|
+
cv: "Chuvash",
|
|
121
|
+
cy: "Welsh",
|
|
122
|
+
da: "Danish",
|
|
123
|
+
de: "German",
|
|
124
|
+
"de-AT": "Austrian German",
|
|
125
|
+
"de-CH": "Swiss High German",
|
|
126
|
+
dv: "Divehi",
|
|
127
|
+
dz: "Dzongkha",
|
|
128
|
+
ee: "Ewe",
|
|
129
|
+
el: "Greek",
|
|
130
|
+
en: "English",
|
|
131
|
+
"en-AU": "Australian English",
|
|
132
|
+
"en-CA": "Canadian English",
|
|
133
|
+
"en-GB": "British English",
|
|
134
|
+
"en-US": "American English",
|
|
135
|
+
eo: "Esperanto",
|
|
136
|
+
es: "Spanish",
|
|
137
|
+
"es-419": "Latin American Spanish",
|
|
138
|
+
"es-ES": "European Spanish",
|
|
139
|
+
"es-MX": "Mexican Spanish",
|
|
140
|
+
et: "Estonian",
|
|
141
|
+
eu: "Basque",
|
|
142
|
+
fa: "Persian",
|
|
143
|
+
"fa-AF": "Dari",
|
|
144
|
+
ff: "Fula",
|
|
145
|
+
fi: "Finnish",
|
|
146
|
+
fo: "Faroese",
|
|
147
|
+
fr: "French",
|
|
148
|
+
"fr-CA": "Canadian French",
|
|
149
|
+
"fr-CH": "Swiss French",
|
|
150
|
+
fy: "Western Frisian",
|
|
151
|
+
ga: "Irish",
|
|
152
|
+
gd: "Scottish Gaelic",
|
|
153
|
+
gl: "Galician",
|
|
154
|
+
gn: "Guarani",
|
|
155
|
+
gu: "Gujarati",
|
|
156
|
+
gv: "Manx",
|
|
157
|
+
ha: "Hausa",
|
|
158
|
+
he: "Hebrew",
|
|
159
|
+
hi: "Hindi",
|
|
160
|
+
"hi-Latn": "Hindi (Latin)",
|
|
161
|
+
hr: "Croatian",
|
|
162
|
+
ht: "Haitian Creole",
|
|
163
|
+
hu: "Hungarian",
|
|
164
|
+
hy: "Armenian",
|
|
165
|
+
ia: "Interlingua",
|
|
166
|
+
id: "Indonesian",
|
|
167
|
+
ie: "Interlingue",
|
|
168
|
+
ig: "Igbo",
|
|
169
|
+
ii: "Sichuan Yi",
|
|
170
|
+
io: "Ido",
|
|
171
|
+
is: "Icelandic",
|
|
172
|
+
it: "Italian",
|
|
173
|
+
iu: "Inuktitut",
|
|
174
|
+
ja: "Japanese",
|
|
175
|
+
jv: "Javanese",
|
|
176
|
+
ka: "Georgian",
|
|
177
|
+
ki: "Kikuyu",
|
|
178
|
+
kk: "Kazakh",
|
|
179
|
+
kl: "Kalaallisut",
|
|
180
|
+
km: "Khmer",
|
|
181
|
+
kn: "Kannada",
|
|
182
|
+
ko: "Korean",
|
|
183
|
+
ks: "Kashmiri",
|
|
184
|
+
ku: "Kurdish",
|
|
185
|
+
kw: "Cornish",
|
|
186
|
+
ky: "Kyrgyz",
|
|
187
|
+
la: "Latin",
|
|
188
|
+
lb: "Luxembourgish",
|
|
189
|
+
lg: "Ganda",
|
|
190
|
+
ln: "Lingala",
|
|
191
|
+
lo: "Lao",
|
|
192
|
+
lt: "Lithuanian",
|
|
193
|
+
lu: "Luba-Katanga",
|
|
194
|
+
lv: "Latvian",
|
|
195
|
+
mg: "Malagasy",
|
|
196
|
+
mi: "M\u0101ori",
|
|
197
|
+
mk: "Macedonian",
|
|
198
|
+
ml: "Malayalam",
|
|
199
|
+
mn: "Mongolian",
|
|
200
|
+
mr: "Marathi",
|
|
201
|
+
ms: "Malay",
|
|
202
|
+
mt: "Maltese",
|
|
203
|
+
my: "Burmese",
|
|
204
|
+
nb: "Norwegian Bokm\xE5l",
|
|
205
|
+
nd: "North Ndebele",
|
|
206
|
+
ne: "Nepali",
|
|
207
|
+
nl: "Dutch",
|
|
208
|
+
"nl-BE": "Flemish",
|
|
209
|
+
nn: "Norwegian Nynorsk",
|
|
210
|
+
no: "Norwegian",
|
|
211
|
+
nr: "South Ndebele",
|
|
212
|
+
nv: "Navajo",
|
|
213
|
+
ny: "Nyanja",
|
|
214
|
+
oc: "Occitan",
|
|
215
|
+
om: "Oromo",
|
|
216
|
+
or: "Odia",
|
|
217
|
+
os: "Ossetic",
|
|
218
|
+
pa: "Punjabi",
|
|
219
|
+
pl: "Polish",
|
|
220
|
+
ps: "Pashto",
|
|
221
|
+
pt: "Portuguese",
|
|
222
|
+
"pt-BR": "Brazilian Portuguese",
|
|
223
|
+
"pt-PT": "European Portuguese",
|
|
224
|
+
qu: "Quechua",
|
|
225
|
+
rm: "Romansh",
|
|
226
|
+
rn: "Rundi",
|
|
227
|
+
ro: "Romanian",
|
|
228
|
+
"ro-MD": "Moldavian",
|
|
229
|
+
ru: "Russian",
|
|
230
|
+
rw: "Kinyarwanda",
|
|
231
|
+
sa: "Sanskrit",
|
|
232
|
+
sc: "Sardinian",
|
|
233
|
+
sd: "Sindhi",
|
|
234
|
+
se: "Northern Sami",
|
|
235
|
+
sg: "Sango",
|
|
236
|
+
si: "Sinhala",
|
|
237
|
+
sk: "Slovak",
|
|
238
|
+
sl: "Slovenian",
|
|
239
|
+
sn: "Shona",
|
|
240
|
+
so: "Somali",
|
|
241
|
+
sq: "Albanian",
|
|
242
|
+
sr: "Serbian",
|
|
243
|
+
ss: "Swati",
|
|
244
|
+
st: "Southern Sotho",
|
|
245
|
+
su: "Sundanese",
|
|
246
|
+
sv: "Swedish",
|
|
247
|
+
sw: "Swahili",
|
|
248
|
+
"sw-CD": "Congo Swahili",
|
|
249
|
+
ta: "Tamil",
|
|
250
|
+
te: "Telugu",
|
|
251
|
+
tg: "Tajik",
|
|
252
|
+
th: "Thai",
|
|
253
|
+
ti: "Tigrinya",
|
|
254
|
+
tk: "Turkmen",
|
|
255
|
+
tn: "Tswana",
|
|
256
|
+
to: "Tongan",
|
|
257
|
+
tr: "Turkish",
|
|
258
|
+
ts: "Tsonga",
|
|
259
|
+
tt: "Tatar",
|
|
260
|
+
ug: "Uyghur",
|
|
261
|
+
uk: "Ukrainian",
|
|
262
|
+
ur: "Urdu",
|
|
263
|
+
uz: "Uzbek",
|
|
264
|
+
ve: "Venda",
|
|
265
|
+
vi: "Vietnamese",
|
|
266
|
+
vo: "Volap\xFCk",
|
|
267
|
+
wa: "Walloon",
|
|
268
|
+
wo: "Wolof",
|
|
269
|
+
xh: "Xhosa",
|
|
270
|
+
yi: "Yiddish",
|
|
271
|
+
yo: "Yoruba",
|
|
272
|
+
za: "Zhuang",
|
|
273
|
+
zh: "Chinese",
|
|
274
|
+
"zh-Hans": "Simplified Chinese",
|
|
275
|
+
"zh-Hant": "Traditional Chinese",
|
|
276
|
+
zu: "Zulu"
|
|
277
|
+
};
|
|
278
|
+
var cliRoot = upath.join(fileURLToPath(import.meta.url), "../..");
|
|
279
|
+
var cliVersion = (() => {
|
|
280
|
+
if (import.meta.env?.VITEST) {
|
|
281
|
+
return "0.0.1";
|
|
282
|
+
}
|
|
283
|
+
const pkg = JSON.parse(
|
|
284
|
+
fs.readFileSync(upath.join(cliRoot, "package.json"), "utf8")
|
|
285
|
+
);
|
|
286
|
+
return pkg.version;
|
|
287
|
+
})();
|
|
288
|
+
var viewerRoot = resolvePkg("@vivliostyle/viewer", { cwd: cliRoot });
|
|
289
|
+
var coreVersion = (() => {
|
|
290
|
+
if (import.meta.env?.VITEST) {
|
|
291
|
+
return "0.0.1";
|
|
292
|
+
}
|
|
293
|
+
const pkg = JSON.parse(
|
|
294
|
+
fs.readFileSync(upath.join(viewerRoot, "package.json"), "utf8")
|
|
295
|
+
);
|
|
296
|
+
return pkg.version;
|
|
297
|
+
})();
|
|
298
|
+
var versionForDisplay = `cli: ${cliVersion}
|
|
299
|
+
core: ${coreVersion}`;
|
|
300
|
+
|
|
301
|
+
export {
|
|
302
|
+
MANIFEST_FILENAME,
|
|
303
|
+
TOC_FILENAME,
|
|
304
|
+
TOC_TITLE,
|
|
305
|
+
COVER_HTML_FILENAME,
|
|
306
|
+
COVER_HTML_IMAGE_ALT,
|
|
307
|
+
XML_DECLARATION,
|
|
308
|
+
EPUB_OUTPUT_VERSION,
|
|
309
|
+
EPUB_NS,
|
|
310
|
+
EPUB_CONTAINER_XML,
|
|
311
|
+
EPUB_LANDMARKS_TITLE,
|
|
312
|
+
EPUB_LANDMARKS_TOC_ENTRY,
|
|
313
|
+
EPUB_LANDMARKS_COVER_ENTRY,
|
|
314
|
+
EMPTY_DATA_URI,
|
|
315
|
+
VIEWER_ROOT_PATH,
|
|
316
|
+
CONTAINER_URL,
|
|
317
|
+
CONTAINER_ROOT_DIR,
|
|
318
|
+
CONTAINER_LOCAL_HOSTNAME,
|
|
319
|
+
DEFAULT_BROWSER_VERSIONS,
|
|
320
|
+
DEFAULT_CONFIG_FILENAME,
|
|
321
|
+
DEFAULT_PROJECT_TITLE,
|
|
322
|
+
DEFAULT_PROJECT_AUTHOR,
|
|
323
|
+
TEMPLATE_SETTINGS,
|
|
324
|
+
TEMPLATE_DEFAULT_FILES,
|
|
325
|
+
languages,
|
|
326
|
+
cliVersion,
|
|
327
|
+
viewerRoot,
|
|
328
|
+
coreVersion,
|
|
329
|
+
versionForDisplay
|
|
330
|
+
};
|
|
331
|
+
//# sourceMappingURL=chunk-ZKEIYNLT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/const.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport resolvePkg from 'resolve-pkg';\nimport upath from 'upath';\n\nexport const MANIFEST_FILENAME = 'publication.json';\nexport const TOC_FILENAME = 'index.html';\nexport const TOC_TITLE = 'Table of Contents';\nexport const COVER_HTML_FILENAME = 'cover.html';\nexport const COVER_HTML_IMAGE_ALT = 'Cover image';\n\nexport const XML_DECLARATION = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';\nexport const EPUB_OUTPUT_VERSION = '3.0';\nexport const EPUB_MIMETYPE = 'application/epub+zip';\nexport const EPUB_NS = 'http://www.idpf.org/2007/ops';\nexport const EPUB_CONTAINER_XML = `${XML_DECLARATION}\n<container version=\"1.0\" xmlns=\"urn:oasis:names:tc:opendocument:xmlns:container\">\n <rootfiles>\n <rootfile full-path=\"EPUB/content.opf\" media-type=\"application/oebps-package+xml\" />\n </rootfiles>\n</container>`;\nexport const EPUB_LANDMARKS_TITLE = 'Landmarks';\nexport const EPUB_LANDMARKS_TOC_ENTRY = TOC_TITLE;\nexport const EPUB_LANDMARKS_COVER_ENTRY = 'Cover Page';\n\nexport const EMPTY_DATA_URI = 'data:,';\nexport const VIEWER_ROOT_PATH = '/__vivliostyle-viewer';\n\nexport const CONTAINER_URL = 'ghcr.io/vivliostyle/cli';\nexport const CONTAINER_ROOT_DIR = '/data';\n// Special hostname to access host machine from container\n// https://docs.docker.com/desktop/features/networking/#use-cases-and-workarounds\nexport const CONTAINER_LOCAL_HOSTNAME = 'host.docker.internal';\n\n// Don't write by hand! Instead, run `npm run generate:browser-versions` to update.\n// START DEFAULT_BROWSER_VERSIONS\n// prettier-ignore\nexport const DEFAULT_BROWSER_VERSIONS = {\n chrome: {\"linux\":\"143.0.7499.42\",\"linux_arm\":\"143.0.7499.42\",\"mac\":\"143.0.7499.42\",\"mac_arm\":\"143.0.7499.42\",\"win32\":\"143.0.7499.42\",\"win64\":\"143.0.7499.42\"},\n chromium: {\"linux\":\"1557241\",\"linux_arm\":\"1557267\",\"mac\":\"1557267\",\"mac_arm\":\"1557281\",\"win32\":\"1557270\",\"win64\":\"1557225\"},\n firefox: {\"linux\":\"stable_146.0\",\"linux_arm\":\"stable_146.0\",\"mac\":\"stable_146.0\",\"mac_arm\":\"stable_146.0\",\"win32\":\"stable_146.0\",\"win64\":\"stable_146.0\"},\n} as const;\n// END DEFAULT_BROWSER_VERSIONS\n\nexport const DEFAULT_CONFIG_FILENAME = 'vivliostyle.config.js';\nexport const DEFAULT_PROJECT_TITLE = 'My Title';\nexport const DEFAULT_PROJECT_AUTHOR = 'My Name';\n\nexport const TEMPLATE_SETTINGS = [\n {\n value: 'minimal',\n label: 'Minimal',\n hint: 'Use a minimal template with empty content',\n template: 'gh:vivliostyle/vivliostyle-cli/templates/minimal',\n },\n {\n value: 'basic',\n label: 'Basic',\n hint: 'Use a basic template with starter content',\n template: 'gh:vivliostyle/vivliostyle-cli/templates/basic',\n },\n] as const;\n\nexport const TEMPLATE_DEFAULT_FILES = {\n 'package.json': /* json */ `{\n \"name\": \"{{kebab title}}\",\n \"description\": \"{{proper title}}\",\n \"author\": \"{{author}}\",\n \"version\": \"0.0.0\",\n \"type\": \"module\",\n \"private\": true,\n \"scripts\": {\n \"build\": \"vivliostyle build\",\n \"preview\": \"vivliostyle preview\"\n },\n \"dependencies\": {\n \"@vivliostyle/cli\": \"{{cliVersion}}\"\n }\n}\n`,\n [DEFAULT_CONFIG_FILENAME]: /* js */ `// @ts-check\nimport { defineConfig } from '@vivliostyle/cli';\n\nexport default defineConfig({\n title: \"{{proper title}}\",\n author: \"{{author}}\",\n {{#if language}}\n language: \"{{language}}\",\n {{/if}}\n {{#if size}}\n size: \"{{size}}\",\n {{/if}}\n {{#if theme}}\n theme: {{json theme}},\n {{/if}}\n {{#if browser}}\n browser: \"{{browser.type}}{{#if browser.tag}}@{{browser.tag}}{{/if}}\",\n {{/if}}\n image: \"${CONTAINER_URL}:{{cliVersion}}\",\n entry: [\"manuscript.md\"],\n});\n`,\n} as const;\n\n// UNICODE LICENSE V3\n// https://github.com/unicode-org/cldr-json\nexport const languages = {\n aa: 'Afar',\n ab: 'Abkhazian',\n af: 'Afrikaans',\n ak: 'Akan',\n am: 'Amharic',\n an: 'Aragonese',\n ar: 'Arabic',\n 'ar-001': 'Modern Standard Arabic',\n as: 'Assamese',\n az: 'Azerbaijani',\n ba: 'Bashkir',\n be: 'Belarusian',\n bg: 'Bulgarian',\n bm: 'Bambara',\n bn: 'Bangla',\n bo: 'Tibetan',\n br: 'Breton',\n bs: 'Bosnian',\n ca: 'Catalan',\n ce: 'Chechen',\n co: 'Corsican',\n cs: 'Czech',\n cu: 'Church Slavic',\n cv: 'Chuvash',\n cy: 'Welsh',\n da: 'Danish',\n de: 'German',\n 'de-AT': 'Austrian German',\n 'de-CH': 'Swiss High German',\n dv: 'Divehi',\n dz: 'Dzongkha',\n ee: 'Ewe',\n el: 'Greek',\n en: 'English',\n 'en-AU': 'Australian English',\n 'en-CA': 'Canadian English',\n 'en-GB': 'British English',\n 'en-US': 'American English',\n eo: 'Esperanto',\n es: 'Spanish',\n 'es-419': 'Latin American Spanish',\n 'es-ES': 'European Spanish',\n 'es-MX': 'Mexican Spanish',\n et: 'Estonian',\n eu: 'Basque',\n fa: 'Persian',\n 'fa-AF': 'Dari',\n ff: 'Fula',\n fi: 'Finnish',\n fo: 'Faroese',\n fr: 'French',\n 'fr-CA': 'Canadian French',\n 'fr-CH': 'Swiss French',\n fy: 'Western Frisian',\n ga: 'Irish',\n gd: 'Scottish Gaelic',\n gl: 'Galician',\n gn: 'Guarani',\n gu: 'Gujarati',\n gv: 'Manx',\n ha: 'Hausa',\n he: 'Hebrew',\n hi: 'Hindi',\n 'hi-Latn': 'Hindi (Latin)',\n hr: 'Croatian',\n ht: 'Haitian Creole',\n hu: 'Hungarian',\n hy: 'Armenian',\n ia: 'Interlingua',\n id: 'Indonesian',\n ie: 'Interlingue',\n ig: 'Igbo',\n ii: 'Sichuan Yi',\n io: 'Ido',\n is: 'Icelandic',\n it: 'Italian',\n iu: 'Inuktitut',\n ja: 'Japanese',\n jv: 'Javanese',\n ka: 'Georgian',\n ki: 'Kikuyu',\n kk: 'Kazakh',\n kl: 'Kalaallisut',\n km: 'Khmer',\n kn: 'Kannada',\n ko: 'Korean',\n ks: 'Kashmiri',\n ku: 'Kurdish',\n kw: 'Cornish',\n ky: 'Kyrgyz',\n la: 'Latin',\n lb: 'Luxembourgish',\n lg: 'Ganda',\n ln: 'Lingala',\n lo: 'Lao',\n lt: 'Lithuanian',\n lu: 'Luba-Katanga',\n lv: 'Latvian',\n mg: 'Malagasy',\n mi: 'Māori',\n mk: 'Macedonian',\n ml: 'Malayalam',\n mn: 'Mongolian',\n mr: 'Marathi',\n ms: 'Malay',\n mt: 'Maltese',\n my: 'Burmese',\n nb: 'Norwegian Bokmål',\n nd: 'North Ndebele',\n ne: 'Nepali',\n nl: 'Dutch',\n 'nl-BE': 'Flemish',\n nn: 'Norwegian Nynorsk',\n no: 'Norwegian',\n nr: 'South Ndebele',\n nv: 'Navajo',\n ny: 'Nyanja',\n oc: 'Occitan',\n om: 'Oromo',\n or: 'Odia',\n os: 'Ossetic',\n pa: 'Punjabi',\n pl: 'Polish',\n ps: 'Pashto',\n pt: 'Portuguese',\n 'pt-BR': 'Brazilian Portuguese',\n 'pt-PT': 'European Portuguese',\n qu: 'Quechua',\n rm: 'Romansh',\n rn: 'Rundi',\n ro: 'Romanian',\n 'ro-MD': 'Moldavian',\n ru: 'Russian',\n rw: 'Kinyarwanda',\n sa: 'Sanskrit',\n sc: 'Sardinian',\n sd: 'Sindhi',\n se: 'Northern Sami',\n sg: 'Sango',\n si: 'Sinhala',\n sk: 'Slovak',\n sl: 'Slovenian',\n sn: 'Shona',\n so: 'Somali',\n sq: 'Albanian',\n sr: 'Serbian',\n ss: 'Swati',\n st: 'Southern Sotho',\n su: 'Sundanese',\n sv: 'Swedish',\n sw: 'Swahili',\n 'sw-CD': 'Congo Swahili',\n ta: 'Tamil',\n te: 'Telugu',\n tg: 'Tajik',\n th: 'Thai',\n ti: 'Tigrinya',\n tk: 'Turkmen',\n tn: 'Tswana',\n to: 'Tongan',\n tr: 'Turkish',\n ts: 'Tsonga',\n tt: 'Tatar',\n ug: 'Uyghur',\n uk: 'Ukrainian',\n ur: 'Urdu',\n uz: 'Uzbek',\n ve: 'Venda',\n vi: 'Vietnamese',\n vo: 'Volapük',\n wa: 'Walloon',\n wo: 'Wolof',\n xh: 'Xhosa',\n yi: 'Yiddish',\n yo: 'Yoruba',\n za: 'Zhuang',\n zh: 'Chinese',\n 'zh-Hans': 'Simplified Chinese',\n 'zh-Hant': 'Traditional Chinese',\n zu: 'Zulu',\n};\n\nexport const cliRoot = upath.join(fileURLToPath(import.meta.url), '../..');\nexport const cliVersion = (() => {\n if (import.meta.env?.VITEST) {\n return '0.0.1';\n }\n const pkg = JSON.parse(\n fs.readFileSync(upath.join(cliRoot, 'package.json'), 'utf8'),\n );\n return pkg.version;\n})();\n\nexport const viewerRoot = resolvePkg('@vivliostyle/viewer', { cwd: cliRoot })!;\nexport const coreVersion = (() => {\n if (import.meta.env?.VITEST) {\n return '0.0.1';\n }\n const pkg = JSON.parse(\n fs.readFileSync(upath.join(viewerRoot, 'package.json'), 'utf8'),\n );\n return pkg.version;\n})();\n\nexport const versionForDisplay = `cli: ${cliVersion}\ncore: ${coreVersion}`;\n"],"mappings":"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AA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,IAAI;AACN;AAEO,IAAM,UAAU,MAAM,KAAK,cAAc,YAAY,GAAG,GAAG,OAAO;AAClE,IAAM,cAAc,MAAM;AAC/B,MAAI,YAAY,KAAK,QAAQ;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,MAAM,KAAK;AAAA,IACf,GAAG,aAAa,MAAM,KAAK,SAAS,cAAc,GAAG,MAAM;AAAA,EAC7D;AACA,SAAO,IAAI;AACb,GAAG;AAEI,IAAM,aAAa,WAAW,uBAAuB,EAAE,KAAK,QAAQ,CAAC;AACrE,IAAM,eAAe,MAAM;AAChC,MAAI,YAAY,KAAK,QAAQ;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,MAAM,KAAK;AAAA,IACf,GAAG,aAAa,MAAM,KAAK,YAAY,cAAc,GAAG,MAAM;AAAA,EAChE;AACA,SAAO,IAAI;AACb,GAAG;AAEI,IAAM,oBAAoB,QAAQ,UAAU;AAAA,QAC3C,WAAW;","names":[]}
|