@json-to-office/core-docx 0.8.0 → 0.12.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/components/heading.d.ts.map +1 -1
- package/dist/components/highcharts.d.ts.map +1 -1
- package/dist/components/paragraph.d.ts.map +1 -1
- package/dist/core/content.d.ts +7 -0
- package/dist/core/content.d.ts.map +1 -1
- package/dist/core/fontResolution.d.ts +15 -0
- package/dist/core/fontResolution.d.ts.map +1 -0
- package/dist/core/generator.d.ts +11 -3
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/index.js +202 -48
- package/dist/index.js.map +1 -1
- package/dist/plugin/createDocumentGenerator.d.ts +3 -1
- package/dist/plugin/createDocumentGenerator.d.ts.map +1 -1
- package/dist/plugin/example/index.js +165 -32
- package/dist/plugin/example/index.js.map +1 -1
- package/dist/templates/themes/index.d.ts +84 -0
- package/dist/templates/themes/index.d.ts.map +1 -1
- package/dist/themes/defaults.d.ts +20 -0
- package/dist/themes/defaults.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../src/components/heading.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAIxC;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAChB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../src/components/heading.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAIxC;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAChB,SAAS,EAAE,CAyCb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highcharts.d.ts","sourceRoot":"","sources":["../../src/components/highcharts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,aAAa,EAEd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"highcharts.d.ts","sourceRoot":"","sources":["../../src/components/highcharts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,aAAa,EAEd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AA4ED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CA+BhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paragraph.d.ts","sourceRoot":"","sources":["../../src/components/paragraph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAwB,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA6DxC;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAChB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"paragraph.d.ts","sourceRoot":"","sources":["../../src/components/paragraph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAwB,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA6DxC;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAChB,SAAS,EAAE,CAmIb"}
|
package/dist/core/content.d.ts
CHANGED
|
@@ -22,6 +22,12 @@ export interface TextOptions {
|
|
|
22
22
|
fontSize?: number;
|
|
23
23
|
fontColor?: string;
|
|
24
24
|
bold?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Per-run weight (100–900). Renderer picks the closest embedded variant
|
|
27
|
+
* via the font-alias registry and emits the run under a synthetic family
|
|
28
|
+
* (e.g. "Inter Light" for 300). Overrides `bold` when set.
|
|
29
|
+
*/
|
|
30
|
+
fontWeight?: number;
|
|
25
31
|
italic?: boolean;
|
|
26
32
|
underline?: boolean;
|
|
27
33
|
prependChildren?: any[];
|
|
@@ -148,6 +154,7 @@ type TableFontConfig = {
|
|
|
148
154
|
family?: string;
|
|
149
155
|
size?: number;
|
|
150
156
|
bold?: boolean;
|
|
157
|
+
fontWeight?: number;
|
|
151
158
|
italic?: boolean;
|
|
152
159
|
underline?: boolean;
|
|
153
160
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/core/content.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EAET,KAAK,EAQL,MAAM,EACN,MAAM,EAQP,MAAM,MAAM,CAAC;AASd,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/core/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared font-resolution helper used by BOTH entry paths into renderDocument:
|
|
3
|
+
*
|
|
4
|
+
* - generator.ts → generateDocumentWithCustomThemes (non-plugin)
|
|
5
|
+
* - plugin/createDocumentGenerator.ts → generate (plugin-aware)
|
|
6
|
+
*
|
|
7
|
+
* Keeping it in one place ensures the two paths behave identically around
|
|
8
|
+
* validation, SAFE_FONTS awareness, Google Fonts materialization, and the
|
|
9
|
+
* `onResolved` side-channel consumed by the LibreOffice preview font stager.
|
|
10
|
+
*/
|
|
11
|
+
import type { FontRuntimeOpts, ResolvedFont, GenerationWarning } from '@json-to-office/shared';
|
|
12
|
+
import type { ThemeConfig } from '../styles';
|
|
13
|
+
import type { ReportComponentDefinition } from '../types';
|
|
14
|
+
export declare function resolveDocumentFonts(document: ReportComponentDefinition, theme: ThemeConfig, fonts?: FontRuntimeOpts, warnings?: GenerationWarning[]): Promise<ResolvedFont[]>;
|
|
15
|
+
//# sourceMappingURL=fontResolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fontResolution.d.ts","sourceRoot":"","sources":["../../src/core/fontResolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,yBAAyB,EACnC,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAmEzB"}
|
package/dist/core/generator.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import { Document } from 'docx';
|
|
7
7
|
import { ComponentDefinition, ReportProps, ReportComponentDefinition } from '../types';
|
|
8
8
|
import { ThemeConfig } from '../styles';
|
|
9
|
-
import type { ServicesConfig } from '@json-to-office/shared';
|
|
9
|
+
import type { ServicesConfig, FontRuntimeOpts } from '@json-to-office/shared';
|
|
10
10
|
import { DocumentValidationResult } from '@json-to-office/shared-docx';
|
|
11
|
+
import type { GenerationWarning } from '@json-to-office/shared';
|
|
11
12
|
export interface JsonGenerationOptions {
|
|
12
13
|
outputPath?: string;
|
|
13
14
|
validation?: {
|
|
@@ -18,6 +19,13 @@ export interface JsonGenerationOptions {
|
|
|
18
19
|
[key: string]: ThemeConfig;
|
|
19
20
|
};
|
|
20
21
|
services?: ServicesConfig;
|
|
22
|
+
fonts?: FontRuntimeOpts;
|
|
23
|
+
/**
|
|
24
|
+
* Optional collector for structured warnings (font resolution, etc.).
|
|
25
|
+
* When provided, mirrors the plugin path's warning semantics; when absent,
|
|
26
|
+
* warnings fall back to `console.warn` as before.
|
|
27
|
+
*/
|
|
28
|
+
warnings?: GenerationWarning[];
|
|
21
29
|
}
|
|
22
30
|
/**
|
|
23
31
|
* Type guard to check if input is a report component definition
|
|
@@ -27,12 +35,12 @@ export declare function isReportComponentDefinition(definition: unknown): defini
|
|
|
27
35
|
* Generate a Word document from a report component definition
|
|
28
36
|
* This is the main entry point for document generation
|
|
29
37
|
*/
|
|
30
|
-
export declare function generateDocument(document: ReportComponentDefinition): Promise<Document>;
|
|
38
|
+
export declare function generateDocument(document: ReportComponentDefinition, options?: JsonGenerationOptions): Promise<Document>;
|
|
31
39
|
/**
|
|
32
40
|
* Generate document from report props and components
|
|
33
41
|
* Convenience function that constructs the report component
|
|
34
42
|
*/
|
|
35
|
-
export declare function generateFromConfig(props: ReportProps, components: ComponentDefinition[]): Promise<Document>;
|
|
43
|
+
export declare function generateFromConfig(props: ReportProps, components: ComponentDefinition[], options?: JsonGenerationOptions): Promise<Document>;
|
|
36
44
|
/**
|
|
37
45
|
* Generate a Word document from JSON report definition
|
|
38
46
|
* Handles parsing, validation, and conversion to internal components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAExC,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EAE1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAwB,WAAW,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4107,9 +4107,22 @@ var globalBookmarkRegistry = new BookmarkRegistry();
|
|
|
4107
4107
|
|
|
4108
4108
|
// src/core/content.ts
|
|
4109
4109
|
init_styleHelpers();
|
|
4110
|
+
import { synthesizeFamilyName } from "@json-to-office/shared";
|
|
4110
4111
|
init_colorUtils();
|
|
4111
4112
|
init_styleHelpers();
|
|
4112
4113
|
init_widthUtils();
|
|
4114
|
+
function applyFontWeightAlias(opts) {
|
|
4115
|
+
if (!opts.fontFamily) {
|
|
4116
|
+
return { font: void 0, bold: opts.bold, italics: opts.italic };
|
|
4117
|
+
}
|
|
4118
|
+
const weight = opts.fontWeight ?? (opts.bold === true ? 700 : void 0);
|
|
4119
|
+
const synth = synthesizeFamilyName(
|
|
4120
|
+
opts.fontFamily,
|
|
4121
|
+
weight,
|
|
4122
|
+
opts.italic === true
|
|
4123
|
+
);
|
|
4124
|
+
return { font: synth.family, bold: synth.bold, italics: synth.italic };
|
|
4125
|
+
}
|
|
4113
4126
|
function createText(content, theme, themeName, options = {}) {
|
|
4114
4127
|
const normalizedContent = normalizeUnicodeText(content);
|
|
4115
4128
|
const style = options.style || "Normal";
|
|
@@ -4129,15 +4142,27 @@ function createText(content, theme, themeName, options = {}) {
|
|
|
4129
4142
|
if (options.columnBreak) {
|
|
4130
4143
|
children.push(new ColumnBreak());
|
|
4131
4144
|
}
|
|
4145
|
+
const hasWeightRequest = options.fontWeight != null || options.bold === true;
|
|
4146
|
+
const effectiveFamily = options.fontFamily ?? (hasWeightRequest ? resolveFontFamily(theme, "body") : void 0);
|
|
4147
|
+
const weighted = applyFontWeightAlias({
|
|
4148
|
+
fontFamily: effectiveFamily,
|
|
4149
|
+
bold: options.bold,
|
|
4150
|
+
italic: options.italic,
|
|
4151
|
+
fontWeight: options.fontWeight
|
|
4152
|
+
});
|
|
4132
4153
|
const baseTextStyle = {
|
|
4133
|
-
|
|
4154
|
+
// Only emit `font` when it came from the caller or from an alias —
|
|
4155
|
+
// emitting the theme body family on every run would be a behavior change.
|
|
4156
|
+
...(options.fontFamily || weighted.font && weighted.font !== effectiveFamily) && {
|
|
4157
|
+
font: weighted.font
|
|
4158
|
+
},
|
|
4134
4159
|
...options.fontSize && { size: options.fontSize * 2 },
|
|
4135
4160
|
// Convert points to half-points
|
|
4136
4161
|
...options.fontColor && {
|
|
4137
4162
|
color: resolveColor(options.fontColor, theme)
|
|
4138
4163
|
},
|
|
4139
|
-
...
|
|
4140
|
-
...
|
|
4164
|
+
...weighted.bold !== void 0 && { bold: weighted.bold },
|
|
4165
|
+
...weighted.italics !== void 0 && { italics: weighted.italics },
|
|
4141
4166
|
...options.underline !== void 0 && {
|
|
4142
4167
|
underline: options.underline ? { type: "single" } : void 0
|
|
4143
4168
|
}
|
|
@@ -4257,13 +4282,25 @@ function createHeading(text, level, theme, _themeName, options = {}) {
|
|
|
4257
4282
|
children.push(new ColumnBreak());
|
|
4258
4283
|
}
|
|
4259
4284
|
const hasDecorators = /(\*\*\*|___|(\*\*|__)|(\*|_))/.test(normalizedText);
|
|
4285
|
+
const headingHasWeightRequest = options.fontWeight != null || options.bold === true;
|
|
4286
|
+
const headingEffectiveFamily = options.fontFamily ?? (headingHasWeightRequest ? resolveFontFamily(theme, "heading") : void 0);
|
|
4287
|
+
const headingWeighted = applyFontWeightAlias({
|
|
4288
|
+
fontFamily: headingEffectiveFamily,
|
|
4289
|
+
bold: options.bold,
|
|
4290
|
+
italic: options.italic,
|
|
4291
|
+
fontWeight: options.fontWeight
|
|
4292
|
+
});
|
|
4260
4293
|
const baseTextStyle = {
|
|
4261
|
-
...options.fontFamily
|
|
4294
|
+
...(options.fontFamily || headingWeighted.font && headingWeighted.font !== headingEffectiveFamily) && {
|
|
4295
|
+
font: headingWeighted.font
|
|
4296
|
+
},
|
|
4262
4297
|
...options.fontSize && { size: options.fontSize * 2 },
|
|
4263
4298
|
// points to half-points
|
|
4264
4299
|
...options.fontColor && { color: resolveColor(options.fontColor, theme) },
|
|
4265
|
-
...
|
|
4266
|
-
...
|
|
4300
|
+
...headingWeighted.bold !== void 0 && { bold: headingWeighted.bold },
|
|
4301
|
+
...headingWeighted.italics !== void 0 && {
|
|
4302
|
+
italics: headingWeighted.italics
|
|
4303
|
+
},
|
|
4267
4304
|
...options.underline !== void 0 && {
|
|
4268
4305
|
underline: options.underline ? { type: "single" } : void 0
|
|
4269
4306
|
}
|
|
@@ -4775,12 +4812,18 @@ async function createTable(columns, tableConfig, theme, themeName, _options = {}
|
|
|
4775
4812
|
if (!cell) {
|
|
4776
4813
|
return cellChildren;
|
|
4777
4814
|
}
|
|
4815
|
+
const cellWeighted = applyFontWeightAlias({
|
|
4816
|
+
fontFamily: cellDefaults.font?.family || baseCellStyle.font,
|
|
4817
|
+
bold: cellDefaults.font?.bold ?? false,
|
|
4818
|
+
italic: cellDefaults.font?.italic ?? false,
|
|
4819
|
+
fontWeight: cellDefaults.font?.fontWeight
|
|
4820
|
+
});
|
|
4778
4821
|
const mergedStyle = {
|
|
4779
|
-
font:
|
|
4822
|
+
font: cellWeighted.font,
|
|
4780
4823
|
size: cellDefaults.font?.size ? cellDefaults.font.size * 2 : baseCellStyle.size,
|
|
4781
4824
|
// Convert to half-points
|
|
4782
|
-
bold:
|
|
4783
|
-
italics:
|
|
4825
|
+
bold: cellWeighted.bold ?? false,
|
|
4826
|
+
italics: cellWeighted.italics ?? false,
|
|
4784
4827
|
underline: cellDefaults.font?.underline ? { type: "single" } : void 0,
|
|
4785
4828
|
color: cellDefaults.color || baseCellStyle.color
|
|
4786
4829
|
};
|
|
@@ -4788,15 +4831,21 @@ async function createTable(columns, tableConfig, theme, themeName, _options = {}
|
|
|
4788
4831
|
if (isParagraphComponent(cell)) {
|
|
4789
4832
|
const textComp = cell;
|
|
4790
4833
|
const paragraphFont = textComp.props.font;
|
|
4834
|
+
const paraWeighted = applyFontWeightAlias({
|
|
4835
|
+
fontFamily: paragraphFont?.family ?? mergedStyle.font,
|
|
4836
|
+
bold: paragraphFont?.bold,
|
|
4837
|
+
italic: paragraphFont?.italic,
|
|
4838
|
+
fontWeight: paragraphFont?.fontWeight
|
|
4839
|
+
});
|
|
4791
4840
|
const paragraphStyle = {
|
|
4792
4841
|
...mergedStyle,
|
|
4793
|
-
...
|
|
4842
|
+
...paraWeighted.font && { font: paraWeighted.font },
|
|
4794
4843
|
...paragraphFont?.size && { size: paragraphFont.size * 2 },
|
|
4795
|
-
...
|
|
4796
|
-
bold:
|
|
4844
|
+
...paraWeighted.bold !== void 0 && {
|
|
4845
|
+
bold: paraWeighted.bold
|
|
4797
4846
|
},
|
|
4798
|
-
...
|
|
4799
|
-
italics:
|
|
4847
|
+
...paraWeighted.italics !== void 0 && {
|
|
4848
|
+
italics: paraWeighted.italics
|
|
4800
4849
|
},
|
|
4801
4850
|
...paragraphFont?.underline !== void 0 && {
|
|
4802
4851
|
underline: paragraphFont.underline ? { type: "single" } : void 0
|
|
@@ -5244,6 +5293,7 @@ function renderHeadingComponent(component, theme, themeName) {
|
|
|
5244
5293
|
fontSize: config.font?.size,
|
|
5245
5294
|
fontColor: config.font?.color,
|
|
5246
5295
|
bold: config.font?.bold,
|
|
5296
|
+
fontWeight: config.font?.fontWeight,
|
|
5247
5297
|
italic: config.font?.italic,
|
|
5248
5298
|
underline: config.font?.underline,
|
|
5249
5299
|
// Pagination control
|
|
@@ -5359,6 +5409,7 @@ function renderParagraphComponent(component, theme, themeName) {
|
|
|
5359
5409
|
fontSize: resolvedConfig.font?.size,
|
|
5360
5410
|
fontColor: resolvedConfig.font?.color,
|
|
5361
5411
|
bold: resolvedConfig.font?.bold,
|
|
5412
|
+
fontWeight: resolvedConfig.font?.fontWeight,
|
|
5362
5413
|
italic: resolvedConfig.font?.italic,
|
|
5363
5414
|
underline: resolvedConfig.font?.underline,
|
|
5364
5415
|
// Pass outline level for TOC support
|
|
@@ -6164,9 +6215,10 @@ async function generateChart(config, servicesConfig) {
|
|
|
6164
6215
|
b64: true,
|
|
6165
6216
|
scale: config.scale
|
|
6166
6217
|
};
|
|
6218
|
+
const resolvedHeaders = typeof servicesConfig?.headers === "function" ? await servicesConfig.headers(requestBody) : servicesConfig?.headers;
|
|
6167
6219
|
const headers = {
|
|
6168
6220
|
"Content-Type": "application/json",
|
|
6169
|
-
...
|
|
6221
|
+
...resolvedHeaders
|
|
6170
6222
|
};
|
|
6171
6223
|
const response = await fetch(`${serverUrl}/export`, {
|
|
6172
6224
|
method: "POST",
|
|
@@ -6630,6 +6682,69 @@ async function renderComponent(component, theme, themeName, context) {
|
|
|
6630
6682
|
);
|
|
6631
6683
|
}
|
|
6632
6684
|
|
|
6685
|
+
// src/core/fontResolution.ts
|
|
6686
|
+
import {
|
|
6687
|
+
collectFontNamesFromDocx,
|
|
6688
|
+
validateFontReferences,
|
|
6689
|
+
FontRegistry
|
|
6690
|
+
} from "@json-to-office/shared";
|
|
6691
|
+
import {
|
|
6692
|
+
loadFileFontSource,
|
|
6693
|
+
FontDiskCache,
|
|
6694
|
+
fetchVariableFontSource
|
|
6695
|
+
} from "@json-to-office/shared/fonts/node";
|
|
6696
|
+
async function resolveDocumentFonts(document, theme, fonts, warnings) {
|
|
6697
|
+
const emit = (code, message) => {
|
|
6698
|
+
if (warnings) {
|
|
6699
|
+
warnings.push({
|
|
6700
|
+
component: "fontRegistry",
|
|
6701
|
+
message,
|
|
6702
|
+
severity: "warning",
|
|
6703
|
+
context: { code }
|
|
6704
|
+
});
|
|
6705
|
+
} else {
|
|
6706
|
+
console.warn(`[json-to-docx] ${code}: ${message}`);
|
|
6707
|
+
}
|
|
6708
|
+
};
|
|
6709
|
+
const names = /* @__PURE__ */ new Set();
|
|
6710
|
+
for (const n of collectFontNamesFromDocx(document)) names.add(n);
|
|
6711
|
+
for (const n of collectFontNamesFromDocx(theme)) names.add(n);
|
|
6712
|
+
if (names.size === 0) return [];
|
|
6713
|
+
const validation = validateFontReferences({
|
|
6714
|
+
referencedNames: names,
|
|
6715
|
+
registeredEntries: fonts?.extraEntries
|
|
6716
|
+
});
|
|
6717
|
+
if (validation.warnings.length > 0) {
|
|
6718
|
+
if (fonts?.strict) {
|
|
6719
|
+
throw new Error(
|
|
6720
|
+
`Unresolved font references (strict mode):
|
|
6721
|
+
` + validation.warnings.map((w) => ` - ${w.message}`).join("\n")
|
|
6722
|
+
);
|
|
6723
|
+
}
|
|
6724
|
+
for (const w of validation.warnings) {
|
|
6725
|
+
emit(w.code, w.message);
|
|
6726
|
+
}
|
|
6727
|
+
}
|
|
6728
|
+
if (!fonts?.onResolved) return [];
|
|
6729
|
+
const registry = new FontRegistry({
|
|
6730
|
+
opts: fonts,
|
|
6731
|
+
fileLoader: loadFileFontSource,
|
|
6732
|
+
variableLoader: fetchVariableFontSource,
|
|
6733
|
+
diskCache: fonts?.googleFonts?.cacheDir ? new FontDiskCache(fonts.googleFonts.cacheDir) : void 0
|
|
6734
|
+
});
|
|
6735
|
+
const resolved = await registry.resolveMany(names);
|
|
6736
|
+
for (const r of resolved) {
|
|
6737
|
+
for (const msg of r.warnings) {
|
|
6738
|
+
emit("FONT_UNRESOLVED", msg);
|
|
6739
|
+
}
|
|
6740
|
+
}
|
|
6741
|
+
fonts.onResolved(resolved);
|
|
6742
|
+
return resolved;
|
|
6743
|
+
}
|
|
6744
|
+
|
|
6745
|
+
// src/core/generator.ts
|
|
6746
|
+
import { applyExportMode, scopedThemeName } from "@json-to-office/shared";
|
|
6747
|
+
|
|
6633
6748
|
// src/json/parser.ts
|
|
6634
6749
|
import {
|
|
6635
6750
|
JsonDocumentParser,
|
|
@@ -6789,33 +6904,32 @@ function isReportComponentDefinition(definition) {
|
|
|
6789
6904
|
const def = definition;
|
|
6790
6905
|
return def.name === "docx" && "props" in def;
|
|
6791
6906
|
}
|
|
6792
|
-
async function generateDocument(document) {
|
|
6907
|
+
async function generateDocument(document, options) {
|
|
6793
6908
|
if (!document || document.name !== "docx") {
|
|
6794
6909
|
throw new Error("Top-level component must be a docx component");
|
|
6795
6910
|
}
|
|
6796
6911
|
if ("$schema" in document) {
|
|
6797
|
-
return await generateDocumentFromJson(document);
|
|
6912
|
+
return await generateDocumentFromJson(document, options);
|
|
6798
6913
|
}
|
|
6799
|
-
|
|
6800
|
-
|
|
6801
|
-
|
|
6802
|
-
|
|
6803
|
-
|
|
6804
|
-
|
|
6805
|
-
|
|
6806
|
-
});
|
|
6807
|
-
return renderedDocument;
|
|
6914
|
+
return await generateDocumentWithCustomThemes(
|
|
6915
|
+
document,
|
|
6916
|
+
options?.customThemes,
|
|
6917
|
+
options?.services,
|
|
6918
|
+
options?.fonts,
|
|
6919
|
+
options?.warnings
|
|
6920
|
+
);
|
|
6808
6921
|
}
|
|
6809
|
-
async function generateFromConfig(props, components) {
|
|
6922
|
+
async function generateFromConfig(props, components, options) {
|
|
6810
6923
|
const reportComponent = {
|
|
6811
6924
|
name: "docx",
|
|
6812
6925
|
props,
|
|
6813
6926
|
children: components
|
|
6814
6927
|
};
|
|
6815
|
-
return await generateDocument(reportComponent);
|
|
6928
|
+
return await generateDocument(reportComponent, options);
|
|
6816
6929
|
}
|
|
6817
|
-
async function generateDocumentWithCustomThemes(
|
|
6818
|
-
|
|
6930
|
+
async function generateDocumentWithCustomThemes(documentIn, customThemes, services, fonts, warnings) {
|
|
6931
|
+
let document = documentIn;
|
|
6932
|
+
let themeName = document.props.theme || "minimal";
|
|
6819
6933
|
let theme;
|
|
6820
6934
|
if (customThemes) {
|
|
6821
6935
|
if (customThemes[themeName]) {
|
|
@@ -6834,6 +6948,23 @@ async function generateDocumentWithCustomThemes(document, customThemes, services
|
|
|
6834
6948
|
} else {
|
|
6835
6949
|
theme = getThemeWithFallback(themeName);
|
|
6836
6950
|
}
|
|
6951
|
+
const mode = applyExportMode({ doc: document, theme, fonts });
|
|
6952
|
+
document = mode.doc;
|
|
6953
|
+
theme = mode.theme;
|
|
6954
|
+
themeName = scopedThemeName(themeName, fonts?.mode);
|
|
6955
|
+
for (const w of mode.warnings) {
|
|
6956
|
+
if (warnings) {
|
|
6957
|
+
warnings.push({
|
|
6958
|
+
component: "fontRegistry",
|
|
6959
|
+
message: w.message,
|
|
6960
|
+
severity: "warning",
|
|
6961
|
+
context: { code: w.code }
|
|
6962
|
+
});
|
|
6963
|
+
} else {
|
|
6964
|
+
console.warn(`[json-to-docx] [${w.code}] ${w.message}`);
|
|
6965
|
+
}
|
|
6966
|
+
}
|
|
6967
|
+
await resolveDocumentFonts(document, theme, fonts, warnings);
|
|
6837
6968
|
const structure = await processDocument(document, theme, themeName);
|
|
6838
6969
|
const layout = applyLayout(structure.sections, theme, themeName);
|
|
6839
6970
|
const renderedDocument = await renderDocument(structure, layout, {
|
|
@@ -6857,7 +6988,9 @@ async function generateDocumentFromJson(jsonConfig, options) {
|
|
|
6857
6988
|
return await generateDocumentWithCustomThemes(
|
|
6858
6989
|
reportComponent,
|
|
6859
6990
|
options?.customThemes,
|
|
6860
|
-
options?.services
|
|
6991
|
+
options?.services,
|
|
6992
|
+
options?.fonts,
|
|
6993
|
+
options?.warnings
|
|
6861
6994
|
);
|
|
6862
6995
|
}
|
|
6863
6996
|
function validateJsonSchema(jsonConfig) {
|
|
@@ -7120,6 +7253,7 @@ async function runExample(example, options = {}) {
|
|
|
7120
7253
|
// src/plugin/createDocumentGenerator.ts
|
|
7121
7254
|
init_styles();
|
|
7122
7255
|
import { Packer as Packer2 } from "docx";
|
|
7256
|
+
import { applyExportMode as applyExportMode2, scopedThemeName as scopedThemeName2 } from "@json-to-office/shared";
|
|
7123
7257
|
|
|
7124
7258
|
// src/plugin/version-resolver.ts
|
|
7125
7259
|
import { resolveComponentVersion } from "@json-to-office/shared/plugin";
|
|
@@ -7488,7 +7622,8 @@ function createBuilderImpl(state) {
|
|
|
7488
7622
|
customThemes: state.customThemes,
|
|
7489
7623
|
debug: state.debug,
|
|
7490
7624
|
enableCache: state.enableCache,
|
|
7491
|
-
services: state.services
|
|
7625
|
+
services: state.services,
|
|
7626
|
+
fonts: state.fonts
|
|
7492
7627
|
};
|
|
7493
7628
|
return createBuilderImpl(
|
|
7494
7629
|
newState
|
|
@@ -7501,25 +7636,37 @@ function createBuilderImpl(state) {
|
|
|
7501
7636
|
internalDocument,
|
|
7502
7637
|
state.components
|
|
7503
7638
|
);
|
|
7504
|
-
const
|
|
7505
|
-
const docTheme = resolveDocumentTheme(
|
|
7639
|
+
const baseThemeName = internalDocument.props.theme || "minimal";
|
|
7640
|
+
const docTheme = resolveDocumentTheme(baseThemeName);
|
|
7506
7641
|
const warnings = [];
|
|
7642
|
+
const mode = applyExportMode2({
|
|
7643
|
+
doc: internalDocument,
|
|
7644
|
+
theme: docTheme,
|
|
7645
|
+
fonts: state.fonts
|
|
7646
|
+
});
|
|
7647
|
+
const modedTheme = mode.theme;
|
|
7648
|
+
const themeName = scopedThemeName2(baseThemeName, state.fonts?.mode);
|
|
7649
|
+
for (const w of mode.warnings) {
|
|
7650
|
+
warnings.push({
|
|
7651
|
+
component: "fontRegistry",
|
|
7652
|
+
message: w.message,
|
|
7653
|
+
severity: "warning",
|
|
7654
|
+
context: { code: w.code }
|
|
7655
|
+
});
|
|
7656
|
+
}
|
|
7507
7657
|
const processedComponents = await processDocumentComponents(
|
|
7508
|
-
|
|
7658
|
+
mode.doc.children || [],
|
|
7509
7659
|
warnings,
|
|
7510
|
-
|
|
7660
|
+
modedTheme
|
|
7511
7661
|
);
|
|
7512
7662
|
const processedDocument = {
|
|
7513
|
-
...
|
|
7663
|
+
...mode.doc,
|
|
7514
7664
|
children: processedComponents
|
|
7515
7665
|
};
|
|
7516
|
-
const [
|
|
7517
|
-
|
|
7518
|
-
|
|
7519
|
-
|
|
7520
|
-
themeName
|
|
7521
|
-
);
|
|
7522
|
-
const layout = applyLayout(structure.sections, docTheme, themeName);
|
|
7666
|
+
const [modedDoc] = normalizeDocument(processedDocument);
|
|
7667
|
+
await resolveDocumentFonts(modedDoc, modedTheme, state.fonts, warnings);
|
|
7668
|
+
const structure = await processDocument(modedDoc, modedTheme, themeName);
|
|
7669
|
+
const layout = applyLayout(structure.sections, modedTheme, themeName);
|
|
7523
7670
|
const generatedDocument = await renderDocument(structure, layout, {
|
|
7524
7671
|
services: state.services
|
|
7525
7672
|
});
|
|
@@ -7600,13 +7747,19 @@ function createBuilderImpl(state) {
|
|
|
7600
7747
|
const themeName = internalDocument.props.theme || "minimal";
|
|
7601
7748
|
const docTheme = resolveDocumentTheme(themeName);
|
|
7602
7749
|
const warnings = [];
|
|
7750
|
+
const mode = applyExportMode2({
|
|
7751
|
+
doc: internalDocument,
|
|
7752
|
+
theme: docTheme,
|
|
7753
|
+
fonts: state.fonts
|
|
7754
|
+
});
|
|
7755
|
+
const modedTheme = mode.theme;
|
|
7603
7756
|
const processedComponents = await processDocumentComponents(
|
|
7604
|
-
|
|
7757
|
+
mode.doc.children || [],
|
|
7605
7758
|
warnings,
|
|
7606
|
-
|
|
7759
|
+
modedTheme
|
|
7607
7760
|
);
|
|
7608
7761
|
const processedDocument = {
|
|
7609
|
-
...
|
|
7762
|
+
...mode.doc,
|
|
7610
7763
|
children: processedComponents
|
|
7611
7764
|
};
|
|
7612
7765
|
const [finalReportComponent] = normalizeDocument(processedDocument);
|
|
@@ -7638,7 +7791,8 @@ function createDocumentGenerator(options) {
|
|
|
7638
7791
|
customThemes: options.customThemes,
|
|
7639
7792
|
debug: options.debug ?? false,
|
|
7640
7793
|
enableCache: options.enableCache ?? false,
|
|
7641
|
-
services: options.services
|
|
7794
|
+
services: options.services,
|
|
7795
|
+
fonts: options.fonts
|
|
7642
7796
|
};
|
|
7643
7797
|
return createBuilderImpl(initialState);
|
|
7644
7798
|
}
|