@voyantjs/legal 0.81.16 → 0.81.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts/routes.js +2 -2
- package/dist/contracts/service-contracts.d.ts +1 -1
- package/dist/contracts/service-contracts.d.ts.map +1 -1
- package/dist/contracts/service-contracts.js +16 -11
- package/dist/contracts/service-documents.d.ts +1 -0
- package/dist/contracts/service-documents.d.ts.map +1 -1
- package/dist/contracts/service-documents.js +27 -6
- package/dist/contracts/service-shared.d.ts +1 -0
- package/dist/contracts/service-shared.d.ts.map +1 -1
- package/dist/contracts/service-shared.js +20 -0
- package/dist/contracts/service.d.ts +4 -3
- package/dist/contracts/service.d.ts.map +1 -1
- package/dist/contracts/service.js +2 -2
- package/package.json +9 -9
package/dist/contracts/routes.js
CHANGED
|
@@ -329,8 +329,8 @@ export function createContractsAdminRoutes(options = {}) {
|
|
|
329
329
|
const result = await contractsService.deleteContract(c.get("db"), c.req.param("id"));
|
|
330
330
|
if (result.status === "not_found")
|
|
331
331
|
return c.json({ error: "Contract not found" }, 404);
|
|
332
|
-
if (result.status === "
|
|
333
|
-
return c.json({ error: "Only draft contracts can be deleted" }, 409);
|
|
332
|
+
if (result.status === "not_deletable") {
|
|
333
|
+
return c.json({ error: "Only draft or void contracts can be deleted" }, 409);
|
|
334
334
|
}
|
|
335
335
|
return c.json({ success: true });
|
|
336
336
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-contracts.d.ts","sourceRoot":"","sources":["../../src/contracts/service-contracts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAGL,KAAK,+BAA+B,EAIrC,MAAM,gBAAgB,CAAA;AAOvB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,
|
|
1
|
+
{"version":3,"file":"service-contracts.d.ts","sourceRoot":"","sources":["../../src/contracts/service-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { people, personDirectoryView } from "@voyantjs/crm/schema";
|
|
|
2
2
|
import { and, desc, eq, getTableColumns, ilike, or, sql } from "drizzle-orm";
|
|
3
3
|
import { appendContractStageHistory, buildContractLifecycleEvent, checkContractLifecycleTransition, createContractStageHistoryEntry, emitContractLifecycleEvent, } from "./lifecycle.js";
|
|
4
4
|
import { contractAttachments, contractSignatures, contracts, contractTemplateVersions, } from "./schema.js";
|
|
5
|
-
import { allocateContractNumber, paginate, renderTemplate, toTimestamp, } from "./service-shared.js";
|
|
5
|
+
import { allocateContractNumber, mergeContractNumberIntoVariables, paginate, renderTemplate, toTimestamp, } from "./service-shared.js";
|
|
6
6
|
export const contractRecordsService = {
|
|
7
7
|
async listContracts(db, query) {
|
|
8
8
|
const conditions = [];
|
|
@@ -85,8 +85,9 @@ export const contractRecordsService = {
|
|
|
85
85
|
.limit(1);
|
|
86
86
|
if (!existing)
|
|
87
87
|
return { status: "not_found" };
|
|
88
|
-
if (existing.status !== "draft")
|
|
89
|
-
return { status: "
|
|
88
|
+
if (existing.status !== "draft" && existing.status !== "void") {
|
|
89
|
+
return { status: "not_deletable" };
|
|
90
|
+
}
|
|
90
91
|
await db.delete(contracts).where(eq(contracts.id, id));
|
|
91
92
|
return { status: "deleted" };
|
|
92
93
|
},
|
|
@@ -103,6 +104,16 @@ export const contractRecordsService = {
|
|
|
103
104
|
const transition = checkContractLifecycleTransition(contract.status, "issued");
|
|
104
105
|
if (!transition.ok)
|
|
105
106
|
return { status: transition.reason };
|
|
107
|
+
let contractNumber = contract.contractNumber;
|
|
108
|
+
if (!contractNumber && contract.seriesId) {
|
|
109
|
+
const allocated = await allocateContractNumber(tx, contract.seriesId);
|
|
110
|
+
if (allocated)
|
|
111
|
+
contractNumber = allocated.number;
|
|
112
|
+
}
|
|
113
|
+
const baseVariables = contract.variables ?? {};
|
|
114
|
+
const variables = contractNumber
|
|
115
|
+
? mergeContractNumberIntoVariables(baseVariables, contractNumber)
|
|
116
|
+
: baseVariables;
|
|
106
117
|
let renderedBody = contract.renderedBody;
|
|
107
118
|
let renderedBodyFormat = contract.renderedBodyFormat;
|
|
108
119
|
if (contract.templateVersionId) {
|
|
@@ -112,17 +123,10 @@ export const contractRecordsService = {
|
|
|
112
123
|
.where(eq(contractTemplateVersions.id, contract.templateVersionId))
|
|
113
124
|
.limit(1);
|
|
114
125
|
if (version) {
|
|
115
|
-
|
|
116
|
-
renderedBody = renderTemplate(version.body, "html", vars);
|
|
126
|
+
renderedBody = renderTemplate(version.body, "html", variables);
|
|
117
127
|
renderedBodyFormat = "html";
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
|
-
let contractNumber = contract.contractNumber;
|
|
121
|
-
if (!contractNumber && contract.seriesId) {
|
|
122
|
-
const allocated = await allocateContractNumber(tx, contract.seriesId);
|
|
123
|
-
if (allocated)
|
|
124
|
-
contractNumber = allocated.number;
|
|
125
|
-
}
|
|
126
130
|
const now = new Date();
|
|
127
131
|
const stageHistory = appendContractStageHistory(contract.stageHistory, createContractStageHistoryEntry("issued", {
|
|
128
132
|
previousStage: contract.status,
|
|
@@ -138,6 +142,7 @@ export const contractRecordsService = {
|
|
|
138
142
|
renderedBody,
|
|
139
143
|
renderedBodyFormat,
|
|
140
144
|
contractNumber,
|
|
145
|
+
variables: variables !== baseVariables ? variables : contract.variables,
|
|
141
146
|
updatedAt: now,
|
|
142
147
|
})
|
|
143
148
|
.where(eq(contracts.id, contractId))
|
|
@@ -66,6 +66,7 @@ export declare function createPdfContractDocumentGenerator(options: Omit<Storage
|
|
|
66
66
|
export declare const contractDocumentsService: {
|
|
67
67
|
generateContractDocument(db: PostgresJsDatabase, contractId: string, input: GenerateContractDocumentInput, runtime: ContractDocumentRuntimeOptions, options?: {
|
|
68
68
|
regenerated?: boolean;
|
|
69
|
+
forceRerender?: boolean;
|
|
69
70
|
}): Promise<{
|
|
70
71
|
status: "not_found" | "not_draft" | "render_unavailable" | "generator_failed";
|
|
71
72
|
} | ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-documents.d.ts","sourceRoot":"","sources":["../../src/contracts/service-documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"service-documents.d.ts","sourceRoot":"","sources":["../../src/contracts/service-documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { renderPdfDocument } from "@voyantjs/utils/pdf-renderer";
|
|
|
2
2
|
import { desc, eq } from "drizzle-orm";
|
|
3
3
|
import { contractAttachments, contracts, contractTemplateVersions } from "./schema.js";
|
|
4
4
|
import { contractRecordsService } from "./service-contracts.js";
|
|
5
|
-
import { isContractTemplateSyntaxError, renderTemplate } from "./service-shared.js";
|
|
5
|
+
import { isContractTemplateSyntaxError, mergeContractNumberIntoVariables, renderTemplate, } from "./service-shared.js";
|
|
6
6
|
const GENERATION_METADATA_KEYS = [
|
|
7
7
|
"lastGenerationStatus",
|
|
8
8
|
"lastGenerationError",
|
|
@@ -171,7 +171,7 @@ async function loadTemplateVersion(db, templateVersionId) {
|
|
|
171
171
|
.limit(1);
|
|
172
172
|
return version ?? null;
|
|
173
173
|
}
|
|
174
|
-
async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
174
|
+
async function ensureRenderedContract(db, contractId, issueIfDraft, runtime, options = {}) {
|
|
175
175
|
let contract = await contractRecordsService.getContractById(db, contractId);
|
|
176
176
|
if (!contract) {
|
|
177
177
|
return { status: "not_found" };
|
|
@@ -203,8 +203,22 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
203
203
|
const templateVersion = await loadTemplateVersion(db, contract.templateVersionId ?? null);
|
|
204
204
|
let renderedBody = contract.renderedBody;
|
|
205
205
|
let renderedBodyFormat = contract.renderedBodyFormat;
|
|
206
|
-
|
|
207
|
-
|
|
206
|
+
// Regenerate flows pass `forceRerender: true` so we don't reuse a
|
|
207
|
+
// cached body that was rendered before the series number was
|
|
208
|
+
// allocated (issue #1335). Without this, contracts issued before the
|
|
209
|
+
// allocate-before-render fix would keep regenerating PDFs from the
|
|
210
|
+
// stale body that still has the missing-value placeholder for
|
|
211
|
+
// `{{ contract.number }}`.
|
|
212
|
+
const needsRender = options.forceRerender || !renderedBody || !renderedBodyFormat;
|
|
213
|
+
if (needsRender && templateVersion) {
|
|
214
|
+
const baseVariables = contract.variables ?? {};
|
|
215
|
+
// Issue #1335: when re-rendering an already-issued contract (e.g. a
|
|
216
|
+
// regenerate request), make sure the allocated contract number is
|
|
217
|
+
// visible to the template as `{{ contract.number }}` /
|
|
218
|
+
// `{{ contract.contractNumber }}`.
|
|
219
|
+
const variables = contract.contractNumber
|
|
220
|
+
? mergeContractNumberIntoVariables(baseVariables, contract.contractNumber)
|
|
221
|
+
: baseVariables;
|
|
208
222
|
try {
|
|
209
223
|
renderedBody = renderTemplate(templateVersion.body, "html", variables);
|
|
210
224
|
}
|
|
@@ -249,7 +263,9 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
249
263
|
}
|
|
250
264
|
export const contractDocumentsService = {
|
|
251
265
|
async generateContractDocument(db, contractId, input, runtime, options = {}) {
|
|
252
|
-
const prepared = await ensureRenderedContract(db, contractId, input.issueIfDraft, runtime
|
|
266
|
+
const prepared = await ensureRenderedContract(db, contractId, input.issueIfDraft, runtime, {
|
|
267
|
+
forceRerender: options.forceRerender,
|
|
268
|
+
});
|
|
253
269
|
if (prepared.status === "not_found") {
|
|
254
270
|
return { status: "not_found" };
|
|
255
271
|
}
|
|
@@ -332,6 +348,11 @@ export const contractDocumentsService = {
|
|
|
332
348
|
return this.generateContractDocument(db, contractId, {
|
|
333
349
|
...input,
|
|
334
350
|
issueIfDraft: input.issueIfDraft,
|
|
335
|
-
}, runtime,
|
|
351
|
+
}, runtime,
|
|
352
|
+
// Force a fresh render so older contracts whose cached body was
|
|
353
|
+
// produced before the series-number allocation (issue #1335)
|
|
354
|
+
// get re-rendered against the current `contract.variables` /
|
|
355
|
+
// `contract.contractNumber` instead of reusing the stale body.
|
|
356
|
+
{ regenerated: true, forceRerender: true });
|
|
336
357
|
},
|
|
337
358
|
};
|
|
@@ -25,6 +25,7 @@ export declare class ContractTemplateSyntaxError extends Error {
|
|
|
25
25
|
export declare function isContractTemplateSyntaxError(error: unknown): error is ContractTemplateSyntaxError;
|
|
26
26
|
export declare function validateContractTemplateBody(body: string): void;
|
|
27
27
|
export declare function renderTemplate(body: string, bodyFormat: "markdown" | "html" | "lexical_json", variables: Record<string, unknown>): string;
|
|
28
|
+
export declare function mergeContractNumberIntoVariables(variables: Record<string, unknown>, contractNumber: string): Record<string, unknown>;
|
|
28
29
|
export declare function validateTemplateVariables(variableSchema: unknown, values: Record<string, unknown>): string[];
|
|
29
30
|
export declare function allocateContractNumber(db: PostgresJsDatabase, seriesId: string): Promise<{
|
|
30
31
|
number: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../../src/contracts/service-shared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../../src/contracts/service-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAG5B,OAAO,KAAK,EACV,uBAAuB,EACvB,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,mCAAmC,EACnC,yBAAyB,EACzB,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAC/F,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACtF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACtF,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AACpG,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAC9F,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAC9F,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACxF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC1F,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC1F,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAE9D;AAyCD,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAA;gBAE1B,MAAM,EAAE,mBAAmB,EAAE;CAK1C;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,2BAA2B,CAEtC;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,cAAc,EAChD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,MAAM,CASR;AAOD,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,OAAO,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAYV;AA+BD,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA2DtD;AAED,wBAAsB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAC7C,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EACvB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,EAC7C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;;;;;GAIf"}
|
|
@@ -75,6 +75,26 @@ export function renderTemplate(body, bodyFormat, variables) {
|
|
|
75
75
|
missingValuePlaceholder: CONTRACT_MISSING_VALUE_PLACEHOLDER,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
|
+
// When a contract is being issued or rendered, the allocated series
|
|
79
|
+
// number must be visible to the template via `{{ contract.number }}` /
|
|
80
|
+
// `{{ contract.contractNumber }}` (issue #1335). This helper merges the
|
|
81
|
+
// allocated value into both aliases without dropping caller-provided
|
|
82
|
+
// fields nested under `contract.*`.
|
|
83
|
+
export function mergeContractNumberIntoVariables(variables, contractNumber) {
|
|
84
|
+
const existingContract = variables.contract &&
|
|
85
|
+
typeof variables.contract === "object" &&
|
|
86
|
+
!Array.isArray(variables.contract)
|
|
87
|
+
? variables.contract
|
|
88
|
+
: {};
|
|
89
|
+
return {
|
|
90
|
+
...variables,
|
|
91
|
+
contract: {
|
|
92
|
+
...existingContract,
|
|
93
|
+
contractNumber,
|
|
94
|
+
number: contractNumber,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
78
98
|
export function validateTemplateVariables(variableSchema, values) {
|
|
79
99
|
const issues = [];
|
|
80
100
|
if (!variableSchema || typeof variableSchema !== "object")
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, renderTemplate, validateContractTemplateBody, validateTemplateVariables } from "./service-shared.js";
|
|
2
|
-
export { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, renderTemplate, validateContractTemplateBody, validateTemplateVariables, };
|
|
1
|
+
import { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, mergeContractNumberIntoVariables, renderTemplate, validateContractTemplateBody, validateTemplateVariables } from "./service-shared.js";
|
|
2
|
+
export { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, mergeContractNumberIntoVariables, renderTemplate, validateContractTemplateBody, validateTemplateVariables, };
|
|
3
3
|
export declare const contractsService: {
|
|
4
4
|
generateContractDocument(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string, input: import("./validation.js").GenerateContractDocumentInput, runtime: import("./service-documents.js").ContractDocumentRuntimeOptions, options?: {
|
|
5
5
|
regenerated?: boolean;
|
|
6
|
+
forceRerender?: boolean;
|
|
6
7
|
}): Promise<{
|
|
7
8
|
status: "not_found" | "not_draft" | "render_unavailable" | "generator_failed";
|
|
8
9
|
} | ({
|
|
@@ -137,7 +138,7 @@ export declare const contractsService: {
|
|
|
137
138
|
deleteContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
|
|
138
139
|
status: "not_found";
|
|
139
140
|
} | {
|
|
140
|
-
status: "
|
|
141
|
+
status: "not_deletable";
|
|
141
142
|
} | {
|
|
142
143
|
status: "deleted";
|
|
143
144
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/contracts/service.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAA;AAED,eAAO,MAAM,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/contracts/service.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,gCAAgC,EAChC,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,gCAAgC,EAChC,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAA;AAED,eAAO,MAAM,gBAAgB;;mBAMoiZ,CAAC;qBAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAAnqM,CAAC;eAAwB,CAAC;eAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAD1+M,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { contractRecordsService } from "./service-contracts.js";
|
|
2
2
|
import { contractDocumentsService } from "./service-documents.js";
|
|
3
3
|
import { contractSeriesService } from "./service-series.js";
|
|
4
|
-
import { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, renderTemplate, validateContractTemplateBody, validateTemplateVariables, } from "./service-shared.js";
|
|
4
|
+
import { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, mergeContractNumberIntoVariables, renderTemplate, validateContractTemplateBody, validateTemplateVariables, } from "./service-shared.js";
|
|
5
5
|
import { contractTemplatesService } from "./service-templates.js";
|
|
6
|
-
export { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, renderTemplate, validateContractTemplateBody, validateTemplateVariables, };
|
|
6
|
+
export { allocateContractNumber, ContractTemplateSyntaxError, isContractTemplateSyntaxError, mergeContractNumberIntoVariables, renderTemplate, validateContractTemplateBody, validateTemplateVariables, };
|
|
7
7
|
export const contractsService = {
|
|
8
8
|
...contractTemplatesService,
|
|
9
9
|
...contractSeriesService,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/legal",
|
|
3
|
-
"version": "0.81.
|
|
3
|
+
"version": "0.81.18",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -59,14 +59,14 @@
|
|
|
59
59
|
"drizzle-orm": "^0.45.2",
|
|
60
60
|
"hono": "^4.12.10",
|
|
61
61
|
"zod": "^4.3.6",
|
|
62
|
-
"@voyantjs/bookings": "0.81.
|
|
63
|
-
"@voyantjs/core": "0.81.
|
|
64
|
-
"@voyantjs/crm": "0.81.
|
|
65
|
-
"@voyantjs/db": "0.81.
|
|
66
|
-
"@voyantjs/hono": "0.81.
|
|
67
|
-
"@voyantjs/suppliers": "0.81.
|
|
68
|
-
"@voyantjs/utils": "0.81.
|
|
69
|
-
"@voyantjs/storage": "0.81.
|
|
62
|
+
"@voyantjs/bookings": "0.81.18",
|
|
63
|
+
"@voyantjs/core": "0.81.18",
|
|
64
|
+
"@voyantjs/crm": "0.81.18",
|
|
65
|
+
"@voyantjs/db": "0.81.18",
|
|
66
|
+
"@voyantjs/hono": "0.81.18",
|
|
67
|
+
"@voyantjs/suppliers": "0.81.18",
|
|
68
|
+
"@voyantjs/utils": "0.81.18",
|
|
69
|
+
"@voyantjs/storage": "0.81.18"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"typescript": "^6.0.2",
|