@open-agreements/open-agreements 0.2.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/LICENSE +21 -0
- package/README.md +359 -0
- package/bin/open-agreements.js +4 -0
- package/content/external/LICENSE +27 -0
- package/content/external/README.md +38 -0
- package/content/external/yc-safe-discount/README.md +16 -0
- package/content/external/yc-safe-discount/clean.json +4 -0
- package/content/external/yc-safe-discount/metadata.yaml +67 -0
- package/content/external/yc-safe-discount/replacements.json +13 -0
- package/content/external/yc-safe-discount/template.docx +0 -0
- package/content/external/yc-safe-mfn/README.md +16 -0
- package/content/external/yc-safe-mfn/clean.json +4 -0
- package/content/external/yc-safe-mfn/metadata.yaml +64 -0
- package/content/external/yc-safe-mfn/replacements.json +12 -0
- package/content/external/yc-safe-mfn/template.docx +0 -0
- package/content/external/yc-safe-pro-rata-side-letter/README.md +16 -0
- package/content/external/yc-safe-pro-rata-side-letter/clean.json +4 -0
- package/content/external/yc-safe-pro-rata-side-letter/metadata.yaml +49 -0
- package/content/external/yc-safe-pro-rata-side-letter/replacements.json +9 -0
- package/content/external/yc-safe-pro-rata-side-letter/template.docx +0 -0
- package/content/external/yc-safe-valuation-cap/README.md +16 -0
- package/content/external/yc-safe-valuation-cap/clean.json +4 -0
- package/content/external/yc-safe-valuation-cap/metadata.yaml +64 -0
- package/content/external/yc-safe-valuation-cap/replacements.json +12 -0
- package/content/external/yc-safe-valuation-cap/template.docx +0 -0
- package/content/recipes/nvca-certificate-of-incorporation/clean.json +8 -0
- package/content/recipes/nvca-certificate-of-incorporation/metadata.yaml +43 -0
- package/content/recipes/nvca-certificate-of-incorporation/replacements.json +9 -0
- package/content/recipes/nvca-indemnification-agreement/clean.json +17 -0
- package/content/recipes/nvca-indemnification-agreement/metadata.yaml +79 -0
- package/content/recipes/nvca-indemnification-agreement/replacements.json +17 -0
- package/content/recipes/nvca-investors-rights-agreement/clean.json +12 -0
- package/content/recipes/nvca-investors-rights-agreement/metadata.yaml +71 -0
- package/content/recipes/nvca-investors-rights-agreement/replacements.json +18 -0
- package/content/recipes/nvca-management-rights-letter/clean.json +7 -0
- package/content/recipes/nvca-management-rights-letter/metadata.yaml +47 -0
- package/content/recipes/nvca-management-rights-letter/replacements.json +11 -0
- package/content/recipes/nvca-rofr-co-sale-agreement/clean.json +7 -0
- package/content/recipes/nvca-rofr-co-sale-agreement/metadata.yaml +76 -0
- package/content/recipes/nvca-rofr-co-sale-agreement/replacements.json +17 -0
- package/content/recipes/nvca-stock-purchase-agreement/clean.json +13 -0
- package/content/recipes/nvca-stock-purchase-agreement/computed.json +103 -0
- package/content/recipes/nvca-stock-purchase-agreement/metadata.yaml +138 -0
- package/content/recipes/nvca-stock-purchase-agreement/normalize.json +83 -0
- package/content/recipes/nvca-stock-purchase-agreement/replacements.json +41 -0
- package/content/recipes/nvca-voting-agreement/README.md +53 -0
- package/content/recipes/nvca-voting-agreement/clean.json +7 -0
- package/content/recipes/nvca-voting-agreement/metadata.yaml +66 -0
- package/content/recipes/nvca-voting-agreement/replacements.json +18 -0
- package/content/templates/bonterms-mutual-nda/README.md +27 -0
- package/content/templates/bonterms-mutual-nda/metadata.yaml +58 -0
- package/content/templates/bonterms-mutual-nda/source.json +18 -0
- package/content/templates/bonterms-mutual-nda/template.docx +0 -0
- package/content/templates/bonterms-professional-services-agreement/README.md +24 -0
- package/content/templates/bonterms-professional-services-agreement/metadata.yaml +45 -0
- package/content/templates/bonterms-professional-services-agreement/selections.json +12 -0
- package/content/templates/bonterms-professional-services-agreement/source.json +18 -0
- package/content/templates/bonterms-professional-services-agreement/template.docx +0 -0
- package/content/templates/closing-checklist/metadata.yaml +39 -0
- package/content/templates/closing-checklist/template.docx +0 -0
- package/content/templates/common-paper-ai-addendum/README.md +23 -0
- package/content/templates/common-paper-ai-addendum/metadata.yaml +31 -0
- package/content/templates/common-paper-ai-addendum/template.docx +0 -0
- package/content/templates/common-paper-ai-addendum-in-app/README.md +21 -0
- package/content/templates/common-paper-ai-addendum-in-app/metadata.yaml +21 -0
- package/content/templates/common-paper-ai-addendum-in-app/template.docx +0 -0
- package/content/templates/common-paper-amendment/README.md +27 -0
- package/content/templates/common-paper-amendment/metadata.yaml +53 -0
- package/content/templates/common-paper-amendment/template.docx +0 -0
- package/content/templates/common-paper-business-associate-agreement/README.md +29 -0
- package/content/templates/common-paper-business-associate-agreement/metadata.yaml +56 -0
- package/content/templates/common-paper-business-associate-agreement/replacements.json +3 -0
- package/content/templates/common-paper-business-associate-agreement/template.docx +0 -0
- package/content/templates/common-paper-cloud-service-agreement/README.md +32 -0
- package/content/templates/common-paper-cloud-service-agreement/metadata.yaml +354 -0
- package/content/templates/common-paper-cloud-service-agreement/template.docx +0 -0
- package/content/templates/common-paper-csa-click-through/README.md +33 -0
- package/content/templates/common-paper-csa-click-through/metadata.yaml +73 -0
- package/content/templates/common-paper-csa-click-through/template.docx +0 -0
- package/content/templates/common-paper-csa-with-ai/README.md +49 -0
- package/content/templates/common-paper-csa-with-ai/metadata.yaml +143 -0
- package/content/templates/common-paper-csa-with-ai/replacements.json +7 -0
- package/content/templates/common-paper-csa-with-ai/template.docx +0 -0
- package/content/templates/common-paper-csa-with-sla/README.md +53 -0
- package/content/templates/common-paper-csa-with-sla/metadata.yaml +159 -0
- package/content/templates/common-paper-csa-with-sla/replacements.json +7 -0
- package/content/templates/common-paper-csa-with-sla/template.docx +0 -0
- package/content/templates/common-paper-csa-without-sla/README.md +47 -0
- package/content/templates/common-paper-csa-without-sla/metadata.yaml +135 -0
- package/content/templates/common-paper-csa-without-sla/replacements.json +7 -0
- package/content/templates/common-paper-csa-without-sla/template.docx +0 -0
- package/content/templates/common-paper-data-processing-agreement/README.md +46 -0
- package/content/templates/common-paper-data-processing-agreement/metadata.yaml +130 -0
- package/content/templates/common-paper-data-processing-agreement/replacements.json +3 -0
- package/content/templates/common-paper-data-processing-agreement/template.docx +0 -0
- package/content/templates/common-paper-design-partner-agreement/README.md +29 -0
- package/content/templates/common-paper-design-partner-agreement/metadata.yaml +59 -0
- package/content/templates/common-paper-design-partner-agreement/replacements.json +4 -0
- package/content/templates/common-paper-design-partner-agreement/template.docx +0 -0
- package/content/templates/common-paper-independent-contractor-agreement/README.md +27 -0
- package/content/templates/common-paper-independent-contractor-agreement/metadata.yaml +55 -0
- package/content/templates/common-paper-independent-contractor-agreement/template.docx +0 -0
- package/content/templates/common-paper-letter-of-intent/README.md +25 -0
- package/content/templates/common-paper-letter-of-intent/metadata.yaml +42 -0
- package/content/templates/common-paper-letter-of-intent/template.docx +0 -0
- package/content/templates/common-paper-mutual-nda/README.md +29 -0
- package/content/templates/common-paper-mutual-nda/metadata.yaml +59 -0
- package/content/templates/common-paper-mutual-nda/selections.json +38 -0
- package/content/templates/common-paper-mutual-nda/template.docx +0 -0
- package/content/templates/common-paper-one-way-nda/README.md +27 -0
- package/content/templates/common-paper-one-way-nda/metadata.yaml +59 -0
- package/content/templates/common-paper-one-way-nda/template.docx +0 -0
- package/content/templates/common-paper-order-form/README.md +36 -0
- package/content/templates/common-paper-order-form/metadata.yaml +87 -0
- package/content/templates/common-paper-order-form/replacements.json +5 -0
- package/content/templates/common-paper-order-form/template.docx +0 -0
- package/content/templates/common-paper-order-form-with-sla/README.md +42 -0
- package/content/templates/common-paper-order-form-with-sla/metadata.yaml +111 -0
- package/content/templates/common-paper-order-form-with-sla/replacements.json +5 -0
- package/content/templates/common-paper-order-form-with-sla/template.docx +0 -0
- package/content/templates/common-paper-partnership-agreement/README.md +34 -0
- package/content/templates/common-paper-partnership-agreement/metadata.yaml +78 -0
- package/content/templates/common-paper-partnership-agreement/replacements.json +7 -0
- package/content/templates/common-paper-partnership-agreement/template.docx +0 -0
- package/content/templates/common-paper-pilot-agreement/README.md +34 -0
- package/content/templates/common-paper-pilot-agreement/metadata.yaml +100 -0
- package/content/templates/common-paper-pilot-agreement/replacements.json +4 -0
- package/content/templates/common-paper-pilot-agreement/selections.json +37 -0
- package/content/templates/common-paper-pilot-agreement/template.docx +0 -0
- package/content/templates/common-paper-professional-services-agreement/README.md +44 -0
- package/content/templates/common-paper-professional-services-agreement/metadata.yaml +124 -0
- package/content/templates/common-paper-professional-services-agreement/replacements.json +8 -0
- package/content/templates/common-paper-professional-services-agreement/template.docx +0 -0
- package/content/templates/common-paper-software-license-agreement/README.md +18 -0
- package/content/templates/common-paper-software-license-agreement/metadata.yaml +13 -0
- package/content/templates/common-paper-software-license-agreement/template.docx +0 -0
- package/content/templates/common-paper-statement-of-work/README.md +32 -0
- package/content/templates/common-paper-statement-of-work/metadata.yaml +71 -0
- package/content/templates/common-paper-statement-of-work/replacements.json +3 -0
- package/content/templates/common-paper-statement-of-work/template.docx +0 -0
- package/content/templates/common-paper-term-sheet/README.md +22 -0
- package/content/templates/common-paper-term-sheet/metadata.yaml +28 -0
- package/content/templates/common-paper-term-sheet/template.docx +0 -0
- package/content/templates/openagreements-employee-ip-inventions-assignment/README.md +31 -0
- package/content/templates/openagreements-employee-ip-inventions-assignment/metadata.yaml +71 -0
- package/content/templates/openagreements-employee-ip-inventions-assignment/template.docx +0 -0
- package/content/templates/openagreements-employee-ip-inventions-assignment/template.md +80 -0
- package/content/templates/openagreements-employment-confidentiality-acknowledgement/README.md +30 -0
- package/content/templates/openagreements-employment-confidentiality-acknowledgement/metadata.yaml +60 -0
- package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.docx +0 -0
- package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.md +51 -0
- package/content/templates/openagreements-employment-offer-letter/README.md +33 -0
- package/content/templates/openagreements-employment-offer-letter/metadata.yaml +75 -0
- package/content/templates/openagreements-employment-offer-letter/template.docx +0 -0
- package/content/templates/openagreements-employment-offer-letter/template.md +90 -0
- package/content/templates/working-group-list/metadata.yaml +22 -0
- package/content/templates/working-group-list/template.docx +0 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +199 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/checklist.d.ts +22 -0
- package/dist/commands/checklist.d.ts.map +1 -0
- package/dist/commands/checklist.js +222 -0
- package/dist/commands/checklist.js.map +1 -0
- package/dist/commands/fill.d.ts +18 -0
- package/dist/commands/fill.d.ts.map +1 -0
- package/dist/commands/fill.js +119 -0
- package/dist/commands/fill.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +247 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/recipe.d.ts +24 -0
- package/dist/commands/recipe.d.ts.map +1 -0
- package/dist/commands/recipe.js +96 -0
- package/dist/commands/recipe.js.map +1 -0
- package/dist/commands/scan.d.ts +28 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +138 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/validate.d.ts +6 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +158 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/checklist/index.d.ts +38 -0
- package/dist/core/checklist/index.d.ts.map +1 -0
- package/dist/core/checklist/index.js +229 -0
- package/dist/core/checklist/index.js.map +1 -0
- package/dist/core/checklist/patch-apply.d.ts +65 -0
- package/dist/core/checklist/patch-apply.d.ts.map +1 -0
- package/dist/core/checklist/patch-apply.js +274 -0
- package/dist/core/checklist/patch-apply.js.map +1 -0
- package/dist/core/checklist/patch-schemas.d.ts +86 -0
- package/dist/core/checklist/patch-schemas.d.ts.map +1 -0
- package/dist/core/checklist/patch-schemas.js +89 -0
- package/dist/core/checklist/patch-schemas.js.map +1 -0
- package/dist/core/checklist/patch-validator.d.ts +76 -0
- package/dist/core/checklist/patch-validator.d.ts.map +1 -0
- package/dist/core/checklist/patch-validator.js +404 -0
- package/dist/core/checklist/patch-validator.js.map +1 -0
- package/dist/core/checklist/schemas.d.ts +270 -0
- package/dist/core/checklist/schemas.d.ts.map +1 -0
- package/dist/core/checklist/schemas.js +229 -0
- package/dist/core/checklist/schemas.js.map +1 -0
- package/dist/core/checklist/test-utils.d.ts +7 -0
- package/dist/core/checklist/test-utils.d.ts.map +1 -0
- package/dist/core/checklist/test-utils.js +13 -0
- package/dist/core/checklist/test-utils.js.map +1 -0
- package/dist/core/command-generation/adapters/claude.d.ts +11 -0
- package/dist/core/command-generation/adapters/claude.d.ts.map +1 -0
- package/dist/core/command-generation/adapters/claude.js +91 -0
- package/dist/core/command-generation/adapters/claude.js.map +1 -0
- package/dist/core/command-generation/types.d.ts +14 -0
- package/dist/core/command-generation/types.d.ts.map +1 -0
- package/dist/core/command-generation/types.js +2 -0
- package/dist/core/command-generation/types.js.map +1 -0
- package/dist/core/employment/jurisdiction-rules.d.ts +20 -0
- package/dist/core/employment/jurisdiction-rules.d.ts.map +1 -0
- package/dist/core/employment/jurisdiction-rules.js +57 -0
- package/dist/core/employment/jurisdiction-rules.js.map +1 -0
- package/dist/core/employment/memo.d.ts +57 -0
- package/dist/core/employment/memo.d.ts.map +1 -0
- package/dist/core/employment/memo.js +589 -0
- package/dist/core/employment/memo.js.map +1 -0
- package/dist/core/engine.d.ts +13 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +182 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/external/index.d.ts +8 -0
- package/dist/core/external/index.d.ts.map +1 -0
- package/dist/core/external/index.js +50 -0
- package/dist/core/external/index.js.map +1 -0
- package/dist/core/external/types.d.ts +18 -0
- package/dist/core/external/types.d.ts.map +1 -0
- package/dist/core/external/types.js +2 -0
- package/dist/core/external/types.js.map +1 -0
- package/dist/core/fill-pipeline.d.ts +64 -0
- package/dist/core/fill-pipeline.d.ts.map +1 -0
- package/dist/core/fill-pipeline.js +350 -0
- package/dist/core/fill-pipeline.js.map +1 -0
- package/dist/core/fill-utils.d.ts +39 -0
- package/dist/core/fill-utils.d.ts.map +1 -0
- package/dist/core/fill-utils.js +127 -0
- package/dist/core/fill-utils.js.map +1 -0
- package/dist/core/metadata.d.ts +194 -0
- package/dist/core/metadata.d.ts.map +1 -0
- package/dist/core/metadata.js +197 -0
- package/dist/core/metadata.js.map +1 -0
- package/dist/core/recipe/bracket-normalizer.d.ts +46 -0
- package/dist/core/recipe/bracket-normalizer.d.ts.map +1 -0
- package/dist/core/recipe/bracket-normalizer.js +354 -0
- package/dist/core/recipe/bracket-normalizer.js.map +1 -0
- package/dist/core/recipe/cleaner.d.ts +27 -0
- package/dist/core/recipe/cleaner.d.ts.map +1 -0
- package/dist/core/recipe/cleaner.js +345 -0
- package/dist/core/recipe/cleaner.js.map +1 -0
- package/dist/core/recipe/computed.d.ts +136 -0
- package/dist/core/recipe/computed.d.ts.map +1 -0
- package/dist/core/recipe/computed.js +225 -0
- package/dist/core/recipe/computed.js.map +1 -0
- package/dist/core/recipe/downloader.d.ts +8 -0
- package/dist/core/recipe/downloader.d.ts.map +1 -0
- package/dist/core/recipe/downloader.js +58 -0
- package/dist/core/recipe/downloader.js.map +1 -0
- package/dist/core/recipe/index.d.ts +17 -0
- package/dist/core/recipe/index.d.ts.map +1 -0
- package/dist/core/recipe/index.js +90 -0
- package/dist/core/recipe/index.js.map +1 -0
- package/dist/core/recipe/ooxml-parts.d.ts +21 -0
- package/dist/core/recipe/ooxml-parts.d.ts.map +1 -0
- package/dist/core/recipe/ooxml-parts.js +33 -0
- package/dist/core/recipe/ooxml-parts.js.map +1 -0
- package/dist/core/recipe/patcher.d.ts +34 -0
- package/dist/core/recipe/patcher.d.ts.map +1 -0
- package/dist/core/recipe/patcher.js +423 -0
- package/dist/core/recipe/patcher.js.map +1 -0
- package/dist/core/recipe/replacement-keys.d.ts +33 -0
- package/dist/core/recipe/replacement-keys.d.ts.map +1 -0
- package/dist/core/recipe/replacement-keys.js +53 -0
- package/dist/core/recipe/replacement-keys.js.map +1 -0
- package/dist/core/recipe/source-drift.d.ts +33 -0
- package/dist/core/recipe/source-drift.d.ts.map +1 -0
- package/dist/core/recipe/source-drift.js +113 -0
- package/dist/core/recipe/source-drift.js.map +1 -0
- package/dist/core/recipe/types.d.ts +33 -0
- package/dist/core/recipe/types.d.ts.map +1 -0
- package/dist/core/recipe/types.js +2 -0
- package/dist/core/recipe/types.js.map +1 -0
- package/dist/core/recipe/verifier.d.ts +24 -0
- package/dist/core/recipe/verifier.d.ts.map +1 -0
- package/dist/core/recipe/verifier.js +158 -0
- package/dist/core/recipe/verifier.js.map +1 -0
- package/dist/core/selector.d.ts +41 -0
- package/dist/core/selector.d.ts.map +1 -0
- package/dist/core/selector.js +323 -0
- package/dist/core/selector.js.map +1 -0
- package/dist/core/unified-pipeline.d.ts +53 -0
- package/dist/core/unified-pipeline.d.ts.map +1 -0
- package/dist/core/unified-pipeline.js +107 -0
- package/dist/core/unified-pipeline.js.map +1 -0
- package/dist/core/validation/external.d.ts +16 -0
- package/dist/core/validation/external.d.ts.map +1 -0
- package/dist/core/validation/external.js +114 -0
- package/dist/core/validation/external.js.map +1 -0
- package/dist/core/validation/license.d.ts +15 -0
- package/dist/core/validation/license.d.ts.map +1 -0
- package/dist/core/validation/license.js +30 -0
- package/dist/core/validation/license.js.map +1 -0
- package/dist/core/validation/output.d.ts +12 -0
- package/dist/core/validation/output.d.ts.map +1 -0
- package/dist/core/validation/output.js +47 -0
- package/dist/core/validation/output.js.map +1 -0
- package/dist/core/validation/recipe.d.ts +19 -0
- package/dist/core/validation/recipe.d.ts.map +1 -0
- package/dist/core/validation/recipe.js +159 -0
- package/dist/core/validation/recipe.js.map +1 -0
- package/dist/core/validation/scan-metadata.d.ts +21 -0
- package/dist/core/validation/scan-metadata.d.ts.map +1 -0
- package/dist/core/validation/scan-metadata.js +70 -0
- package/dist/core/validation/scan-metadata.js.map +1 -0
- package/dist/core/validation/template.d.ts +11 -0
- package/dist/core/validation/template.d.ts.map +1 -0
- package/dist/core/validation/template.js +248 -0
- package/dist/core/validation/template.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/paths.d.ts +43 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +149 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +148 -0
- package/skills/cloud-service-agreement/CONNECTORS.md +19 -0
- package/skills/cloud-service-agreement/SKILL.md +172 -0
- package/skills/data-privacy-agreement/CONNECTORS.md +19 -0
- package/skills/data-privacy-agreement/SKILL.md +158 -0
- package/skills/delaware-franchise-tax/CONNECTORS.md +16 -0
- package/skills/delaware-franchise-tax/SKILL.md +206 -0
- package/skills/delaware-franchise-tax/reference/ecorp-portal-playwright-notes.md +136 -0
- package/skills/delaware-franchise-tax/reference/faq.md +101 -0
- package/skills/delaware-franchise-tax/reference/filing-instructions.md +111 -0
- package/skills/delaware-franchise-tax/reference/tax-calculation.md +167 -0
- package/skills/employment-contract/CONNECTORS.md +19 -0
- package/skills/employment-contract/SKILL.md +157 -0
- package/skills/nda/CONNECTORS.md +19 -0
- package/skills/nda/SKILL.md +153 -0
- package/skills/open-agreements/CONNECTORS.md +19 -0
- package/skills/open-agreements/SKILL.md +182 -0
- package/skills/safe/CONNECTORS.md +19 -0
- package/skills/safe/SKILL.md +161 -0
- package/skills/services-agreement/CONNECTORS.md +19 -0
- package/skills/services-agreement/SKILL.md +156 -0
- package/skills/unit-test-philosophy/SKILL.md +113 -0
- package/skills/unit-test-philosophy/references/allure-test-spec-writing-guide.md +164 -0
- package/skills/venture-financing/CONNECTORS.md +19 -0
- package/skills/venture-financing/SKILL.md +169 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { loadMetadata, loadCleanConfig } from './metadata.js';
|
|
4
|
+
import { loadSelectionsConfig } from './selector.js';
|
|
5
|
+
import { runFillPipeline } from './unified-pipeline.js';
|
|
6
|
+
import { BLANK_PLACEHOLDER, verifyTemplateFill } from './fill-utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Compute display fields for radio/checkbox groups in table rows.
|
|
9
|
+
* docx-templates only allows one {IF} per table row, so multi-option rows
|
|
10
|
+
* use a single computed display tag that the engine populates from input fields.
|
|
11
|
+
*
|
|
12
|
+
* This is template-specific logic — only activates when metadata declares
|
|
13
|
+
* the relevant display field names.
|
|
14
|
+
*/
|
|
15
|
+
function computeDisplayFields(data, fieldNames) {
|
|
16
|
+
const str = (key) => String(data[key] ?? '');
|
|
17
|
+
const bool = (key) => data[key] === true;
|
|
18
|
+
const isBlankPlaceholder = (value) => typeof value === 'string' && value.trim() === BLANK_PLACEHOLDER;
|
|
19
|
+
const toGoogleDocUrl = (value) => {
|
|
20
|
+
const raw = value.trim();
|
|
21
|
+
if (raw === '')
|
|
22
|
+
return '';
|
|
23
|
+
if (/^https?:\/\//i.test(raw))
|
|
24
|
+
return raw;
|
|
25
|
+
if (/^docs\.google\.com\/document\/d\//i.test(raw))
|
|
26
|
+
return `https://${raw}`;
|
|
27
|
+
if (/^[A-Za-z0-9_-]{20,}$/.test(raw))
|
|
28
|
+
return `https://docs.google.com/document/d/${raw}/`;
|
|
29
|
+
return raw;
|
|
30
|
+
};
|
|
31
|
+
// Optional cover-table rows in employment templates should disappear when blank.
|
|
32
|
+
// The default blank placeholder is intentionally visible in most contexts,
|
|
33
|
+
// but for these optional rows we normalize blank placeholders to empty strings
|
|
34
|
+
// so {IF field} conditions evaluate false and remove the row.
|
|
35
|
+
if (isBlankPlaceholder(data['bonus_terms'])) {
|
|
36
|
+
data['bonus_terms'] = '';
|
|
37
|
+
}
|
|
38
|
+
if (isBlankPlaceholder(data['equity_terms'])) {
|
|
39
|
+
data['equity_terms'] = '';
|
|
40
|
+
}
|
|
41
|
+
if (isBlankPlaceholder(data['cloud_drive_id'])) {
|
|
42
|
+
data['cloud_drive_id'] = '';
|
|
43
|
+
}
|
|
44
|
+
const cloudDriveId = typeof data['cloud_drive_id'] === 'string' ? data['cloud_drive_id'].trim() : '';
|
|
45
|
+
if (fieldNames.has('cloud_drive_id_footer')) {
|
|
46
|
+
const docUrl = cloudDriveId ? toGoogleDocUrl(cloudDriveId) : '';
|
|
47
|
+
data['cloud_drive_id_footer'] = docUrl ? `Document URL: ${docUrl}` : '';
|
|
48
|
+
}
|
|
49
|
+
// Order Date: "Date of last signature" or custom date
|
|
50
|
+
if (fieldNames.has('order_date_display') && !data['order_date_display']) {
|
|
51
|
+
data['order_date_display'] = bool('order_date_is_last_signature')
|
|
52
|
+
? '( x )\tDate of last signature on this Order Form'
|
|
53
|
+
: `( x )\t${str('custom_order_date')}`;
|
|
54
|
+
}
|
|
55
|
+
// Pilot fee: paid or free trial
|
|
56
|
+
if (fieldNames.has('pilot_fee_display') && !data['pilot_fee_display']) {
|
|
57
|
+
data['pilot_fee_display'] = bool('pilot_is_free')
|
|
58
|
+
? '( x )\tFree trial'
|
|
59
|
+
: `( x )\tFee for Pilot Period: ${str('pilot_fee')}`;
|
|
60
|
+
}
|
|
61
|
+
// Cloud Service Fees: build from selected checkboxes
|
|
62
|
+
if (fieldNames.has('fees_display') && !data['fees_display']) {
|
|
63
|
+
const lines = [];
|
|
64
|
+
if (bool('fee_is_per_unit')) {
|
|
65
|
+
lines.push(`[ x ] ${str('fees')} per ${str('fee_unit')}`);
|
|
66
|
+
}
|
|
67
|
+
if (bool('fee_is_other')) {
|
|
68
|
+
lines.push(`[ x ] Other fee structure: ${str('other_fee_structure')}`);
|
|
69
|
+
}
|
|
70
|
+
if (bool('fee_may_increase')) {
|
|
71
|
+
lines.push(`[ x ] Fees may increase up to ${str('fee_increase_cap_pct')}% per renewal`);
|
|
72
|
+
}
|
|
73
|
+
if (bool('fee_will_increase')) {
|
|
74
|
+
lines.push(`[ x ] Fees will increase ${str('fee_increase_fixed_pct')}% per renewal`);
|
|
75
|
+
}
|
|
76
|
+
if (bool('fee_inclusive_of_taxes')) {
|
|
77
|
+
lines.push('[ x ] Fees are inclusive of taxes (modifies Standard Terms Section 4.1)');
|
|
78
|
+
}
|
|
79
|
+
data['fees_display'] = lines.join('\n');
|
|
80
|
+
}
|
|
81
|
+
// Payment Process: invoice or automatic
|
|
82
|
+
if (fieldNames.has('payment_display') && !data['payment_display']) {
|
|
83
|
+
if (bool('payment_by_invoice')) {
|
|
84
|
+
const freq = str('payment_frequency');
|
|
85
|
+
const days = str('payment_terms_days');
|
|
86
|
+
const from = str('payment_due_from');
|
|
87
|
+
data['payment_display'] =
|
|
88
|
+
`( x )\tPay by invoice\n` +
|
|
89
|
+
`Provider will invoice Customer ${freq}.\n` +
|
|
90
|
+
`Customer will pay each invoice within ${days} days of ${from}.`;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const freq = str('payment_frequency');
|
|
94
|
+
data['payment_display'] =
|
|
95
|
+
`( x )\tAutomatic payment\n` +
|
|
96
|
+
`Customer authorizes Provider to charge the payment method on file ${freq}.`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Auto-renewal
|
|
100
|
+
if (fieldNames.has('auto_renewal_display') && !data['auto_renewal_display']) {
|
|
101
|
+
if (bool('auto_renew')) {
|
|
102
|
+
const days = str('non_renewal_notice_days');
|
|
103
|
+
data['auto_renewal_display'] =
|
|
104
|
+
`( x )\tNon-Renewal Notice Date is ${days} days before the end of the current Subscription Period.`;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
data['auto_renewal_display'] = '( x )\tThis Order does not automatically renew.';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Effective Date
|
|
111
|
+
if (fieldNames.has('effective_date_display') && !data['effective_date_display']) {
|
|
112
|
+
data['effective_date_display'] = bool('effective_date_is_last_signature')
|
|
113
|
+
? '( x )\tDate of last Cover Page signature'
|
|
114
|
+
: `( x )\t${str('custom_effective_date')}`;
|
|
115
|
+
}
|
|
116
|
+
// Covered Claims
|
|
117
|
+
if (fieldNames.has('covered_claims_display') && !data['covered_claims_display']) {
|
|
118
|
+
const lines = [];
|
|
119
|
+
if (bool('has_provider_covered_claims')) {
|
|
120
|
+
lines.push('[ x ] Provider Covered Claims: [Any action, proceeding, or claim that the Cloud Service, when used by Customer as permitted under the Agreement, infringes or misappropriates a third party\u2019s intellectual property rights.]');
|
|
121
|
+
}
|
|
122
|
+
if (bool('has_customer_covered_claims')) {
|
|
123
|
+
lines.push('[ x ] Customer Covered Claims: [Any action, proceeding, or claim that (1) the Customer Content, when used according to the Agreement, infringes or misappropriates a third party\u2019s intellectual property rights; or (2) results from the Customer\u2019s breach of Section 2.4.]');
|
|
124
|
+
}
|
|
125
|
+
data['covered_claims_display'] = lines.join('\n');
|
|
126
|
+
}
|
|
127
|
+
// General Cap Amount
|
|
128
|
+
if (fieldNames.has('general_cap_display') && !data['general_cap_display']) {
|
|
129
|
+
if (bool('general_cap_is_multiplier')) {
|
|
130
|
+
data['general_cap_display'] = `( x )\t${str('general_cap_multiplier')}x the Fees paid or payable by Customer in the 12 month period immediately preceding the claim`;
|
|
131
|
+
}
|
|
132
|
+
else if (bool('general_cap_is_dollar')) {
|
|
133
|
+
data['general_cap_display'] = `( x )\t$${str('general_cap_dollar')}`;
|
|
134
|
+
}
|
|
135
|
+
else if (bool('general_cap_is_greater_of')) {
|
|
136
|
+
data['general_cap_display'] = `( x )\tThe greater of $${str('general_cap_greater_dollar')} or ${str('general_cap_greater_multiplier')}x the Fees paid or payable by Customer in the 12 month period immediately preceding the claim`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export async function fillTemplate(options) {
|
|
141
|
+
const { templateDir, values, outputPath } = options;
|
|
142
|
+
const metadata = loadMetadata(templateDir);
|
|
143
|
+
const fieldNames = new Set(metadata.fields.map((f) => f.name));
|
|
144
|
+
// Warn about unknown keys not in metadata
|
|
145
|
+
const unknownKeys = Object.keys(values).filter((k) => !fieldNames.has(k));
|
|
146
|
+
if (unknownKeys.length > 0) {
|
|
147
|
+
console.warn(`Warning: unknown field(s) not in metadata: ${unknownKeys.join(', ')}`);
|
|
148
|
+
}
|
|
149
|
+
// Build cleanPatch if replacements.json exists
|
|
150
|
+
const templatePath = join(templateDir, 'template.docx');
|
|
151
|
+
const replacementsPath = join(templateDir, 'replacements.json');
|
|
152
|
+
const cleanPatch = existsSync(replacementsPath)
|
|
153
|
+
? {
|
|
154
|
+
cleanConfig: loadCleanConfig(templateDir),
|
|
155
|
+
replacements: JSON.parse(readFileSync(replacementsPath, 'utf-8')),
|
|
156
|
+
}
|
|
157
|
+
: undefined;
|
|
158
|
+
// Load selectionsConfig if selections.json exists
|
|
159
|
+
const selectionsPath = join(templateDir, 'selections.json');
|
|
160
|
+
const selectionsConfig = existsSync(selectionsPath)
|
|
161
|
+
? loadSelectionsConfig(selectionsPath)
|
|
162
|
+
: undefined;
|
|
163
|
+
const result = await runFillPipeline({
|
|
164
|
+
inputPath: templatePath,
|
|
165
|
+
outputPath,
|
|
166
|
+
values,
|
|
167
|
+
fields: metadata.fields,
|
|
168
|
+
requiredFieldNames: metadata.required_fields,
|
|
169
|
+
cleanPatch,
|
|
170
|
+
selectionsConfig,
|
|
171
|
+
coerceBooleans: true,
|
|
172
|
+
computeDisplayFields: (d) => computeDisplayFields(d, fieldNames),
|
|
173
|
+
fixSmartQuotes: true,
|
|
174
|
+
verify: (p) => verifyTemplateFill(p),
|
|
175
|
+
});
|
|
176
|
+
return {
|
|
177
|
+
outputPath: result.outputPath,
|
|
178
|
+
metadata,
|
|
179
|
+
fieldsUsed: result.fieldsUsed,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExternalFillOptions, ExternalFillResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run the external fill pipeline: integrity check → clean → patch → fill → verify.
|
|
4
|
+
* Uses the local DOCX file from the external/ directory (never modifies the original).
|
|
5
|
+
*/
|
|
6
|
+
export declare function runExternalFill(options: ExternalFillOptions): Promise<ExternalFillResult>;
|
|
7
|
+
export type { ExternalFillOptions, ExternalFillResult } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/external/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+C/F;AAED,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { loadExternalMetadata, loadCleanConfig } from '../metadata.js';
|
|
5
|
+
import { resolveExternalDir } from '../../utils/paths.js';
|
|
6
|
+
import { verifyOutput } from '../recipe/verifier.js';
|
|
7
|
+
import { runFillPipeline } from '../unified-pipeline.js';
|
|
8
|
+
/**
|
|
9
|
+
* Run the external fill pipeline: integrity check → clean → patch → fill → verify.
|
|
10
|
+
* Uses the local DOCX file from the external/ directory (never modifies the original).
|
|
11
|
+
*/
|
|
12
|
+
export async function runExternalFill(options) {
|
|
13
|
+
const { externalId, outputPath, values, keepIntermediate } = options;
|
|
14
|
+
const externalDir = resolveExternalDir(externalId);
|
|
15
|
+
const metadata = loadExternalMetadata(externalDir);
|
|
16
|
+
// SHA-256 integrity check
|
|
17
|
+
const docxPath = join(externalDir, 'template.docx');
|
|
18
|
+
const docxBuf = readFileSync(docxPath);
|
|
19
|
+
const actualHash = createHash('sha256').update(docxBuf).digest('hex');
|
|
20
|
+
if (actualHash !== metadata.source_sha256) {
|
|
21
|
+
throw new Error(`Integrity check failed for "${externalId}": DOCX has been modified.\n` +
|
|
22
|
+
` Expected SHA-256: ${metadata.source_sha256}\n` +
|
|
23
|
+
` Actual SHA-256: ${actualHash}`);
|
|
24
|
+
}
|
|
25
|
+
// CC-BY-ND redistribution warning
|
|
26
|
+
console.log(`\nNote: This is an external document (${metadata.license}). ` +
|
|
27
|
+
`You may fill it for your own use, but do not redistribute modified versions.\n` +
|
|
28
|
+
`See: ${metadata.source_url}\n`);
|
|
29
|
+
// Load clean config and replacements
|
|
30
|
+
const cleanConfig = loadCleanConfig(externalDir);
|
|
31
|
+
const replacementsPath = join(externalDir, 'replacements.json');
|
|
32
|
+
const replacements = JSON.parse(readFileSync(replacementsPath, 'utf-8'));
|
|
33
|
+
const result = await runFillPipeline({
|
|
34
|
+
inputPath: docxPath,
|
|
35
|
+
outputPath,
|
|
36
|
+
values,
|
|
37
|
+
fields: metadata.fields,
|
|
38
|
+
requiredFieldNames: metadata.required_fields,
|
|
39
|
+
cleanPatch: { cleanConfig, replacements },
|
|
40
|
+
verify: (p) => verifyOutput(p, values, replacements, cleanConfig),
|
|
41
|
+
keepIntermediate,
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
outputPath: result.outputPath,
|
|
45
|
+
metadata,
|
|
46
|
+
fieldsUsed: result.fieldsUsed,
|
|
47
|
+
stages: result.stages,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/external/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA4B;IAChE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEnD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,UAAU,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,+BAA+B,UAAU,8BAA8B;YACvE,uBAAuB,QAAQ,CAAC,aAAa,IAAI;YACjD,uBAAuB,UAAU,EAAE,CACpC,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,GAAG,CACT,yCAAyC,QAAQ,CAAC,OAAO,KAAK;QAC9D,gFAAgF;QAChF,QAAQ,QAAQ,CAAC,UAAU,IAAI,CAChC,CAAC;IAEF,qCAAqC;IACrC,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAChE,MAAM,YAAY,GAA2B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,SAAS,EAAE,QAAQ;QACnB,UAAU;QACV,MAAM;QACN,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,kBAAkB,EAAE,QAAQ,CAAC,eAAe;QAC5C,UAAU,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE;QACzC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC;QACjE,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAO;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ExternalMetadata } from '../metadata.js';
|
|
2
|
+
export interface ExternalFillOptions {
|
|
3
|
+
externalId: string;
|
|
4
|
+
outputPath: string;
|
|
5
|
+
values: Record<string, unknown>;
|
|
6
|
+
keepIntermediate?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ExternalFillResult {
|
|
9
|
+
outputPath: string;
|
|
10
|
+
metadata: ExternalMetadata;
|
|
11
|
+
fieldsUsed: string[];
|
|
12
|
+
stages: {
|
|
13
|
+
clean: string;
|
|
14
|
+
patch: string;
|
|
15
|
+
fill: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/external/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/external/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared fill pipeline used by all three fill paths (template, external, recipe).
|
|
3
|
+
* Centralizes: defaults, boolean coercion, display fields, currency sanitization,
|
|
4
|
+
* drafting note removal, and the docx-templates createReport() call.
|
|
5
|
+
*/
|
|
6
|
+
import type { FieldDefinition } from './metadata.js';
|
|
7
|
+
export interface PrepareFillDataOptions {
|
|
8
|
+
/** User-provided values. */
|
|
9
|
+
values: Record<string, unknown>;
|
|
10
|
+
/** Field definitions from metadata. */
|
|
11
|
+
fields: FieldDefinition[];
|
|
12
|
+
/** Required field names from metadata.required_fields. */
|
|
13
|
+
requiredFieldNames?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* When true, unfilled optional fields default to BLANK_PLACEHOLDER ('_______')
|
|
16
|
+
* so omissions are visible. When false, they default to '' (empty string).
|
|
17
|
+
* All fill paths use true by default.
|
|
18
|
+
*/
|
|
19
|
+
useBlankPlaceholder?: boolean;
|
|
20
|
+
/** Coerce boolean-typed fields to actual JS booleans for IF conditions. */
|
|
21
|
+
coerceBooleans?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Optional callback for computing display fields (template-specific).
|
|
24
|
+
* Called after defaults and boolean coercion are applied.
|
|
25
|
+
*/
|
|
26
|
+
computeDisplayFields?: (data: Record<string, unknown>) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface FillDocxOptions {
|
|
29
|
+
/** Template DOCX buffer (already patched with {tags}). */
|
|
30
|
+
templateBuffer: Buffer;
|
|
31
|
+
/** Prepared fill data from prepareFillData(). */
|
|
32
|
+
data: Record<string, unknown>;
|
|
33
|
+
/** Apply docx-templates smart quote normalization. */
|
|
34
|
+
fixSmartQuotes?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Regex patterns for paragraphs to remove before filling.
|
|
37
|
+
* Paragraphs whose text matches any pattern are stripped from the DOCX.
|
|
38
|
+
* If a matched paragraph is the only content in a table row, the entire
|
|
39
|
+
* row is removed to avoid empty highlighted rows.
|
|
40
|
+
*
|
|
41
|
+
* Default: `[/\bDrafting note\b/i]` — removes Common Paper drafting notes.
|
|
42
|
+
* Pass `[]` to disable.
|
|
43
|
+
*/
|
|
44
|
+
stripParagraphPatterns?: RegExp[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Prepare fill data with all normalization steps:
|
|
48
|
+
* 1. Validate required fields are present
|
|
49
|
+
* 2. Apply defaults for optional fields not provided
|
|
50
|
+
* 3. Coerce boolean fields (optional)
|
|
51
|
+
* 4. Compute display fields (optional, template-specific)
|
|
52
|
+
*/
|
|
53
|
+
export declare function prepareFillData(options: PrepareFillDataOptions): Record<string, unknown>;
|
|
54
|
+
/**
|
|
55
|
+
* Fill a DOCX template with prepared data:
|
|
56
|
+
* 1. Strip drafting note paragraphs (configurable, on by default)
|
|
57
|
+
* 2. Strip highlighting from runs with filled fields (unfilled keep their highlight)
|
|
58
|
+
* 3. Sanitize currency values by scanning the template buffer for ${field} patterns
|
|
59
|
+
* 4. Call docx-templates createReport() with standard delimiters
|
|
60
|
+
* 5. Remove structurally empty table rows left by conditional rendering
|
|
61
|
+
* 6. Return the filled buffer
|
|
62
|
+
*/
|
|
63
|
+
export declare function fillDocx(options: FillDocxOptions): Promise<Uint8Array>;
|
|
64
|
+
//# sourceMappingURL=fill-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill-pipeline.d.ts","sourceRoot":"","sources":["../../src/core/fill-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrD,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,uCAAuC;IACvC,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC;AAKD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkDxF;AAgRD;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA0C5E"}
|