open-agreements 0.7.5 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.de.md +300 -255
  2. package/README.es.md +301 -254
  3. package/README.md +389 -95
  4. package/README.pt-br.md +301 -254
  5. package/README.template.md +333 -0
  6. package/README.zh.md +300 -253
  7. package/SECURITY.md +34 -0
  8. package/content/recipes/nvca-stock-purchase-agreement/README.md +39 -0
  9. package/content/recipes/nvca-voting-agreement/README.md +43 -0
  10. package/content/templates/bonterms-mutual-nda/README.md +2 -2
  11. package/content/templates/bonterms-mutual-nda/metadata.yaml +5 -11
  12. package/content/templates/bonterms-professional-services-agreement/README.md +2 -2
  13. package/content/templates/bonterms-professional-services-agreement/metadata.yaml +2 -2
  14. package/content/templates/closing-checklist/template.docx +0 -0
  15. package/content/templates/closing-checklist/template.md +30 -0
  16. package/content/templates/common-paper-ai-addendum/template.docx +0 -0
  17. package/content/templates/common-paper-ai-addendum-in-app/template.docx +0 -0
  18. package/content/templates/common-paper-csa-with-ai/template.docx +0 -0
  19. package/content/templates/common-paper-independent-contractor-agreement/template.docx +0 -0
  20. package/content/templates/common-paper-mutual-nda/README.md +28 -0
  21. package/content/templates/common-paper-one-way-nda/metadata.yaml +1 -1
  22. package/content/templates/common-paper-term-sheet/template.docx +0 -0
  23. package/content/templates/openagreements-board-consent-safe/.template.generated.json +74 -0
  24. package/content/templates/openagreements-board-consent-safe/README.md +61 -0
  25. package/content/templates/openagreements-board-consent-safe/metadata.yaml +53 -0
  26. package/content/templates/openagreements-board-consent-safe/reference-source.docx +0 -0
  27. package/content/templates/openagreements-board-consent-safe/template.docx +0 -0
  28. package/content/templates/openagreements-board-consent-safe/template.md +66 -0
  29. package/content/templates/openagreements-due-diligence-request-list/README.md +68 -0
  30. package/content/templates/openagreements-due-diligence-request-list/metadata.yaml +300 -0
  31. package/content/templates/openagreements-due-diligence-request-list/template.docx +0 -0
  32. package/content/templates/openagreements-due-diligence-request-list/template.md +318 -0
  33. package/content/templates/openagreements-employee-ip-inventions-assignment/.template.generated.json +230 -0
  34. package/content/templates/openagreements-employee-ip-inventions-assignment/metadata.yaml +1 -1
  35. package/content/templates/openagreements-employee-ip-inventions-assignment/template.docx +0 -0
  36. package/content/templates/openagreements-employee-ip-inventions-assignment/template.md +96 -35
  37. package/content/templates/openagreements-employment-confidentiality-acknowledgement/README.md +1 -1
  38. package/content/templates/openagreements-employment-confidentiality-acknowledgement/metadata.yaml +2 -2
  39. package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.docx +0 -0
  40. package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.json +75 -0
  41. package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.md +8 -4
  42. package/content/templates/openagreements-employment-offer-letter/.template.generated.json +224 -0
  43. package/content/templates/openagreements-employment-offer-letter/README.md +65 -1
  44. package/content/templates/openagreements-employment-offer-letter/metadata.yaml +1 -1
  45. package/content/templates/openagreements-employment-offer-letter/template.docx +0 -0
  46. package/content/templates/openagreements-employment-offer-letter/template.md +70 -30
  47. package/content/templates/openagreements-restrictive-covenant-florida/.template.generated.json +456 -0
  48. package/content/templates/openagreements-restrictive-covenant-florida/README.md +141 -0
  49. package/content/templates/openagreements-restrictive-covenant-florida/metadata.yaml +419 -0
  50. package/content/templates/openagreements-restrictive-covenant-florida/template.docx +0 -0
  51. package/content/templates/openagreements-restrictive-covenant-florida/template.md +233 -0
  52. package/content/templates/openagreements-restrictive-covenant-wyoming/.template.generated.json +399 -0
  53. package/content/templates/openagreements-restrictive-covenant-wyoming/metadata.yaml +69 -12
  54. package/content/templates/openagreements-restrictive-covenant-wyoming/template.docx +0 -0
  55. package/content/templates/openagreements-restrictive-covenant-wyoming/template.md +110 -59
  56. package/content/templates/openagreements-stockholder-consent-safe/.template.generated.json +74 -0
  57. package/content/templates/openagreements-stockholder-consent-safe/README.md +62 -0
  58. package/content/templates/openagreements-stockholder-consent-safe/metadata.yaml +53 -0
  59. package/content/templates/openagreements-stockholder-consent-safe/reference-source.docx +0 -0
  60. package/content/templates/openagreements-stockholder-consent-safe/template.docx +0 -0
  61. package/content/templates/openagreements-stockholder-consent-safe/template.md +62 -0
  62. package/content/templates/working-group-list/template.docx +0 -0
  63. package/content/templates/working-group-list/template.md +18 -0
  64. package/dist/cli/index.js.map +1 -1
  65. package/dist/commands/fill.d.ts +1 -1
  66. package/dist/commands/fill.d.ts.map +1 -1
  67. package/dist/commands/fill.js +4 -1
  68. package/dist/commands/fill.js.map +1 -1
  69. package/dist/commands/list.js +10 -0
  70. package/dist/commands/list.js.map +1 -1
  71. package/dist/commands/recipe.js.map +1 -1
  72. package/dist/core/employment/jurisdiction-rules.js +2 -2
  73. package/dist/core/employment/jurisdiction-rules.js.map +1 -1
  74. package/dist/core/employment/memo.d.ts +1 -1
  75. package/dist/core/employment/memo.d.ts.map +1 -1
  76. package/dist/core/employment/memo.js +14 -6
  77. package/dist/core/employment/memo.js.map +1 -1
  78. package/dist/core/engine.d.ts.map +1 -1
  79. package/dist/core/engine.js +28 -0
  80. package/dist/core/engine.js.map +1 -1
  81. package/dist/core/fill-pipeline.d.ts +30 -5
  82. package/dist/core/fill-pipeline.d.ts.map +1 -1
  83. package/dist/core/fill-pipeline.js +165 -9
  84. package/dist/core/fill-pipeline.js.map +1 -1
  85. package/dist/core/humanize-docx.d.ts +21 -0
  86. package/dist/core/humanize-docx.d.ts.map +1 -0
  87. package/dist/core/humanize-docx.js +492 -0
  88. package/dist/core/humanize-docx.js.map +1 -0
  89. package/dist/core/metadata.d.ts +118 -65
  90. package/dist/core/metadata.d.ts.map +1 -1
  91. package/dist/core/metadata.js +268 -13
  92. package/dist/core/metadata.js.map +1 -1
  93. package/dist/core/recipe/bracket-normalizer.d.ts +1 -1
  94. package/dist/core/recipe/bracket-normalizer.d.ts.map +1 -1
  95. package/dist/core/recipe/bracket-normalizer.js +3 -0
  96. package/dist/core/recipe/bracket-normalizer.js.map +1 -1
  97. package/dist/core/recipe/computed.d.ts +1 -1
  98. package/dist/core/recipe/computed.d.ts.map +1 -1
  99. package/dist/core/recipe/index.d.ts.map +1 -1
  100. package/dist/core/recipe/index.js +22 -4
  101. package/dist/core/recipe/index.js.map +1 -1
  102. package/dist/core/recipe/types.d.ts +1 -1
  103. package/dist/core/recipe/types.d.ts.map +1 -1
  104. package/dist/core/template-listing.d.ts +6 -8
  105. package/dist/core/template-listing.d.ts.map +1 -1
  106. package/dist/core/template-listing.js +24 -0
  107. package/dist/core/template-listing.js.map +1 -1
  108. package/dist/core/unified-pipeline.d.ts +2 -0
  109. package/dist/core/unified-pipeline.d.ts.map +1 -1
  110. package/dist/core/unified-pipeline.js +17 -1
  111. package/dist/core/unified-pipeline.js.map +1 -1
  112. package/dist/core/validation/template.d.ts +32 -0
  113. package/dist/core/validation/template.d.ts.map +1 -1
  114. package/dist/core/validation/template.js +163 -3
  115. package/dist/core/validation/template.js.map +1 -1
  116. package/dist/index.d.ts +1 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +2 -0
  119. package/dist/index.js.map +1 -1
  120. package/gemini-extension.json +1 -1
  121. package/package.json +26 -12
  122. package/skills/canonical-markdown-authoring/CONNECTORS.md +67 -0
  123. package/skills/canonical-markdown-authoring/SKILL.md +565 -0
  124. package/skills/client-email/SKILL.md +10 -6
  125. package/skills/cloud-service-agreement/CONNECTORS.md +2 -2
  126. package/skills/cloud-service-agreement/SKILL.md +38 -1
  127. package/skills/cloud-service-agreement/template-filling-execution.md +2 -2
  128. package/skills/data-privacy-agreement/CONNECTORS.md +2 -2
  129. package/skills/data-privacy-agreement/SKILL.md +2 -0
  130. package/skills/delaware-franchise-tax/SKILL.md +2 -0
  131. package/skills/edit-docx-agreement/SKILL.md +2 -0
  132. package/skills/employment-contract/CONNECTORS.md +2 -2
  133. package/skills/employment-contract/SKILL.md +25 -6
  134. package/skills/iso-27001-evidence-collection/SKILL.md +2 -0
  135. package/skills/iso-27001-internal-audit/SKILL.md +2 -0
  136. package/skills/nda/CONNECTORS.md +2 -2
  137. package/skills/nda/SKILL.md +45 -1
  138. package/skills/nda/template-filling-execution.md +12 -6
  139. package/skills/non-compete-contract-explainer/SKILL.md +107 -0
  140. package/skills/non-compete-contract-explainer/content/alabama.md +251 -0
  141. package/skills/non-compete-contract-explainer/content/alaska.md +160 -0
  142. package/skills/non-compete-contract-explainer/content/american-samoa.md +187 -0
  143. package/skills/non-compete-contract-explainer/content/arizona.md +293 -0
  144. package/skills/non-compete-contract-explainer/content/arkansas.md +235 -0
  145. package/skills/non-compete-contract-explainer/content/california.md +270 -0
  146. package/skills/non-compete-contract-explainer/content/cnmi.md +168 -0
  147. package/skills/non-compete-contract-explainer/content/colorado.md +277 -0
  148. package/skills/non-compete-contract-explainer/content/connecticut.md +220 -0
  149. package/skills/non-compete-contract-explainer/content/delaware.md +222 -0
  150. package/skills/non-compete-contract-explainer/content/district-of-columbia.md +263 -0
  151. package/skills/non-compete-contract-explainer/content/florida.md +267 -0
  152. package/skills/non-compete-contract-explainer/content/georgia.md +323 -0
  153. package/skills/non-compete-contract-explainer/content/guam.md +180 -0
  154. package/skills/non-compete-contract-explainer/content/hawaii.md +236 -0
  155. package/skills/non-compete-contract-explainer/content/idaho.md +258 -0
  156. package/skills/non-compete-contract-explainer/content/illinois.md +266 -0
  157. package/skills/non-compete-contract-explainer/content/india.md +269 -0
  158. package/skills/non-compete-contract-explainer/content/indiana.md +253 -0
  159. package/skills/non-compete-contract-explainer/content/iowa.md +232 -0
  160. package/skills/non-compete-contract-explainer/content/kansas.md +227 -0
  161. package/skills/non-compete-contract-explainer/content/kentucky.md +201 -0
  162. package/skills/non-compete-contract-explainer/content/louisiana.md +272 -0
  163. package/skills/non-compete-contract-explainer/content/maine.md +178 -0
  164. package/skills/non-compete-contract-explainer/content/maryland.md +244 -0
  165. package/skills/non-compete-contract-explainer/content/massachusetts.md +272 -0
  166. package/skills/non-compete-contract-explainer/content/michigan.md +222 -0
  167. package/skills/non-compete-contract-explainer/content/minnesota.md +171 -0
  168. package/skills/non-compete-contract-explainer/content/mississippi.md +237 -0
  169. package/skills/non-compete-contract-explainer/content/missouri.md +219 -0
  170. package/skills/non-compete-contract-explainer/content/montana.md +202 -0
  171. package/skills/non-compete-contract-explainer/content/nebraska.md +206 -0
  172. package/skills/non-compete-contract-explainer/content/nevada.md +278 -0
  173. package/skills/non-compete-contract-explainer/content/new-hampshire.md +233 -0
  174. package/skills/non-compete-contract-explainer/content/new-jersey.md +277 -0
  175. package/skills/non-compete-contract-explainer/content/new-mexico.md +244 -0
  176. package/skills/non-compete-contract-explainer/content/new-york.md +226 -0
  177. package/skills/non-compete-contract-explainer/content/north-carolina.md +346 -0
  178. package/skills/non-compete-contract-explainer/content/north-dakota.md +187 -0
  179. package/skills/non-compete-contract-explainer/content/ohio.md +207 -0
  180. package/skills/non-compete-contract-explainer/content/oklahoma.md +196 -0
  181. package/skills/non-compete-contract-explainer/content/oregon.md +359 -0
  182. package/skills/non-compete-contract-explainer/content/pennsylvania.md +254 -0
  183. package/skills/non-compete-contract-explainer/content/philippines.md +211 -0
  184. package/skills/non-compete-contract-explainer/content/puerto-rico.md +163 -0
  185. package/skills/non-compete-contract-explainer/content/rhode-island.md +171 -0
  186. package/skills/non-compete-contract-explainer/content/singapore.md +229 -0
  187. package/skills/non-compete-contract-explainer/content/south-carolina.md +226 -0
  188. package/skills/non-compete-contract-explainer/content/south-dakota.md +222 -0
  189. package/skills/non-compete-contract-explainer/content/tennessee.md +251 -0
  190. package/skills/non-compete-contract-explainer/content/texas.md +297 -0
  191. package/skills/non-compete-contract-explainer/content/us-virgin-islands.md +193 -0
  192. package/skills/non-compete-contract-explainer/content/utah.md +250 -0
  193. package/skills/non-compete-contract-explainer/content/vermont.md +193 -0
  194. package/skills/non-compete-contract-explainer/content/virginia.md +213 -0
  195. package/skills/non-compete-contract-explainer/content/washington.md +296 -0
  196. package/skills/non-compete-contract-explainer/content/west-virginia.md +187 -0
  197. package/skills/non-compete-contract-explainer/content/wisconsin.md +293 -0
  198. package/skills/non-compete-contract-explainer/content/wyoming.md +296 -0
  199. package/skills/non-compete-contract-explainer/manifest.json +540 -0
  200. package/skills/open-agreements/CONNECTORS.md +2 -2
  201. package/skills/open-agreements/SKILL.md +165 -67
  202. package/skills/open-agreements/template-filling-execution.md +2 -2
  203. package/skills/recipe-quality-audit/SKILL.md +2 -0
  204. package/skills/safe/CONNECTORS.md +2 -2
  205. package/skills/safe/SKILL.md +38 -1
  206. package/skills/safe/template-filling-execution.md +2 -2
  207. package/skills/services-agreement/CONNECTORS.md +2 -2
  208. package/skills/services-agreement/SKILL.md +40 -1
  209. package/skills/services-agreement/template-filling-execution.md +81 -0
  210. package/skills/shared/template-filling-execution.md +2 -2
  211. package/skills/soc2-readiness/SKILL.md +2 -0
  212. package/skills/unit-test-philosophy/SKILL.md +3 -0
  213. package/skills/venture-financing/CONNECTORS.md +2 -2
  214. package/skills/venture-financing/SKILL.md +2 -0
  215. package/content/templates/openagreements-restrictive-covenant-wyoming/practice-note.md +0 -103
