@vivliostyle/cli 10.3.1 → 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/dist/{chunk-MU7JCDMK.js → chunk-4DTPH2XX.js} +2 -2
- package/dist/{chunk-PYPAYBFL.js → chunk-DEJL63H2.js} +29 -22
- package/dist/chunk-DEJL63H2.js.map +1 -0
- package/dist/{chunk-OAFXM4ES.js → chunk-DK3HFVHX.js} +27 -51
- package/dist/chunk-DK3HFVHX.js.map +1 -0
- package/dist/{chunk-7GIJVX4M.js → chunk-J2YGULSR.js} +45 -7
- package/dist/chunk-J2YGULSR.js.map +1 -0
- package/dist/{chunk-ERDN47XG.js → chunk-L4PJ2SP3.js} +17 -13
- package/dist/chunk-L4PJ2SP3.js.map +1 -0
- package/dist/{chunk-LWMSAGHL.js → chunk-LE3QOQ5F.js} +11 -9
- package/dist/{chunk-LWMSAGHL.js.map → chunk-LE3QOQ5F.js.map} +1 -1
- package/dist/{chunk-C4HQHRXQ.js → chunk-P33ELNYE.js} +323 -379
- 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-LGOHUEEQ.js → chunk-RLV2H3QB.js} +11 -11
- package/dist/chunk-RLV2H3QB.js.map +1 -0
- package/dist/{chunk-DBK27BAR.js → chunk-VAPIKX4A.js} +300 -502
- 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 +10 -9
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create.js +7 -6
- 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 +9 -8
- package/dist/commands/preview.js.map +1 -1
- package/dist/config/schema.d.ts +13247 -1767
- 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 +15 -11
- package/dist/chunk-7GIJVX4M.js.map +0 -1
- package/dist/chunk-C4HQHRXQ.js.map +0 -1
- package/dist/chunk-DBK27BAR.js.map +0 -1
- package/dist/chunk-ERDN47XG.js.map +0 -1
- package/dist/chunk-LGOHUEEQ.js.map +0 -1
- package/dist/chunk-OAFXM4ES.js.map +0 -1
- package/dist/chunk-PYPAYBFL.js.map +0 -1
- /package/dist/{chunk-MU7JCDMK.js.map → chunk-4DTPH2XX.js.map} +0 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import {
|
|
2
|
+
VivliostyleConfigSchema,
|
|
3
|
+
VivliostyleInlineConfig
|
|
4
|
+
} from "./chunk-J2YGULSR.js";
|
|
5
|
+
import {
|
|
6
|
+
DetailError,
|
|
7
|
+
Logger,
|
|
8
|
+
cwd,
|
|
9
|
+
parseJsonc,
|
|
10
|
+
pathContains,
|
|
11
|
+
pathEquals,
|
|
12
|
+
prettifySchemaError
|
|
13
|
+
} from "./chunk-VAPIKX4A.js";
|
|
14
|
+
import {
|
|
15
|
+
EMPTY_DATA_URI
|
|
16
|
+
} from "./chunk-DK3HFVHX.js";
|
|
17
|
+
|
|
18
|
+
// src/commands/cli-flags.ts
|
|
19
|
+
import "commander";
|
|
20
|
+
import * as v from "valibot";
|
|
21
|
+
function createParserProgram({
|
|
22
|
+
setupProgram,
|
|
23
|
+
parseArgs
|
|
24
|
+
}) {
|
|
25
|
+
return (argv) => {
|
|
26
|
+
const program = setupProgram();
|
|
27
|
+
program.parse(argv);
|
|
28
|
+
let options = program.opts();
|
|
29
|
+
options = parseArgs?.(options, program.args ?? []) || options;
|
|
30
|
+
options = warnDeprecatedFlags(options);
|
|
31
|
+
return v.parse(VivliostyleInlineConfig, options);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function setupConfigFromFlags(flags) {
|
|
35
|
+
if (!flags.input) {
|
|
36
|
+
if (flags.enableViewerStartPage) {
|
|
37
|
+
return {
|
|
38
|
+
tasks: [{ entry: [] }],
|
|
39
|
+
inlineOptions: {
|
|
40
|
+
input: { format: "webbook", entry: EMPTY_DATA_URI }
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
} else {
|
|
44
|
+
throw new Error(
|
|
45
|
+
"No input is set. Please set an appropriate entry or a Vivliostyle config file."
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
tasks: [{ entry: [] }],
|
|
51
|
+
inlineOptions: { ...flags }
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function warnDeprecatedFlags(options) {
|
|
55
|
+
const modifiedOptions = { ...options };
|
|
56
|
+
return modifiedOptions;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/config/load.ts
|
|
60
|
+
import fs from "node:fs";
|
|
61
|
+
import { createRequire } from "node:module";
|
|
62
|
+
import { pathToFileURL } from "node:url";
|
|
63
|
+
import upath from "upath";
|
|
64
|
+
import * as v2 from "valibot";
|
|
65
|
+
var require2 = createRequire(import.meta.url);
|
|
66
|
+
function locateVivliostyleConfig({
|
|
67
|
+
config,
|
|
68
|
+
cwd: cwd2 = cwd
|
|
69
|
+
}) {
|
|
70
|
+
if (config) {
|
|
71
|
+
return upath.resolve(cwd2, config);
|
|
72
|
+
}
|
|
73
|
+
return [".js", ".mjs", ".cjs", ".ts", ".mts", ".cts", ".json"].map((ext) => upath.join(cwd2, `vivliostyle.config${ext}`)).find((p) => fs.existsSync(p));
|
|
74
|
+
}
|
|
75
|
+
async function loadVivliostyleConfig({
|
|
76
|
+
config,
|
|
77
|
+
configData,
|
|
78
|
+
cwd: cwd2
|
|
79
|
+
}) {
|
|
80
|
+
if (configData) {
|
|
81
|
+
return v2.parse(VivliostyleConfigSchema, configData);
|
|
82
|
+
}
|
|
83
|
+
const absPath = locateVivliostyleConfig({ config, cwd: cwd2 });
|
|
84
|
+
if (!absPath) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
let parsedConfig;
|
|
88
|
+
let jsonRaw;
|
|
89
|
+
try {
|
|
90
|
+
if (upath.extname(absPath) === ".json") {
|
|
91
|
+
jsonRaw = fs.readFileSync(absPath, "utf8");
|
|
92
|
+
parsedConfig = parseJsonc(jsonRaw);
|
|
93
|
+
} else {
|
|
94
|
+
delete require2.cache[require2.resolve(absPath)];
|
|
95
|
+
const url = pathToFileURL(absPath);
|
|
96
|
+
url.search = `version=${Date.now()}`;
|
|
97
|
+
parsedConfig = (await import(
|
|
98
|
+
/* @vite-ignore */
|
|
99
|
+
url.href
|
|
100
|
+
)).default;
|
|
101
|
+
jsonRaw = JSON.stringify(parsedConfig, null, 2);
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
const thrownError = error;
|
|
105
|
+
throw new DetailError(
|
|
106
|
+
`An error occurred on loading a config file: ${absPath}`,
|
|
107
|
+
thrownError.stack ?? thrownError.message
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
const result = v2.safeParse(VivliostyleConfigSchema, parsedConfig);
|
|
111
|
+
if (result.success) {
|
|
112
|
+
const { tasks, inlineOptions } = result.output;
|
|
113
|
+
return {
|
|
114
|
+
tasks,
|
|
115
|
+
inlineOptions: {
|
|
116
|
+
...inlineOptions,
|
|
117
|
+
cwd: cwd2 ?? cwd,
|
|
118
|
+
config: absPath
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
} else {
|
|
122
|
+
const errorString = prettifySchemaError(jsonRaw, result.issues);
|
|
123
|
+
throw new DetailError(
|
|
124
|
+
`Validation of vivliostyle config failed. Please check the schema: ${config}`,
|
|
125
|
+
errorString
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function warnDeprecatedConfig(config) {
|
|
130
|
+
if (config.tasks.some((task) => task.includeAssets)) {
|
|
131
|
+
Logger.logWarn(
|
|
132
|
+
"'includeAssets' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'copyAsset.includes' property instead."
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
if (config.tasks.some((task) => task.tocTitle)) {
|
|
136
|
+
Logger.logWarn(
|
|
137
|
+
"'tocTitle' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'toc.title' property instead."
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
if (config.tasks.some((task) => task.http)) {
|
|
141
|
+
Logger.logWarn(
|
|
142
|
+
"'http' property of Vivliostyle config was deprecated and will be removed in a future release. This option is enabled by default, and the file protocol is no longer supported."
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
if (config.tasks.some((task) => task.pressReady !== void 0)) {
|
|
146
|
+
Logger.logWarn(
|
|
147
|
+
`'pressReady' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflight: "press-ready"' property instead.`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
if (config.tasks.some(
|
|
151
|
+
(task) => task.output && [task.output].flat().some((o) => o.preflight)
|
|
152
|
+
)) {
|
|
153
|
+
Logger.logWarn(
|
|
154
|
+
"'preflight' property of output config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflight' property instead."
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
if (config.tasks.some(
|
|
158
|
+
(task) => task.output && [task.output].flat().some((o) => o.preflightOption)
|
|
159
|
+
)) {
|
|
160
|
+
Logger.logWarn(
|
|
161
|
+
"'preflightOption' property of output config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflightOption' property instead."
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// src/processor/asset.ts
|
|
167
|
+
import { copy } from "fs-extra/esm";
|
|
168
|
+
import fs2 from "node:fs";
|
|
169
|
+
import picomatch from "picomatch";
|
|
170
|
+
import { glob } from "tinyglobby";
|
|
171
|
+
import upath2 from "upath";
|
|
172
|
+
var GlobMatcher = class {
|
|
173
|
+
matcherConfig;
|
|
174
|
+
#_matchers;
|
|
175
|
+
constructor(matcherConfig) {
|
|
176
|
+
this.matcherConfig = matcherConfig;
|
|
177
|
+
this.#_matchers = matcherConfig.map(
|
|
178
|
+
({ patterns, ...options }) => picomatch(patterns, options)
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
match(test) {
|
|
182
|
+
return this.#_matchers.some((matcher) => matcher(test));
|
|
183
|
+
}
|
|
184
|
+
async glob(globOptions = {}) {
|
|
185
|
+
return new Set(
|
|
186
|
+
(await Promise.all(
|
|
187
|
+
this.matcherConfig.map(
|
|
188
|
+
(config) => glob({ ...config, ...globOptions })
|
|
189
|
+
)
|
|
190
|
+
)).flat()
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
function getIgnoreThemeDirectoryPatterns({
|
|
195
|
+
themesDir,
|
|
196
|
+
cwd: cwd2
|
|
197
|
+
}) {
|
|
198
|
+
return pathContains(cwd2, themesDir) ? [
|
|
199
|
+
`${upath2.relative(cwd2, themesDir)}/node_modules/*/example`,
|
|
200
|
+
`${upath2.relative(cwd2, themesDir)}/node_modules/*/*/example`
|
|
201
|
+
] : [];
|
|
202
|
+
}
|
|
203
|
+
function getIgnoreAssetPatterns({
|
|
204
|
+
outputs,
|
|
205
|
+
entries,
|
|
206
|
+
cwd: cwd2
|
|
207
|
+
}) {
|
|
208
|
+
return [
|
|
209
|
+
...outputs.flatMap(
|
|
210
|
+
({ format, path: p }) => !pathContains(cwd2, p) ? [] : format === "webpub" ? upath2.join(upath2.relative(cwd2, p), "**") : upath2.relative(cwd2, p)
|
|
211
|
+
),
|
|
212
|
+
...entries.flatMap(({ template }) => {
|
|
213
|
+
return template?.type === "file" && pathContains(cwd2, template.pathname) ? upath2.relative(cwd2, template.pathname) : [];
|
|
214
|
+
})
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
function getWebPubResourceMatcher({
|
|
218
|
+
outputs,
|
|
219
|
+
themesDir,
|
|
220
|
+
entries,
|
|
221
|
+
cwd: cwd2,
|
|
222
|
+
manifestPath,
|
|
223
|
+
copyAsset: { fileExtensions },
|
|
224
|
+
additionalPatterns = []
|
|
225
|
+
}) {
|
|
226
|
+
return new GlobMatcher([
|
|
227
|
+
{
|
|
228
|
+
patterns: [
|
|
229
|
+
`**/${upath2.relative(cwd2, manifestPath)}`,
|
|
230
|
+
"**/*.{html,htm,xhtml,xht}",
|
|
231
|
+
`**/*.{${fileExtensions.join(",")}}`,
|
|
232
|
+
...additionalPatterns
|
|
233
|
+
],
|
|
234
|
+
ignore: [
|
|
235
|
+
...getIgnoreAssetPatterns({
|
|
236
|
+
cwd: cwd2,
|
|
237
|
+
outputs,
|
|
238
|
+
entries
|
|
239
|
+
}),
|
|
240
|
+
...getIgnoreThemeDirectoryPatterns({
|
|
241
|
+
cwd: cwd2,
|
|
242
|
+
themesDir
|
|
243
|
+
}),
|
|
244
|
+
// Ignore node_modules in the root directory
|
|
245
|
+
"node_modules/**",
|
|
246
|
+
// only include dotfiles starting with `.vs-`
|
|
247
|
+
"**/.!(vs-*)/**"
|
|
248
|
+
],
|
|
249
|
+
dot: true,
|
|
250
|
+
cwd: cwd2
|
|
251
|
+
}
|
|
252
|
+
]);
|
|
253
|
+
}
|
|
254
|
+
function getAssetMatcher({
|
|
255
|
+
copyAsset: { fileExtensions, includes, excludes },
|
|
256
|
+
outputs,
|
|
257
|
+
themesDir,
|
|
258
|
+
entries,
|
|
259
|
+
cwd: cwd2,
|
|
260
|
+
ignore = []
|
|
261
|
+
}) {
|
|
262
|
+
const ignorePatterns = [
|
|
263
|
+
...ignore,
|
|
264
|
+
...excludes,
|
|
265
|
+
...getIgnoreAssetPatterns({ outputs, entries, cwd: cwd2 })
|
|
266
|
+
];
|
|
267
|
+
return new GlobMatcher([
|
|
268
|
+
// Step 1: Glob files with an extension in `fileExtension`
|
|
269
|
+
// Ignore files in node_modules directory, theme example files and files matched `excludes`
|
|
270
|
+
{
|
|
271
|
+
patterns: fileExtensions.map((ext) => `**/*.${ext}`),
|
|
272
|
+
ignore: [
|
|
273
|
+
"**/node_modules/**",
|
|
274
|
+
...ignorePatterns,
|
|
275
|
+
...getIgnoreThemeDirectoryPatterns({ themesDir, cwd: cwd2 })
|
|
276
|
+
],
|
|
277
|
+
cwd: cwd2
|
|
278
|
+
},
|
|
279
|
+
// Step 2: Glob files matched with `includes`
|
|
280
|
+
// Ignore only files matched `excludes`
|
|
281
|
+
{
|
|
282
|
+
patterns: includes,
|
|
283
|
+
ignore: ignorePatterns,
|
|
284
|
+
cwd: cwd2
|
|
285
|
+
}
|
|
286
|
+
]);
|
|
287
|
+
}
|
|
288
|
+
async function copyAssets({
|
|
289
|
+
entryContextDir,
|
|
290
|
+
workspaceDir,
|
|
291
|
+
copyAsset,
|
|
292
|
+
outputs,
|
|
293
|
+
themesDir,
|
|
294
|
+
entries
|
|
295
|
+
}) {
|
|
296
|
+
if (pathEquals(entryContextDir, workspaceDir)) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const relWorkspaceDir = upath2.relative(entryContextDir, workspaceDir);
|
|
300
|
+
const assets = await getAssetMatcher({
|
|
301
|
+
copyAsset,
|
|
302
|
+
cwd: entryContextDir,
|
|
303
|
+
outputs,
|
|
304
|
+
themesDir,
|
|
305
|
+
entries,
|
|
306
|
+
ignore: [
|
|
307
|
+
// don't copy workspace itself
|
|
308
|
+
...relWorkspaceDir ? [upath2.join(relWorkspaceDir, "**")] : []
|
|
309
|
+
]
|
|
310
|
+
}).glob({ followSymbolicLinks: true });
|
|
311
|
+
Logger.debug("assets", assets);
|
|
312
|
+
for (const asset of assets) {
|
|
313
|
+
const target = upath2.join(workspaceDir, asset);
|
|
314
|
+
fs2.mkdirSync(upath2.dirname(target), { recursive: true });
|
|
315
|
+
await copy(upath2.resolve(entryContextDir, asset), target);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export {
|
|
320
|
+
createParserProgram,
|
|
321
|
+
setupConfigFromFlags,
|
|
322
|
+
locateVivliostyleConfig,
|
|
323
|
+
loadVivliostyleConfig,
|
|
324
|
+
warnDeprecatedConfig,
|
|
325
|
+
GlobMatcher,
|
|
326
|
+
getWebPubResourceMatcher,
|
|
327
|
+
getAssetMatcher,
|
|
328
|
+
copyAssets
|
|
329
|
+
};
|
|
330
|
+
//# sourceMappingURL=chunk-Q4EIXB5V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/cli-flags.ts","../src/config/load.ts","../src/processor/asset.ts"],"sourcesContent":["import { Command, type OptionValues } from 'commander';\nimport * as v from 'valibot';\nimport {\n type InlineOptions,\n type OutputConfig,\n type ParsedVivliostyleConfigSchema,\n VivliostyleInlineConfig,\n} from '../config/schema.js';\nimport { EMPTY_DATA_URI } from '../constants.js';\n\nexport interface CliFlags {\n input?: string;\n config?: string;\n outputs?: Pick<OutputConfig, 'path' | 'format'>[];\n theme?: string[];\n size?: string;\n cropMarks?: boolean;\n bleed?: string;\n cropOffset?: string;\n css?: string;\n style?: string;\n userStyle?: string;\n singleDoc?: boolean;\n quick?: boolean;\n pressReady?: boolean;\n title?: string;\n author?: string;\n language?: string;\n readingProgression?: 'ltr' | 'rtl';\n timeout?: number;\n renderMode?: 'local' | 'docker';\n preflight?: 'press-ready' | 'press-ready-local';\n preflightOption?: string[];\n sandbox?: boolean;\n executableBrowser?: string;\n image?: string;\n /** @deprecated */ http?: boolean;\n viewer?: string;\n viewerParam?: string;\n browser?: string;\n proxyServer?: string;\n proxyBypass?: string;\n proxyUser?: string;\n proxyPass?: string;\n logLevel?: 'silent' | 'info' | 'verbose' | 'debug';\n ignoreHttpsErrors?: boolean;\n projectPath?: string;\n template?: string;\n}\n\nexport function createParserProgram({\n setupProgram,\n parseArgs,\n}: {\n setupProgram: () => Command;\n parseArgs?: (options: CliFlags, args: string[]) => CliFlags;\n}) {\n return (argv: string[]) => {\n const program = setupProgram();\n program.parse(argv);\n let options = program.opts<CliFlags>();\n options = parseArgs?.(options, program.args ?? []) || options;\n options = warnDeprecatedFlags(options);\n return v.parse(VivliostyleInlineConfig, options);\n };\n}\n\nexport function setupConfigFromFlags(\n flags: InlineOptions,\n): ParsedVivliostyleConfigSchema {\n if (!flags.input) {\n if (flags.enableViewerStartPage) {\n return {\n tasks: [{ entry: [] }],\n inlineOptions: {\n input: { format: 'webbook', entry: EMPTY_DATA_URI },\n },\n };\n } else {\n throw new Error(\n 'No input is set. Please set an appropriate entry or a Vivliostyle config file.',\n );\n }\n }\n return {\n tasks: [{ entry: [] }],\n inlineOptions: { ...flags },\n };\n}\n\nfunction warnDeprecatedFlags(options: OptionValues): OptionValues {\n const modifiedOptions = { ...options };\n\n // Place here warnings for deprecated flags\n // if (options.someDeprecatedFlag) {\n // Logger.logWarn(\n // \"'--some-deprecated-flag' option was deprecated and will be removed in a future release. Please use '--new-flag' instead.\",\n // );\n // }\n\n return modifiedOptions;\n}\n","import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\nimport upath from 'upath';\nimport * as v from 'valibot';\nimport { Logger } from '../logger.js';\nimport {\n cwd as defaultRoot,\n DetailError,\n parseJsonc,\n prettifySchemaError,\n} from '../util.js';\nimport {\n type InlineOptions,\n type ParsedVivliostyleConfigSchema,\n VivliostyleConfigSchema,\n} from './schema.js';\n\nconst require = createRequire(import.meta.url);\n\nexport function locateVivliostyleConfig({\n config,\n cwd = defaultRoot,\n}: Pick<InlineOptions, 'config' | 'cwd'>) {\n if (config) {\n return upath.resolve(cwd, config);\n }\n return ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts', '.json']\n .map((ext) => upath.join(cwd, `vivliostyle.config${ext}`))\n .find((p) => fs.existsSync(p));\n}\n\nexport async function loadVivliostyleConfig({\n config,\n configData,\n cwd,\n}: Pick<InlineOptions, 'config' | 'configData' | 'cwd'>): Promise<\n ParsedVivliostyleConfigSchema | undefined\n> {\n if (configData) {\n return v.parse(VivliostyleConfigSchema, configData);\n }\n\n const absPath = locateVivliostyleConfig({ config, cwd });\n if (!absPath) {\n return;\n }\n\n let parsedConfig: unknown;\n let jsonRaw: string | undefined;\n try {\n if (upath.extname(absPath) === '.json') {\n jsonRaw = fs.readFileSync(absPath, 'utf8');\n parsedConfig = parseJsonc(jsonRaw);\n } else {\n // Clear require cache to reload CJS config files\n delete require.cache[require.resolve(absPath)];\n const url = pathToFileURL(absPath);\n // Invalidate cache for ESM config files\n // https://github.com/nodejs/node/issues/49442\n url.search = `version=${Date.now()}`;\n parsedConfig = (await import(/* @vite-ignore */ url.href)).default;\n jsonRaw = JSON.stringify(parsedConfig, null, 2);\n }\n } catch (error) {\n const thrownError = error as Error;\n throw new DetailError(\n `An error occurred on loading a config file: ${absPath}`,\n thrownError.stack ?? thrownError.message,\n );\n }\n\n const result = v.safeParse(VivliostyleConfigSchema, parsedConfig);\n if (result.success) {\n const { tasks, inlineOptions } = result.output;\n return {\n tasks,\n inlineOptions: {\n ...inlineOptions,\n cwd: cwd ?? defaultRoot,\n config: absPath,\n },\n };\n } else {\n const errorString = prettifySchemaError(jsonRaw, result.issues);\n throw new DetailError(\n `Validation of vivliostyle config failed. Please check the schema: ${config}`,\n errorString,\n );\n }\n}\n\nexport function warnDeprecatedConfig(config: ParsedVivliostyleConfigSchema) {\n if (config.tasks.some((task) => task.includeAssets)) {\n Logger.logWarn(\n \"'includeAssets' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'copyAsset.includes' property instead.\",\n );\n }\n\n if (config.tasks.some((task) => task.tocTitle)) {\n Logger.logWarn(\n \"'tocTitle' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'toc.title' property instead.\",\n );\n }\n\n if (config.tasks.some((task) => task.http)) {\n Logger.logWarn(\n \"'http' property of Vivliostyle config was deprecated and will be removed in a future release. This option is enabled by default, and the file protocol is no longer supported.\",\n );\n }\n\n if (config.tasks.some((task) => task.pressReady !== undefined)) {\n Logger.logWarn(\n \"'pressReady' property of Vivliostyle config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflight: \\\"press-ready\\\"' property instead.\",\n );\n }\n\n if (\n config.tasks.some(\n (task) => task.output && [task.output].flat().some((o) => o.preflight),\n )\n ) {\n Logger.logWarn(\n \"'preflight' property of output config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflight' property instead.\",\n );\n }\n\n if (\n config.tasks.some(\n (task) =>\n task.output && [task.output].flat().some((o) => o.preflightOption),\n )\n ) {\n Logger.logWarn(\n \"'preflightOption' property of output config was deprecated and will be removed in a future release. Please use 'pdfPostprocess.preflightOption' property instead.\",\n );\n }\n}\n","import { copy } from 'fs-extra/esm';\nimport fs from 'node:fs';\nimport picomatch, { type PicomatchOptions } from 'picomatch';\nimport { glob, type GlobOptions } from 'tinyglobby';\nimport upath from 'upath';\nimport type { ResolvedTaskConfig } from '../config/resolve.js';\nimport { Logger } from '../logger.js';\nimport { pathContains, pathEquals } from '../util.js';\n\nexport class GlobMatcher {\n readonly matcherConfig: (Pick<PicomatchOptions, 'dot' | 'ignore' | 'cwd'> & {\n patterns: string[];\n })[];\n\n #_matchers: picomatch.Matcher[];\n\n constructor(matcherConfig: typeof GlobMatcher.prototype.matcherConfig) {\n this.matcherConfig = matcherConfig;\n this.#_matchers = matcherConfig.map(({ patterns, ...options }) =>\n picomatch(patterns, options),\n );\n }\n\n match(test: string): boolean {\n return this.#_matchers.some((matcher) => matcher(test));\n }\n\n async glob(\n globOptions: Pick<GlobOptions, 'followSymbolicLinks'> = {},\n ): Promise<Set<string>> {\n return new Set(\n (\n await Promise.all(\n this.matcherConfig.map((config) =>\n glob({ ...config, ...globOptions }),\n ),\n )\n ).flat(),\n );\n }\n}\n\nfunction getIgnoreThemeDirectoryPatterns({\n themesDir,\n cwd,\n}: Pick<ResolvedTaskConfig, 'themesDir'> & {\n cwd: string;\n}): string[] {\n return pathContains(cwd, themesDir)\n ? [\n `${upath.relative(cwd, themesDir)}/node_modules/*/example`,\n `${upath.relative(cwd, themesDir)}/node_modules/*/*/example`,\n ]\n : [];\n}\n\nfunction getIgnoreAssetPatterns({\n outputs,\n entries,\n cwd,\n}: Pick<ResolvedTaskConfig, 'outputs' | 'entries'> & {\n cwd: string;\n}): string[] {\n return [\n ...outputs.flatMap(({ format, path: p }) =>\n !pathContains(cwd, p)\n ? []\n : format === 'webpub'\n ? upath.join(upath.relative(cwd, p), '**')\n : upath.relative(cwd, p),\n ),\n ...entries.flatMap(({ template }) => {\n return template?.type === 'file' && pathContains(cwd, template.pathname)\n ? upath.relative(cwd, template.pathname)\n : [];\n }),\n ];\n}\n\nexport function getWebPubResourceMatcher({\n outputs,\n themesDir,\n entries,\n cwd,\n manifestPath,\n copyAsset: { fileExtensions },\n additionalPatterns = [],\n}: Pick<\n ResolvedTaskConfig,\n 'outputs' | 'themesDir' | 'entries' | 'copyAsset'\n> & {\n cwd: string;\n manifestPath: string;\n additionalPatterns?: string[];\n}) {\n return new GlobMatcher([\n {\n patterns: [\n `**/${upath.relative(cwd, manifestPath)}`,\n '**/*.{html,htm,xhtml,xht}',\n `**/*.{${fileExtensions.join(',')}}`,\n ...additionalPatterns,\n ],\n ignore: [\n ...getIgnoreAssetPatterns({\n cwd,\n outputs,\n entries,\n }),\n ...getIgnoreThemeDirectoryPatterns({\n cwd,\n themesDir,\n }),\n // Ignore node_modules in the root directory\n 'node_modules/**',\n // only include dotfiles starting with `.vs-`\n '**/.!(vs-*)/**',\n ],\n dot: true,\n cwd,\n },\n ]);\n}\n\nexport function getAssetMatcher({\n copyAsset: { fileExtensions, includes, excludes },\n outputs,\n themesDir,\n entries,\n cwd,\n ignore = [],\n}: Pick<\n ResolvedTaskConfig,\n 'copyAsset' | 'outputs' | 'themesDir' | 'entries'\n> & {\n cwd: string;\n ignore?: string[];\n}) {\n const ignorePatterns = [\n ...ignore,\n ...excludes,\n ...getIgnoreAssetPatterns({ outputs, entries, cwd }),\n ];\n return new GlobMatcher([\n // Step 1: Glob files with an extension in `fileExtension`\n // Ignore files in node_modules directory, theme example files and files matched `excludes`\n {\n patterns: fileExtensions.map((ext) => `**/*.${ext}`),\n ignore: [\n '**/node_modules/**',\n ...ignorePatterns,\n ...getIgnoreThemeDirectoryPatterns({ themesDir, cwd }),\n ],\n cwd,\n },\n // Step 2: Glob files matched with `includes`\n // Ignore only files matched `excludes`\n {\n patterns: includes,\n ignore: ignorePatterns,\n cwd,\n },\n ]);\n}\n\nexport async function copyAssets({\n entryContextDir,\n workspaceDir,\n copyAsset,\n outputs,\n themesDir,\n entries,\n}: ResolvedTaskConfig): Promise<void> {\n if (pathEquals(entryContextDir, workspaceDir)) {\n return;\n }\n const relWorkspaceDir = upath.relative(entryContextDir, workspaceDir);\n const assets = await getAssetMatcher({\n copyAsset,\n cwd: entryContextDir,\n outputs,\n themesDir,\n entries,\n ignore: [\n // don't copy workspace itself\n ...(relWorkspaceDir ? [upath.join(relWorkspaceDir, '**')] : []),\n ],\n }).glob({ followSymbolicLinks: true });\n Logger.debug('assets', assets);\n for (const asset of assets) {\n const target = upath.join(workspaceDir, asset);\n fs.mkdirSync(upath.dirname(target), { recursive: true });\n await copy(upath.resolve(entryContextDir, asset), target);\n }\n}\n"],"mappings":"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","names":["v","require","cwd","fs","upath","cwd","upath","fs"]}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveViteConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4DTPH2XX.js";
|
|
4
4
|
import {
|
|
5
5
|
createViteServer,
|
|
6
6
|
getViewerFullUrl,
|
|
7
|
-
loadVivliostyleConfig,
|
|
8
7
|
mergeConfig,
|
|
9
8
|
mergeInlineConfig,
|
|
10
|
-
resolveTaskConfig
|
|
9
|
+
resolveTaskConfig
|
|
10
|
+
} from "./chunk-P33ELNYE.js";
|
|
11
|
+
import {
|
|
12
|
+
loadVivliostyleConfig,
|
|
13
|
+
setupConfigFromFlags,
|
|
11
14
|
warnDeprecatedConfig
|
|
12
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-Q4EIXB5V.js";
|
|
13
16
|
import {
|
|
14
17
|
Logger,
|
|
18
|
+
cliVersion,
|
|
15
19
|
isUnicodeSupported,
|
|
16
|
-
randomBookSymbol
|
|
17
|
-
|
|
18
|
-
} from "./chunk-DBK27BAR.js";
|
|
19
|
-
import {
|
|
20
|
-
cliVersion
|
|
21
|
-
} from "./chunk-OAFXM4ES.js";
|
|
20
|
+
randomBookSymbol
|
|
21
|
+
} from "./chunk-VAPIKX4A.js";
|
|
22
22
|
import {
|
|
23
23
|
__callDispose,
|
|
24
24
|
__using
|
|
@@ -84,4 +84,4 @@ ${blueBright("\u2559\u2500")} ${dim(`Preview URL: ${terminalLink(url, url, { fal
|
|
|
84
84
|
export {
|
|
85
85
|
preview
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
87
|
+
//# sourceMappingURL=chunk-RLV2H3QB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { isUnicodeSupported, Logger, randomBookSymbol } from '../logger.js';\nimport { createViteServer, getViewerFullUrl } from '../server.js';\nimport { cliVersion } from '../util.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":["_"]}
|