@vivliostyle/cli 8.17.1 → 9.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/browser.d.ts +12 -1
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +108 -13
  4. package/dist/browser.js.map +1 -1
  5. package/dist/commands/build.js +10 -44
  6. package/dist/commands/build.js.map +1 -1
  7. package/dist/commands/build.parser.d.ts +0 -5
  8. package/dist/commands/build.parser.d.ts.map +1 -1
  9. package/dist/commands/build.parser.js +15 -23
  10. package/dist/commands/build.parser.js.map +1 -1
  11. package/dist/commands/cli-flags.d.ts +42 -0
  12. package/dist/commands/cli-flags.d.ts.map +1 -0
  13. package/dist/commands/cli-flags.js +58 -0
  14. package/dist/commands/cli-flags.js.map +1 -0
  15. package/dist/commands/init.js +4 -12
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/preview.js +4 -37
  18. package/dist/commands/preview.js.map +1 -1
  19. package/dist/commands/preview.parser.d.ts.map +1 -1
  20. package/dist/commands/preview.parser.js +6 -4
  21. package/dist/commands/preview.parser.js.map +1 -1
  22. package/dist/config/load.d.ts +7 -0
  23. package/dist/config/load.d.ts.map +1 -0
  24. package/dist/config/load.js +72 -0
  25. package/dist/config/load.js.map +1 -0
  26. package/dist/config/merge.d.ts +4 -0
  27. package/dist/config/merge.d.ts.map +1 -0
  28. package/dist/config/merge.js +78 -0
  29. package/dist/config/merge.js.map +1 -0
  30. package/dist/{input/config.d.ts → config/resolve.d.ts} +81 -82
  31. package/dist/config/resolve.d.ts.map +1 -0
  32. package/dist/config/resolve.js +727 -0
  33. package/dist/config/resolve.js.map +1 -0
  34. package/dist/{input → config}/schema.d.ts +6023 -3542
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +562 -0
  37. package/dist/config/schema.js.map +1 -0
  38. package/dist/config/vite.d.ts +53 -0
  39. package/dist/config/vite.d.ts.map +1 -0
  40. package/dist/config/vite.js +19 -0
  41. package/dist/config/vite.js.map +1 -0
  42. package/dist/const.d.ts +2 -0
  43. package/dist/const.d.ts.map +1 -1
  44. package/dist/const.js +2 -0
  45. package/dist/const.js.map +1 -1
  46. package/dist/container.d.ts +12 -3
  47. package/dist/container.d.ts.map +1 -1
  48. package/dist/container.js +130 -30
  49. package/dist/container.js.map +1 -1
  50. package/dist/core/build.d.ts +3 -0
  51. package/dist/core/build.d.ts.map +1 -0
  52. package/dist/core/build.js +168 -0
  53. package/dist/core/build.js.map +1 -0
  54. package/dist/core/init.d.ts +3 -0
  55. package/dist/core/init.d.ts.map +1 -0
  56. package/dist/{init.js → core/init.js} +14 -19
  57. package/dist/core/init.js.map +1 -0
  58. package/dist/core/preview.d.ts +3 -0
  59. package/dist/core/preview.d.ts.map +1 -0
  60. package/dist/core/preview.js +93 -0
  61. package/dist/core/preview.js.map +1 -0
  62. package/dist/index.d.ts +32 -4
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +44 -3
  65. package/dist/index.js.map +1 -1
  66. package/dist/logger.d.ts +23 -0
  67. package/dist/logger.d.ts.map +1 -0
  68. package/dist/logger.js +161 -0
  69. package/dist/logger.js.map +1 -0
  70. package/dist/output/epub.d.ts.map +1 -1
  71. package/dist/output/epub.js +17 -15
  72. package/dist/output/epub.js.map +1 -1
  73. package/dist/output/pdf-postprocess.d.ts +2 -3
  74. package/dist/output/pdf-postprocess.d.ts.map +1 -1
  75. package/dist/output/pdf-postprocess.js +94 -29
  76. package/dist/output/pdf-postprocess.js.map +1 -1
  77. package/dist/output/pdf.d.ts +4 -7
  78. package/dist/output/pdf.d.ts.map +1 -1
  79. package/dist/output/pdf.js +77 -141
  80. package/dist/output/pdf.js.map +1 -1
  81. package/dist/output/webbook.d.ts +10 -10
  82. package/dist/output/webbook.d.ts.map +1 -1
  83. package/dist/output/webbook.js +44 -62
  84. package/dist/output/webbook.js.map +1 -1
  85. package/dist/processor/compile.d.ts +24 -10
  86. package/dist/processor/compile.d.ts.map +1 -1
  87. package/dist/processor/compile.js +195 -130
  88. package/dist/processor/compile.js.map +1 -1
  89. package/dist/processor/html.d.ts +29 -17
  90. package/dist/processor/html.d.ts.map +1 -1
  91. package/dist/processor/html.js +112 -88
  92. package/dist/processor/html.js.map +1 -1
  93. package/dist/processor/markdown.d.ts +1 -1
  94. package/dist/processor/markdown.d.ts.map +1 -1
  95. package/dist/processor/theme.d.ts +3 -3
  96. package/dist/processor/theme.d.ts.map +1 -1
  97. package/dist/processor/theme.js +29 -53
  98. package/dist/processor/theme.js.map +1 -1
  99. package/dist/server.d.ts +17 -38
  100. package/dist/server.d.ts.map +1 -1
  101. package/dist/server.js +76 -102
  102. package/dist/server.js.map +1 -1
  103. package/dist/util.d.ts +9 -29
  104. package/dist/util.d.ts.map +1 -1
  105. package/dist/util.js +54 -158
  106. package/dist/util.js.map +1 -1
  107. package/dist/vite/plugin-util.d.ts +6 -0
  108. package/dist/vite/plugin-util.d.ts.map +1 -0
  109. package/dist/vite/plugin-util.js +20 -0
  110. package/dist/vite/plugin-util.js.map +1 -0
  111. package/dist/vite/vite-plugin-browser.d.ts +8 -0
  112. package/dist/vite/vite-plugin-browser.d.ts.map +1 -0
  113. package/dist/vite/vite-plugin-browser.js +57 -0
  114. package/dist/vite/vite-plugin-browser.js.map +1 -0
  115. package/dist/vite/vite-plugin-dev-server.d.ts +8 -0
  116. package/dist/vite/vite-plugin-dev-server.d.ts.map +1 -0
  117. package/dist/vite/vite-plugin-dev-server.js +267 -0
  118. package/dist/vite/vite-plugin-dev-server.js.map +1 -0
  119. package/dist/vite/vite-plugin-static-serve.d.ts +8 -0
  120. package/dist/vite/vite-plugin-static-serve.d.ts.map +1 -0
  121. package/dist/vite/vite-plugin-static-serve.js +24 -0
  122. package/dist/vite/vite-plugin-static-serve.js.map +1 -0
  123. package/dist/vite/vite-plugin-viewer.d.ts +8 -0
  124. package/dist/vite/vite-plugin-viewer.d.ts.map +1 -0
  125. package/dist/vite/vite-plugin-viewer.js +52 -0
  126. package/dist/vite/vite-plugin-viewer.js.map +1 -0
  127. package/dist/vite-adapter.d.ts +3 -0
  128. package/dist/vite-adapter.d.ts.map +1 -0
  129. package/dist/vite-adapter.js +27 -0
  130. package/dist/vite-adapter.js.map +1 -0
  131. package/package.json +13 -15
  132. package/dist/build.d.ts +0 -21
  133. package/dist/build.d.ts.map +0 -1
  134. package/dist/build.js +0 -119
  135. package/dist/build.js.map +0 -1
  136. package/dist/init.d.ts +0 -16
  137. package/dist/init.d.ts.map +0 -1
  138. package/dist/init.js.map +0 -1
  139. package/dist/input/config.d.ts.map +0 -1
  140. package/dist/input/config.js +0 -807
  141. package/dist/input/config.js.map +0 -1
  142. package/dist/input/input-types.d.ts +0 -34
  143. package/dist/input/input-types.d.ts.map +0 -1
  144. package/dist/input/input-types.js +0 -34
  145. package/dist/input/input-types.js.map +0 -1
  146. package/dist/input/schema.d.ts.map +0 -1
  147. package/dist/input/schema.js +0 -233
  148. package/dist/input/schema.js.map +0 -1
  149. package/dist/output/output-types.d.ts +0 -26
  150. package/dist/output/output-types.d.ts.map +0 -1
  151. package/dist/output/output-types.js +0 -23
  152. package/dist/output/output-types.js.map +0 -1
  153. package/dist/preview.d.ts +0 -11
  154. package/dist/preview.d.ts.map +0 -1
  155. package/dist/preview.js +0 -191
  156. package/dist/preview.js.map +0 -1
