@vivliostyle/cli 10.3.0 → 10.4.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 +7 -4
- package/dist/{chunk-RBKPG6VU.js → chunk-4DTPH2XX.js} +2 -2
- package/dist/{chunk-QLK3XMQI.js → chunk-DEJL63H2.js} +195 -130
- package/dist/chunk-DEJL63H2.js.map +1 -0
- package/dist/{chunk-ZEBXHUJX.js → chunk-DK3HFVHX.js} +27 -51
- package/dist/chunk-DK3HFVHX.js.map +1 -0
- package/dist/{chunk-3QOSSWIX.js → chunk-J2YGULSR.js} +58 -10
- package/dist/chunk-J2YGULSR.js.map +1 -0
- package/dist/{chunk-ALY3QX7K.js → chunk-L4PJ2SP3.js} +22 -25
- package/dist/chunk-L4PJ2SP3.js.map +1 -0
- package/dist/{chunk-WIGLU3EK.js → chunk-LE3QOQ5F.js} +11 -9
- package/dist/{chunk-WIGLU3EK.js.map → chunk-LE3QOQ5F.js.map} +1 -1
- package/dist/{chunk-YNX6D2I6.js → chunk-P33ELNYE.js} +342 -383
- package/dist/chunk-P33ELNYE.js.map +1 -0
- package/dist/chunk-Q4EIXB5V.js +330 -0
- package/dist/chunk-Q4EIXB5V.js.map +1 -0
- package/dist/{chunk-NVNEYZ3J.js → chunk-RLV2H3QB.js} +11 -11
- package/dist/chunk-RLV2H3QB.js.map +1 -0
- package/dist/{chunk-RILZCPJE.js → chunk-VAPIKX4A.js} +308 -503
- package/dist/chunk-VAPIKX4A.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.js +17 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create.js +14 -7
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.js +7 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/preview.js +16 -9
- package/dist/commands/preview.js.map +1 -1
- package/dist/config/schema.d.ts +13293 -1796
- package/dist/config/schema.js +7 -2
- package/dist/constants.d.ts +250 -0
- package/dist/constants.js +60 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/vite-adapter.js +6 -5
- package/package.json +16 -12
- package/dist/chunk-3QOSSWIX.js.map +0 -1
- package/dist/chunk-ALY3QX7K.js.map +0 -1
- package/dist/chunk-NVNEYZ3J.js.map +0 -1
- package/dist/chunk-QLK3XMQI.js.map +0 -1
- package/dist/chunk-RILZCPJE.js.map +0 -1
- package/dist/chunk-YNX6D2I6.js.map +0 -1
- package/dist/chunk-ZEBXHUJX.js.map +0 -1
- /package/dist/{chunk-RBKPG6VU.js.map → chunk-4DTPH2XX.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/schema.ts"],"sourcesContent":["import type { Metadata, StringifyMarkdownOptions } from '@vivliostyle/vfm';\nimport { satisfies as semverSatisfies } from 'semver';\nimport type { Processor } from 'unified';\nimport upath from 'upath';\nimport * as v from 'valibot';\nimport { cliVersion, CONTAINER_URL } from '../const.js';\nimport type { LoggerInterface } from '../logger.js';\n\nconst $ = (strings: TemplateStringsArray, ...values: any[]) => {\n const lines = String.raw({ raw: strings }, ...values).split('\\n');\n const indent = lines\n .filter((line) => line.trim())\n .map((line) => line.match(/^\\s*/)?.[0].length ?? 0)\n .reduce((min, len) => Math.min(min, len), Infinity);\n return lines\n .map((line) => line.slice(indent))\n .join('\\n')\n .trim();\n};\n\n/**\n * @see https://github.com/vivliostyle/vivliostyle-cli/blob/main/docs/config.md\n */\nexport type StructuredDocument = {\n title: string;\n href: string;\n children: StructuredDocument[];\n sections?: StructuredDocumentSection[];\n};\n/** @hidden */\nexport const StructuredDocument: v.GenericSchema<StructuredDocument> = v.pipe(\n v.object({\n title: v.string(),\n href: v.string(),\n children: v.array(v.lazy(() => StructuredDocument)),\n sections: v.optional(v.array(v.lazy(() => StructuredDocumentSection))),\n }),\n v.title('StructuredDocument'),\n);\n\n/**\n * @see https://github.com/vivliostyle/vivliostyle-cli/blob/main/docs/config.md\n */\nexport type StructuredDocumentSection = {\n headingHtml: string;\n headingText: string;\n level: number;\n children: StructuredDocumentSection[];\n href?: string;\n id?: string;\n};\n/** @hidden */\nexport const StructuredDocumentSection: v.GenericSchema<StructuredDocumentSection> =\n v.pipe(\n v.object({\n headingHtml: v.string(),\n headingText: v.string(),\n level: v.number(),\n children: v.array(v.lazy(() => StructuredDocumentSection)),\n href: v.optional(v.string()),\n id: v.optional(v.string()),\n }),\n v.title('StructuredDocumentSection'),\n );\n\nexport const ValidString = v.pipe(\n v.string(),\n v.trim(),\n v.minLength(1, 'At least one character is required'),\n);\n\nexport const DocumentProcessorSchema = v.pipe(\n v.function() as v.GenericSchema<\n (option: StringifyMarkdownOptions, metadata: Metadata) => Processor\n >,\n v.metadata({\n typeString:\n '(option: import(\"@vivliostyle/vfm\").StringifyMarkdownOptions, metadata: import(\"@vivliostyle/vfm\").Metadata) => import(\"unified\").Processor',\n }),\n v.description($`\n Custom function to provide a unified Processor for converting the source document to HTML.\n `),\n);\n\nexport const DocumentMetadataReaderSchema = v.pipe(\n v.function() as v.GenericSchema<(content: string) => Metadata>,\n v.metadata({\n typeString: '(content: string) => import(\"@vivliostyle/vfm\").Metadata',\n }),\n v.description($`\n Custom function to extract metadata from the source document content.\n `),\n);\n\nexport const ThemeConfig = v.pipe(\n v.intersect([\n v.required(\n v.object({\n specifier: v.pipe(\n ValidString,\n v.description($`\n The specifier name for importing the theme package or the path to a CSS file.\n - An npm-style package argument is allowed (e.g., \\`@vivliostyle/theme-academic@1\\`, \\`./local-pkg\\`).\n - A URL or a local path to a CSS file is allowed (e.g., \\`./style.css\\`, \\`https://example.com/style.css\\`).\n `),\n ),\n }),\n 'Missing required field: specifier',\n ),\n v.partial(\n v.object({\n import: v.pipe(\n v.union([v.array(ValidString), ValidString]),\n v.transform((input) => [input].flat()),\n v.description($`\n The path(s) to the CSS file(s) to import from the package.\n Specify this if you want to import files other than the default.\n `),\n ),\n }),\n ),\n ]),\n v.title('ThemeConfig'),\n);\nexport type ThemeConfig = v.InferInput<typeof ThemeConfig>;\n\nexport const ThemeSpecifier = v.pipe(\n v.union([\n v.array(v.union([ThemeConfig, ValidString])),\n ThemeConfig,\n ValidString,\n ]),\n v.transform((input) =>\n [input]\n .flat()\n .map((item) => (typeof item === 'string' ? { specifier: item } : item)),\n ),\n);\nexport type ThemeSpecifier = v.InferInput<typeof ThemeSpecifier>;\n\nexport const ArticleEntryConfig = v.pipe(\n v.required(\n v.object({\n path: ValidString,\n output: v.optional(ValidString),\n title: v.optional(ValidString),\n theme: v.optional(ThemeSpecifier),\n encodingFormat: v.optional(ValidString),\n rel: v.optional(\n v.pipe(\n v.union([v.array(ValidString), ValidString]),\n v.transform((input) => [input].flat()),\n ),\n ),\n documentProcessor: v.optional(DocumentProcessorSchema),\n documentMetadataReader: v.optional(DocumentMetadataReaderSchema),\n }),\n ['path'],\n 'Missing required field: path',\n ),\n v.title('ArticleEntryConfig'),\n);\nexport type ArticleEntryConfig = v.InferInput<typeof ArticleEntryConfig>;\n\nconst PageBreak = v.union([\n v.literal('left'),\n v.literal('right'),\n v.literal('recto'),\n v.literal('verso'),\n]);\n\nexport const ContentsEntryConfig = v.pipe(\n v.object({\n rel: v.literal('contents'),\n path: v.optional(ValidString),\n output: v.optional(ValidString),\n title: v.optional(ValidString),\n theme: v.optional(ThemeSpecifier),\n pageBreakBefore: v.pipe(\n v.optional(PageBreak),\n v.description($`\n Specifies the page break position before this document.\n Useful for determining which side the first page of the document should be placed on in a two-page spread.\n `),\n ),\n pageCounterReset: v.pipe(\n v.optional(v.pipe(v.number(), v.safeInteger())),\n v.description($`\n Resets the starting page number of this document to the specified integer.\n Useful for controlling page numbers when including a page.\n `),\n ),\n }),\n v.title('ContentsEntryConfig'),\n);\nexport type ContentsEntryConfig = v.InferInput<typeof ContentsEntryConfig>;\n\nexport const CoverEntryConfig = v.pipe(\n v.object({\n rel: v.literal('cover'),\n path: v.optional(ValidString),\n output: v.optional(ValidString),\n title: v.optional(ValidString),\n theme: v.optional(ThemeSpecifier),\n imageSrc: v.optional(ValidString),\n imageAlt: v.optional(v.string()), // Allow empty string\n pageBreakBefore: v.pipe(\n v.optional(PageBreak),\n v.description($`\n Specifies the page break position before this document.\n Useful for determining which side the first page of the document should be placed on in a two-page spread.\n `),\n ),\n }),\n v.title('CoverEntryConfig'),\n);\nexport type CoverEntryConfig = v.InferInput<typeof CoverEntryConfig>;\n\nexport const EntryConfig = v.union([\n ContentsEntryConfig,\n CoverEntryConfig,\n ArticleEntryConfig,\n]);\nexport type EntryConfig = v.InferInput<typeof EntryConfig>;\n\nexport const OutputFormat = v.union([\n v.literal('pdf'),\n v.literal('epub'),\n v.literal('webpub'),\n]);\nexport type OutputFormat = v.InferInput<typeof OutputFormat>;\n\nexport const RenderMode = v.union([v.literal('local'), v.literal('docker')]);\nexport type RenderMode = v.InferInput<typeof RenderMode>;\n\nconst RGBValueSchema = v.pipe(\n v.object({\n r: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n g: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n b: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n }),\n v.title('RGBValue'),\n);\n\nconst CMYKValueSchema = v.pipe(\n v.object({\n c: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n m: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n y: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n k: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10000)),\n }),\n v.title('CMYKValue'),\n);\n\nconst CmykOverrideEntrySchema = v.tuple([RGBValueSchema, CMYKValueSchema]);\n\nconst CmykConfigSchema = v.pipe(\n v.partial(\n v.object({\n overrideMap: v.pipe(\n v.array(CmykOverrideEntrySchema),\n v.description($`\n Custom RGB to CMYK color mapping.\n Each entry is a tuple of [{r, g, b}, {c, m, y, k}] where values are integers (0-10000).\n `),\n ),\n warnUnmapped: v.pipe(\n v.boolean(),\n v.description($`\n Warn when RGB colors not mapped to CMYK are encountered. (default: true)\n `),\n ),\n mapOutput: v.pipe(\n ValidString,\n v.description($`\n Output the CMYK color map to a JSON file at the specified path.\n `),\n ),\n }),\n ),\n v.title('CmykConfig'),\n);\n\nconst CmykSchema = v.pipe(\n v.union([v.boolean(), CmykConfigSchema]),\n v.description($`\n Convert device-cmyk() colors to CMYK in the output PDF.\n Can be a boolean or a config object with overrideMap and warnUnmapped options.\n `),\n);\n\nconst ReplaceImageEntrySchema = v.pipe(\n v.object({\n source: v.pipe(\n v.union([ValidString, v.instance(RegExp)]),\n v.description(\n 'Path to the source image file, or a RegExp pattern to match multiple files.',\n ),\n ),\n replacement: v.pipe(\n ValidString,\n v.description(\n 'Path to the replacement image file. When source is a RegExp, supports $1, $2, etc. for captured groups.',\n ),\n ),\n }),\n v.title('ReplaceImageEntry'),\n);\n\nconst ReplaceImageSchema = v.pipe(\n v.array(ReplaceImageEntrySchema),\n v.description($`\n Replace images in the output PDF.\n Each entry specifies a source image path and its replacement image path.\n Useful for replacing RGB images with CMYK versions.\n `),\n);\n\nconst PdfPostprocessConfigSchema = v.pipe(\n v.partial(\n v.object({\n preflight: v.pipe(\n v.union([v.literal('press-ready'), v.literal('press-ready-local')]),\n v.description($`\n Apply the process to generate a print-ready PDF.\n `),\n ),\n preflightOption: v.pipe(\n v.array(ValidString),\n v.description($`\n Options for the preflight process (e.g., \\`gray-scale\\`, \\`enforce-outline\\`).\n Refer to the press-ready documentation for more information: [press-ready](https://github.com/vibranthq/press-ready)\n `),\n ),\n cmyk: CmykSchema,\n replaceImage: ReplaceImageSchema,\n }),\n ),\n v.title('PdfPostprocessConfig'),\n v.description($`\n PDF post-processing options.\n When both pdfPostprocess and legacy options (pressReady, preflight, etc.) are specified,\n pdfPostprocess takes precedence.\n `),\n);\nexport type PdfPostprocessConfig = v.InferInput<\n typeof PdfPostprocessConfigSchema\n>;\n\nexport const OutputConfig = v.pipe(\n v.intersect([\n v.required(\n v.object({\n path: v.pipe(\n ValidString,\n v.description($`\n Specifies the output file name or directory. (default: \\`<title>.pdf\\`)\n `),\n ),\n }),\n 'Missing required field: path',\n ),\n v.partial(\n v.object({\n format: v.pipe(\n OutputFormat,\n v.description($`\n Specifies the output format.\n `),\n ),\n renderMode: v.pipe(\n RenderMode,\n v.description($`\n If set to \\`docker\\`, Vivliostyle will render the PDF using a Docker container. (default: \\`local\\`)\n `),\n ),\n /** @deprecated */\n preflight: v.pipe(\n v.union([v.literal('press-ready'), v.literal('press-ready-local')]),\n v.metadata({ deprecated: true }),\n v.description($`\n Use \\`pdfPostprocess.preflight\\` instead\n `),\n ),\n /** @deprecated */\n preflightOption: v.pipe(\n v.array(ValidString),\n v.metadata({ deprecated: true }),\n v.description($`\n Use \\`pdfPostprocess.preflightOption\\` instead\n `),\n ),\n pdfPostprocess: PdfPostprocessConfigSchema,\n }),\n ),\n ]),\n v.title('OutputConfig'),\n);\nexport type OutputConfig = v.InferInput<typeof OutputConfig>;\n\n// Use v.looseObject to allow unknown keys in future VFM versions\nexport const VfmReplaceRule = v.looseObject({\n test: v.instance(RegExp),\n match: v.pipe(\n v.function() as v.GenericSchema<\n (result: RegExpMatchArray, h: any) => Object | string\n >,\n // https://github.com/fabian-hiller/valibot/issues/243\n v.metadata({\n typeString: '(result: RegExpMatchArray, h: any) => Object | string',\n }),\n ),\n});\nexport type VfmReplaceRule = v.InferInput<typeof VfmReplaceRule>;\n\nexport const BrowserType = v.union([\n v.literal('chrome'),\n v.literal('chromium'),\n v.literal('firefox'),\n]);\nexport type BrowserType = v.InferInput<typeof BrowserType>;\n\nexport const ReadingProgression = v.union([v.literal('ltr'), v.literal('rtl')]);\nexport type ReadingProgression = v.InferInput<typeof ReadingProgression>;\n\nexport const LogLevel = v.union([\n v.literal('silent'),\n v.literal('info'),\n v.literal('verbose'),\n v.literal('debug'),\n]);\nexport type LogLevel = v.InferInput<typeof LogLevel>;\n\nconst notAllowedPatternRe = /(^\\s*[/\\\\]|^(.*[/\\\\])?\\s*\\.\\.\\s*([/\\\\].*)?$)/g;\nconst validateAssetPatternSettings = (propName: string) =>\n v.check<string[], string>(\n (input) => input.every((pattern) => !notAllowedPatternRe.test(pattern)),\n `Invalid pattern was found in copyAsset.${propName} option`,\n );\n\n// See the special characters of glob pattern\n// https://github.com/micromatch/picomatch\nconst notAllowedExtensionRe = /([\\\\/*?@+!|(){}[\\]]|\\.\\.|^\\s*\\.)/g;\nconst validateAssetExtensionSettings = (propName: string) =>\n v.check<string[], string>(\n (input) => input.every((pattern) => !notAllowedExtensionRe.test(pattern)),\n `Invalid pattern was found in copyAsset.${propName} option`,\n );\n\nconst validateBrowserTagFormat = v.check<string, string>((input) => {\n const [type] = input.split('@');\n return v.is(BrowserType, type);\n}, 'Unknown browser type');\nconst parseBrowserTagFormat = v.transform<\n string,\n { type: BrowserType; tag?: string }\n>((input) => {\n const [type, tag] = input.split('@');\n return { type: v.parse(BrowserType, type), tag };\n});\n\nexport const CopyAssetConfig = v.pipe(\n v.partial(\n v.object({\n includes: v.pipe(\n v.array(ValidString),\n validateAssetPatternSettings('includes'),\n v.description($`\n Directories and files to include as asset files. Supports wildcard characters for glob patterns.\n `),\n ),\n excludes: v.pipe(\n v.array(ValidString),\n validateAssetPatternSettings('excludes'),\n v.description($`\n Directories and files to exclude from asset files. Supports wildcard characters for glob patterns.\n `),\n ),\n includeFileExtensions: v.pipe(\n v.array(ValidString),\n validateAssetExtensionSettings('includeFileExtensions'),\n v.description($`\n File extensions to include as asset files. (default: \\`[css, css.map, png, jpg, jpeg, svg, gif, webp, apng, ttf, otf, woff, woff2]\\`)\n `),\n ),\n excludeFileExtensions: v.pipe(\n v.array(ValidString),\n validateAssetExtensionSettings('excludeFileExtensions'),\n v.description($`\n File extensions to exclude from asset files.\n `),\n ),\n }),\n ),\n v.title('CopyAssetConfig'),\n);\nexport type CopyAssetConfig = v.InferInput<typeof CopyAssetConfig>;\n\nexport const TocConfig = v.pipe(\n v.partial(\n v.object({\n title: v.pipe(\n ValidString,\n v.description($`\n Title of the generated ToC document.\n `),\n ),\n htmlPath: v.pipe(\n ValidString,\n v.description($`\n Location where the generated ToC document will be saved. (default: \\`index.html\\`)\n `),\n ),\n sectionDepth: v.pipe(\n v.number(),\n v.integer(),\n v.minValue(0),\n v.maxValue(6),\n v.description($`\n Depth of sections to include in the ToC document. (default: \\`0\\`)\n `),\n ),\n transformDocumentList: v.pipe(\n v.function() as v.GenericSchema<\n (\n nodeList: StructuredDocument[],\n ) => (propsList: { children: any }[]) => any\n >,\n v.metadata({\n typeString:\n '(nodeList: StructuredDocument[]) => (propsList: { children: any }[]) => any',\n typeReferences: [StructuredDocument],\n }),\n v.description($`\n Function to transform the document list.\n `),\n ),\n transformSectionList: v.pipe(\n v.function() as v.GenericSchema<\n (\n nodeList: StructuredDocumentSection[],\n ) => (propsList: { children: any }[]) => any\n >,\n v.metadata({\n typeString:\n '(nodeList: StructuredDocumentSection[]) => (propsList: { children: any }[]) => any',\n typeReferences: [StructuredDocumentSection],\n }),\n v.description($`\n Function to transform the section list.\n `),\n ),\n }),\n ),\n v.title('TocConfig'),\n);\nexport type TocConfig = v.InferInput<typeof TocConfig>;\n\nexport const CoverConfig = v.pipe(\n v.intersect([\n v.required(\n v.object({\n src: v.pipe(\n ValidString,\n v.description($`\n Path to the cover image for the cover page.\n `),\n ),\n }),\n 'Missing required field: src',\n ),\n v.partial(\n v.object({\n name: v.pipe(\n v.string(), // Allow empty string\n v.description($`\n Alternative text for the cover image.\n `),\n ),\n htmlPath: v.pipe(\n v.union([ValidString, v.boolean()]),\n v.description($`\n Path where the generated cover document will be saved. (default: \\`cover.html\\`)\n If set to a falsy value, the cover document will not be generated.\n `),\n ),\n }),\n ),\n ]),\n v.title('CoverConfig'),\n);\nexport type CoverConfig = v.InferInput<typeof CoverConfig>;\n\nconst VfmConfig = v.pipe(\n v.partial(\n // Use v.looseObject to allow unknown keys in future VFM versions\n v.looseObject({\n style: v.pipe(\n v.union([v.array(ValidString), ValidString]),\n\n v.transform((input) => [input].flat()),\n v.description($`\n Path(s) or URL(s) to custom stylesheets.\n `),\n ),\n partial: v.pipe(\n v.boolean(),\n v.description($`\n Output markdown fragments instead of a full document.\n `),\n ),\n title: v.pipe(\n ValidString,\n v.description($`\n Title of the document (ignored in partial mode).\n `),\n ),\n language: v.pipe(\n ValidString,\n v.description($`\n Language of the document (ignored in partial mode).\n `),\n ),\n replace: v.pipe(\n v.array(VfmReplaceRule),\n v.description($`\n Handlers for replacing matched HTML strings.\n `),\n ),\n hardLineBreaks: v.pipe(\n v.boolean(),\n v.description($`\n Insert \\`<br>\\` tags at hard line breaks without requiring spaces.\n `),\n ),\n disableFormatHtml: v.pipe(\n v.boolean(),\n v.description($`\n Disable automatic HTML formatting.\n `),\n ),\n math: v.pipe(\n v.boolean(),\n v.description($`\n Enable support for math syntax.\n `),\n ),\n imgFigcaptionOrder: v.pipe(\n v.union([v.literal('img-figcaption'), v.literal('figcaption-img')]),\n v.description($`\n Order of img and figcaption elements in figure.\n `),\n ),\n assignIdToFigcaption: v.pipe(\n v.boolean(),\n v.description($`\n Assign ID to figcaption instead of img/code.\n `),\n ),\n }),\n ),\n v.title('VfmConfig'),\n);\nexport type VfmConfig = v.InferInput<typeof VfmConfig>;\n\nexport const ServerConfig = v.pipe(\n v.partial(\n v.object({\n host: v.pipe(\n v.union([v.boolean(), ValidString]),\n v.description($`\n IP address the server should listen on.\n Set to \\`true\\` to listen on all addresses.\n (default: \\`true\\` if a PDF build with Docker render mode is required, otherwise \\`false\\`)\n `),\n ),\n port: v.pipe(\n v.number(),\n v.minValue(0),\n v.maxValue(65535),\n v.description($`\n Port the server should listen on. (default: \\`13000\\`)\n `),\n ),\n proxy: v.pipe(\n v.record(\n ValidString,\n v.union([\n v.pipe(\n v.custom<import('vite').ProxyOptions>((value) =>\n Boolean(value && typeof value === 'object'),\n ),\n v.metadata({\n typeString: 'import(\"vite\").ProxyOptions',\n }),\n ),\n ValidString,\n ]),\n ),\n v.description($`\n Custom proxy rules for the Vivliostyle preview server.\n `),\n ),\n allowedHosts: v.pipe(\n v.union([v.array(ValidString), v.boolean()]),\n v.description($`\n The hostnames that are allowed to respond to.\n Set to \\`true\\` to allow all hostnames.\n See [\\`server.allowedHosts\\` option of Vite](https://vite.dev/config/server-options.html#server-allowedhosts) for more details.\n `),\n ),\n }),\n ),\n v.title('ServerConfig'),\n);\nexport type ServerConfig = v.InferInput<typeof ServerConfig>;\n\nexport const BuildTask = v.pipe(\n v.intersect([\n v.required(\n v.object({\n entry: v.pipe(\n v.union([\n v.pipe(\n v.array(v.union([ValidString, EntryConfig])),\n v.minLength(1, 'At least one entry is required'),\n ),\n ArticleEntryConfig,\n ValidString,\n ]),\n v.transform((input) =>\n [input]\n .flat()\n .map((item) =>\n typeof item === 'string' ? { path: item } : item,\n ),\n ),\n v.description($`\n Entry file(s) of the document.\n `),\n ),\n }),\n 'Missing required field: entry',\n ),\n v.partial(\n v.object({\n title: v.pipe(\n ValidString,\n v.description($`\n Title of the document.\n `),\n ),\n author: v.pipe(\n ValidString,\n v.description($`\n Author of the document.\n `),\n ),\n theme: v.pipe(\n ThemeSpecifier,\n v.description($`\n Theme package path(s) or URL(s) of the CSS file.\n `),\n ),\n entryContext: v.pipe(\n ValidString,\n v.description($`\n Directory containing the referenced entry file(s).\n `),\n ),\n output: v.pipe(\n v.union([\n v.array(v.union([OutputConfig, ValidString])),\n OutputConfig,\n ValidString,\n ]),\n v.transform((input): (OutputConfig & { format: OutputFormat })[] =>\n [input].flat().map((item) => {\n const obj = typeof item === 'string' ? { path: item } : item;\n const ext = upath.extname(obj.path).toLowerCase();\n return {\n ...obj,\n format:\n obj.format ||\n (ext === '.pdf'\n ? 'pdf'\n : ext === '.epub'\n ? 'epub'\n : 'webpub'),\n };\n }),\n ),\n v.description($`\n Output options.\n `),\n ),\n workspaceDir: v.pipe(\n ValidString,\n v.description($`\n Directory where intermediate files (e.g., manuscript HTMLs, publication.json) are saved. (default: \\`.vivliostyle\\`)\n `),\n ),\n /** @deprecated */\n includeAssets: v.pipe(\n v.union([v.array(ValidString), ValidString]),\n v.transform((input) => [input].flat()),\n v.metadata({ deprecated: true }),\n v.description($`\n Use \\`copyAsset.includes\\` instead.\n `),\n ),\n copyAsset: v.pipe(\n v.union([CopyAssetConfig]),\n v.description($`\n Options for asset files to be copied when exporting output.\n `),\n ),\n size: v.pipe(\n ValidString,\n v.description($`\n PDF output size. (default: \\`letter\\`)\n - Preset: \\`A5\\`, \\`A4\\`, \\`A3\\`, \\`B5\\`, \\`B4\\`, \\`JIS-B5\\`, \\`JIS-B4\\`, \\`letter\\`, \\`legal\\`, \\`ledger\\`\n - Custom (comma-separated): \\`182mm,257mm\\` or \\`8.5in,11in\\`\n `),\n ),\n /** @deprecated */\n pressReady: v.pipe(\n v.boolean(),\n v.metadata({ deprecated: true }),\n v.description($`\n Use \\`pdfPostprocess.preflight: \"press-ready\"\\` instead\n `),\n ),\n pdfPostprocess: PdfPostprocessConfigSchema,\n language: v.pipe(\n ValidString,\n v.description($`\n Language of the document.\n `),\n ),\n readingProgression: v.pipe(\n ReadingProgression,\n v.description($`\n Specifies the reading progression of the document.\n This is typically determined automatically by the CSS writing-mode.\n Use this option only if explicit configuration is needed.\n `),\n ),\n toc: v.pipe(\n v.union([TocConfig, v.boolean(), ValidString]),\n v.transform((input) =>\n typeof input === 'string'\n ? { htmlPath: input }\n : input === true\n ? {}\n : input || undefined,\n ),\n v.description($`\n Options for Table of Contents (ToC) documents.\n `),\n ),\n /** @deprecated */\n tocTitle: v.pipe(\n ValidString,\n v.metadata({ deprecated: true }),\n v.description($`\n Use \\`toc.title\\` instead\n `),\n ),\n cover: v.pipe(\n v.union([CoverConfig, ValidString]),\n v.transform((input) =>\n typeof input === 'string' ? { src: input } : input,\n ),\n v.description($`\n Options for cover images and cover page documents.\n `),\n ),\n timeout: v.pipe(\n v.number(),\n v.minValue(0),\n v.description($`\n Timeout limit for waiting for the Vivliostyle process (in ms). (default: \\`300000\\`)\n `),\n ),\n documentProcessor: DocumentProcessorSchema,\n documentMetadataReader: DocumentMetadataReaderSchema,\n vfm: v.pipe(\n v.union([VfmConfig]),\n v.description($`\n Options for converting Markdown into a stringified format (HTML).\n `),\n ),\n image: v.pipe(\n ValidString,\n v.check((value) => {\n const [url, version] = value.split(':');\n if (url !== CONTAINER_URL || !/^\\d+(\\.\\d+){0,2}$/.test(version)) {\n return true;\n }\n return semverSatisfies(cliVersion, version);\n }, `The specified image is not compatible with the CLI version ${cliVersion}. Please check the image version.`),\n v.description($`\n Docker image used for rendering.\n `),\n ),\n /** @deprecated */\n http: v.pipe(\n v.boolean(),\n v.metadata({ deprecated: true }),\n v.description($`\n This option is enabled by default, and the file protocol is no longer supported.\n `),\n ),\n viewer: v.pipe(\n ValidString,\n v.description($`\n URL of a custom viewer to display content instead of the default Vivliostyle CLI viewer.\n Useful for using a custom viewer with staging features (e.g., \\`https://vivliostyle.vercel.app/\\`).\n `),\n ),\n viewerParam: v.pipe(\n ValidString,\n v.description($`\n Parameters for the Vivliostyle viewer (e.g., \\`allowScripts=false&pixelRatio=16\\`).\n `),\n ),\n browser: v.pipe(\n ValidString,\n validateBrowserTagFormat,\n parseBrowserTagFormat,\n v.description($`\n Specify a browser type and version to launch the Vivliostyle viewer.\n `),\n ),\n base: v.pipe(\n ValidString,\n v.regex(/^\\//, 'Base path must start with a slash'),\n v.check((value) => value !== '/', 'Base path must not be root'),\n v.transform((value) => value.replace(/(?!^)\\/+$/, '')),\n v.description($`\n Base path of the served documents. (default: \\`/vivliostyle\\`)\n `),\n ),\n server: v.pipe(\n v.union([ServerConfig]),\n v.description($`\n Options for the preview server.\n `),\n ),\n static: v.pipe(\n v.record(\n v.pipe(\n ValidString,\n v.regex(/^\\//, 'Base path must start with a slash'),\n v.transform((value) => value.replace(/(?!^)\\/+$/, '')),\n ),\n v.pipe(\n v.union([v.array(ValidString), ValidString]),\n v.transform((input) => [input].flat()),\n ),\n ),\n v.description($`\n Specifies static files to be served by the preview server.\n \\`\\`\\`js\n export default {\n static: {\n '/static': 'path/to/static',\n '/': ['root1', 'root2'],\n },\n };\n \\`\\`\\`\n `),\n v.transform((input) => {\n return input;\n }),\n ),\n temporaryFilePrefix: v.pipe(\n ValidString,\n v.description($`\n Prefix for temporary file names.\n `),\n ),\n vite: v.pipe(\n v.custom<import('vite').UserConfig>(() => true),\n v.metadata({\n typeString: 'import(\"vite\").UserConfig',\n }),\n v.description($`\n Configuration options for the Vite server.\n `),\n ),\n viteConfigFile: v.pipe(\n v.union([ValidString, v.boolean()]),\n v.description($`\n Path to the Vite config file.\n If a falsy value is provided, Vivliostyle CLI ignores the existing Vite config file.\n `),\n ),\n }),\n ),\n ]),\n v.title('BuildTask'),\n);\nexport type BuildTask = v.InferInput<typeof BuildTask>;\nexport type ParsedBuildTask = v.InferOutput<typeof BuildTask>;\n\n/**\n * @see https://github.com/vivliostyle/vivliostyle-cli/blob/main/docs/config.md\n */\nexport type VivliostyleConfigSchema = BuildTask[] | BuildTask;\nexport type ParsedVivliostyleConfigSchema = {\n tasks: ParsedBuildTask[];\n inlineOptions: InlineOptions;\n};\n/** @hidden */\nexport const VivliostyleConfigSchema: v.GenericSchema<\n VivliostyleConfigSchema,\n ParsedVivliostyleConfigSchema\n> = v.pipe(\n v.union([\n v.pipe(\n v.array(BuildTask),\n v.minLength(1, 'At least one config entry is required'),\n ),\n BuildTask,\n ]),\n v.transform(\n (input): ParsedVivliostyleConfigSchema => ({\n tasks: [input].flat(),\n inlineOptions: {},\n }),\n ),\n v.title('VivliostyleConfigSchema'),\n);\n\nexport type InputFormat =\n | 'markdown'\n | 'webbook'\n | 'pub-manifest'\n | 'epub'\n | 'epub-opf';\n\nexport const VivliostyleInlineConfigWithoutChecks = v.partial(\n v.object({\n cwd: v.pipe(\n ValidString,\n v.description($`\n Set a working directory.\n `),\n ),\n config: v.pipe(\n ValidString,\n v.description($`\n Path to vivliostyle.config.js.\n `),\n ),\n configData: v.pipe(\n v.custom<VivliostyleConfigSchema | null | undefined>(() => true),\n v.metadata({\n typeString: 'VivliostyleConfigSchema',\n }),\n v.description($`\n Vivliostyle config object.\n `),\n ),\n input: v.pipe(\n ValidString,\n v.transform((input): { format: InputFormat; entry: string } => {\n const ext = upath.extname(input).toLowerCase();\n if (/^(https?|data):/.test(input)) {\n return { format: 'webbook', entry: input };\n } else if (ext === '.md' || ext === '.markdown') {\n return { format: 'markdown', entry: input };\n } else if (ext === '.json' || ext === '.jsonld') {\n return { format: 'pub-manifest', entry: input };\n } else if (ext === '.epub') {\n return { format: 'epub', entry: input };\n } else if (ext === '.opf') {\n return { format: 'epub-opf', entry: input };\n } else if (['.html', '.htm', '.xhtml', '.xht'].includes(ext)) {\n return { format: 'webbook', entry: input };\n }\n throw new Error(`Cannot detect an input format: ${input}`);\n }),\n v.description($`\n Input file of document.\n `),\n ),\n output: v.pipe(\n v.union([\n v.array(v.union([OutputConfig, ValidString])),\n OutputConfig,\n ValidString,\n ]),\n v.transform((input): (OutputConfig & { format: OutputFormat })[] =>\n [input].flat().map((item) => {\n const obj = typeof item === 'string' ? { path: item } : item;\n const ext = upath.extname(obj.path).toLowerCase();\n return {\n ...obj,\n format:\n obj.format ||\n (ext === '.pdf' ? 'pdf' : ext === '.epub' ? 'epub' : 'webpub'),\n };\n }),\n ),\n v.description($`\n Output file name or directory.\n `),\n ),\n theme: v.pipe(\n ThemeSpecifier,\n v.description($`\n Theme path or package name.\n `),\n ),\n size: v.pipe(\n ValidString,\n v.description($`\n Output pdf size.\n preset: A5, A4, A3, B5, B4, JIS-B5, JIS-B4, letter, legal, ledger\n custom(comma separated): 182mm,257mm or 8.5in,11in\n `),\n ),\n cropMarks: v.pipe(\n v.boolean(),\n v.description($`\n Print crop marks.\n `),\n ),\n bleed: v.pipe(\n ValidString,\n v.description($`\n Extent of the bleed area for printing with crop marks. [3mm]\n `),\n ),\n cropOffset: v.pipe(\n ValidString,\n v.description($`\n Distance between the edge of the trim size and the edge of the media size. [auto (13mm + bleed)]\n `),\n ),\n css: v.pipe(\n ValidString,\n v.description($`\n Custom style CSS code. (ex: \":root {--my-color: lime;}\")\n `),\n ),\n style: v.pipe(\n ValidString,\n v.description($`\n Additional stylesheet URL or path.\n `),\n ),\n userStyle: v.pipe(\n ValidString,\n v.description($`\n User stylesheet URL or path.\n `),\n ),\n singleDoc: v.pipe(\n v.boolean(),\n v.description($`\n Single HTML document input.\n `),\n ),\n quick: v.pipe(\n v.boolean(),\n v.description($`\n Quick loading with rough page count.\n `),\n ),\n pressReady: v.pipe(\n v.boolean(),\n v.description($`\n Make generated PDF compatible with press ready PDF/X-1a.\n This option is equivalent with \"preflight\": \"press-ready\"\n `),\n ),\n title: v.pipe(ValidString, v.description($`Title`)),\n author: v.pipe(ValidString, v.description($`Author`)),\n language: v.pipe(ValidString, v.description($`Language`)),\n readingProgression: v.pipe(\n ReadingProgression,\n v.description($`\n Direction of reading progression.\n `),\n ),\n timeout: v.pipe(\n v.number(),\n v.minValue(0),\n v.description($`\n Timeout limit for waiting Vivliostyle process (ms).\n `),\n ),\n renderMode: v.pipe(\n RenderMode,\n v.description($`\n If docker is set, Vivliostyle try to render PDF on Docker container. [local]\n `),\n ),\n preflight: v.pipe(\n v.union([v.literal('press-ready'), v.literal('press-ready-local')]),\n v.description($`\n Apply the process to generate PDF for printing.\n `),\n ),\n preflightOption: v.pipe(\n v.union([v.array(ValidString), ValidString]),\n v.transform((input) => [input].flat()),\n v.description($`\n Options for preflight process (ex: gray-scale, enforce-outline).\n Please refer the document of press-ready for further information.\n `),\n ),\n cmyk: CmykSchema,\n sandbox: v.pipe(v.boolean(), v.description($`Launch chrome with sandbox.`)),\n executableBrowser: v.pipe(\n ValidString,\n v.description($`\n Specify a path of executable browser you installed.\n `),\n ),\n image: v.pipe(\n ValidString,\n v.description($`\n Specify a docker image to render.\n `),\n ),\n viewer: v.pipe(\n ValidString,\n v.description($`\n Specify a URL of displaying viewer instead of vivliostyle-cli's one.\n It is useful that using own viewer that has staging features. (ex: https://vivliostyle.vercel.app/)\n `),\n ),\n viewerParam: v.pipe(\n ValidString,\n v.description($`\n Specify viewer parameters. (ex: \"allowScripts=false&pixelRatio=16\")\n `),\n ),\n browser: v.pipe(\n ValidString,\n validateBrowserTagFormat,\n parseBrowserTagFormat,\n v.description($`\n Specify a browser type and version to launch the Vivliostyle viewer. [chrome]\n `),\n ),\n proxyServer: v.pipe(\n ValidString,\n v.description($`\n HTTP/SOCK proxy server url for underlying Playwright.\n `),\n ),\n proxyBypass: v.pipe(\n ValidString,\n v.description($`\n Optional comma-separated domains to bypass proxy.\n `),\n ),\n proxyUser: v.pipe(\n ValidString,\n v.description($`\n Optional username for HTTP proxy authentication.\n `),\n ),\n proxyPass: v.pipe(\n ValidString,\n v.description($`\n Optional password for HTTP proxy authentication.\n `),\n ),\n logLevel: v.pipe(\n LogLevel,\n v.description($`\n Specify a log level of console outputs.\n `),\n ),\n ignoreHttpsErrors: v.pipe(\n v.boolean(),\n v.description($`\n true to ignore HTTPS errors when Playwright browser opens a new page.\n `),\n ),\n openViewer: v.pipe(\n v.boolean(),\n v.description($`\n Open a browser to display the document preview.\n `),\n ),\n enableStaticServe: v.pipe(\n v.boolean(),\n v.description($`\n Enable static file serving as configured in the Vivliostyle config file.\n `),\n ),\n enableViewerStartPage: v.pipe(\n v.boolean(),\n v.description($`\n Open a start page of the viewer when the input file is not specified.\n `),\n ),\n vite: v.pipe(\n v.custom<import('vite').UserConfig>(() => true),\n v.metadata({\n typeString: 'import(\"vite\").UserConfig',\n }),\n v.description($`\n Configuration options for the Vite server.\n `),\n ),\n viteConfigFile: v.pipe(\n v.union([ValidString, v.boolean()]),\n v.description($`\n Path to the Vite config file.\n If a falsy value is provided, Vivliostyle CLI ignores the existing Vite config file.\n `),\n ),\n host: v.pipe(\n v.union([v.boolean(), ValidString]),\n v.description($`\n IP address the server should listen on.\n Set to \\`true\\` to listen on all addresses.\n (default: \\`true\\` if a PDF build with Docker render mode is required, otherwise \\`false\\`)\n `),\n ),\n port: v.pipe(\n v.number(),\n v.minValue(0),\n v.maxValue(65535),\n v.description($`\n Port the server should listen on. (default: \\`13000\\`)\n `),\n ),\n logger: v.pipe(\n v.custom<LoggerInterface>(() => true),\n v.metadata({\n typeString: 'LoggerInterface',\n }),\n v.description($`\n Custom logger interface.\n `),\n ),\n disableServerStartup: v.pipe(\n v.boolean(),\n v.description($`\n Disable the startup of the preview server during the build process.\n `),\n ),\n projectPath: v.pipe(\n ValidString,\n v.description($`\n Path of the Vivliostyle project to create.\n `),\n ),\n template: v.pipe(\n ValidString,\n v.description($`\n Template source in format of \\`[provider]:repo[/subpath][#ref]\\`.\n `),\n ),\n createConfigFileOnly: v.pipe(\n v.boolean(),\n v.description($`\n Create a Vivliostyle config file without generating project template files.\n `),\n ),\n stdin: v.pipe(\n v.custom<import('node:stream').Readable>(() => true),\n v.metadata({\n typeString: 'import(\"node:stream\").Readable',\n }),\n v.description($`\n Readable stream for stdin input.\n `),\n ),\n stdout: v.pipe(\n v.custom<import('node:stream').Writable>(() => true),\n v.metadata({\n typeString: 'import(\"node:stream\").Writable',\n }),\n v.description($`\n Writable stream for stdout output.\n `),\n ),\n stderr: v.pipe(\n v.custom<import('node:stream').Writable>(() => true),\n v.metadata({\n typeString: 'import(\"node:stream\").Writable',\n }),\n v.description($`\n Writable stream for stderr output.\n `),\n ),\n signal: v.pipe(\n v.custom<AbortSignal>(() => true),\n v.description($`\n AbortSignal to cancel the operation.\n `),\n ),\n }),\n);\n\nexport const VivliostyleInlineConfig = v.pipe(\n VivliostyleInlineConfigWithoutChecks,\n v.check(\n (options) =>\n !options.input ||\n !options.output ||\n !['epub', 'epub-opf'].includes(options.input.format) ||\n options.output.every((o) => o.format !== 'webpub'),\n 'Exporting webpub format from EPUB or OPF file is not supported.',\n ),\n v.check(\n (options) =>\n !options.input ||\n !options.output ||\n !['epub', 'epub-opf'].includes(options.input.format) ||\n options.output.every((o) => o.format !== 'epub'),\n 'Exporting EPUB format from EPUB or OPF file is not supported.',\n ),\n v.title('VivliostyleInlineConfig'),\n);\n\nexport type VivliostyleInlineConfig = v.InferInput<\n typeof VivliostyleInlineConfig\n>;\nexport type ParsedVivliostyleInlineConfig = v.InferOutput<\n typeof VivliostyleInlineConfig\n>;\n\nexport type InlineOptions = Pick<\n ParsedVivliostyleInlineConfig,\n | 'cwd'\n | 'config'\n | 'configData'\n | 'input'\n | 'cropMarks'\n | 'bleed'\n | 'cropOffset'\n | 'css'\n | 'style'\n | 'userStyle'\n | 'singleDoc'\n | 'quick'\n | 'sandbox'\n | 'executableBrowser'\n | 'proxyServer'\n | 'proxyBypass'\n | 'proxyUser'\n | 'proxyPass'\n | 'logLevel'\n | 'ignoreHttpsErrors'\n | 'openViewer'\n | 'enableStaticServe'\n | 'enableViewerStartPage'\n | 'logger'\n | 'renderMode'\n | 'preflight'\n | 'preflightOption'\n | 'cmyk'\n | 'disableServerStartup'\n | 'projectPath'\n | 'template'\n | 'createConfigFileOnly'\n | 'stdin'\n | 'stdout'\n | 'stderr'\n | 'signal'\n>;\n\nexport const VivliostyleThemeMetadata = v.pipe(\n v.object({\n name: v.pipe(\n v.optional(ValidString),\n v.description($`\n Name of the theme.\n `),\n ),\n author: v.pipe(\n v.optional(ValidString),\n v.description($`\n Author of the theme.\n `),\n ),\n style: v.pipe(\n v.optional(ValidString),\n v.description($`\n This property specifies the main CSS file in the theme.\n `),\n ),\n category: v.pipe(\n v.optional(ValidString),\n v.description($`\n This property provides a hint to users about the primary use of your theme when they use it for the first time.\n Choose the category that best fits your theme from the following list:\n - \\`\"novel\"\\`\n - \\`\"magazine\"\\`\n - \\`\"journal\"\\`\n - \\`\"report\"\\`\n - \\`\"misc\"\\`\n `),\n ),\n topics: v.pipe(\n v.optional(v.array(ValidString)),\n v.description($`\n If you want more specific descriptions of the theme's use than the category property,\n you can list and describe them here.\n `),\n ),\n }),\n v.title('VivliostyleThemeMetadata'),\n);\n\nconst basePromptOptions = {\n name: ValidString,\n required: v.optional(v.boolean()),\n};\n\nconst TextPrompt = v.object({\n ...basePromptOptions,\n type: v.literal('text'),\n message: ValidString,\n placeholder: v.optional(ValidString),\n defaultValue: v.optional(ValidString),\n initialValue: v.optional(ValidString),\n});\n\nexport const SelectPromptOption = v.union([\n ValidString,\n v.object({\n value: v.union([\n v.string(), // Allow empty string\n v.number(),\n v.boolean(),\n ]),\n label: v.optional(ValidString),\n hint: v.optional(ValidString),\n }),\n]);\nexport type SelectPromptOption = v.InferInput<typeof SelectPromptOption>;\n\nconst SelectPrompt = v.object({\n ...basePromptOptions,\n type: v.literal('select'),\n message: ValidString,\n options: v.array(SelectPromptOption),\n initialValue: v.optional(v.string()),\n});\n\nconst MultiSelectPrompt = v.object({\n ...basePromptOptions,\n type: v.literal('multiSelect'),\n message: ValidString,\n options: v.array(SelectPromptOption),\n initialValues: v.optional(v.array(v.string())),\n cursorAt: v.optional(v.string()),\n});\n\nconst AutocompletePrompt = v.object({\n ...basePromptOptions,\n type: v.literal('autocomplete'),\n message: ValidString,\n options: v.array(SelectPromptOption),\n placeholder: v.optional(ValidString),\n initialValue: v.optional(v.string()),\n initialUserInput: v.optional(ValidString),\n});\n\nconst AutocompleteMultiSelectOptions = v.object({\n ...basePromptOptions,\n type: v.literal('autocompleteMultiSelect'),\n message: ValidString,\n options: v.array(SelectPromptOption),\n placeholder: v.optional(ValidString),\n initialValues: v.optional(v.array(v.string())),\n});\n\nexport const PromptOption = v.variant('type', [\n TextPrompt,\n SelectPrompt,\n MultiSelectPrompt,\n AutocompletePrompt,\n AutocompleteMultiSelectOptions,\n]);\nexport type PromptOption = v.InferInput<typeof PromptOption>;\n\nexport const VivliostyleTemplateMetadata = v.pipe(\n v.record(\n ValidString,\n v.object({\n name: v.pipe(\n v.optional(ValidString),\n v.description($`\n Name of the template.\n `),\n ),\n description: v.pipe(\n v.optional(ValidString),\n v.description($`\n Description of the template.\n `),\n ),\n source: v.pipe(\n ValidString,\n v.description($`\n Template source in the format of \\`[provider]:repo[/subpath][#ref]\\` or as a local directory to copy from.\n See the [giget](https://github.com/unjs/giget) documentation for more details of the source format.\n `),\n ),\n prompt: v.pipe(\n v.optional(v.array(PromptOption)),\n v.description($`\n Extra prompt options for the template.\n This is used to prompt users for additional information when applying the template.\n See the [@clack/prompts](https://github.com/bombshell-dev/clack) documentation for more details on the prompt options.\n Available prompt types: \\`text\\`, \\`select\\`, \\`multiSelect\\`, \\`autocomplete\\`, \\`autocompleteMultiSelect\\`.\n `),\n ),\n }),\n ),\n v.title('VivliostyleTemplateMetadata'),\n);\n\nexport const VivliostylePackageMetadata = v.pipe(\n v.partial(\n v.object({\n theme: VivliostyleThemeMetadata,\n template: VivliostyleTemplateMetadata,\n }),\n ),\n v.title('VivliostylePackageMetadata'),\n);\nexport type VivliostylePackageMetadata = v.InferInput<\n typeof VivliostylePackageMetadata\n>;\n"],"mappings":";;;;;;AACA,SAAS,aAAa,uBAAuB;AAE7C,OAAO,WAAW;AAClB,YAAY,OAAO;AAInB,IAAM,IAAI,CAAC,YAAkC,WAAkB;AAC7D,QAAM,QAAQ,OAAO,IAAI,EAAE,KAAK,QAAQ,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI;AAChE,QAAM,SAAS,MACZ,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,EAC5B,IAAI,CAAC,SAAS,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,UAAU,CAAC,EACjD,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,KAAK,GAAG,GAAG,QAAQ;AACpD,SAAO,MACJ,IAAI,CAAC,SAAS,KAAK,MAAM,MAAM,CAAC,EAChC,KAAK,IAAI,EACT,KAAK;AACV;AAYO,IAAM,qBAA4D;AAAA,EACrE,SAAO;AAAA,IACP,OAAS,SAAO;AAAA,IAChB,MAAQ,SAAO;AAAA,IACf,UAAY,QAAQ,OAAK,MAAM,kBAAkB,CAAC;AAAA,IAClD,UAAY,WAAW,QAAQ,OAAK,MAAM,yBAAyB,CAAC,CAAC;AAAA,EACvE,CAAC;AAAA,EACC,QAAM,oBAAoB;AAC9B;AAcO,IAAM,4BACT;AAAA,EACE,SAAO;AAAA,IACP,aAAe,SAAO;AAAA,IACtB,aAAe,SAAO;AAAA,IACtB,OAAS,SAAO;AAAA,IAChB,UAAY,QAAQ,OAAK,MAAM,yBAAyB,CAAC;AAAA,IACzD,MAAQ,WAAW,SAAO,CAAC;AAAA,IAC3B,IAAM,WAAW,SAAO,CAAC;AAAA,EAC3B,CAAC;AAAA,EACC,QAAM,2BAA2B;AACrC;AAEK,IAAM,cAAgB;AAAA,EACzB,SAAO;AAAA,EACP,OAAK;AAAA,EACL,YAAU,GAAG,oCAAoC;AACrD;AAEO,IAAM,0BAA4B;AAAA,EACrC,WAAS;AAAA,EAGT,WAAS;AAAA,IACT,YACE;AAAA,EACJ,CAAC;AAAA,EACC,cAAY;AAAA;AAAA,GAEb;AACH;AAEO,IAAM,+BAAiC;AAAA,EAC1C,WAAS;AAAA,EACT,WAAS;AAAA,IACT,YAAY;AAAA,EACd,CAAC;AAAA,EACC,cAAY;AAAA;AAAA,GAEb;AACH;AAEO,IAAM,cAAgB;AAAA,EACzB,YAAU;AAAA,IACR;AAAA,MACE,SAAO;AAAA,QACP,WAAa;AAAA,UACX;AAAA,UACE,cAAY;AAAA;AAAA;AAAA;AAAA,SAIf;AAAA,QACD;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACE;AAAA,MACE,SAAO;AAAA,QACP,QAAU;AAAA,UACN,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,UACzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,UACnC,cAAY;AAAA;AAAA;AAAA,SAGf;AAAA,QACD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,aAAa;AACvB;AAGO,IAAM,iBAAmB;AAAA,EAC5B,QAAM;AAAA,IACJ,QAAQ,QAAM,CAAC,aAAa,WAAW,CAAC,CAAC;AAAA,IAC3C;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACC;AAAA,IAAU,CAAC,UACX,CAAC,KAAK,EACH,KAAK,EACL,IAAI,CAAC,SAAU,OAAO,SAAS,WAAW,EAAE,WAAW,KAAK,IAAI,IAAK;AAAA,EAC1E;AACF;AAGO,IAAM,qBAAuB;AAAA,EAChC;AAAA,IACE,SAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAU,WAAS,WAAW;AAAA,MAC9B,OAAS,WAAS,WAAW;AAAA,MAC7B,OAAS,WAAS,cAAc;AAAA,MAChC,gBAAkB,WAAS,WAAW;AAAA,MACtC,KAAO;AAAA,QACH;AAAA,UACE,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,UACzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,MACA,mBAAqB,WAAS,uBAAuB;AAAA,MACrD,wBAA0B,WAAS,4BAA4B;AAAA,IACjE,CAAC;AAAA,IACD,CAAC,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACE,QAAM,oBAAoB;AAC9B;AAGA,IAAM,YAAc,QAAM;AAAA,EACtB,UAAQ,MAAM;AAAA,EACd,UAAQ,OAAO;AAAA,EACf,UAAQ,OAAO;AAAA,EACf,UAAQ,OAAO;AACnB,CAAC;AAEM,IAAM,sBAAwB;AAAA,EACjC,SAAO;AAAA,IACP,KAAO,UAAQ,UAAU;AAAA,IACzB,MAAQ,WAAS,WAAW;AAAA,IAC5B,QAAU,WAAS,WAAW;AAAA,IAC9B,OAAS,WAAS,WAAW;AAAA,IAC7B,OAAS,WAAS,cAAc;AAAA,IAChC,iBAAmB;AAAA,MACf,WAAS,SAAS;AAAA,MAClB,cAAY;AAAA;AAAA;AAAA,OAGb;AAAA,IACH;AAAA,IACA,kBAAoB;AAAA,MAChB,WAAW,OAAO,SAAO,GAAK,cAAY,CAAC,CAAC;AAAA,MAC5C,cAAY;AAAA;AAAA;AAAA,OAGb;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,qBAAqB;AAC/B;AAGO,IAAM,mBAAqB;AAAA,EAC9B,SAAO;AAAA,IACP,KAAO,UAAQ,OAAO;AAAA,IACtB,MAAQ,WAAS,WAAW;AAAA,IAC5B,QAAU,WAAS,WAAW;AAAA,IAC9B,OAAS,WAAS,WAAW;AAAA,IAC7B,OAAS,WAAS,cAAc;AAAA,IAChC,UAAY,WAAS,WAAW;AAAA,IAChC,UAAY,WAAW,SAAO,CAAC;AAAA;AAAA,IAC/B,iBAAmB;AAAA,MACf,WAAS,SAAS;AAAA,MAClB,cAAY;AAAA;AAAA;AAAA,OAGb;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,kBAAkB;AAC5B;AAGO,IAAM,cAAgB,QAAM;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,eAAiB,QAAM;AAAA,EAChC,UAAQ,KAAK;AAAA,EACb,UAAQ,MAAM;AAAA,EACd,UAAQ,QAAQ;AACpB,CAAC;AAGM,IAAM,aAAe,QAAM,CAAG,UAAQ,OAAO,GAAK,UAAQ,QAAQ,CAAC,CAAC;AAG3E,IAAM,iBAAmB;AAAA,EACrB,SAAO;AAAA,IACP,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,IACnE,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,IACnE,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,EACrE,CAAC;AAAA,EACC,QAAM,UAAU;AACpB;AAEA,IAAM,kBAAoB;AAAA,EACtB,SAAO;AAAA,IACP,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,IACnE,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,IACnE,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,IACnE,GAAK,OAAO,SAAO,GAAK,UAAQ,GAAK,WAAS,CAAC,GAAK,WAAS,GAAK,CAAC;AAAA,EACrE,CAAC;AAAA,EACC,QAAM,WAAW;AACrB;AAEA,IAAM,0BAA4B,QAAM,CAAC,gBAAgB,eAAe,CAAC;AAEzE,IAAM,mBAAqB;AAAA,EACvB;AAAA,IACE,SAAO;AAAA,MACP,aAAe;AAAA,QACX,QAAM,uBAAuB;AAAA,QAC7B,cAAY;AAAA;AAAA;AAAA,SAGb;AAAA,MACH;AAAA,MACA,cAAgB;AAAA,QACZ,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,WAAa;AAAA,QACX;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,YAAY;AACtB;AAEA,IAAM,aAAe;AAAA,EACjB,QAAM,CAAG,UAAQ,GAAG,gBAAgB,CAAC;AAAA,EACrC,cAAY;AAAA;AAAA;AAAA,GAGb;AACH;AAEA,IAAM,0BAA4B;AAAA,EAC9B,SAAO;AAAA,IACP,QAAU;AAAA,MACN,QAAM,CAAC,aAAe,WAAS,MAAM,CAAC,CAAC;AAAA,MACvC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAe;AAAA,MACb;AAAA,MACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACC,QAAM,mBAAmB;AAC7B;AAEA,IAAM,qBAAuB;AAAA,EACzB,QAAM,uBAAuB;AAAA,EAC7B,cAAY;AAAA;AAAA;AAAA;AAAA,GAIb;AACH;AAEA,IAAM,6BAA+B;AAAA,EACjC;AAAA,IACE,SAAO;AAAA,MACP,WAAa;AAAA,QACT,QAAM,CAAG,UAAQ,aAAa,GAAK,UAAQ,mBAAmB,CAAC,CAAC;AAAA,QAChE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,iBAAmB;AAAA,QACf,QAAM,WAAW;AAAA,QACjB,cAAY;AAAA;AAAA;AAAA,SAGb;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EACE,QAAM,sBAAsB;AAAA,EAC5B,cAAY;AAAA;AAAA;AAAA;AAAA,GAIb;AACH;AAKO,IAAM,eAAiB;AAAA,EAC1B,YAAU;AAAA,IACR;AAAA,MACE,SAAO;AAAA,QACP,MAAQ;AAAA,UACN;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACE;AAAA,MACE,SAAO;AAAA,QACP,QAAU;AAAA,UACR;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,YAAc;AAAA,UACZ;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA;AAAA,QAEA,WAAa;AAAA,UACT,QAAM,CAAG,UAAQ,aAAa,GAAK,UAAQ,mBAAmB,CAAC,CAAC;AAAA,UAChE,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA;AAAA,QAEA,iBAAmB;AAAA,UACf,QAAM,WAAW;AAAA,UACjB,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,cAAc;AACxB;AAIO,IAAM,iBAAmB,cAAY;AAAA,EAC1C,MAAQ,WAAS,MAAM;AAAA,EACvB,OAAS;AAAA,IACL,WAAS;AAAA;AAAA,IAIT,WAAS;AAAA,MACT,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF,CAAC;AAGM,IAAM,cAAgB,QAAM;AAAA,EAC/B,UAAQ,QAAQ;AAAA,EAChB,UAAQ,UAAU;AAAA,EAClB,UAAQ,SAAS;AACrB,CAAC;AAGM,IAAM,qBAAuB,QAAM,CAAG,UAAQ,KAAK,GAAK,UAAQ,KAAK,CAAC,CAAC;AAGvE,IAAM,WAAa,QAAM;AAAA,EAC5B,UAAQ,QAAQ;AAAA,EAChB,UAAQ,MAAM;AAAA,EACd,UAAQ,SAAS;AAAA,EACjB,UAAQ,OAAO;AACnB,CAAC;AAGD,IAAM,sBAAsB;AAC5B,IAAM,+BAA+B,CAAC,aAClC;AAAA,EACA,CAAC,UAAU,MAAM,MAAM,CAAC,YAAY,CAAC,oBAAoB,KAAK,OAAO,CAAC;AAAA,EACtE,0CAA0C,QAAQ;AACpD;AAIF,IAAM,wBAAwB;AAC9B,IAAM,iCAAiC,CAAC,aACpC;AAAA,EACA,CAAC,UAAU,MAAM,MAAM,CAAC,YAAY,CAAC,sBAAsB,KAAK,OAAO,CAAC;AAAA,EACxE,0CAA0C,QAAQ;AACpD;AAEF,IAAM,2BAA6B,QAAsB,CAAC,UAAU;AAClE,QAAM,CAAC,IAAI,IAAI,MAAM,MAAM,GAAG;AAC9B,SAAS,KAAG,aAAa,IAAI;AAC/B,GAAG,sBAAsB;AACzB,IAAM,wBAA0B,YAG9B,CAAC,UAAU;AACX,QAAM,CAAC,MAAM,GAAG,IAAI,MAAM,MAAM,GAAG;AACnC,SAAO,EAAE,MAAQ,QAAM,aAAa,IAAI,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,kBAAoB;AAAA,EAC7B;AAAA,IACE,SAAO;AAAA,MACP,UAAY;AAAA,QACR,QAAM,WAAW;AAAA,QACnB,6BAA6B,UAAU;AAAA,QACrC,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,UAAY;AAAA,QACR,QAAM,WAAW;AAAA,QACnB,6BAA6B,UAAU;AAAA,QACrC,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,uBAAyB;AAAA,QACrB,QAAM,WAAW;AAAA,QACnB,+BAA+B,uBAAuB;AAAA,QACpD,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,uBAAyB;AAAA,QACrB,QAAM,WAAW;AAAA,QACnB,+BAA+B,uBAAuB;AAAA,QACpD,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,iBAAiB;AAC3B;AAGO,IAAM,YAAc;AAAA,EACvB;AAAA,IACE,SAAO;AAAA,MACP,OAAS;AAAA,QACP;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,UAAY;AAAA,QACV;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,cAAgB;AAAA,QACZ,SAAO;AAAA,QACP,UAAQ;AAAA,QACR,WAAS,CAAC;AAAA,QACV,WAAS,CAAC;AAAA,QACV,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,uBAAyB;AAAA,QACrB,WAAS;AAAA,QAKT,WAAS;AAAA,UACT,YACE;AAAA,UACF,gBAAgB,CAAC,kBAAkB;AAAA,QACrC,CAAC;AAAA,QACC,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,sBAAwB;AAAA,QACpB,WAAS;AAAA,QAKT,WAAS;AAAA,UACT,YACE;AAAA,UACF,gBAAgB,CAAC,yBAAyB;AAAA,QAC5C,CAAC;AAAA,QACC,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,WAAW;AACrB;AAGO,IAAM,cAAgB;AAAA,EACzB,YAAU;AAAA,IACR;AAAA,MACE,SAAO;AAAA,QACP,KAAO;AAAA,UACL;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACE;AAAA,MACE,SAAO;AAAA,QACP,MAAQ;AAAA,UACJ,SAAO;AAAA;AAAA,UACP,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,UAAY;AAAA,UACR,QAAM,CAAC,aAAe,UAAQ,CAAC,CAAC;AAAA,UAChC,cAAY;AAAA;AAAA;AAAA,WAGb;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,aAAa;AACvB;AAGA,IAAM,YAAc;AAAA,EAChB;AAAA;AAAA,IAEE,cAAY;AAAA,MACZ,OAAS;AAAA,QACL,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,QAEzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,QACnC,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,SAAW;AAAA,QACP,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,OAAS;AAAA,QACP;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,UAAY;AAAA,QACV;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,SAAW;AAAA,QACP,QAAM,cAAc;AAAA,QACpB,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,gBAAkB;AAAA,QACd,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,mBAAqB;AAAA,QACjB,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,MAAQ;AAAA,QACJ,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,oBAAsB;AAAA,QAClB,QAAM,CAAG,UAAQ,gBAAgB,GAAK,UAAQ,gBAAgB,CAAC,CAAC;AAAA,QAChE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,sBAAwB;AAAA,QACpB,UAAQ;AAAA,QACR,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,WAAW;AACrB;AAGO,IAAM,eAAiB;AAAA,EAC1B;AAAA,IACE,SAAO;AAAA,MACP,MAAQ;AAAA,QACJ,QAAM,CAAG,UAAQ,GAAG,WAAW,CAAC;AAAA,QAChC,cAAY;AAAA;AAAA;AAAA;AAAA,SAIb;AAAA,MACH;AAAA,MACA,MAAQ;AAAA,QACJ,SAAO;AAAA,QACP,WAAS,CAAC;AAAA,QACV,WAAS,KAAK;AAAA,QACd,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,OAAS;AAAA,QACL;AAAA,UACA;AAAA,UACE,QAAM;AAAA,YACJ;AAAA,cACE;AAAA,gBAAoC,CAAC,UACrC,QAAQ,SAAS,OAAO,UAAU,QAAQ;AAAA,cAC5C;AAAA,cACE,WAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AAAA,YACH;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACE,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,cAAgB;AAAA,QACZ,QAAM,CAAG,QAAM,WAAW,GAAK,UAAQ,CAAC,CAAC;AAAA,QACzC,cAAY;AAAA;AAAA;AAAA;AAAA,SAIb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,cAAc;AACxB;AAGO,IAAM,YAAc;AAAA,EACvB,YAAU;AAAA,IACR;AAAA,MACE,SAAO;AAAA,QACP,OAAS;AAAA,UACL,QAAM;AAAA,YACJ;AAAA,cACE,QAAQ,QAAM,CAAC,aAAa,WAAW,CAAC,CAAC;AAAA,cACzC,YAAU,GAAG,gCAAgC;AAAA,YACjD;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UACC;AAAA,YAAU,CAAC,UACX,CAAC,KAAK,EACH,KAAK,EACL;AAAA,cAAI,CAAC,SACJ,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;AAAA,YAC9C;AAAA,UACJ;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACE;AAAA,MACE,SAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,QAAU;AAAA,UACR;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,OAAS;AAAA,UACP;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,cAAgB;AAAA,UACd;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,QAAU;AAAA,UACN,QAAM;AAAA,YACJ,QAAQ,QAAM,CAAC,cAAc,WAAW,CAAC,CAAC;AAAA,YAC5C;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UACC;AAAA,YAAU,CAAC,UACX,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3B,oBAAM,MAAM,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;AACxD,oBAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,EAAE,YAAY;AAChD,qBAAO;AAAA,gBACL,GAAG;AAAA,gBACH,QACE,IAAI,WACH,QAAQ,SACL,QACA,QAAQ,UACN,SACA;AAAA,cACV;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,cAAgB;AAAA,UACd;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA;AAAA,QAEA,eAAiB;AAAA,UACb,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,UACzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,UACnC,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,WAAa;AAAA,UACT,QAAM,CAAC,eAAe,CAAC;AAAA,UACvB,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,MAAQ;AAAA,UACN;AAAA,UACE,cAAY;AAAA;AAAA;AAAA;AAAA,WAIb;AAAA,QACH;AAAA;AAAA,QAEA,YAAc;AAAA,UACV,UAAQ;AAAA,UACR,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,gBAAgB;AAAA,QAChB,UAAY;AAAA,UACV;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,oBAAsB;AAAA,UACpB;AAAA,UACE,cAAY;AAAA;AAAA;AAAA;AAAA,WAIb;AAAA,QACH;AAAA,QACA,KAAO;AAAA,UACH,QAAM,CAAC,WAAa,UAAQ,GAAG,WAAW,CAAC;AAAA,UAC3C;AAAA,YAAU,CAAC,UACX,OAAO,UAAU,WACb,EAAE,UAAU,MAAM,IAClB,UAAU,OACR,CAAC,IACD,SAAS;AAAA,UACjB;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA;AAAA,QAEA,UAAY;AAAA,UACV;AAAA,UACE,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,OAAS;AAAA,UACL,QAAM,CAAC,aAAa,WAAW,CAAC;AAAA,UAChC;AAAA,YAAU,CAAC,UACX,OAAO,UAAU,WAAW,EAAE,KAAK,MAAM,IAAI;AAAA,UAC/C;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,SAAW;AAAA,UACP,SAAO;AAAA,UACP,WAAS,CAAC;AAAA,UACV,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,mBAAmB;AAAA,QACnB,wBAAwB;AAAA,QACxB,KAAO;AAAA,UACH,QAAM,CAAC,SAAS,CAAC;AAAA,UACjB,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,OAAS;AAAA,UACP;AAAA,UACE,QAAM,CAAC,UAAU;AACjB,kBAAM,CAAC,KAAK,OAAO,IAAI,MAAM,MAAM,GAAG;AACtC,gBAAI,QAAQ,iBAAiB,CAAC,oBAAoB,KAAK,OAAO,GAAG;AAC/D,qBAAO;AAAA,YACT;AACA,mBAAO,gBAAgB,YAAY,OAAO;AAAA,UAC5C,GAAG,8DAA8D,UAAU,mCAAmC;AAAA,UAC5G,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA;AAAA,QAEA,MAAQ;AAAA,UACJ,UAAQ;AAAA,UACR,WAAS,EAAE,YAAY,KAAK,CAAC;AAAA,UAC7B,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,QAAU;AAAA,UACR;AAAA,UACE,cAAY;AAAA;AAAA;AAAA,WAGb;AAAA,QACH;AAAA,QACA,aAAe;AAAA,UACb;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,SAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,MAAQ;AAAA,UACN;AAAA,UACE,QAAM,OAAO,mCAAmC;AAAA,UAChD,QAAM,CAAC,UAAU,UAAU,KAAK,4BAA4B;AAAA,UAC5D,YAAU,CAAC,UAAU,MAAM,QAAQ,aAAa,EAAE,CAAC;AAAA,UACnD,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,QAAU;AAAA,UACN,QAAM,CAAC,YAAY,CAAC;AAAA,UACpB,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,QAAU;AAAA,UACN;AAAA,YACE;AAAA,cACA;AAAA,cACE,QAAM,OAAO,mCAAmC;AAAA,cAChD,YAAU,CAAC,UAAU,MAAM,QAAQ,aAAa,EAAE,CAAC;AAAA,YACvD;AAAA,YACE;AAAA,cACE,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,cACzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,YACvC;AAAA,UACF;AAAA,UACE,cAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUb;AAAA,UACC,YAAU,CAAC,UAAU;AACrB,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,QACA,qBAAuB;AAAA,UACrB;AAAA,UACE,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,MAAQ;AAAA,UACJ,SAAkC,MAAM,IAAI;AAAA,UAC5C,WAAS;AAAA,YACT,YAAY;AAAA,UACd,CAAC;AAAA,UACC,cAAY;AAAA;AAAA,WAEb;AAAA,QACH;AAAA,QACA,gBAAkB;AAAA,UACd,QAAM,CAAC,aAAe,UAAQ,CAAC,CAAC;AAAA,UAChC,cAAY;AAAA;AAAA;AAAA,WAGb;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,WAAW;AACrB;AAaO,IAAM,0BAGP;AAAA,EACF,QAAM;AAAA,IACJ;AAAA,MACE,QAAM,SAAS;AAAA,MACf,YAAU,GAAG,uCAAuC;AAAA,IACxD;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACC;AAAA,IACA,CAAC,WAA0C;AAAA,MACzC,OAAO,CAAC,KAAK,EAAE,KAAK;AAAA,MACpB,eAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACE,QAAM,yBAAyB;AACnC;AASO,IAAM,uCAAyC;AAAA,EAClD,SAAO;AAAA,IACP,KAAO;AAAA,MACL;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,QAAU;AAAA,MACR;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,YAAc;AAAA,MACV,SAAmD,MAAM,IAAI;AAAA,MAC7D,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACE,YAAU,CAAC,UAAkD;AAC7D,cAAM,MAAM,MAAM,QAAQ,KAAK,EAAE,YAAY;AAC7C,YAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,iBAAO,EAAE,QAAQ,WAAW,OAAO,MAAM;AAAA,QAC3C,WAAW,QAAQ,SAAS,QAAQ,aAAa;AAC/C,iBAAO,EAAE,QAAQ,YAAY,OAAO,MAAM;AAAA,QAC5C,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAC/C,iBAAO,EAAE,QAAQ,gBAAgB,OAAO,MAAM;AAAA,QAChD,WAAW,QAAQ,SAAS;AAC1B,iBAAO,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,QACxC,WAAW,QAAQ,QAAQ;AACzB,iBAAO,EAAE,QAAQ,YAAY,OAAO,MAAM;AAAA,QAC5C,WAAW,CAAC,SAAS,QAAQ,UAAU,MAAM,EAAE,SAAS,GAAG,GAAG;AAC5D,iBAAO,EAAE,QAAQ,WAAW,OAAO,MAAM;AAAA,QAC3C;AACA,cAAM,IAAI,MAAM,kCAAkC,KAAK,EAAE;AAAA,MAC3D,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,QAAU;AAAA,MACN,QAAM;AAAA,QACJ,QAAQ,QAAM,CAAC,cAAc,WAAW,CAAC,CAAC;AAAA,QAC5C;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACC;AAAA,QAAU,CAAC,UACX,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS;AAC3B,gBAAM,MAAM,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;AACxD,gBAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,EAAE,YAAY;AAChD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QACE,IAAI,WACH,QAAQ,SAAS,QAAQ,QAAQ,UAAU,SAAS;AAAA,UACzD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,MAAQ;AAAA,MACN;AAAA,MACE,cAAY;AAAA;AAAA;AAAA;AAAA,SAIX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACT,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,KAAO;AAAA,MACL;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACT,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACL,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,YAAc;AAAA,MACV,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA;AAAA,SAGX;AAAA,IACL;AAAA,IACA,OAAS,OAAK,aAAe,cAAY,QAAQ,CAAC;AAAA,IAClD,QAAU,OAAK,aAAe,cAAY,SAAS,CAAC;AAAA,IACpD,UAAY,OAAK,aAAe,cAAY,WAAW,CAAC;AAAA,IACxD,oBAAsB;AAAA,MACpB;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,SAAW;AAAA,MACP,SAAO;AAAA,MACP,WAAS,CAAC;AAAA,MACV,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACT,QAAM,CAAG,UAAQ,aAAa,GAAK,UAAQ,mBAAmB,CAAC,CAAC;AAAA,MAChE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,iBAAmB;AAAA,MACf,QAAM,CAAG,QAAM,WAAW,GAAG,WAAW,CAAC;AAAA,MACzC,YAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAAA,MACnC,cAAY;AAAA;AAAA;AAAA,SAGX;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,SAAW,OAAO,UAAQ,GAAK,cAAY,8BAA8B,CAAC;AAAA,IAC1E,mBAAqB;AAAA,MACnB;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,QAAU;AAAA,MACR;AAAA,MACE,cAAY;AAAA;AAAA;AAAA,SAGX;AAAA,IACL;AAAA,IACA,aAAe;AAAA,MACb;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,SAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,aAAe;AAAA,MACb;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,aAAe;AAAA,MACb;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,UAAY;AAAA,MACV;AAAA,MACE,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,mBAAqB;AAAA,MACjB,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,YAAc;AAAA,MACV,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,mBAAqB;AAAA,MACjB,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,uBAAyB;AAAA,MACrB,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,MAAQ;AAAA,MACJ,SAAkC,MAAM,IAAI;AAAA,MAC5C,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,gBAAkB;AAAA,MACd,QAAM,CAAC,aAAe,UAAQ,CAAC,CAAC;AAAA,MAChC,cAAY;AAAA;AAAA;AAAA,SAGX;AAAA,IACL;AAAA,IACA,MAAQ;AAAA,MACJ,QAAM,CAAG,UAAQ,GAAG,WAAW,CAAC;AAAA,MAChC,cAAY;AAAA;AAAA;AAAA;AAAA,SAIX;AAAA,IACL;AAAA,IACA,MAAQ;AAAA,MACJ,SAAO;AAAA,MACP,WAAS,CAAC;AAAA,MACV,WAAS,KAAK;AAAA,MACd,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,QAAU;AAAA,MACN,SAAwB,MAAM,IAAI;AAAA,MAClC,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,sBAAwB;AAAA,MACpB,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,SAEX;AAAA,IACL;AAAA,IACA,aAAe;AAAA,MACb;AAAA,MACE,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,UAAY;AAAA,MACV;AAAA,MACE,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,sBAAwB;AAAA,MACpB,UAAQ;AAAA,MACR,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,OAAS;AAAA,MACL,SAAuC,MAAM,IAAI;AAAA,MACjD,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,WAET;AAAA,IACP;AAAA,IACA,QAAU;AAAA,MACN,SAAuC,MAAM,IAAI;AAAA,MACjD,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,QAAU;AAAA,MACN,SAAuC,MAAM,IAAI;AAAA,MACjD,WAAS;AAAA,QACT,YAAY;AAAA,MACd,CAAC;AAAA,MACC,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,QAAU;AAAA,MACN,SAAoB,MAAM,IAAI;AAAA,MAC9B,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,IAAM,0BAA4B;AAAA,EACvC;AAAA,EACE;AAAA,IACA,CAAC,YACC,CAAC,QAAQ,SACT,CAAC,QAAQ,UACT,CAAC,CAAC,QAAQ,UAAU,EAAE,SAAS,QAAQ,MAAM,MAAM,KACnD,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,QAAQ;AAAA,IACnD;AAAA,EACF;AAAA,EACE;AAAA,IACA,CAAC,YACC,CAAC,QAAQ,SACT,CAAC,QAAQ,UACT,CAAC,CAAC,QAAQ,UAAU,EAAE,SAAS,QAAQ,MAAM,MAAM,KACnD,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EACE,QAAM,yBAAyB;AACnC;AAiDO,IAAM,2BAA6B;AAAA,EACtC,SAAO;AAAA,IACP,MAAQ;AAAA,MACJ,WAAS,WAAW;AAAA,MACpB,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,QAAU;AAAA,MACN,WAAS,WAAW;AAAA,MACpB,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,OAAS;AAAA,MACL,WAAS,WAAW;AAAA,MACpB,cAAY;AAAA;AAAA,OAEb;AAAA,IACH;AAAA,IACA,UAAY;AAAA,MACR,WAAS,WAAW;AAAA,MACpB,cAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQb;AAAA,IACH;AAAA,IACA,QAAU;AAAA,MACN,WAAW,QAAM,WAAW,CAAC;AAAA,MAC7B,cAAY;AAAA;AAAA;AAAA,OAGb;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACC,QAAM,0BAA0B;AACpC;AAEA,IAAM,oBAAoB;AAAA,EACxB,MAAM;AAAA,EACN,UAAY,WAAW,UAAQ,CAAC;AAClC;AAEA,IAAM,aAAe,SAAO;AAAA,EAC1B,GAAG;AAAA,EACH,MAAQ,UAAQ,MAAM;AAAA,EACtB,SAAS;AAAA,EACT,aAAe,WAAS,WAAW;AAAA,EACnC,cAAgB,WAAS,WAAW;AAAA,EACpC,cAAgB,WAAS,WAAW;AACtC,CAAC;AAEM,IAAM,qBAAuB,QAAM;AAAA,EACxC;AAAA,EACE,SAAO;AAAA,IACP,OAAS,QAAM;AAAA,MACX,SAAO;AAAA;AAAA,MACP,SAAO;AAAA,MACP,UAAQ;AAAA,IACZ,CAAC;AAAA,IACD,OAAS,WAAS,WAAW;AAAA,IAC7B,MAAQ,WAAS,WAAW;AAAA,EAC9B,CAAC;AACH,CAAC;AAGD,IAAM,eAAiB,SAAO;AAAA,EAC5B,GAAG;AAAA,EACH,MAAQ,UAAQ,QAAQ;AAAA,EACxB,SAAS;AAAA,EACT,SAAW,QAAM,kBAAkB;AAAA,EACnC,cAAgB,WAAW,SAAO,CAAC;AACrC,CAAC;AAED,IAAM,oBAAsB,SAAO;AAAA,EACjC,GAAG;AAAA,EACH,MAAQ,UAAQ,aAAa;AAAA,EAC7B,SAAS;AAAA,EACT,SAAW,QAAM,kBAAkB;AAAA,EACnC,eAAiB,WAAW,QAAQ,SAAO,CAAC,CAAC;AAAA,EAC7C,UAAY,WAAW,SAAO,CAAC;AACjC,CAAC;AAED,IAAM,qBAAuB,SAAO;AAAA,EAClC,GAAG;AAAA,EACH,MAAQ,UAAQ,cAAc;AAAA,EAC9B,SAAS;AAAA,EACT,SAAW,QAAM,kBAAkB;AAAA,EACnC,aAAe,WAAS,WAAW;AAAA,EACnC,cAAgB,WAAW,SAAO,CAAC;AAAA,EACnC,kBAAoB,WAAS,WAAW;AAC1C,CAAC;AAED,IAAM,iCAAmC,SAAO;AAAA,EAC9C,GAAG;AAAA,EACH,MAAQ,UAAQ,yBAAyB;AAAA,EACzC,SAAS;AAAA,EACT,SAAW,QAAM,kBAAkB;AAAA,EACnC,aAAe,WAAS,WAAW;AAAA,EACnC,eAAiB,WAAW,QAAQ,SAAO,CAAC,CAAC;AAC/C,CAAC;AAEM,IAAM,eAAiB,UAAQ,QAAQ;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,8BAAgC;AAAA,EACzC;AAAA,IACA;AAAA,IACE,SAAO;AAAA,MACP,MAAQ;AAAA,QACJ,WAAS,WAAW;AAAA,QACpB,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,aAAe;AAAA,QACX,WAAS,WAAW;AAAA,QACpB,cAAY;AAAA;AAAA,SAEb;AAAA,MACH;AAAA,MACA,QAAU;AAAA,QACR;AAAA,QACE,cAAY;AAAA;AAAA;AAAA,SAGb;AAAA,MACH;AAAA,MACA,QAAU;AAAA,QACN,WAAW,QAAM,YAAY,CAAC;AAAA,QAC9B,cAAY;AAAA;AAAA;AAAA;AAAA;AAAA,SAKb;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACE,QAAM,6BAA6B;AACvC;AAEO,IAAM,6BAA+B;AAAA,EACxC;AAAA,IACE,SAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EACE,QAAM,4BAA4B;AACtC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/build.ts","../src/container.ts","../src/output/pdf.ts","../src/output/pdf-postprocess.ts","../src/output/pdf-stream.ts","../src/output/cmyk.ts","../src/output/image.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 { CmykMap, 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 (400 > 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 const cmykMap = target.cmyk ? await loadCmykMap(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 cmyk: target.cmyk,\n cmykMap,\n replaceImage: target.replaceImage,\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\nasync function loadCmykMap(page: Page): Promise<CmykMap> {\n /* v8 ignore next 3 */\n return page.evaluate(() => window.coreViewer.getCmykMap?.() ?? {});\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 { CmykMap, Meta, TOCItem } from '../global-viewer.js';\nimport { Logger } from '../logger.js';\nimport { importNodeModule } from '../node-modules.js';\nimport { isInContainer } from '../util.js';\nimport { convertCmykColors } from './cmyk.js';\nimport { replaceImages } from './image.js';\n\nexport type SaveOption = Pick<\n PdfOutput,\n 'preflight' | 'preflightOption' | 'cmyk' | 'replaceImage'\n> &\n Pick<ResolvedTaskConfig, 'image'> & { cmykMap: CmykMap };\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 {\n preflight,\n preflightOption,\n image,\n cmyk,\n cmykMap,\n replaceImage,\n }: SaveOption,\n ) {\n let pdf = await this.document.save();\n\n if (cmyk) {\n const mergedMap: CmykMap = { ...cmykMap };\n for (const [rgb, cmykValue] of cmyk.overrideMap) {\n const key = JSON.stringify([rgb.r, rgb.g, rgb.b]);\n mergedMap[key] = cmykValue;\n }\n\n Logger.logInfo('Converting CMYK colors');\n pdf = await convertCmykColors({\n pdf,\n colorMap: mergedMap,\n warnUnmapped: cmyk.warnUnmapped,\n });\n\n if (cmyk.mapOutput) {\n const mapOutputDir = upath.dirname(cmyk.mapOutput);\n fs.mkdirSync(mapOutputDir, { recursive: true });\n await fs.promises.writeFile(\n cmyk.mapOutput,\n JSON.stringify(mergedMap, null, 2),\n );\n Logger.logInfo(`CMYK color map saved to ${cmyk.mapOutput}`);\n }\n }\n\n if (replaceImage.length > 0) {\n Logger.logInfo('Replacing images');\n pdf = await replaceImages({\n pdf,\n replaceImageConfig: replaceImage,\n });\n }\n\n if (preflight) {\n const input = upath.join(os.tmpdir(), `vivliostyle-cli-${uuid()}.pdf`);\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 } else {\n await fs.promises.writeFile(output, pdf);\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","import type { CmykMap } from '../global-viewer.js';\nimport { Logger } from '../logger.js';\n\n/**\n * `SRGBValue.MAX`\n * @see https://github.com/vivliostyle/vivliostyle.js/blob/master/packages/core/src/vivliostyle/cmyk-store.ts\n */\nconst SRGB_MAX = 10000;\n/**\n * `CMYKValue.MAX`\n * @see https://github.com/vivliostyle/vivliostyle.js/blob/master/packages/core/src/vivliostyle/cmyk-store.ts\n */\nconst CMYK_MAX = 10000;\n\ninterface NumberToken {\n type: 'number';\n value: number;\n raw: string;\n}\n\ninterface OperatorToken {\n type: 'operator';\n value: string;\n raw: string;\n}\n\ninterface OtherToken {\n type: 'other';\n raw: string;\n}\n\ntype Token = NumberToken | OperatorToken | OtherToken;\n\n/**\n * Tokenize PDF content stream\n */\nfunction* tokenize(content: string): Generator<Token> {\n let i = 0;\n const len = content.length;\n\n while (i < len) {\n // Skip whitespace\n while (i < len && /\\s/.test(content[i])) i++;\n if (i >= len) break;\n\n const c = content[i];\n\n // Comment - skip to end of line\n if (c === '%') {\n const start = i;\n while (i < len && content[i] !== '\\n' && content[i] !== '\\r') i++;\n yield { type: 'other', raw: content.slice(start, i) };\n continue;\n }\n\n // String literal (...) - must skip properly to avoid parsing numbers inside\n if (c === '(') {\n let depth = 1;\n let str = '(';\n i++;\n while (i < len && depth > 0) {\n if (content[i] === '\\\\' && i + 1 < len) {\n str += content[i] + content[i + 1];\n i += 2;\n } else {\n if (content[i] === '(') depth++;\n else if (content[i] === ')') depth--;\n str += content[i];\n i++;\n }\n }\n yield { type: 'other', raw: str };\n continue;\n }\n\n // Hex string <...> - must skip properly to avoid parsing numbers inside\n if (c === '<' && content[i + 1] !== '<') {\n let str = '<';\n i++;\n while (i < len && content[i] !== '>') {\n str += content[i];\n i++;\n }\n if (i < len) {\n str += '>';\n i++;\n }\n yield { type: 'other', raw: str };\n continue;\n }\n\n // Single character delimiters\n if (c === '[' || c === ']' || c === '{' || c === '}') {\n yield { type: 'other', raw: c };\n i++;\n continue;\n }\n\n // Dictionary << ... >>\n if (c === '<' && content[i + 1] === '<') {\n yield { type: 'other', raw: '<<' };\n i += 2;\n continue;\n }\n if (c === '>' && content[i + 1] === '>') {\n yield { type: 'other', raw: '>>' };\n i += 2;\n continue;\n }\n\n // Name /...\n if (c === '/') {\n let name = '/';\n i++;\n while (i < len && /[^\\s\\[\\]()<>{}/%]/.test(content[i])) {\n name += content[i];\n i++;\n }\n yield { type: 'other', raw: name };\n continue;\n }\n\n // Number or operator\n let token = '';\n while (i < len && /[^\\s\\[\\]()<>{}/%]/.test(content[i])) {\n token += content[i];\n i++;\n }\n\n if (/^[+-]?(\\d+\\.?\\d*|\\.\\d+)$/.test(token)) {\n yield { type: 'number', value: parseFloat(token), raw: token };\n } else if (token === 'ID') {\n // Inline image: ID is followed by single whitespace, then binary data until EI\n yield { type: 'operator', value: 'ID', raw: 'ID' };\n\n // Read binary data until whitespace + EI + (whitespace or EOF)\n const dataStart = i;\n while (i < len) {\n if (\n /\\s/.test(content[i]) &&\n content[i + 1] === 'E' &&\n content[i + 2] === 'I' &&\n (i + 3 >= len || /\\s/.test(content[i + 3]))\n ) {\n // Emit binary data including trailing whitespace before EI\n yield { type: 'other', raw: content.slice(dataStart, i + 1) };\n yield { type: 'operator', value: 'EI', raw: 'EI' };\n i += 3;\n break;\n }\n i++;\n }\n } else if (token.length > 0) {\n yield { type: 'operator', value: token, raw: token };\n }\n }\n}\n\nfunction formatRgbKey(r: number, g: number, b: number): string {\n const ri = Math.round(r * SRGB_MAX);\n const gi = Math.round(g * SRGB_MAX);\n const bi = Math.round(b * SRGB_MAX);\n return JSON.stringify([ri, gi, bi]);\n}\n\nfunction formatRgbKeyForWarning(r: number, g: number, b: number): string {\n const ri = Math.round(r * SRGB_MAX);\n const gi = Math.round(g * SRGB_MAX);\n const bi = Math.round(b * SRGB_MAX);\n return JSON.stringify({ r: ri, g: gi, b: bi });\n}\n\n/**\n * Convert RGB color operators to CMYK in a content stream\n */\nexport function convertStreamColors(\n content: string,\n colorMap: CmykMap,\n warnUnmapped: boolean,\n warnedColors: Set<string>,\n): string {\n const result: string[] = [];\n const pendingNumbers: { value: number; raw: string }[] = [];\n\n const flushPendingNumbers = () => {\n for (const num of pendingNumbers) {\n result.push(num.raw);\n }\n pendingNumbers.length = 0;\n };\n\n for (const token of tokenize(content)) {\n if (token.type === 'number') {\n pendingNumbers.push({ value: token.value, raw: token.raw });\n } else if (token.type === 'operator') {\n const op = token.value;\n\n // RGB color: r g b rg (non-stroking) or r g b RG (stroking)\n const cmykOp = op === 'rg' ? 'k' : op === 'RG' ? 'K' : null;\n if (cmykOp && pendingNumbers.length >= 3) {\n const b = pendingNumbers.pop()!;\n const g = pendingNumbers.pop()!;\n const r = pendingNumbers.pop()!;\n flushPendingNumbers();\n\n const key = formatRgbKey(r.value, g.value, b.value);\n const cmyk = colorMap[key];\n\n if (cmyk) {\n const c = (cmyk.c / CMYK_MAX).toString();\n const m = (cmyk.m / CMYK_MAX).toString();\n const y = (cmyk.y / CMYK_MAX).toString();\n const k = (cmyk.k / CMYK_MAX).toString();\n result.push(`${c} ${m} ${y} ${k} ${cmykOp}`);\n } else {\n result.push(r.raw, g.raw, b.raw, token.raw);\n if (warnUnmapped) {\n const warnKey = formatRgbKeyForWarning(r.value, g.value, b.value);\n if (!warnedColors.has(warnKey)) {\n warnedColors.add(warnKey);\n Logger.logWarn(`RGB color not mapped to CMYK: ${warnKey}`);\n }\n }\n }\n } else {\n flushPendingNumbers();\n result.push(token.raw);\n }\n } else {\n // Other token types - flush pending numbers and pass through\n flushPendingNumbers();\n result.push(token.raw);\n }\n }\n\n // Flush any remaining pending numbers\n flushPendingNumbers();\n\n return result.join(' ');\n}\n","import type * as mupdfType from 'mupdf';\nimport type { CmykMap } from '../global-viewer.js';\nimport { importNodeModule } from '../node-modules.js';\nimport { convertStreamColors } from './pdf-stream.js';\n\ninterface Destroyable {\n destroy(): void;\n}\n\nfunction disposable<T extends Destroyable>(obj: T): T & Disposable {\n return Object.assign(obj, {\n [Symbol.dispose]() {\n obj.destroy();\n },\n });\n}\n\nfunction processStream(\n stream: mupdfType.PDFObject,\n colorMap: CmykMap,\n warnUnmapped: boolean,\n warnedColors: Set<string>,\n mupdf: typeof import('mupdf'),\n): void {\n const buffer = stream.readStream();\n const content = buffer.asString();\n const converted = convertStreamColors(\n content,\n colorMap,\n warnUnmapped,\n warnedColors,\n );\n stream.writeStream(new mupdf.Buffer(converted));\n}\n\nfunction processFormXObjects(\n resources: mupdfType.PDFObject,\n colorMap: CmykMap,\n warnUnmapped: boolean,\n warnedColors: Set<string>,\n mupdf: typeof import('mupdf'),\n processed: Set<number>,\n): void {\n const xobjects = resources.get('XObject');\n if (!xobjects || !xobjects.isDictionary()) {\n return;\n }\n\n xobjects.forEach((xobj) => {\n if (!xobj || !xobj.isStream()) {\n return;\n }\n\n const resolved = xobj.resolve();\n\n const objNum = resolved.asIndirect();\n if (objNum && processed.has(objNum)) {\n // Avoid circular references\n return;\n }\n if (objNum) {\n processed.add(objNum);\n }\n\n const subtype = resolved.get('Subtype');\n if (!subtype || subtype.toString() !== '/Form') {\n return;\n }\n\n processStream(resolved, colorMap, warnUnmapped, warnedColors, mupdf);\n const nestedResources = resolved.get('Resources');\n if (nestedResources && nestedResources.isDictionary()) {\n processFormXObjects(\n nestedResources,\n colorMap,\n warnUnmapped,\n warnedColors,\n mupdf,\n processed,\n );\n }\n });\n}\n\nfunction processContents(\n contents: mupdfType.PDFObject,\n colorMap: CmykMap,\n warnUnmapped: boolean,\n warnedColors: Set<string>,\n mupdf: typeof import('mupdf'),\n): void {\n if (contents.isArray()) {\n // Multiple content streams\n for (let i = 0; i < contents.length; i++) {\n const streamObj = contents.get(i);\n if (streamObj && streamObj.isStream()) {\n processStream(\n streamObj.resolve(),\n colorMap,\n warnUnmapped,\n warnedColors,\n mupdf,\n );\n }\n }\n } else if (contents.isStream()) {\n // Single content stream\n processStream(contents, colorMap, warnUnmapped, warnedColors, mupdf);\n }\n}\n\nexport async function convertCmykColors({\n pdf,\n colorMap,\n warnUnmapped,\n}: {\n pdf: Uint8Array;\n colorMap: CmykMap;\n warnUnmapped: boolean;\n}): Promise<Uint8Array> {\n const mupdf = await importNodeModule('mupdf');\n const warnedColors = new Set<string>();\n const processedXObjects = new Set<number>();\n\n using doc = disposable(\n mupdf.PDFDocument.openDocument(\n pdf,\n 'application/pdf',\n ) as mupdfType.PDFDocument,\n );\n\n const pageCount = doc.countPages();\n for (let i = 0; i < pageCount; i++) {\n const page = doc.loadPage(i) as mupdfType.PDFPage;\n const pageObj = page.getObject().resolve();\n\n const contents = pageObj.get('Contents');\n if (contents) {\n processContents(contents, colorMap, warnUnmapped, warnedColors, mupdf);\n }\n\n const resources = pageObj.get('Resources');\n if (resources && resources.isDictionary()) {\n processFormXObjects(\n resources,\n colorMap,\n warnUnmapped,\n warnedColors,\n mupdf,\n processedXObjects,\n );\n }\n\n // Annotations may have appearance streams with colors\n const annots = pageObj.get('Annots');\n if (!annots?.isArray()) {\n continue;\n }\n for (let j = 0; j < annots.length; j++) {\n const annot = annots.get(j);\n if (!annot) {\n continue;\n }\n const ap = annot.resolve().get('AP');\n if (!ap?.isDictionary()) {\n continue;\n }\n // Normal appearance\n const n = ap.get('N');\n if (!n) {\n continue;\n }\n if (n.isStream()) {\n processStream(n, colorMap, warnUnmapped, warnedColors, mupdf);\n } else if (n.isDictionary()) {\n // Multiple appearance states\n n.forEach((val) => {\n if (val?.isStream()) {\n processStream(val, colorMap, warnUnmapped, warnedColors, mupdf);\n }\n });\n }\n }\n }\n\n using outputBuffer = disposable(doc.saveToBuffer('compress'));\n // Create a copy to ensure the data remains valid after the buffer is destroyed\n return new Uint8Array(outputBuffer.asUint8Array());\n}\n","import fs from 'node:fs';\nimport type * as mupdfType from 'mupdf';\nimport type { ReplaceImageConfig } from '../config/resolve.js';\nimport { Logger } from '../logger.js';\nimport { importNodeModule } from '../node-modules.js';\n\ninterface Destroyable {\n destroy(): void;\n}\n\nfunction disposable<T extends Destroyable>(obj: T): T & Disposable {\n return Object.assign(obj, {\n [Symbol.dispose]() {\n obj.destroy();\n },\n });\n}\n\nfunction imagesEqual(a: mupdfType.Image, b: mupdfType.Image): boolean {\n if (a.getWidth() !== b.getWidth() || a.getHeight() !== b.getHeight()) {\n return false;\n }\n\n const pixmapA = a.toPixmap();\n const pixmapB = b.toPixmap();\n\n const typeA = pixmapA.getColorSpace();\n const typeB = pixmapB.getColorSpace();\n if (\n typeA === null ||\n typeB === null ||\n !(\n (typeA.isRGB() && typeB.isRGB()) ||\n (typeA.isCMYK() && typeB.isCMYK()) ||\n (typeA.isGray() && typeB.isGray())\n )\n ) {\n return false;\n }\n\n const pixelsA = pixmapA.getPixels();\n const pixelsB = pixmapB.getPixels();\n return (\n pixelsA.length === pixelsB.length &&\n Buffer.compare(Buffer.from(pixelsA), Buffer.from(pixelsB)) === 0\n );\n}\n\ninterface ImagePair {\n srcImage: mupdfType.Image;\n destImage: mupdfType.Image;\n sourcePath: string;\n replacementPath: string;\n}\n\ninterface ReplaceStats {\n replaced: number;\n total: number;\n}\n\nfunction replaceImagesInDocument(\n doc: mupdfType.PDFDocument,\n imagePairs: ImagePair[],\n): ReplaceStats {\n let replaced = 0;\n let total = 0;\n\n const pageCount = doc.countPages();\n\n for (let i = 0; i < pageCount; i++) {\n const page = doc.loadPage(i);\n const pageObj = page.getObject().resolve();\n\n const res = pageObj.get('Resources');\n if (!res || !res.isDictionary()) continue;\n\n const xobjects = res.get('XObject');\n if (!xobjects || !xobjects.isDictionary()) continue;\n\n // Collect keys first to avoid modification during iteration\n const entries: { key: string | number; value: mupdfType.PDFObject }[] = [];\n xobjects.forEach((value, key) => {\n entries.push({ key, value });\n });\n\n for (const { key, value } of entries) {\n const resolved = value.resolve();\n const subtype = resolved.get('Subtype');\n\n if (subtype && subtype.toString() === '/Image') {\n total++;\n\n // Extract image from PDF\n const pdfImage = doc.loadImage(value);\n\n // Find matching source image\n for (const pair of imagePairs) {\n if (imagesEqual(pdfImage, pair.srcImage)) {\n const newImageRef = doc.addImage(pair.destImage);\n xobjects.put(key, newImageRef);\n replaced++;\n Logger.debug(\n ` Page ${i + 1}, ref \"${key}\": ${pair.sourcePath} -> ${pair.replacementPath}`,\n );\n break;\n }\n }\n }\n }\n\n res.put('XObject', xobjects);\n pageObj.put('Resources', res);\n }\n\n return { replaced, total };\n}\n\nexport async function replaceImages({\n pdf,\n replaceImageConfig,\n}: {\n pdf: Uint8Array;\n replaceImageConfig: ReplaceImageConfig;\n}): Promise<Uint8Array> {\n if (replaceImageConfig.length === 0) {\n return pdf;\n }\n\n const mupdf = await importNodeModule('mupdf');\n\n // Load image pairs\n const imagePairs: ImagePair[] = [];\n for (const { source, replacement } of replaceImageConfig) {\n let srcImage: mupdfType.Image;\n let destImage: mupdfType.Image;\n\n try {\n const srcBuffer = fs.readFileSync(source);\n srcImage = new mupdf.Image(srcBuffer);\n Logger.debug(\n `Loaded source image: ${source} (${srcImage.getWidth()}x${srcImage.getHeight()})`,\n );\n } catch (error) {\n Logger.logWarn(`Failed to load source image: ${source}: ${error}`);\n continue;\n }\n\n try {\n const destBuffer = fs.readFileSync(replacement);\n destImage = new mupdf.Image(destBuffer);\n Logger.debug(\n `Loaded replacement image: ${replacement} (${destImage.getWidth()}x${destImage.getHeight()})`,\n );\n } catch (error) {\n Logger.logWarn(\n `Failed to load replacement image: ${replacement}: ${error}`,\n );\n continue;\n }\n\n imagePairs.push({\n srcImage,\n destImage,\n sourcePath: source,\n replacementPath: replacement,\n });\n }\n\n if (imagePairs.length === 0) {\n return pdf;\n }\n\n using doc = disposable(\n mupdf.PDFDocument.openDocument(\n pdf,\n 'application/pdf',\n ) as mupdfType.PDFDocument,\n );\n\n const stats = replaceImagesInDocument(doc, imagePairs);\n Logger.debug(`Replaced ${stats.replaced} of ${stats.total} images`);\n\n using outputBuffer = disposable(doc.saveToBuffer('compress'));\n // Create a copy to ensure the data remains valid after the buffer is destroyed\n return new Uint8Array(outputBuffer.asUint8Array());\n}\n"],"mappings":"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","names":["pathToFileURL","terminalLink","upath","cyan","gray","process","_","process","fs","URL","upath","fs","upath","disposable","upath","document","fs","_","build","_stack","_error","_hasError","items","upath","entry","URL","page","fs","gray","_stack","_","cyan","upath","terminalLink","pathToFileURL","_error","_hasError"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/preview.ts"],"sourcesContent":["import terminalLink from 'terminal-link';\nimport type { ViteDevServer } from 'vite';\nimport { blueBright, cyan, dim } from 'yoctocolors';\nimport { setupConfigFromFlags } from '../commands/cli-flags.js';\nimport { loadVivliostyleConfig, warnDeprecatedConfig } from '../config/load.js';\nimport { mergeConfig, mergeInlineConfig } from '../config/merge.js';\nimport { resolveTaskConfig } from '../config/resolve.js';\nimport type { ParsedVivliostyleInlineConfig } from '../config/schema.js';\nimport { resolveViteConfig } from '../config/vite.js';\nimport { cliVersion } from '../const.js';\nimport { isUnicodeSupported, Logger, randomBookSymbol } from '../logger.js';\nimport { createViteServer, getViewerFullUrl } from '../server.js';\n\nexport async function preview(inlineConfig: ParsedVivliostyleInlineConfig) {\n Logger.setLogOptions(inlineConfig);\n Logger.debug('preview > inlineConfig %O', inlineConfig);\n\n let vivliostyleConfig =\n (await loadVivliostyleConfig(inlineConfig)) ??\n setupConfigFromFlags(inlineConfig);\n warnDeprecatedConfig(vivliostyleConfig);\n vivliostyleConfig = mergeInlineConfig(vivliostyleConfig, inlineConfig);\n const { tasks, inlineOptions } = vivliostyleConfig;\n Logger.debug('preview > vivliostyleConfig %O', vivliostyleConfig);\n\n // Only show preview of first entry\n let config = resolveTaskConfig(tasks[0], inlineOptions);\n Logger.debug('preview > config %O', config);\n\n let server: ViteDevServer;\n let url: string;\n {\n using _ = Logger.startLogging('Start preview');\n const viteConfig = await resolveViteConfig({\n ...config,\n mode: 'preview',\n });\n server = await createViteServer({\n config,\n viteConfig,\n inlineConfig,\n mode: 'preview',\n });\n if (server.httpServer) {\n await server.listen();\n vivliostyleConfig = mergeConfig(vivliostyleConfig, {\n temporaryFilePrefix: config.temporaryFilePrefix,\n server: server.config.server,\n });\n config = resolveTaskConfig(\n vivliostyleConfig.tasks[0],\n vivliostyleConfig.inlineOptions,\n );\n }\n url = await getViewerFullUrl(config);\n }\n\n if (server.httpServer) {\n Logger.log(`\n${cyan(`Vivliostyle CLI v${cliVersion}`)}\n${blueBright('║')} ${isUnicodeSupported ? `${randomBookSymbol} ` : ''}Up and running (press Ctrl+C to quit)\n${blueBright('╙─')} ${dim(`Preview URL: ${terminalLink(url, url, { fallback: () => url })}`)}\n`);\n }\n return server;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,kBAAkB;AAEzB,SAAS,YAAY,MAAM,WAAW;AAWtC,eAAsB,QAAQ,cAA6C;AACzE,SAAO,cAAc,YAAY;AACjC,SAAO,MAAM,6BAA6B,YAAY;AAEtD,MAAI,oBACD,MAAM,sBAAsB,YAAY,KACzC,qBAAqB,YAAY;AACnC,uBAAqB,iBAAiB;AACtC,sBAAoB,kBAAkB,mBAAmB,YAAY;AACrE,QAAM,EAAE,OAAO,cAAc,IAAI;AACjC,SAAO,MAAM,kCAAkC,iBAAiB;AAGhE,MAAI,SAAS,kBAAkB,MAAM,CAAC,GAAG,aAAa;AACtD,SAAO,MAAM,uBAAuB,MAAM;AAE1C,MAAI;AACJ,MAAI;AACJ;AACE;AAAA;AAAA,YAAMA,KAAI,uBAAO,aAAa,eAAe;AAC7C,YAAM,aAAa,MAAM,kBAAkB;AAAA,QACzC,GAAG;AAAA,QACH,MAAM;AAAA,MACR,CAAC;AACD,eAAS,MAAM,iBAAiB;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AACD,UAAI,OAAO,YAAY;AACrB,cAAM,OAAO,OAAO;AACpB,4BAAoB,YAAY,mBAAmB;AAAA,UACjD,qBAAqB,OAAO;AAAA,UAC5B,QAAQ,OAAO,OAAO;AAAA,QACxB,CAAC;AACD,iBAAS;AAAA,UACP,kBAAkB,MAAM,CAAC;AAAA,UACzB,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,YAAM,MAAM,iBAAiB,MAAM;AAAA,aAtBnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBF;AAEA,MAAI,OAAO,YAAY;AACrB,WAAO,IAAI;AAAA,EACb,KAAK,oBAAoB,UAAU,EAAE,CAAC;AAAA,EACtC,WAAW,QAAG,CAAC,IAAI,qBAAqB,GAAG,gBAAgB,MAAM,EAAE;AAAA,EACnE,WAAW,cAAI,CAAC,IAAI,IAAI,gBAAgB,aAAa,KAAK,KAAK,EAAE,UAAU,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;AAAA,CAC3F;AAAA,EACC;AACA,SAAO;AACT;","names":["_"]}
|
|
@@ -1 +0,0 @@
|
|
|
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"]}
|