@usejunior/docx-core 0.10.0 → 0.11.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.
- package/LICENSE +202 -21
- package/NOTICE +2 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/atomizer.d.ts +13 -7
- package/dist/atomizer.d.ts.map +1 -1
- package/dist/atomizer.js +59 -24
- package/dist/atomizer.js.map +1 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.js +120 -27
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +9 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +52 -4
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts +12 -53
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
- package/dist/baselines/atomizer/pipeline.js +126 -231
- package/dist/baselines/atomizer/pipeline.js.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +153 -23
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
- package/dist/cli/compare-two.d.ts.map +1 -1
- package/dist/cli/compare-two.js +3 -1
- package/dist/cli/compare-two.js.map +1 -1
- package/dist/cli/conformance-adapter.d.ts +3 -0
- package/dist/cli/conformance-adapter.d.ts.map +1 -0
- package/dist/cli/conformance-adapter.js +93 -0
- package/dist/cli/conformance-adapter.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compare-types.d.ts +46 -0
- package/dist/compare-types.d.ts.map +1 -1
- package/dist/generation/compile.d.ts +22 -0
- package/dist/generation/compile.d.ts.map +1 -0
- package/dist/generation/compile.js +58 -0
- package/dist/generation/compile.js.map +1 -0
- package/dist/generation/context.d.ts +42 -0
- package/dist/generation/context.d.ts.map +1 -0
- package/dist/generation/context.js +65 -0
- package/dist/generation/context.js.map +1 -0
- package/dist/generation/emit/comments-part.d.ts +36 -0
- package/dist/generation/emit/comments-part.d.ts.map +1 -0
- package/dist/generation/emit/comments-part.js +116 -0
- package/dist/generation/emit/comments-part.js.map +1 -0
- package/dist/generation/emit/document-part.d.ts +24 -0
- package/dist/generation/emit/document-part.d.ts.map +1 -0
- package/dist/generation/emit/document-part.js +60 -0
- package/dist/generation/emit/document-part.js.map +1 -0
- package/dist/generation/emit/emit-context.d.ts +28 -0
- package/dist/generation/emit/emit-context.d.ts.map +1 -0
- package/dist/generation/emit/emit-context.js +19 -0
- package/dist/generation/emit/emit-context.js.map +1 -0
- package/dist/generation/emit/font-table-part.d.ts +16 -0
- package/dist/generation/emit/font-table-part.d.ts.map +1 -0
- package/dist/generation/emit/font-table-part.js +74 -0
- package/dist/generation/emit/font-table-part.js.map +1 -0
- package/dist/generation/emit/header-footer-part.d.ts +23 -0
- package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
- package/dist/generation/emit/header-footer-part.js +57 -0
- package/dist/generation/emit/header-footer-part.js.map +1 -0
- package/dist/generation/emit/numbering-part.d.ts +29 -0
- package/dist/generation/emit/numbering-part.d.ts.map +1 -0
- package/dist/generation/emit/numbering-part.js +102 -0
- package/dist/generation/emit/numbering-part.js.map +1 -0
- package/dist/generation/emit/package-parts.d.ts +24 -0
- package/dist/generation/emit/package-parts.d.ts.map +1 -0
- package/dist/generation/emit/package-parts.js +121 -0
- package/dist/generation/emit/package-parts.js.map +1 -0
- package/dist/generation/emit/paragraph.d.ts +24 -0
- package/dist/generation/emit/paragraph.d.ts.map +1 -0
- package/dist/generation/emit/paragraph.js +63 -0
- package/dist/generation/emit/paragraph.js.map +1 -0
- package/dist/generation/emit/properties.d.ts +36 -0
- package/dist/generation/emit/properties.d.ts.map +1 -0
- package/dist/generation/emit/properties.js +154 -0
- package/dist/generation/emit/properties.js.map +1 -0
- package/dist/generation/emit/run.d.ts +16 -0
- package/dist/generation/emit/run.d.ts.map +1 -0
- package/dist/generation/emit/run.js +71 -0
- package/dist/generation/emit/run.js.map +1 -0
- package/dist/generation/emit/section.d.ts +29 -0
- package/dist/generation/emit/section.d.ts.map +1 -0
- package/dist/generation/emit/section.js +117 -0
- package/dist/generation/emit/section.js.map +1 -0
- package/dist/generation/emit/settings-part.d.ts +13 -0
- package/dist/generation/emit/settings-part.d.ts.map +1 -0
- package/dist/generation/emit/settings-part.js +68 -0
- package/dist/generation/emit/settings-part.js.map +1 -0
- package/dist/generation/emit/styles-part.d.ts +16 -0
- package/dist/generation/emit/styles-part.d.ts.map +1 -0
- package/dist/generation/emit/styles-part.js +82 -0
- package/dist/generation/emit/styles-part.js.map +1 -0
- package/dist/generation/emit/table.d.ts +26 -0
- package/dist/generation/emit/table.d.ts.map +1 -0
- package/dist/generation/emit/table.js +209 -0
- package/dist/generation/emit/table.js.map +1 -0
- package/dist/generation/emit/theme-part.d.ts +21 -0
- package/dist/generation/emit/theme-part.d.ts.map +1 -0
- package/dist/generation/emit/theme-part.js +151 -0
- package/dist/generation/emit/theme-part.js.map +1 -0
- package/dist/generation/emit/web-settings-part.d.ts +12 -0
- package/dist/generation/emit/web-settings-part.d.ts.map +1 -0
- package/dist/generation/emit/web-settings-part.js +19 -0
- package/dist/generation/emit/web-settings-part.js.map +1 -0
- package/dist/generation/errors.d.ts +22 -0
- package/dist/generation/errors.d.ts.map +1 -0
- package/dist/generation/errors.js +29 -0
- package/dist/generation/errors.js.map +1 -0
- package/dist/generation/index.d.ts +13 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +12 -0
- package/dist/generation/index.js.map +1 -0
- package/dist/generation/ordering.d.ts +46 -0
- package/dist/generation/ordering.d.ts.map +1 -0
- package/dist/generation/ordering.js +119 -0
- package/dist/generation/ordering.js.map +1 -0
- package/dist/generation/recipes.d.ts +70 -0
- package/dist/generation/recipes.d.ts.map +1 -0
- package/dist/generation/recipes.js +149 -0
- package/dist/generation/recipes.js.map +1 -0
- package/dist/generation/structural-checks.d.ts +24 -0
- package/dist/generation/structural-checks.d.ts.map +1 -0
- package/dist/generation/structural-checks.js +318 -0
- package/dist/generation/structural-checks.js.map +1 -0
- package/dist/generation/theme-colors.d.ts +4 -0
- package/dist/generation/theme-colors.d.ts.map +1 -0
- package/dist/generation/theme-colors.js +18 -0
- package/dist/generation/theme-colors.js.map +1 -0
- package/dist/generation/types.d.ts +249 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +54 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/validate-spec.d.ts +27 -0
- package/dist/generation/validate-spec.d.ts.map +1 -0
- package/dist/generation/validate-spec.js +359 -0
- package/dist/generation/validate-spec.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/generation-probes.d.ts +15 -0
- package/dist/integration/generation-probes.d.ts.map +1 -0
- package/dist/integration/generation-probes.js +84 -0
- package/dist/integration/generation-probes.js.map +1 -0
- package/dist/integration/libreoffice-oracle.d.ts +8 -0
- package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
- package/dist/integration/libreoffice-oracle.js +14 -6
- package/dist/integration/libreoffice-oracle.js.map +1 -1
- package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
- package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
- package/dist/integration/synthetic-docx-fixture.js +131 -4
- package/dist/integration/synthetic-docx-fixture.js.map +1 -1
- package/dist/primitives/accept_changes.d.ts +2 -1
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +153 -12
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/document.d.ts +38 -0
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +75 -9
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view-comments.d.ts.map +1 -1
- package/dist/primitives/document_view-comments.js +4 -3
- package/dist/primitives/document_view-comments.js.map +1 -1
- package/dist/primitives/document_view-types.d.ts +15 -0
- package/dist/primitives/document_view-types.d.ts.map +1 -1
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +21 -13
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/formatting_tags.d.ts +1 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -1
- package/dist/primitives/formatting_tags.js +16 -10
- package/dist/primitives/formatting_tags.js.map +1 -1
- package/dist/primitives/index.d.ts +4 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/layout.d.ts.map +1 -1
- package/dist/primitives/layout.js +13 -0
- package/dist/primitives/layout.js.map +1 -1
- package/dist/primitives/minimal_save.d.ts +38 -0
- package/dist/primitives/minimal_save.d.ts.map +1 -0
- package/dist/primitives/minimal_save.js +323 -0
- package/dist/primitives/minimal_save.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +46 -0
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +49 -0
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/reject_changes.d.ts +4 -2
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +177 -24
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/revision-parts.d.ts +7 -0
- package/dist/primitives/revision-parts.d.ts.map +1 -0
- package/dist/primitives/revision-parts.js +27 -0
- package/dist/primitives/revision-parts.js.map +1 -0
- package/dist/primitives/revision-vocabulary.d.ts +7 -0
- package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
- package/dist/primitives/revision-vocabulary.js +39 -0
- package/dist/primitives/revision-vocabulary.js.map +1 -0
- package/dist/primitives/schema-corpus-capture.d.ts +19 -0
- package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
- package/dist/primitives/schema-corpus-capture.js +29 -0
- package/dist/primitives/schema-corpus-capture.js.map +1 -0
- package/dist/primitives/sectPrAudit.d.ts +19 -0
- package/dist/primitives/sectPrAudit.d.ts.map +1 -0
- package/dist/primitives/sectPrAudit.js +165 -0
- package/dist/primitives/sectPrAudit.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -1
- package/dist/primitives/semantic_tags.js +2 -1
- package/dist/primitives/semantic_tags.js.map +1 -1
- package/dist/primitives/serialize_html.d.ts +1 -0
- package/dist/primitives/serialize_html.d.ts.map +1 -1
- package/dist/primitives/serialize_html.js +4 -2
- package/dist/primitives/serialize_html.js.map +1 -1
- package/dist/primitives/styles.d.ts +15 -0
- package/dist/primitives/styles.d.ts.map +1 -1
- package/dist/primitives/styles.js +11 -0
- package/dist/primitives/styles.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +9 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
- package/dist/primitives/track-changes-emitter.js +54 -4
- package/dist/primitives/track-changes-emitter.js.map +1 -1
- package/dist/primitives/validate_ai_revisions.d.ts +35 -0
- package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
- package/dist/primitives/validate_ai_revisions.js +323 -0
- package/dist/primitives/validate_ai_revisions.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -1
- package/dist/primitives/xml.js +5 -0
- package/dist/primitives/xml.js.map +1 -1
- package/dist/primitives/zip.d.ts +1 -0
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +21 -3
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/field-structure.d.ts +14 -0
- package/dist/shared/field-structure.d.ts.map +1 -0
- package/dist/shared/field-structure.js +166 -0
- package/dist/shared/field-structure.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/webSettings.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Emitted on every package. Word-authored documents always carry a web-settings
|
|
5
|
+
* part; shipping a minimal one keeps generated output part-for-part comparable to
|
|
6
|
+
* genuine Word output (see issue #482). The body is static, so determinism holds.
|
|
7
|
+
*
|
|
8
|
+
* The root is the WordprocessingML `w:webSettings` element.
|
|
9
|
+
*/
|
|
10
|
+
import type { CompileContext } from '../context.js';
|
|
11
|
+
export declare function emitWebSettingsPart(ctx: CompileContext): void;
|
|
12
|
+
//# sourceMappingURL=web-settings-part.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-settings-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/web-settings-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQpD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAM7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* word/webSettings.xml emitter.
|
|
3
|
+
*
|
|
4
|
+
* Emitted on every package. Word-authored documents always carry a web-settings
|
|
5
|
+
* part; shipping a minimal one keeps generated output part-for-part comparable to
|
|
6
|
+
* genuine Word output (see issue #482). The body is static, so determinism holds.
|
|
7
|
+
*
|
|
8
|
+
* The root is the WordprocessingML `w:webSettings` element.
|
|
9
|
+
*/
|
|
10
|
+
import { parseXml, serializeXml, XML_DECL } from '../../primitives/xml.js';
|
|
11
|
+
import { OOXML } from '../../primitives/namespaces.js';
|
|
12
|
+
const WEB_SETTINGS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';
|
|
13
|
+
const WEB_SETTINGS_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings';
|
|
14
|
+
export function emitWebSettingsPart(ctx) {
|
|
15
|
+
ctx.registerPart('word/webSettings.xml', WEB_SETTINGS_CONTENT_TYPE, WEB_SETTINGS_REL_TYPE);
|
|
16
|
+
const doc = parseXml(`<w:webSettings xmlns:w="${OOXML.W_NS}"><w:optimizeForBrowser/><w:allowPNG/></w:webSettings>`);
|
|
17
|
+
ctx.setFileContent('word/webSettings.xml', XML_DECL + serializeXml(doc));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=web-settings-part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-settings-part.js","sourceRoot":"","sources":["../../../src/generation/emit/web-settings-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,MAAM,yBAAyB,GAC7B,gFAAgF,CAAC;AACnF,MAAM,qBAAqB,GACzB,iFAAiF,CAAC;AAEpF,MAAM,UAAU,mBAAmB,CAAC,GAAmB;IACrD,GAAG,CAAC,YAAY,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAG,QAAQ,CAClB,2BAA2B,KAAK,CAAC,IAAI,wDAAwD,CAC9F,CAAC;IACF,GAAG,CAAC,cAAc,CAAC,sBAAsB,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed errors for the generation compiler.
|
|
3
|
+
*
|
|
4
|
+
* GenerationSpecError reports problems in the caller's DocumentSpec (dangling
|
|
5
|
+
* references, unimplemented features, shape violations) with a JSON-pointer-ish
|
|
6
|
+
* path into the spec so callers can surface the exact offending node.
|
|
7
|
+
*
|
|
8
|
+
* GenerationInternalError flags compiler bugs (e.g. an emitter producing a
|
|
9
|
+
* property name missing from its ordering table); it should never be reachable
|
|
10
|
+
* from user input that passed spec validation.
|
|
11
|
+
*/
|
|
12
|
+
export type GenerationSpecErrorCode = 'empty_sections' | 'unsupported_feature' | 'dangling_style_reference' | 'dangling_numbering_reference' | 'invalid_value' | 'grid_mismatch';
|
|
13
|
+
export declare class GenerationSpecError extends Error {
|
|
14
|
+
readonly code: GenerationSpecErrorCode;
|
|
15
|
+
/** Path into the spec, e.g. '/sections/0/blocks/2/runs/1'. */
|
|
16
|
+
readonly path: string;
|
|
17
|
+
constructor(code: GenerationSpecErrorCode, path: string, message: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class GenerationInternalError extends Error {
|
|
20
|
+
constructor(message: string);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/generation/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,uBAAuB,GAC/B,gBAAgB,GAChB,qBAAqB,GACrB,0BAA0B,GAC1B,8BAA8B,GAC9B,eAAe,GACf,eAAe,CAAC;AAEpB,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMzE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed errors for the generation compiler.
|
|
3
|
+
*
|
|
4
|
+
* GenerationSpecError reports problems in the caller's DocumentSpec (dangling
|
|
5
|
+
* references, unimplemented features, shape violations) with a JSON-pointer-ish
|
|
6
|
+
* path into the spec so callers can surface the exact offending node.
|
|
7
|
+
*
|
|
8
|
+
* GenerationInternalError flags compiler bugs (e.g. an emitter producing a
|
|
9
|
+
* property name missing from its ordering table); it should never be reachable
|
|
10
|
+
* from user input that passed spec validation.
|
|
11
|
+
*/
|
|
12
|
+
export class GenerationSpecError extends Error {
|
|
13
|
+
code;
|
|
14
|
+
/** Path into the spec, e.g. '/sections/0/blocks/2/runs/1'. */
|
|
15
|
+
path;
|
|
16
|
+
constructor(code, path, message) {
|
|
17
|
+
super(`${message} (at ${path})`);
|
|
18
|
+
this.name = 'GenerationSpecError';
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.path = path;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class GenerationInternalError extends Error {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = 'GenerationInternalError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/generation/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAA0B;IACvC,8DAA8D;IACrD,IAAI,CAAS;IAEtB,YAAY,IAA6B,EAAE,IAAY,EAAE,OAAe;QACtE,KAAK,CAAC,GAAG,OAAO,QAAQ,IAAI,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* From-scratch DOCX generation (OpenSpec capability: docx-generation).
|
|
3
|
+
*
|
|
4
|
+
* Re-exported from the package root since the final phase of the
|
|
5
|
+
* add-docx-generation change, with the cross-reader compatibility matrix
|
|
6
|
+
* recorded in docs/generation-manual-compat-checklist.md.
|
|
7
|
+
*/
|
|
8
|
+
export { generateDocx, type GenerateDocxOptions } from './compile.js';
|
|
9
|
+
export { GenerationSpecError, GenerationInternalError, type GenerationSpecErrorCode } from './errors.js';
|
|
10
|
+
export { checkGeneratedPackage, type StructuralCheckResult, type StructuralIssue } from './structural-checks.js';
|
|
11
|
+
export { coverTermsTable, signatureBlock, type CoverTermsOptions, type SignatureBlockOptions } from './recipes.js';
|
|
12
|
+
export type { BlockSpec, BorderSpec, BreakSpec, DocumentMetaSpec, DocumentSpec, DraftingNoteSpec, FieldSpec, HeaderFooterSet, HeaderFooterSpec, InlineSpec, NumberingSpec, ParagraphSpec, RunProps, RunSpec, SectionSpec, StyleSpec, TableBorders, TableCellSpec, TableRowSpec, TableSpec, TabSpec, } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACnH,YAAY,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,OAAO,EACP,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* From-scratch DOCX generation (OpenSpec capability: docx-generation).
|
|
3
|
+
*
|
|
4
|
+
* Re-exported from the package root since the final phase of the
|
|
5
|
+
* add-docx-generation change, with the cross-reader compatibility matrix
|
|
6
|
+
* recorded in docs/generation-manual-compat-checklist.md.
|
|
7
|
+
*/
|
|
8
|
+
export { generateDocx } from './compile.js';
|
|
9
|
+
export { GenerationSpecError, GenerationInternalError } from './errors.js';
|
|
10
|
+
export { checkGeneratedPackage } from './structural-checks.js';
|
|
11
|
+
export { coverTermsTable, signatureBlock } from './recipes.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAgC,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAoD,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAsD,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property-order discipline for emitted OOXML property containers.
|
|
3
|
+
*
|
|
4
|
+
* Each table lists the subset of child local names the generation emitters
|
|
5
|
+
* produce, in the relative order the WML schema sequence declares. Emitters
|
|
6
|
+
* never appendChild properties directly — they collect them into a map and
|
|
7
|
+
* call appendInOrder, which throws on any name missing from its table so
|
|
8
|
+
* adding a new property forces a conscious ordering decision.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Child order for w:pPr (CT_PPr). Subset actually emitted, in schema-relative
|
|
12
|
+
* order; w:rPr (paragraph-mark run properties) precedes w:sectPr at the end.
|
|
13
|
+
*
|
|
14
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.1.26
|
|
15
|
+
*/
|
|
16
|
+
export declare const PPR_ORDER: readonly ["pStyle", "keepNext", "keepLines", "pageBreakBefore", "widowControl", "numPr", "pBdr", "shd", "tabs", "spacing", "ind", "contextualSpacing", "jc", "rPr", "sectPr"];
|
|
17
|
+
/**
|
|
18
|
+
* Child order for w:rPr (CT_RPr / EG_RPrBase). Subset actually emitted.
|
|
19
|
+
*
|
|
20
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.2.28
|
|
21
|
+
*/
|
|
22
|
+
export declare const RPR_ORDER: readonly ["rStyle", "rFonts", "b", "bCs", "i", "iCs", "caps", "smallCaps", "strike", "vanish", "color", "sz", "szCs", "highlight", "u", "vertAlign"];
|
|
23
|
+
/** Child order for w:sectPr (CT_SectPr). Header/footer references lead. */
|
|
24
|
+
export declare const SECTPR_ORDER: readonly ["headerReference", "footerReference", "type", "pgSz", "pgMar", "pgNumType", "titlePg", "docGrid"];
|
|
25
|
+
/** Child order for w:tblPr (CT_TblPr). */
|
|
26
|
+
export declare const TBLPR_ORDER: readonly ["tblStyle", "tblW", "jc", "tblBorders", "tblLayout", "tblCellMar", "tblLook"];
|
|
27
|
+
/**
|
|
28
|
+
* Child order for w:trPr (CT_TrPrBase). Subset actually emitted.
|
|
29
|
+
*
|
|
30
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.4.81
|
|
31
|
+
*/
|
|
32
|
+
export declare const TRPR_ORDER: readonly ["trHeight", "tblHeader"];
|
|
33
|
+
/** Child order for w:tcPr (CT_TcPr). */
|
|
34
|
+
export declare const TCPR_ORDER: readonly ["tcW", "gridSpan", "vMerge", "tcBorders", "shd", "tcMar", "vAlign"];
|
|
35
|
+
export type PropMap = ReadonlyMap<string, Element | Element[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Append collected property elements to a container in the order declared by
|
|
38
|
+
* the table. Repeatable properties (e.g. w:headerReference) are passed as
|
|
39
|
+
* arrays and appended in collection order at their slot.
|
|
40
|
+
*
|
|
41
|
+
* Throws GenerationInternalError when the map contains a local name absent
|
|
42
|
+
* from the order table — ordering bugs fail loudly at build time instead of
|
|
43
|
+
* producing schema-invalid output.
|
|
44
|
+
*/
|
|
45
|
+
export declare function appendInOrder(container: Element, props: PropMap, order: readonly string[]): void;
|
|
46
|
+
//# sourceMappingURL=ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordering.d.ts","sourceRoot":"","sources":["../../src/generation/ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,SAAS,+KAgBZ,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,SAAS,sJAiBZ,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,YAAY,6GASf,CAAC;AAEX,0CAA0C;AAC1C,eAAO,MAAM,WAAW,yFAQd,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,UAAU,oCAAqC,CAAC;AAE7D,wCAAwC;AACxC,eAAO,MAAM,UAAU,+EAQb,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;AAE/D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAehG"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property-order discipline for emitted OOXML property containers.
|
|
3
|
+
*
|
|
4
|
+
* Each table lists the subset of child local names the generation emitters
|
|
5
|
+
* produce, in the relative order the WML schema sequence declares. Emitters
|
|
6
|
+
* never appendChild properties directly — they collect them into a map and
|
|
7
|
+
* call appendInOrder, which throws on any name missing from its table so
|
|
8
|
+
* adding a new property forces a conscious ordering decision.
|
|
9
|
+
*/
|
|
10
|
+
import { GenerationInternalError } from './errors.js';
|
|
11
|
+
/**
|
|
12
|
+
* Child order for w:pPr (CT_PPr). Subset actually emitted, in schema-relative
|
|
13
|
+
* order; w:rPr (paragraph-mark run properties) precedes w:sectPr at the end.
|
|
14
|
+
*
|
|
15
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.1.26
|
|
16
|
+
*/
|
|
17
|
+
export const PPR_ORDER = [
|
|
18
|
+
'pStyle',
|
|
19
|
+
'keepNext',
|
|
20
|
+
'keepLines',
|
|
21
|
+
'pageBreakBefore',
|
|
22
|
+
'widowControl',
|
|
23
|
+
'numPr',
|
|
24
|
+
'pBdr',
|
|
25
|
+
'shd',
|
|
26
|
+
'tabs',
|
|
27
|
+
'spacing',
|
|
28
|
+
'ind',
|
|
29
|
+
'contextualSpacing',
|
|
30
|
+
'jc',
|
|
31
|
+
'rPr',
|
|
32
|
+
'sectPr',
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Child order for w:rPr (CT_RPr / EG_RPrBase). Subset actually emitted.
|
|
36
|
+
*
|
|
37
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.3.2.28
|
|
38
|
+
*/
|
|
39
|
+
export const RPR_ORDER = [
|
|
40
|
+
'rStyle',
|
|
41
|
+
'rFonts',
|
|
42
|
+
'b',
|
|
43
|
+
'bCs',
|
|
44
|
+
'i',
|
|
45
|
+
'iCs',
|
|
46
|
+
'caps',
|
|
47
|
+
'smallCaps',
|
|
48
|
+
'strike',
|
|
49
|
+
'vanish',
|
|
50
|
+
'color',
|
|
51
|
+
'sz',
|
|
52
|
+
'szCs',
|
|
53
|
+
'highlight',
|
|
54
|
+
'u',
|
|
55
|
+
'vertAlign',
|
|
56
|
+
];
|
|
57
|
+
/** Child order for w:sectPr (CT_SectPr). Header/footer references lead. */
|
|
58
|
+
export const SECTPR_ORDER = [
|
|
59
|
+
'headerReference',
|
|
60
|
+
'footerReference',
|
|
61
|
+
'type',
|
|
62
|
+
'pgSz',
|
|
63
|
+
'pgMar',
|
|
64
|
+
'pgNumType',
|
|
65
|
+
'titlePg',
|
|
66
|
+
'docGrid',
|
|
67
|
+
];
|
|
68
|
+
/** Child order for w:tblPr (CT_TblPr). */
|
|
69
|
+
export const TBLPR_ORDER = [
|
|
70
|
+
'tblStyle',
|
|
71
|
+
'tblW',
|
|
72
|
+
'jc',
|
|
73
|
+
'tblBorders',
|
|
74
|
+
'tblLayout',
|
|
75
|
+
'tblCellMar',
|
|
76
|
+
'tblLook',
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Child order for w:trPr (CT_TrPrBase). Subset actually emitted.
|
|
80
|
+
*
|
|
81
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.4.81
|
|
82
|
+
*/
|
|
83
|
+
export const TRPR_ORDER = ['trHeight', 'tblHeader'];
|
|
84
|
+
/** Child order for w:tcPr (CT_TcPr). */
|
|
85
|
+
export const TCPR_ORDER = [
|
|
86
|
+
'tcW',
|
|
87
|
+
'gridSpan',
|
|
88
|
+
'vMerge',
|
|
89
|
+
'tcBorders',
|
|
90
|
+
'shd',
|
|
91
|
+
'tcMar',
|
|
92
|
+
'vAlign',
|
|
93
|
+
];
|
|
94
|
+
/**
|
|
95
|
+
* Append collected property elements to a container in the order declared by
|
|
96
|
+
* the table. Repeatable properties (e.g. w:headerReference) are passed as
|
|
97
|
+
* arrays and appended in collection order at their slot.
|
|
98
|
+
*
|
|
99
|
+
* Throws GenerationInternalError when the map contains a local name absent
|
|
100
|
+
* from the order table — ordering bugs fail loudly at build time instead of
|
|
101
|
+
* producing schema-invalid output.
|
|
102
|
+
*/
|
|
103
|
+
export function appendInOrder(container, props, order) {
|
|
104
|
+
for (const name of props.keys()) {
|
|
105
|
+
if (!order.includes(name)) {
|
|
106
|
+
throw new GenerationInternalError(`Property '${name}' is not declared in the ordering table for <${container.tagName}>; ` +
|
|
107
|
+
'add it to the table in schema order before emitting it');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const name of order) {
|
|
111
|
+
const value = props.get(name);
|
|
112
|
+
if (!value)
|
|
113
|
+
continue;
|
|
114
|
+
const elements = Array.isArray(value) ? value : [value];
|
|
115
|
+
for (const el of elements)
|
|
116
|
+
container.appendChild(el);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordering.js","sourceRoot":"","sources":["../../src/generation/ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ;IACR,UAAU;IACV,WAAW;IACX,iBAAiB;IACjB,cAAc;IACd,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;IACL,mBAAmB;IACnB,IAAI;IACJ,KAAK;IACL,QAAQ;CACA,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ;IACR,QAAQ;IACR,GAAG;IACH,KAAK;IACL,GAAG;IACH,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,IAAI;IACJ,MAAM;IACN,WAAW;IACX,GAAG;IACH,WAAW;CACH,CAAC;AAEX,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,iBAAiB;IACjB,iBAAiB;IACjB,MAAM;IACN,MAAM;IACN,OAAO;IACP,WAAW;IACX,SAAS;IACT,SAAS;CACD,CAAC;AAEX,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU;IACV,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,SAAS;CACD,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,WAAW,CAAU,CAAC;AAE7D,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK;IACL,UAAU;IACV,QAAQ;IACR,WAAW;IACX,KAAK;IACL,OAAO;IACP,QAAQ;CACA,CAAC;AAIX;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB,EAAE,KAAc,EAAE,KAAwB;IACxF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,uBAAuB,CAC/B,aAAa,IAAI,gDAAgD,SAAS,CAAC,OAAO,KAAK;gBACrF,wDAAwD,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,MAAM,EAAE,IAAI,QAAQ;YAAE,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legal-document recipes.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions producing spec nodes from options — no own OOXML
|
|
5
|
+
* representation, no compiler hooks. Everything a recipe returns is built
|
|
6
|
+
* from the paragraph/table grammar, so its output is inlineable anywhere a
|
|
7
|
+
* BlockSpec is accepted and serializes through exactly the emitters the
|
|
8
|
+
* rest of the document uses. Signature lines are bottom-bordered cells, not
|
|
9
|
+
* VML shapes: Pages and Google Docs mangle VML, borders survive everywhere.
|
|
10
|
+
*/
|
|
11
|
+
import type { BlockSpec, TableSpec } from './types.js';
|
|
12
|
+
export type CoverTermRow = {
|
|
13
|
+
label: string;
|
|
14
|
+
value: string;
|
|
15
|
+
};
|
|
16
|
+
export type CoverTermGroupRow = {
|
|
17
|
+
group: string;
|
|
18
|
+
};
|
|
19
|
+
export type CoverTermSubrow = {
|
|
20
|
+
label: string;
|
|
21
|
+
value: string;
|
|
22
|
+
subrow: true;
|
|
23
|
+
};
|
|
24
|
+
export type CoverTermEntry = CoverTermRow | CoverTermGroupRow | CoverTermSubrow;
|
|
25
|
+
export type CoverTermsOptions = {
|
|
26
|
+
/** Plain rows, group headers, and subrows rendered in declaration order. */
|
|
27
|
+
terms: CoverTermEntry[];
|
|
28
|
+
/** Two-column widths in twips; defaults to a 2880/6480 split of a 6.5" body. */
|
|
29
|
+
columnWidthsTwips?: [number, number];
|
|
30
|
+
/** Heading text for a shaded full-width header row; omitted when absent. */
|
|
31
|
+
title?: string;
|
|
32
|
+
/** Table border style; defaults to the historical full grid. */
|
|
33
|
+
borderMode?: 'grid' | 'horizontal-rules';
|
|
34
|
+
/** Optional minimum row height applied to term/group/sub rows, not the title row. */
|
|
35
|
+
rowHeightTwips?: number;
|
|
36
|
+
/** Optional uniform cell padding applied to every cover-terms cell. */
|
|
37
|
+
cellPaddingTwips?: number;
|
|
38
|
+
/** Text color for subrow labels and values; defaults to mid-gray. */
|
|
39
|
+
subrowColorHex?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Extra left indent on subrow label cells, added on top of `cellPaddingTwips`
|
|
42
|
+
* (so the label sits further right than a normal row). Defaults to 240 twips.
|
|
43
|
+
*/
|
|
44
|
+
subrowLabelIndentTwips?: number;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* A fixed-layout two-column label/value table for cover-terms blocks
|
|
48
|
+
* (scenario SDX-GEN-070), with optional house-style grouped/sub rows.
|
|
49
|
+
*/
|
|
50
|
+
export declare function coverTermsTable(options: CoverTermsOptions): TableSpec;
|
|
51
|
+
export type SignatureBlockOptions = {
|
|
52
|
+
parties: Array<{
|
|
53
|
+
/** Party heading above the signature line, e.g. the company name. */
|
|
54
|
+
party: string;
|
|
55
|
+
/** Signatory name printed under the line. */
|
|
56
|
+
name: string;
|
|
57
|
+
title?: string;
|
|
58
|
+
/** Label for the date row; defaults to 'Date:'. */
|
|
59
|
+
dateLabel?: string;
|
|
60
|
+
}>;
|
|
61
|
+
/** Signature-line column width in twips; defaults to 4320 (3"). */
|
|
62
|
+
lineWidthTwips?: number;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Signature blocks rendered as borderless single-column tables whose first
|
|
66
|
+
* content cell carries only a bottom border — the signature line — followed
|
|
67
|
+
* by name, title, and date rows (scenario SDX-GEN-071). No VML, no images.
|
|
68
|
+
*/
|
|
69
|
+
export declare function signatureBlock(options: SignatureBlockOptions): BlockSpec[];
|
|
70
|
+
//# sourceMappingURL=recipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/generation/recipes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAA6B,SAAS,EAAE,MAAM,YAAY,CAAC;AAOlF,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,4EAA4E;IAC5E,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACzC,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CA4ErE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,KAAK,CAAC;QACb,qEAAqE;QACrE,KAAK,EAAE,MAAM,CAAC;QACd,6CAA6C;QAC7C,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mDAAmD;QACnD,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAAE,CAsB1E"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legal-document recipes.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions producing spec nodes from options — no own OOXML
|
|
5
|
+
* representation, no compiler hooks. Everything a recipe returns is built
|
|
6
|
+
* from the paragraph/table grammar, so its output is inlineable anywhere a
|
|
7
|
+
* BlockSpec is accepted and serializes through exactly the emitters the
|
|
8
|
+
* rest of the document uses. Signature lines are bottom-bordered cells, not
|
|
9
|
+
* VML shapes: Pages and Google Docs mangle VML, borders survive everywhere.
|
|
10
|
+
*/
|
|
11
|
+
const SINGLE = { style: 'single' };
|
|
12
|
+
const NONE = { style: 'none' };
|
|
13
|
+
const DEFAULT_SUBROW_COLOR_HEX = '595959';
|
|
14
|
+
const DEFAULT_SUBROW_LABEL_INDENT_TWIPS = 240;
|
|
15
|
+
/**
|
|
16
|
+
* A fixed-layout two-column label/value table for cover-terms blocks
|
|
17
|
+
* (scenario SDX-GEN-070), with optional house-style grouped/sub rows.
|
|
18
|
+
*/
|
|
19
|
+
export function coverTermsTable(options) {
|
|
20
|
+
const [labelWidth, valueWidth] = options.columnWidthsTwips ?? [2880, 6480];
|
|
21
|
+
const borders = options.borderMode === 'horizontal-rules'
|
|
22
|
+
? { top: SINGLE, bottom: SINGLE, left: NONE, right: NONE, insideH: SINGLE, insideV: NONE }
|
|
23
|
+
: { top: SINGLE, bottom: SINGLE, left: SINGLE, right: SINGLE, insideH: SINGLE, insideV: SINGLE };
|
|
24
|
+
const rowRhythm = rowRhythmProps(options);
|
|
25
|
+
const rows = [];
|
|
26
|
+
if (options.title !== undefined) {
|
|
27
|
+
rows.push({
|
|
28
|
+
header: true,
|
|
29
|
+
cells: [
|
|
30
|
+
{
|
|
31
|
+
gridSpan: 2,
|
|
32
|
+
shadingHex: 'D9D9D9',
|
|
33
|
+
vAlign: 'center',
|
|
34
|
+
...cellPaddingProps(options),
|
|
35
|
+
blocks: [paragraph(options.title, { bold: true, alignment: 'center' })],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
for (const term of options.terms) {
|
|
41
|
+
if ('group' in term) {
|
|
42
|
+
rows.push({
|
|
43
|
+
...rowRhythm,
|
|
44
|
+
cells: [
|
|
45
|
+
{
|
|
46
|
+
gridSpan: 2,
|
|
47
|
+
vAlign: 'center',
|
|
48
|
+
...cellPaddingProps(options),
|
|
49
|
+
blocks: [paragraph(term.group, { bold: true })],
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const subrow = 'subrow' in term && term.subrow === true;
|
|
56
|
+
rows.push({
|
|
57
|
+
...rowRhythm,
|
|
58
|
+
cells: [
|
|
59
|
+
{
|
|
60
|
+
...cellPaddingProps(options, subrow
|
|
61
|
+
? { left: (options.cellPaddingTwips ?? 0) + (options.subrowLabelIndentTwips ?? DEFAULT_SUBROW_LABEL_INDENT_TWIPS) }
|
|
62
|
+
: undefined),
|
|
63
|
+
blocks: [
|
|
64
|
+
paragraph(term.label, {
|
|
65
|
+
bold: !subrow,
|
|
66
|
+
italic: subrow,
|
|
67
|
+
colorHex: subrow ? (options.subrowColorHex ?? DEFAULT_SUBROW_COLOR_HEX) : undefined,
|
|
68
|
+
}),
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
...cellPaddingProps(options),
|
|
73
|
+
blocks: [
|
|
74
|
+
paragraph(term.value, {
|
|
75
|
+
italic: subrow,
|
|
76
|
+
colorHex: subrow ? (options.subrowColorHex ?? DEFAULT_SUBROW_COLOR_HEX) : undefined,
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
kind: 'table',
|
|
85
|
+
layout: 'fixed',
|
|
86
|
+
columnWidthsTwips: [labelWidth, valueWidth],
|
|
87
|
+
borders,
|
|
88
|
+
rows,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Signature blocks rendered as borderless single-column tables whose first
|
|
93
|
+
* content cell carries only a bottom border — the signature line — followed
|
|
94
|
+
* by name, title, and date rows (scenario SDX-GEN-071). No VML, no images.
|
|
95
|
+
*/
|
|
96
|
+
export function signatureBlock(options) {
|
|
97
|
+
const width = options.lineWidthTwips ?? 4320;
|
|
98
|
+
const blocks = [];
|
|
99
|
+
options.parties.forEach((party, index) => {
|
|
100
|
+
if (index > 0)
|
|
101
|
+
blocks.push(paragraph(''));
|
|
102
|
+
blocks.push(paragraph(party.party, { bold: true }));
|
|
103
|
+
const rows = [
|
|
104
|
+
{ cells: [{ borders: { bottom: SINGLE }, blocks: [paragraph('')] }] },
|
|
105
|
+
{ cells: [{ blocks: [paragraph(`Name: ${party.name}`)] }] },
|
|
106
|
+
];
|
|
107
|
+
if (party.title !== undefined) {
|
|
108
|
+
rows.push({ cells: [{ blocks: [paragraph(`Title: ${party.title}`)] }] });
|
|
109
|
+
}
|
|
110
|
+
rows.push({ cells: [{ blocks: [paragraph(party.dateLabel ?? 'Date:')] }] });
|
|
111
|
+
blocks.push({
|
|
112
|
+
kind: 'table',
|
|
113
|
+
layout: 'fixed',
|
|
114
|
+
columnWidthsTwips: [width],
|
|
115
|
+
rows,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return blocks;
|
|
119
|
+
}
|
|
120
|
+
function paragraph(text, opts) {
|
|
121
|
+
return {
|
|
122
|
+
kind: 'paragraph',
|
|
123
|
+
...(opts?.alignment !== undefined ? { alignment: opts.alignment } : {}),
|
|
124
|
+
runs: [
|
|
125
|
+
{
|
|
126
|
+
kind: 'text',
|
|
127
|
+
text,
|
|
128
|
+
...(opts?.bold ? { bold: true } : {}),
|
|
129
|
+
...(opts?.italic ? { italic: true } : {}),
|
|
130
|
+
...(opts?.colorHex !== undefined ? { colorHex: opts.colorHex } : {}),
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function rowRhythmProps(options) {
|
|
136
|
+
return options.rowHeightTwips === undefined ? {} : { heightTwips: options.rowHeightTwips, heightRule: 'atLeast' };
|
|
137
|
+
}
|
|
138
|
+
function cellPaddingProps(options, overrides) {
|
|
139
|
+
if (options.cellPaddingTwips === undefined && overrides === undefined)
|
|
140
|
+
return {};
|
|
141
|
+
const uniform = options.cellPaddingTwips;
|
|
142
|
+
return {
|
|
143
|
+
marginsTwips: {
|
|
144
|
+
...(uniform === undefined ? {} : { top: uniform, right: uniform, bottom: uniform, left: uniform }),
|
|
145
|
+
...overrides,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=recipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/generation/recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-build structural validation of a generated package — the
|
|
3
|
+
* "no recovery dialog" gate. Each check targets a concrete repair trigger in
|
|
4
|
+
* reading applications: missing content types, dangling relationship targets,
|
|
5
|
+
* unresolvable r:id references, malformed section properties, and unbalanced
|
|
6
|
+
* field characters.
|
|
7
|
+
*
|
|
8
|
+
* `auditSectPr` is reused as one component: it flags duplicated or misplaced
|
|
9
|
+
* body-level sectPr and dangling header/footer references, but tolerates the
|
|
10
|
+
* zero-sectPr case (legal for parsed third-party documents), so the
|
|
11
|
+
* required-final-sectPr check lives here.
|
|
12
|
+
*/
|
|
13
|
+
export type StructuralIssue = {
|
|
14
|
+
check: 'xml_declaration' | 'content_type_coverage' | 'relationship_target' | 'rid_resolution' | 'sectpr' | 'field_pairing' | 'table';
|
|
15
|
+
part: string;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
export type StructuralCheckResult = {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
issues: StructuralIssue[];
|
|
21
|
+
};
|
|
22
|
+
/** Run every structural check against a generated package buffer. */
|
|
23
|
+
export declare function checkGeneratedPackage(buffer: Buffer): Promise<StructuralCheckResult>;
|
|
24
|
+
//# sourceMappingURL=structural-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-checks.d.ts","sourceRoot":"","sources":["../../src/generation/structural-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EACD,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,gBAAgB,GAChB,QAAQ,GACR,eAAe,GACf,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,qEAAqE;AACrE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkB1F"}
|