package/dist/server.js CHANGED
@@ -1,75 +1,26 @@
1
- import http from 'node:http';
2
- import { fileURLToPath, pathToFileURL, URL } from 'node:url';
3
- import handler from 'serve-handler';
1
+ import fs from 'node:fs';
2
+ import { URL } from 'node:url';
4
3
  import upath from 'upath';
5
- import { viewerRoot } from './const.js';
6
- import { beforeExitHandlers, debug, findAvailablePort, isUrlString, } from './util.js';
7
- let _viewerServer;
8
- let _sourceServer;
9
- export async function prepareServer(option) {
10
- const viewerUrl = await (option.viewer && isUrlString(option.viewer)
11
- ? new URL(option.viewer)
12
- : option.httpServer
13
- ? (async () => {
14
- _viewerServer = _viewerServer || (await launchServer(viewerRoot));
15
- const viewerUrl = new URL('http://localhost');
16
- viewerUrl.port = `${_viewerServer.port}`;
17
- viewerUrl.pathname = '/lib/index.html';
18
- return viewerUrl;
19
- })()
20
- : (() => {
21
- const viewerUrl = new URL('file://');
22
- viewerUrl.pathname = upath.join(viewerRoot, 'lib/index.html');
23
- return viewerUrl;
24
- })());
25
- const inputUrl = isUrlString(option.input)
26
- ? new URL(option.input)
27
- : pathToFileURL(option.input);
28
- const sourceUrl = await (async () => {
29
- if (inputUrl.protocol === 'file:' &&
30
- (option.httpServer ||
31
- // Use http server because http viewer cannot access to file protocol
32
- (option.viewer && /^https?:/i.test(option.viewer)))) {
33
- _sourceServer =
34
- _sourceServer || (await launchServer(option.workspaceDir));
35
- const sourceUrl = new URL('http://localhost');
36
- sourceUrl.port = `${_sourceServer.port}`;
37
- sourceUrl.pathname = upath.relative(option.workspaceDir, fileURLToPath(inputUrl));
38
- return sourceUrl;
39
- }
40
- return inputUrl;
41
- })();
42
- return {
43
- viewerFullUrl: getViewerFullUrl(option, {
44
- viewerUrl,
45
- sourceUrl,
46
- }),
47
- };
48
- }
49
- export function teardownServer() {
50
- if (_viewerServer) {
51
- _viewerServer.server.close();
52
- _viewerServer = undefined;
53
- }
54
- if (_sourceServer) {
55
- _sourceServer.server.close();
56
- _sourceServer = undefined;
57
- }
58
- }
59
- export function getViewerFullUrl({ size, cropMarks, bleed, cropOffset, css, style, userStyle, singleDoc, quick, viewerParam, }, { viewerUrl, sourceUrl }) {
4
+ import { createServer, mergeConfig as mergeViteConfig, preview, } from 'vite';
5
+ import { prepareViteConfig } from './config/vite.js';
6
+ import { EMPTY_DATA_URI, VIEWER_ROOT_PATH } from './const.js';
7
+ import { getDefaultEpubOpfPath, isValidUri, openEpub } from './util.js';
8
+ import { vsBrowserPlugin } from './vite/vite-plugin-browser.js';
9
+ import { vsDevServerPlugin } from './vite/vite-plugin-dev-server.js';
10
+ import { vsStaticServePlugin } from './vite/vite-plugin-static-serve.js';
11
+ import { vsViewerPlugin } from './vite/vite-plugin-viewer.js';
12
+ export function getViewerParams(src, { size, cropMarks, bleed, cropOffset, css, customStyle, customUserStyle, singleDoc, quick, viewerParam, }) {
60
13
  const pageSizeValue = size && ('format' in size ? size.format : `${size.width} ${size.height}`);
61
14
  function escapeParam(url) {
62
15
  return url.replace(/&/g, '%26');
63
16
  }
64
- let viewerParams = sourceUrl.href === 'data:,'
65
- ? '' // open Viewer start page
66
- : `src=${escapeParam(sourceUrl.href)}`;
17
+ let viewerParams = src ? `src=${escapeParam(src)}` : '';
67
18
  viewerParams += `&bookMode=${!singleDoc}&renderAllPages=${!quick}`;
68
- if (style) {
69
- viewerParams += `&style=${escapeParam(style)}`;
19
+ if (customStyle) {
20
+ viewerParams += `&style=${escapeParam(customStyle)}`;
70
21
  }
71
- if (userStyle) {
72
- viewerParams += `&userStyle=${escapeParam(userStyle)}`;
22
+ if (customUserStyle) {
23
+ viewerParams += `&userStyle=${escapeParam(customUserStyle)}`;
73
24
  }
74
25
  if (pageSizeValue || cropMarks || bleed || cropOffset || css) {
75
26
  let pageStyle = '@page{';
@@ -96,46 +47,69 @@ export function getViewerFullUrl({ size, cropMarks, bleed, cropOffset, css, styl
96
47
  // append additional viewer parameters
97
48
  viewerParams += `&${viewerParam}`;
98
49
  }
99
- return `${viewerUrl.href}#${viewerParams}`;
50
+ return viewerParams;
100
51
  }
101
- function startEndpoint(root) {
102
- const serve = (req, res) => handler(req, res, {
103
- public: root,
104
- cleanUrls: false,
105
- directoryListing: false,
106
- headers: [
107
- {
108
- source: '**',
109
- headers: [
110
- {
111
- key: 'access-control-allow-headers',
112
- value: 'Origin, X-Requested-With, Content-Type, Accept, Range',
113
- },
114
- {
115
- key: 'access-control-allow-origin',
116
- value: '*',
117
- },
118
- {
119
- key: 'cache-control',
120
- value: 'no-cache, no-store, must-revalidate',
121
- },
122
- ],
123
- },
124
- ],
52
+ export async function getSourceUrl({ viewerInput, base, workspaceDir, rootUrl, }) {
53
+ let input;
54
+ switch (viewerInput.type) {
55
+ case 'webpub':
56
+ input = viewerInput.manifestPath;
57
+ break;
58
+ case 'webbook':
59
+ input = viewerInput.webbookEntryUrl;
60
+ break;
61
+ case 'epub-opf':
62
+ input = viewerInput.epubOpfPath;
63
+ break;
64
+ case 'epub': {
65
+ if (!fs.existsSync(viewerInput.epubTmpOutputDir)) {
66
+ await openEpub(viewerInput.epubPath, viewerInput.epubTmpOutputDir);
67
+ }
68
+ input = getDefaultEpubOpfPath(viewerInput.epubTmpOutputDir);
69
+ break;
70
+ }
71
+ default:
72
+ input = viewerInput;
73
+ }
74
+ return (isValidUri(input)
75
+ ? new URL(input)
76
+ : new URL(upath.posix.join(base, upath.relative(workspaceDir, input)), rootUrl)).href;
77
+ }
78
+ export async function getViewerFullUrl({ viewerInput, base, workspaceDir, rootUrl, viewer, ...config }) {
79
+ const viewerUrl = viewer
80
+ ? new URL(viewer)
81
+ : new URL(`${VIEWER_ROOT_PATH}/index.html`, rootUrl);
82
+ const sourceUrl = await getSourceUrl({
83
+ viewerInput,
84
+ base,
85
+ workspaceDir,
86
+ rootUrl,
125
87
  });
126
- return http.createServer(serve);
88
+ const viewerParams = getViewerParams(sourceUrl === EMPTY_DATA_URI
89
+ ? undefined // open Viewer start page
90
+ : sourceUrl, config);
91
+ viewerUrl.hash = viewerParams;
92
+ return viewerUrl.href;
127
93
  }
128
- async function launchServer(root) {
129
- const port = await findAvailablePort();
130
- debug(`Launching server... root: ${root} port: ${port}`);
131
- const server = startEndpoint(root);
132
- return await new Promise((resolve) => {
133
- server.listen(port, 'localhost', () => {
134
- beforeExitHandlers.push(() => {
135
- server.close();
136
- });
137
- resolve({ server, port });
138
- });
94
+ export async function createViteServer({ config, inlineOptions: options, mode, }) {
95
+ let { viteConfig } = await prepareViteConfig({ ...config, mode });
96
+ viteConfig = mergeViteConfig(viteConfig, {
97
+ clearScreen: false,
98
+ configFile: false,
99
+ appType: 'custom',
100
+ plugins: [
101
+ vsDevServerPlugin({ config, options }),
102
+ vsViewerPlugin({ config, options }),
103
+ vsBrowserPlugin({ config, options }),
104
+ vsStaticServePlugin({ config, options }),
105
+ ],
106
+ server: viteConfig.server ?? config.server,
139
107
  });
108
+ if (mode === 'preview') {
109
+ return await createServer(viteConfig);
110
+ }
111
+ else {
112
+ return await preview(viteConfig);
113
+ }
140
114
  }
141
115
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,49 +1,29 @@
1
- import debugConstructor from 'debug';
2
1
  import fs from 'node:fs';
3
2
  import { BaseIssue } from 'valibot';
4
3
  import type { PublicationManifest } from './schema/publication.schema.js';
5
- export declare const debug: debugConstructor.Debugger;
6
4
  export declare const cwd: string;
7
5
  export declare let beforeExitHandlers: (() => void)[];
8
6
  export declare function runExitHandlers(): void;
9
- export declare function setLogLevel(level?: 'silent' | 'info' | 'verbose' | 'debug'): void;
10
- /**
11
- * @returns A function that stops logging
12
- */
13
- export declare function startLogging(text?: string): typeof stopLogging;
14
- /**
15
- * @returns A function that starts logging again
16
- */
17
- export declare function suspendLogging(text?: string, symbol?: string): (text?: string) => void;
18
- declare function stopLogging(text?: string, symbol?: string): void;
19
- export declare function log(...obj: any): void;
20
- export declare function logUpdate(...obj: string[]): void;
21
- export declare function logSuccess(...obj: string[]): void;
22
- export declare function logError(...obj: string[]): void;
23
- export declare function logWarn(...obj: string[]): void;
24
- export declare function logInfo(...obj: string[]): void;
25
7
  export declare class DetailError extends Error {
26
8
  detail: string | undefined;
27
9
  constructor(message: string | undefined, detail: string | undefined);
28
10
  }
29
- export declare function gracefulError<T extends Error>(err: T): void;
11
+ export declare function getFormattedError(err: Error): string;
12
+ export declare function gracefulError(err: Error): void;
30
13
  export declare function readJSON(path: string): any;
31
14
  export declare function statFileSync(filePath: string, { errorMessage, }?: {
32
15
  errorMessage?: string;
33
16
  }): fs.Stats;
34
17
  export declare function inflateZip(filePath: string, dest: string): Promise<void>;
35
18
  export declare function useTmpDirectory(): Promise<[string, () => void]>;
36
- export declare function touchTmpFile(path: string): Promise<() => void>;
19
+ export declare function touchTmpFile(path: string): () => void;
37
20
  export declare function pathEquals(path1: string, path2: string): boolean;
38
21
  export declare function pathContains(parentPath: string, childPath: string): boolean;
39
- export declare function isUrlString(str: string): boolean;
40
- export declare function findAvailablePort(): Promise<number>;
41
- export declare function checkContainerEnvironment(): boolean;
42
- export declare function openEpubToTmpDirectory(filePath: string): Promise<{
43
- dest: string;
44
- epubOpfPath: string;
45
- deleteEpub: () => void;
46
- }>;
22
+ export declare function isValidUri(str: string): boolean;
23
+ export declare function isInContainer(): boolean;
24
+ export declare function openEpub(epubPath: string, tmpDir: string): Promise<() => void>;
25
+ export declare function getDefaultEpubOpfPath(epubDir: string): string;
26
+ export declare function getEpubRootDir(epubOpfPath: string): string | undefined;
47
27
  export declare const assertPubManifestSchema: (obj: unknown) => obj is PublicationManifest;
48
28
  export declare function parseJsonc(rawJsonc: string): string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | any | {
49
29
  [property: string]: string | number | boolean | any | any | null;
@@ -71,5 +51,5 @@ export declare function parseJsonc(rawJsonc: string): string | number | boolean
71
51
  [property: string]: string | number | boolean | any | any | null;
72
52
  } | null;
73
53
  export declare function prettifySchemaError(rawJsonc: string, issues: BaseIssue<unknown>[]): string;
74
- export {};
54
+ export declare function writeFileIfChanged(filePath: string, content: Buffer): void;
75
55
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,SAAS,CAAC;AAKzB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,eAAO,MAAM,GAAG,QAAiC,CAAC;AAElD,eAAO,IAAI,kBAAkB,EAAE,CAAC,MAAM,IAAI,CAAC,EAAO,CAAC;AACnD,wBAAgB,eAAe,SAQ9B;AA2BD,qBAAa,WAAY,SAAQ,KAAK;IAG3B,MAAM,EAAE,MAAM,GAAG,SAAS;gBADjC,OAAO,EAAE,MAAM,GAAG,SAAS,EACpB,MAAM,EAAE,MAAM,GAAG,SAAS;CAIpC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,KAAK,UAI3C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,QAMvC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAMpC;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,EACE,YAA+C,GAChD,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,YAUlC;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAoB9D;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,CAiB/D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CAWrD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAS9D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,UAWpD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,sBAgBjD;AAsBD,eAAO,MAAM,uBAAuB,QAd5B,OAAO,KAAG,GAAG,uBAkBlB,CAAC;AAEJ,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;SAO1C;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,UAoD7B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAKnE"}
package/dist/util.js CHANGED
@@ -2,28 +2,18 @@ import { codeFrameColumns } from '@babel/code-frame';
2
2
  import { evaluate, parse, } from '@humanwhocodes/momoa';
3
3
  import AjvModule from 'ajv';
4
4
  import AjvFormatsModule from 'ajv-formats';
5
- import chalk from 'chalk';
6
- import debugConstructor from 'debug';
7
5
  import { XMLParser } from 'fast-xml-parser';
8
6
  import { removeSync } from 'fs-extra/esm';
9
7
  import StreamZip from 'node-stream-zip';
10
8
  import fs from 'node:fs';
11
9
  import readline from 'node:readline';
12
10
  import util from 'node:util';
13
- import oraConstructor from 'ora';
14
- import portfinder from 'portfinder';
15
11
  import tmp from 'tmp';
16
12
  import upath from 'upath';
13
+ import { gray, red, redBright } from 'yoctocolors';
14
+ import { Logger } from './logger.js';
17
15
  import { publicationSchema, publicationSchemas, } from './schema/pub-manifest.js';
18
- export const debug = debugConstructor('vs-cli');
19
16
  export const cwd = upath.normalize(process.cwd());
20
- const ora = oraConstructor({
21
- color: 'blue',
22
- spinner: 'circle',
23
- // Prevent stream output in docker so that not to spawn process
24
- // In other environment, check TTY context
25
- isEnabled: checkContainerEnvironment() ? false : undefined,
26
- });
27
17
  export let beforeExitHandlers = [];
28
18
  export function runExitHandlers() {
29
19
  while (beforeExitHandlers.length) {
@@ -58,120 +48,6 @@ if (process.platform === 'win32') {
58
48
  rl.close();
59
49
  });
60
50
  }
61
- /**
62
- * 0: silent
63
- * 1: info
64
- * 2: verbose
65
- * 3: debug
66
- */
67
- let logLevel = 0;
68
- export function setLogLevel(level) {
69
- if (!level) {
70
- return;
71
- }
72
- logLevel = {
73
- silent: 0,
74
- info: 1,
75
- verbose: 2,
76
- debug: 3,
77
- }[level];
78
- if (logLevel >= 3) {
79
- debugConstructor.enable('vs-cli');
80
- }
81
- }
82
- /**
83
- * @returns A function that stops logging
84
- */
85
- export function startLogging(text) {
86
- if (logLevel < 1) {
87
- return () => { };
88
- }
89
- // If text is not set, erase previous log with space character
90
- ora.start(text ?? ' ');
91
- return stopLogging;
92
- }
93
- /**
94
- * @returns A function that starts logging again
95
- */
96
- export function suspendLogging(text, symbol) {
97
- if (logLevel < 1) {
98
- return () => { };
99
- }
100
- const { isSpinning, text: previousLoggingText } = ora;
101
- stopLogging(text, symbol);
102
- return (text) => {
103
- isSpinning ? startLogging(text || previousLoggingText) : ora.info(text);
104
- };
105
- }
106
- // NOTE: This function is intended to be used in conjunction with startLogging function,
107
- // so it is not intentionally exported.
108
- function stopLogging(text, symbol) {
109
- if (logLevel < 1) {
110
- return;
111
- }
112
- if (!text) {
113
- ora.stop();
114
- return;
115
- }
116
- ora.stopAndPersist({ text, symbol });
117
- }
118
- export function log(...obj) {
119
- if (logLevel < 1) {
120
- return;
121
- }
122
- console.log(...obj);
123
- }
124
- export function logUpdate(...obj) {
125
- if (logLevel < 1) {
126
- return;
127
- }
128
- if (ora.isSpinning) {
129
- ora.text = obj.join(' ');
130
- }
131
- else {
132
- ora.info(obj.join(' '));
133
- }
134
- }
135
- export function logSuccess(...obj) {
136
- if (logLevel < 1) {
137
- return;
138
- }
139
- const { isSpinning, text } = ora;
140
- ora.succeed(obj.join(' '));
141
- if (isSpinning) {
142
- startLogging(text);
143
- }
144
- }
145
- export function logError(...obj) {
146
- if (logLevel < 1) {
147
- return;
148
- }
149
- const { isSpinning, text } = ora;
150
- ora.fail(obj.join(' '));
151
- if (isSpinning) {
152
- startLogging(text);
153
- }
154
- }
155
- export function logWarn(...obj) {
156
- if (logLevel < 1) {
157
- return;
158
- }
159
- const { isSpinning, text } = ora;
160
- ora.warn(obj.join(' '));
161
- if (isSpinning) {
162
- startLogging(text);
163
- }
164
- }
165
- export function logInfo(...obj) {
166
- if (logLevel < 1) {
167
- return;
168
- }
169
- const { isSpinning, text } = ora;
170
- ora.info(obj.join(' '));
171
- if (isSpinning) {
172
- startLogging(text);
173
- }
174
- }
175
51
  export class DetailError extends Error {
176
52
  detail;
177
53
  constructor(message, detail) {
@@ -179,20 +55,15 @@ export class DetailError extends Error {
179
55
  this.detail = detail;
180
56
  }
181
57
  }
58
+ export function getFormattedError(err) {
59
+ return err instanceof DetailError
60
+ ? `${err.message}\n${err.detail}`
61
+ : err.stack || `${err.message}`;
62
+ }
182
63
  export function gracefulError(err) {
183
- const message = err instanceof DetailError
184
- ? `${chalk.red.bold('Error:')} ${err.message}\n${err.detail}`
185
- : err.stack
186
- ? err.stack.replace(/^Error:/, chalk.red.bold('Error:'))
187
- : `${chalk.red.bold('Error:')} ${err.message}`;
188
- if (ora.isSpinning) {
189
- ora.fail(message);
190
- }
191
- else {
192
- console.error(message);
193
- }
194
- console.log(chalk.gray(`
195
- If you think this is a bug, please report at https://github.com/vivliostyle/vivliostyle-cli/issues`));
64
+ console.log(`${redBright('ERROR')} ${getFormattedError(err)}
65
+
66
+ ${gray('If you think this is a bug, please report at https://github.com/vivliostyle/vivliostyle-cli/issues')}`);
196
67
  process.exit(1);
197
68
  }
198
69
  export function readJSON(path) {
@@ -227,7 +98,7 @@ export async function inflateZip(filePath, dest) {
227
98
  zip.on('ready', async () => {
228
99
  await util.promisify(zip.extract)(null, dest);
229
100
  await util.promisify(zip.close)();
230
- debug(`Unzipped ${filePath} to ${dest}`);
101
+ Logger.debug(`Unzipped ${filePath} to ${dest}`);
231
102
  res();
232
103
  });
233
104
  }
@@ -242,26 +113,26 @@ export function useTmpDirectory() {
242
113
  if (err) {
243
114
  return rej(err);
244
115
  }
245
- debug(`Created the temporary directory: ${path}`);
116
+ Logger.debug(`Created the temporary directory: ${path}`);
246
117
  const callback = () => {
247
118
  // clear function doesn't work well?
248
119
  // clear();
249
120
  removeSync(path);
250
- debug(`Removed the temporary directory: ${path}`);
121
+ Logger.debug(`Removed the temporary directory: ${path}`);
251
122
  };
252
123
  beforeExitHandlers.push(callback);
253
124
  res([path, callback]);
254
125
  });
255
126
  });
256
127
  }
257
- export async function touchTmpFile(path) {
128
+ export function touchTmpFile(path) {
258
129
  fs.mkdirSync(upath.dirname(path), { recursive: true });
259
130
  // Create file if not exist
260
131
  fs.closeSync(fs.openSync(path, 'a'));
261
- debug(`Created the temporary file: ${path}`);
132
+ Logger.debug(`Created the temporary file: ${path}`);
262
133
  const callback = () => {
263
134
  removeSync(path);
264
- debug(`Removed the temporary file: ${path}`);
135
+ Logger.debug(`Removed the temporary file: ${path}`);
265
136
  };
266
137
  beforeExitHandlers.push(callback);
267
138
  return callback;
@@ -273,27 +144,46 @@ export function pathContains(parentPath, childPath) {
273
144
  const rel = upath.relative(parentPath, childPath);
274
145
  return rel !== '' && !rel.startsWith('..');
275
146
  }
276
- export function isUrlString(str) {
147
+ export function isValidUri(str) {
277
148
  return /^(https?|file|data):/i.test(str);
278
149
  }
279
- export function findAvailablePort() {
280
- portfinder.basePort = 13000;
281
- return portfinder.getPortPromise();
282
- }
283
- export function checkContainerEnvironment() {
150
+ export function isInContainer() {
284
151
  return fs.existsSync('/opt/vivliostyle-cli/.vs-cli-version');
285
152
  }
286
- export async function openEpubToTmpDirectory(filePath) {
287
- const [tmpDir, deleteEpub] = await useTmpDirectory();
288
- await inflateZip(filePath, tmpDir);
289
- const containerXmlPath = upath.join(tmpDir, 'META-INF/container.xml');
153
+ export async function openEpub(epubPath, tmpDir) {
154
+ await inflateZip(epubPath, tmpDir);
155
+ Logger.debug(`Created the temporary EPUB directory: ${tmpDir}`);
156
+ const deleteEpub = () => {
157
+ fs.rmSync(tmpDir, { recursive: true });
158
+ Logger.debug(`Removed the temporary EPUB directory: ${tmpDir}`);
159
+ };
160
+ beforeExitHandlers.push(deleteEpub);
161
+ return deleteEpub;
162
+ }
163
+ export function getDefaultEpubOpfPath(epubDir) {
164
+ const containerXmlPath = upath.join(epubDir, 'META-INF/container.xml');
290
165
  const xmlParser = new XMLParser({
291
166
  ignoreAttributes: false,
292
167
  });
293
168
  const { container } = xmlParser.parse(fs.readFileSync(containerXmlPath, 'utf8'));
294
169
  const rootfile = [container.rootfiles.rootfile].flat()[0]; // Only supports a default rendition
295
- const epubOpfPath = upath.join(tmpDir, rootfile['@_full-path']);
296
- return { dest: tmpDir, epubOpfPath, deleteEpub };
170
+ const epubOpfPath = upath.join(epubDir, rootfile['@_full-path']);
171
+ return epubOpfPath;
172
+ }
173
+ export function getEpubRootDir(epubOpfPath) {
174
+ function traverse(dir) {
175
+ const files = fs.readdirSync(dir);
176
+ if (files.includes('META-INF') &&
177
+ pathEquals(epubOpfPath, getDefaultEpubOpfPath(dir))) {
178
+ return dir;
179
+ }
180
+ const next = upath.dirname(dir);
181
+ if (pathEquals(dir, next)) {
182
+ return;
183
+ }
184
+ return traverse(next);
185
+ }
186
+ return traverse(upath.dirname(epubOpfPath));
297
187
  }
298
188
  // FIXME: https://github.com/ajv-validator/ajv/issues/2047
299
189
  const Ajv = AjvModule.default;
@@ -359,7 +249,7 @@ export function prettifySchemaError(rawJsonc, issues) {
359
249
  break;
360
250
  }
361
251
  }
362
- let message = `${chalk.red(issuesTraversed.at(-1).message)}`;
252
+ let message = `${red(issuesTraversed.at(-1).message)}`;
363
253
  if (jsonValue) {
364
254
  message += `\n${codeFrameColumns(rawJsonc, jsonValue.loc, {
365
255
  highlightCode: true,
@@ -367,4 +257,10 @@ export function prettifySchemaError(rawJsonc, issues) {
367
257
  }
368
258
  return message;
369
259
  }
260
+ export function writeFileIfChanged(filePath, content) {
261
+ if (!fs.existsSync(filePath) || !fs.readFileSync(filePath).equals(content)) {
262
+ fs.mkdirSync(upath.dirname(filePath), { recursive: true });
263
+ fs.writeFileSync(filePath, content);
264
+ }
265
+ }
370
266
  //# sourceMappingURL=util.js.map