@@ -0,0 +1,492 @@
1
+ // Human-fillable bracket-prose transform for catalog preview parity.
2
+ //
3
+ // The CLI fill path (`fillDocx`) swaps `{snake_case}` tokens for caller-supplied
4
+ // values — that is the API consumers use programmatically. Humans never see it.
5
+ //
6
+ // What humans DO see is the file served from usejunior.com/template-downloads/<id>.docx,
7
+ // which is run through a different transform that turns `{employer_name}` into
8
+ // `[Employer Legal Name]` (with a yellow highlight) so a lawyer opening the file in Word
9
+ // can read it as prose and tab through the must-fills.
10
+ //
11
+ // This module is a TypeScript port of dev-website's `scripts/generate_template_downloads.js`
12
+ // transform, so the catalog preview PNGs match what users actually download. The
13
+ // CLI fill path is unchanged — design split is intentional.
14
+ import { readFileSync } from 'node:fs';
15
+ import { basename, join, resolve } from 'node:path';
16
+ import AdmZip from 'adm-zip';
17
+ import { DOMParser, XMLSerializer } from '@xmldom/xmldom';
18
+ import yaml from 'js-yaml';
19
+ const W_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
20
+ const XML_NS = 'http://www.w3.org/XML/1998/namespace';
21
+ const W_P_TAG = 'p';
22
+ const W_R_TAG = 'r';
23
+ const W_RPR_TAG = 'rPr';
24
+ const W_T_TAG = 't';
25
+ const W_TC_TAG = 'tc';
26
+ const W_HIGHLIGHT_TAG = 'highlight';
27
+ const XML_SPACE_ATTR = 'xml:space';
28
+ const XML_PATH_RE = /^(word|docProps)\/.+\.xml$/;
29
+ const IF_MARKER_RE = /\{IF [^}]+\}/g;
30
+ const END_IF_MARKER_RE = /\{END-IF\}/g;
31
+ const FIELD_RE = /\{([a-z0-9_]+)\}/g;
32
+ const PLACEHOLDER_RE = /\{([a-z0-9_]+)\}/g;
33
+ const MULTI_SPACE_RE = /\s{2,}/g;
34
+ // Field-code elements whose content carries program-readable instructions
35
+ // (PAGE, NUMPAGES, etc.) or field markers — MULTI_SPACE_RE must not touch
36
+ // these or the rendered field can corrupt (#185, #109).
37
+ const FIELD_CODE_PRESERVE_RE = /<(w:instrText|w:fldChar)(\s+[^>]*)?(?:\/>|>[\s\S]*?<\/\1>)/g;
38
+ function collapseMultiSpaceOutsideFieldCodes(xml) {
39
+ FIELD_CODE_PRESERVE_RE.lastIndex = 0;
40
+ const out = [];
41
+ let lastIndex = 0;
42
+ let match;
43
+ while ((match = FIELD_CODE_PRESERVE_RE.exec(xml)) !== null) {
44
+ out.push(xml.slice(lastIndex, match.index).replace(MULTI_SPACE_RE, ' '));
45
+ out.push(match[0]);
46
+ lastIndex = match.index + match[0].length;
47
+ }
48
+ out.push(xml.slice(lastIndex).replace(MULTI_SPACE_RE, ' '));
49
+ return out.join('');
50
+ }
51
+ const EXACT_IF_MARKER_RE = /^\{IF\s+(!?[^}]+)\}$/;
52
+ const EXACT_END_IF_MARKER_RE = /^\{END-IF\}$/;
53
+ const HIGHLIGHT_PLACEHOLDER_RE = /(\[[^\]]+\])/g;
54
+ const PLACEHOLDER_ONLY_RE = /^\[[^\]]+\]$/;
55
+ const GENERIC_SUBLABELS = new Set(['duration']);
56
+ function hasOwn(obj, key) {
57
+ return Object.prototype.hasOwnProperty.call(obj, key);
58
+ }
59
+ function unique(values) {
60
+ return [...new Set(values.filter(Boolean))];
61
+ }
62
+ function fallbackFieldLabel(fieldName) {
63
+ return String(fieldName || '').trim();
64
+ }
65
+ function normalizeDisplayLabel(rawLabel) {
66
+ let label = String(rawLabel ?? '').replace(MULTI_SPACE_RE, ' ').trim();
67
+ if (label.length > 80) {
68
+ const sentence = label.split(/(?<=[.!?])\s+/, 1)[0];
69
+ if (sentence) {
70
+ label = sentence;
71
+ }
72
+ }
73
+ return label.replace(/\.$/, '');
74
+ }
75
+ function normalizeDefaultText(rawDefault) {
76
+ if (rawDefault == null || typeof rawDefault === 'boolean')
77
+ return null;
78
+ const text = String(rawDefault).replace(MULTI_SPACE_RE, ' ').trim();
79
+ return text;
80
+ }
81
+ function loadTemplateMetadataFields(templateDir) {
82
+ const metadataPath = join(templateDir, 'metadata.yaml');
83
+ let raw;
84
+ try {
85
+ raw = readFileSync(metadataPath, 'utf8');
86
+ }
87
+ catch {
88
+ return {};
89
+ }
90
+ const metadata = yaml.load(raw) ?? {};
91
+ const fields = {};
92
+ for (const field of metadata.fields ?? []) {
93
+ if (field && field.name) {
94
+ fields[field.name] = field;
95
+ }
96
+ }
97
+ return fields;
98
+ }
99
+ function loadStructuredPublicFieldMetadata(templateDir, publicFieldMetadataPath) {
100
+ if (!publicFieldMetadataPath)
101
+ return {};
102
+ let raw;
103
+ try {
104
+ raw = readFileSync(publicFieldMetadataPath, 'utf8');
105
+ }
106
+ catch {
107
+ return {};
108
+ }
109
+ const metadata = yaml.load(raw) ?? {};
110
+ const templateId = basename(templateDir);
111
+ const globalFields = metadata.global ?? {};
112
+ const templateFields = metadata.templates?.[templateId] ?? {};
113
+ const structuredFields = {};
114
+ for (const fieldName of unique([...Object.keys(globalFields), ...Object.keys(templateFields)])) {
115
+ const entry = { ...(globalFields[fieldName] ?? {}), ...(templateFields[fieldName] ?? {}) };
116
+ const normalizedEntry = {};
117
+ if (hasOwn(entry, 'label')) {
118
+ const label = normalizeDisplayLabel(entry.label);
119
+ if (label)
120
+ normalizedEntry.label = label;
121
+ }
122
+ if (hasOwn(entry, 'default')) {
123
+ const defaultText = normalizeDefaultText(entry.default);
124
+ if (defaultText !== null)
125
+ normalizedEntry.default = defaultText;
126
+ }
127
+ if (Object.keys(normalizedEntry).length > 0) {
128
+ structuredFields[fieldName] = normalizedEntry;
129
+ }
130
+ }
131
+ return structuredFields;
132
+ }
133
+ function buildFieldDefaults(templateDir) {
134
+ const metadataFields = loadTemplateMetadataFields(templateDir);
135
+ const defaults = {};
136
+ for (const [fieldName, field] of Object.entries(metadataFields)) {
137
+ if (!hasOwn(field, 'default'))
138
+ continue;
139
+ const defaultText = normalizeDefaultText(field.default);
140
+ if (defaultText !== null)
141
+ defaults[fieldName] = defaultText;
142
+ }
143
+ return defaults;
144
+ }
145
+ function extractPlaceholderNames(value) {
146
+ if (typeof value !== 'string')
147
+ return [];
148
+ return [...value.matchAll(PLACEHOLDER_RE)].map((match) => match[1]);
149
+ }
150
+ function buildEffectiveLabel(label, parentLabel, isSubRow) {
151
+ if (!label)
152
+ return '';
153
+ if (!isSubRow || !parentLabel)
154
+ return label;
155
+ if (GENERIC_SUBLABELS.has(label.toLowerCase()))
156
+ return `${parentLabel} ${label}`;
157
+ return label;
158
+ }
159
+ function collectRowLabels(rows, labels) {
160
+ let parentLabel = '';
161
+ for (const row of rows) {
162
+ if (!row || typeof row !== 'object')
163
+ continue;
164
+ const rowLabel = normalizeDisplayLabel(row.label ?? '');
165
+ if (rowLabel && !row.sub)
166
+ parentLabel = rowLabel;
167
+ const effectiveLabel = buildEffectiveLabel(rowLabel, parentLabel, Boolean(row.sub));
168
+ if (!effectiveLabel)
169
+ continue;
170
+ for (const key of ['value', 'left', 'right']) {
171
+ for (const fieldName of extractPlaceholderNames(row[key])) {
172
+ if (!labels[fieldName])
173
+ labels[fieldName] = effectiveLabel;
174
+ }
175
+ }
176
+ }
177
+ }
178
+ function collectStructuredLabels(node, labels = {}) {
179
+ if (Array.isArray(node)) {
180
+ for (const item of node)
181
+ collectStructuredLabels(item, labels);
182
+ return labels;
183
+ }
184
+ if (!node || typeof node !== 'object')
185
+ return labels;
186
+ const rec = node;
187
+ if (Array.isArray(rec.rows))
188
+ collectRowLabels(rec.rows, labels);
189
+ const label = normalizeDisplayLabel(rec.label ?? '');
190
+ if (label) {
191
+ for (const key of ['value', 'left', 'right']) {
192
+ for (const fieldName of extractPlaceholderNames(rec[key])) {
193
+ if (!labels[fieldName])
194
+ labels[fieldName] = label;
195
+ }
196
+ }
197
+ }
198
+ for (const value of Object.values(rec))
199
+ collectStructuredLabels(value, labels);
200
+ return labels;
201
+ }
202
+ function loadTemplateSpec(templateDir, templateSpecsDir) {
203
+ if (!templateSpecsDir)
204
+ return null;
205
+ const specPath = join(templateSpecsDir, `${basename(templateDir)}.json`);
206
+ let raw;
207
+ try {
208
+ raw = readFileSync(specPath, 'utf8');
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ return JSON.parse(raw);
214
+ }
215
+ function buildFieldLabels(templateDir, templateSpecsDir) {
216
+ const metadataFields = loadTemplateMetadataFields(templateDir);
217
+ const templateSpec = loadTemplateSpec(templateDir, templateSpecsDir);
218
+ const templateSpecLabels = templateSpec ? collectStructuredLabels(templateSpec) : {};
219
+ const fieldLabels = {};
220
+ for (const [fieldName, field] of Object.entries(metadataFields)) {
221
+ const baseFieldName = fieldName.endsWith('_footer') ? fieldName.slice(0, -7) : fieldName;
222
+ const displayFieldName = metadataFields[baseFieldName] ? baseFieldName : fieldName;
223
+ const displayField = metadataFields[displayFieldName] ?? field;
224
+ const description = field.description ? normalizeDisplayLabel(field.description) : '';
225
+ const displayDescription = displayField.description ? normalizeDisplayLabel(displayField.description) : '';
226
+ fieldLabels[fieldName] =
227
+ templateSpecLabels[fieldName] ||
228
+ templateSpecLabels[displayFieldName] ||
229
+ displayDescription ||
230
+ description ||
231
+ fallbackFieldLabel(displayFieldName);
232
+ }
233
+ return fieldLabels;
234
+ }
235
+ export function loadHumanizeContext(templateDir, opts = {}) {
236
+ const publicFieldMetadata = loadStructuredPublicFieldMetadata(templateDir, opts.publicFieldMetadataPath);
237
+ const fieldLabels = buildFieldLabels(templateDir, opts.templateSpecsDir);
238
+ for (const [fieldName, metadata] of Object.entries(publicFieldMetadata)) {
239
+ if (metadata.label)
240
+ fieldLabels[fieldName] = metadata.label;
241
+ }
242
+ const fieldDefaults = buildFieldDefaults(templateDir);
243
+ for (const [fieldName, metadata] of Object.entries(publicFieldMetadata)) {
244
+ if (hasOwn(metadata, 'default') && metadata.default !== undefined) {
245
+ fieldDefaults[fieldName] = metadata.default;
246
+ }
247
+ }
248
+ return { fieldLabels, fieldDefaults };
249
+ }
250
+ // --- XML transforms ---
251
+ function extractParagraphText(paragraph) {
252
+ const textNodes = paragraph.getElementsByTagNameNS(W_NS, W_T_TAG);
253
+ const parts = [];
254
+ for (let i = 0; i < textNodes.length; i += 1) {
255
+ parts.push(textNodes[i].textContent || '');
256
+ }
257
+ return parts.join('');
258
+ }
259
+ function isWordElement(node, localName) {
260
+ if (!node || typeof node !== 'object')
261
+ return false;
262
+ const el = node;
263
+ return el.nodeType === 1 && el.namespaceURI === W_NS && el.localName === localName;
264
+ }
265
+ function cleanupConditionalParagraphs(text) {
266
+ if (!text.includes('xmlns:w=') || !text.includes('<w:p'))
267
+ return text;
268
+ const parser = new DOMParser();
269
+ let root;
270
+ try {
271
+ root = parser.parseFromString(text, 'text/xml');
272
+ }
273
+ catch {
274
+ return text;
275
+ }
276
+ let changed = false;
277
+ while (true) {
278
+ let updated = false;
279
+ const parents = [root.documentElement];
280
+ const allDescendants = root.getElementsByTagName('*');
281
+ for (let i = 0; i < allDescendants.length; i += 1) {
282
+ parents.push(allDescendants[i]);
283
+ }
284
+ for (const parent of parents) {
285
+ if (!parent || !parent.childNodes)
286
+ continue;
287
+ const children = [];
288
+ for (let i = 0; i < parent.childNodes.length; i += 1) {
289
+ children.push(parent.childNodes[i]);
290
+ }
291
+ for (let index = 0; index < children.length; index += 1) {
292
+ const child = children[index];
293
+ if (!isWordElement(child, W_P_TAG))
294
+ continue;
295
+ const paragraphText = extractParagraphText(child).trim();
296
+ const ifMatch = paragraphText.match(EXACT_IF_MARKER_RE);
297
+ const isEndIf = EXACT_END_IF_MARKER_RE.test(paragraphText);
298
+ if (!ifMatch && !isEndIf)
299
+ continue;
300
+ // Inside a table cell, just strip the marker paragraph — preserves cell width.
301
+ if (parent.namespaceURI === W_NS && parent.localName === W_TC_TAG) {
302
+ parent.removeChild(child);
303
+ changed = true;
304
+ updated = true;
305
+ break;
306
+ }
307
+ if (isEndIf || !ifMatch) {
308
+ parent.removeChild(child);
309
+ changed = true;
310
+ updated = true;
311
+ break;
312
+ }
313
+ let endIndex = null;
314
+ const blockChildren = [];
315
+ for (let offset = index + 1; offset < children.length; offset += 1) {
316
+ const sibling = children[offset];
317
+ if (isWordElement(sibling, W_P_TAG) &&
318
+ EXACT_END_IF_MARKER_RE.test(extractParagraphText(sibling).trim())) {
319
+ endIndex = offset;
320
+ break;
321
+ }
322
+ blockChildren.push(sibling);
323
+ }
324
+ parent.removeChild(child);
325
+ changed = true;
326
+ if (endIndex !== null) {
327
+ const endMarker = children[endIndex];
328
+ if (endMarker && endMarker.parentNode === parent) {
329
+ parent.removeChild(endMarker);
330
+ }
331
+ // Negated condition `{IF !foo}` — strip the block content too.
332
+ if (ifMatch[1].trim().startsWith('!')) {
333
+ for (const blockChild of blockChildren) {
334
+ const bc = blockChild;
335
+ if (bc && bc.parentNode === parent) {
336
+ parent.removeChild(bc);
337
+ }
338
+ }
339
+ }
340
+ }
341
+ updated = true;
342
+ break;
343
+ }
344
+ if (updated)
345
+ break;
346
+ }
347
+ if (!updated)
348
+ break;
349
+ }
350
+ if (!changed)
351
+ return text;
352
+ return new XMLSerializer().serializeToString(root);
353
+ }
354
+ function replaceFieldTokens(text, fieldLabels, fieldDefaults) {
355
+ return text.replace(FIELD_RE, (_match, fieldName) => {
356
+ if (hasOwn(fieldDefaults, fieldName)) {
357
+ return fieldDefaults[fieldName];
358
+ }
359
+ const label = fieldLabels[fieldName] || fallbackFieldLabel(fieldName);
360
+ return `[${label}]`;
361
+ });
362
+ }
363
+ function highlightPlaceholderRuns(text) {
364
+ if (!text.includes('xmlns:w=') || !text.includes('<w:r'))
365
+ return text;
366
+ const parser = new DOMParser();
367
+ let root;
368
+ try {
369
+ root = parser.parseFromString(text, 'text/xml');
370
+ }
371
+ catch {
372
+ return text;
373
+ }
374
+ let changed = false;
375
+ while (true) {
376
+ let updated = false;
377
+ const runs = [];
378
+ const runList = root.getElementsByTagNameNS(W_NS, W_R_TAG);
379
+ for (let i = 0; i < runList.length; i += 1)
380
+ runs.push(runList[i]);
381
+ for (const run of runs) {
382
+ const childNodes = [];
383
+ for (let i = 0; i < run.childNodes.length; i += 1)
384
+ childNodes.push(run.childNodes[i]);
385
+ const textChildren = childNodes.filter((node) => isWordElement(node, W_T_TAG));
386
+ const nonTextChildren = childNodes.filter((node) => {
387
+ const el = node;
388
+ return (el && el.nodeType === 1 && el.namespaceURI === W_NS &&
389
+ el.localName !== W_T_TAG && el.localName !== W_RPR_TAG);
390
+ });
391
+ if (textChildren.length === 0 || nonTextChildren.length > 0)
392
+ continue;
393
+ const runText = textChildren.map((node) => node.textContent || '').join('');
394
+ const parts = runText.split(HIGHLIGHT_PLACEHOLDER_RE);
395
+ if (parts.length === 1)
396
+ continue;
397
+ const parent = run.parentNode;
398
+ if (!parent || parent.nodeType !== 1)
399
+ continue;
400
+ const baseRPr = childNodes.find((node) => isWordElement(node, W_RPR_TAG));
401
+ if (baseRPr &&
402
+ baseRPr.getElementsByTagNameNS(W_NS, W_HIGHLIGHT_TAG).length > 0 &&
403
+ PLACEHOLDER_ONLY_RE.test(runText)) {
404
+ continue;
405
+ }
406
+ const insertBefore = run.nextSibling;
407
+ // Reset lastIndex on the global regex between checks — same instance is reused.
408
+ HIGHLIGHT_PLACEHOLDER_RE.lastIndex = 0;
409
+ for (const part of parts) {
410
+ if (!part)
411
+ continue;
412
+ const newRun = root.createElementNS(W_NS, 'w:r');
413
+ let newRPr = null;
414
+ if (baseRPr) {
415
+ newRPr = baseRPr.cloneNode(true);
416
+ newRun.appendChild(newRPr);
417
+ }
418
+ // Whole part is a [bracket placeholder] — add yellow highlight.
419
+ if (PLACEHOLDER_ONLY_RE.test(part)) {
420
+ if (!newRPr) {
421
+ newRPr = root.createElementNS(W_NS, 'w:rPr');
422
+ newRun.appendChild(newRPr);
423
+ }
424
+ if (newRPr.getElementsByTagNameNS(W_NS, W_HIGHLIGHT_TAG).length === 0) {
425
+ const highlight = root.createElementNS(W_NS, 'w:highlight');
426
+ highlight.setAttributeNS(W_NS, 'w:val', 'yellow');
427
+ newRPr.appendChild(highlight);
428
+ }
429
+ }
430
+ const textNode = root.createElementNS(W_NS, 'w:t');
431
+ textNode.setAttributeNS(XML_NS, XML_SPACE_ATTR, 'preserve');
432
+ textNode.appendChild(root.createTextNode(part));
433
+ newRun.appendChild(textNode);
434
+ parent.insertBefore(newRun, insertBefore);
435
+ }
436
+ parent.removeChild(run);
437
+ changed = true;
438
+ updated = true;
439
+ break;
440
+ }
441
+ if (!updated)
442
+ break;
443
+ }
444
+ if (!changed)
445
+ return text;
446
+ return new XMLSerializer().serializeToString(root);
447
+ }
448
+ export function prettifyTemplateXml(text, fieldLabels, fieldDefaults, options = {}) {
449
+ let output = cleanupConditionalParagraphs(text);
450
+ output = output.replace(IF_MARKER_RE, '');
451
+ output = output.replace(END_IF_MARKER_RE, '');
452
+ output = replaceFieldTokens(output, fieldLabels, fieldDefaults);
453
+ output = collapseMultiSpaceOutsideFieldCodes(output);
454
+ if (options.highlight !== false) {
455
+ output = highlightPlaceholderRuns(output);
456
+ }
457
+ return output;
458
+ }
459
+ export function humanizeDocxBuffer(input, ctx) {
460
+ const sourceZip = new AdmZip(input);
461
+ const destinationZip = new AdmZip();
462
+ for (const entry of sourceZip.getEntries()) {
463
+ let data = entry.getData();
464
+ if (XML_PATH_RE.test(entry.entryName)) {
465
+ let text = data.toString('utf8');
466
+ text = cleanupConditionalParagraphs(text);
467
+ text = text.replace(IF_MARKER_RE, '');
468
+ text = text.replace(END_IF_MARKER_RE, '');
469
+ text = replaceFieldTokens(text, ctx.fieldLabels, ctx.fieldDefaults);
470
+ text = collapseMultiSpaceOutsideFieldCodes(text);
471
+ if (entry.entryName.startsWith('word/')) {
472
+ text = highlightPlaceholderRuns(text);
473
+ }
474
+ data = Buffer.from(text, 'utf8');
475
+ }
476
+ destinationZip.addFile(entry.entryName, data);
477
+ }
478
+ return destinationZip.toBuffer();
479
+ }
480
+ /**
481
+ * Public API. Reads template.docx from `templateDir`, applies the same humanize
482
+ * transform that dev-website's `generate_template_downloads.js` applies, and
483
+ * returns the resulting Buffer. The buffer is suitable for rasterizing into a
484
+ * catalog preview PNG that matches what users download.
485
+ */
486
+ export async function humanizeDocx(templateDir, opts = {}) {
487
+ const sourceDocx = resolve(templateDir, 'template.docx');
488
+ const input = readFileSync(sourceDocx);
489
+ const ctx = loadHumanizeContext(templateDir, opts);
490
+ return humanizeDocxBuffer(input, ctx);
491
+ }
492
+ //# sourceMappingURL=humanize-docx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"humanize-docx.js","sourceRoot":"","sources":["../../src/core/humanize-docx.ts"],"names":[],"mappings":"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"}