@botler/1403-form-filler-module 1.2.4 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/canvasser-data-mapper.test.d.ts +2 -0
- package/dist/__tests__/canvasser-data-mapper.test.d.ts.map +1 -0
- package/dist/__tests__/canvasser-data-mapper.test.js +92 -0
- package/dist/__tests__/canvasser-data-mapper.test.js.map +1 -0
- package/dist/canvasser-data-mapper.d.ts +13 -5
- package/dist/canvasser-data-mapper.d.ts.map +1 -1
- package/dist/canvasser-data-mapper.js +25 -13
- package/dist/canvasser-data-mapper.js.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasser-data-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/canvasser-data-mapper.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const canvasser_data_mapper_1 = require("../canvasser-data-mapper");
|
|
5
|
+
const { sanitizeName, capitalizeName } = canvasser_data_mapper_1.CanvasserDataMapper._testing;
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// sanitizeName
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
(0, vitest_1.describe)("sanitizeName", () => {
|
|
10
|
+
(0, vitest_1.it)("preserves simple names", () => {
|
|
11
|
+
(0, vitest_1.expect)(sanitizeName("Smith")).toBe("Smith");
|
|
12
|
+
(0, vitest_1.expect)(sanitizeName("Jane")).toBe("Jane");
|
|
13
|
+
});
|
|
14
|
+
(0, vitest_1.it)("preserves hyphens in compound names", () => {
|
|
15
|
+
(0, vitest_1.expect)(sanitizeName("Mary-Jane")).toBe("Mary-Jane");
|
|
16
|
+
(0, vitest_1.expect)(sanitizeName("Jean-Pierre")).toBe("Jean-Pierre");
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)("preserves straight apostrophes", () => {
|
|
19
|
+
(0, vitest_1.expect)(sanitizeName("O'Brien")).toBe("O'Brien");
|
|
20
|
+
(0, vitest_1.expect)(sanitizeName("D'Arcy")).toBe("D'Arcy");
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)("normalizes curly apostrophes to straight", () => {
|
|
23
|
+
// Right single quotation mark U+2019
|
|
24
|
+
(0, vitest_1.expect)(sanitizeName("O\u2019Brien")).toBe("O'Brien");
|
|
25
|
+
// Left single quotation mark U+2018
|
|
26
|
+
(0, vitest_1.expect)(sanitizeName("O\u2018Brien")).toBe("O'Brien");
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)("preserves periods in the middle of names", () => {
|
|
29
|
+
(0, vitest_1.expect)(sanitizeName("St. James")).toBe("St. James");
|
|
30
|
+
// Trailing periods are stripped (boundary cleanup)
|
|
31
|
+
(0, vitest_1.expect)(sanitizeName("Jr.")).toBe("Jr");
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)("preserves diacritics / accented characters", () => {
|
|
34
|
+
(0, vitest_1.expect)(sanitizeName("François")).toBe("François");
|
|
35
|
+
(0, vitest_1.expect)(sanitizeName("René")).toBe("René");
|
|
36
|
+
(0, vitest_1.expect)(sanitizeName("Jean-François")).toBe("Jean-François");
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)("strips digits and other symbols", () => {
|
|
39
|
+
(0, vitest_1.expect)(sanitizeName("Smith123")).toBe("Smith");
|
|
40
|
+
(0, vitest_1.expect)(sanitizeName("Jane!@#")).toBe("Jane");
|
|
41
|
+
(0, vitest_1.expect)(sanitizeName("O'Brien$%^")).toBe("O'Brien");
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.it)("strips leading/trailing special characters", () => {
|
|
44
|
+
(0, vitest_1.expect)(sanitizeName("--Smith")).toBe("Smith");
|
|
45
|
+
(0, vitest_1.expect)(sanitizeName("'Brien")).toBe("Brien");
|
|
46
|
+
(0, vitest_1.expect)(sanitizeName("Smith--")).toBe("Smith");
|
|
47
|
+
(0, vitest_1.expect)(sanitizeName("..Smith..")).toBe("Smith");
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)("handles spaces correctly", () => {
|
|
50
|
+
(0, vitest_1.expect)(sanitizeName(" Smith ")).toBe("Smith");
|
|
51
|
+
(0, vitest_1.expect)(sanitizeName("Van Der Berg")).toBe("Van Der Berg");
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.it)("returns empty string for null/undefined/empty", () => {
|
|
54
|
+
(0, vitest_1.expect)(sanitizeName(null)).toBe("");
|
|
55
|
+
(0, vitest_1.expect)(sanitizeName(undefined)).toBe("");
|
|
56
|
+
(0, vitest_1.expect)(sanitizeName("")).toBe("");
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)("handles complex real-world names", () => {
|
|
59
|
+
(0, vitest_1.expect)(sanitizeName("Mary-Jane O'Brien")).toBe("Mary-Jane O'Brien");
|
|
60
|
+
(0, vitest_1.expect)(sanitizeName("St. Clair-D'Angelo")).toBe("St. Clair-D'Angelo");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// capitalizeName
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
(0, vitest_1.describe)("capitalizeName", () => {
|
|
67
|
+
(0, vitest_1.it)("capitalizes first letter", () => {
|
|
68
|
+
(0, vitest_1.expect)(capitalizeName("smith")).toBe("Smith");
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.it)("capitalizes after spaces", () => {
|
|
71
|
+
(0, vitest_1.expect)(capitalizeName("van der berg")).toBe("Van Der Berg");
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)("capitalizes after hyphens", () => {
|
|
74
|
+
(0, vitest_1.expect)(capitalizeName("mary-jane")).toBe("Mary-Jane");
|
|
75
|
+
(0, vitest_1.expect)(capitalizeName("jean-pierre")).toBe("Jean-Pierre");
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)("capitalizes after apostrophes", () => {
|
|
78
|
+
(0, vitest_1.expect)(capitalizeName("o'brien")).toBe("O'Brien");
|
|
79
|
+
(0, vitest_1.expect)(capitalizeName("d'arcy")).toBe("D'Arcy");
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)("capitalizes after periods", () => {
|
|
82
|
+
(0, vitest_1.expect)(capitalizeName("st. james")).toBe("St. James");
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)("returns null/undefined as-is", () => {
|
|
85
|
+
(0, vitest_1.expect)(capitalizeName(null)).toBeNull();
|
|
86
|
+
(0, vitest_1.expect)(capitalizeName(undefined)).toBeUndefined();
|
|
87
|
+
});
|
|
88
|
+
(0, vitest_1.it)("returns empty string as-is", () => {
|
|
89
|
+
(0, vitest_1.expect)(capitalizeName("")).toBe("");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=canvasser-data-mapper.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasser-data-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/canvasser-data-mapper.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,13 +75,16 @@ export declare class CanvasserDataMapper {
|
|
|
75
75
|
*/
|
|
76
76
|
private static capitalizeName;
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
78
|
+
* Sanitize a human name, keeping only characters valid in names:
|
|
79
|
+
* Unicode letters, spaces, hyphens, apostrophes (straight and curly), and periods.
|
|
80
|
+
* Curly apostrophes (‘ ’) are normalized to straight apostrophes.
|
|
81
|
+
* Leading/trailing special characters are stripped.
|
|
82
|
+
* Returns empty string for null/undefined.
|
|
80
83
|
*
|
|
81
|
-
* @param value - The string to sanitize
|
|
82
|
-
* @returns Sanitized string
|
|
84
|
+
* @param value - The name string to sanitize
|
|
85
|
+
* @returns Sanitized name string
|
|
83
86
|
*/
|
|
84
|
-
private static
|
|
87
|
+
private static sanitizeName;
|
|
85
88
|
/**
|
|
86
89
|
* Format a phone number to the standard (XXX) XXX-XXXX format.
|
|
87
90
|
* Handles 10-digit and 11-digit (1 + area code) North American numbers.
|
|
@@ -106,5 +109,10 @@ export declare class CanvasserDataMapper {
|
|
|
106
109
|
* @returns Parsed Date or undefined if parsing fails
|
|
107
110
|
*/
|
|
108
111
|
private static parseDate;
|
|
112
|
+
/** @internal Exposed for unit testing only. */
|
|
113
|
+
static readonly _testing: {
|
|
114
|
+
sanitizeName: typeof CanvasserDataMapper.sanitizeName;
|
|
115
|
+
capitalizeName: typeof CanvasserDataMapper.capitalizeName;
|
|
116
|
+
};
|
|
109
117
|
}
|
|
110
118
|
//# sourceMappingURL=canvasser-data-mapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasser-data-mapper.d.ts","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IACjC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC7B;;;;;;;;;;;OAWG;WACW,eAAe,CAC1B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,mBAAmB,GAC/B,aAAa;IAiFhB;;;;;OAKG;WACW,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAY/D;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAqBrC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B
|
|
1
|
+
{"version":3,"file":"canvasser-data-mapper.d.ts","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IACjC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC7B;;;;;;;;;;;OAWG;WACW,eAAe,CAC1B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,mBAAmB,GAC/B,aAAa;IAiFhB;;;;;OAKG;WACW,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAY/D;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAqBrC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAkB3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAgCxB,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;MAItB;CACJ"}
|
|
@@ -47,9 +47,9 @@ class CanvasserDataMapper {
|
|
|
47
47
|
const middleName = this.capitalizeName(profile.middleName) ?? profile.middleName;
|
|
48
48
|
const fillerData = {
|
|
49
49
|
// Required name fields
|
|
50
|
-
surname: this.
|
|
51
|
-
givenName: this.
|
|
52
|
-
middleName: middleName ? this.
|
|
50
|
+
surname: this.sanitizeName(lastName),
|
|
51
|
+
givenName: this.sanitizeName(firstName),
|
|
52
|
+
middleName: middleName ? this.sanitizeName(middleName) : undefined,
|
|
53
53
|
// Phone number — prefer mobileNumber, fall back to additionalPhones[0]
|
|
54
54
|
telephoneNumber: this.formatPhoneNumber(profile.mobileNumber || (profile.additionalPhones?.[0] ?? "")),
|
|
55
55
|
// Email address (from users table)
|
|
@@ -161,26 +161,33 @@ class CanvasserDataMapper {
|
|
|
161
161
|
return name;
|
|
162
162
|
return name
|
|
163
163
|
.toLowerCase()
|
|
164
|
-
.replace(/(?:^|[\s\-'])\S/g, (char) => char.toUpperCase());
|
|
164
|
+
.replace(/(?:^|[\s\-'.'\u2019])\S/g, (char) => char.toUpperCase());
|
|
165
165
|
}
|
|
166
166
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
167
|
+
* Sanitize a human name, keeping only characters valid in names:
|
|
168
|
+
* Unicode letters, spaces, hyphens, apostrophes (straight and curly), and periods.
|
|
169
|
+
* Curly apostrophes (‘ ’) are normalized to straight apostrophes.
|
|
170
|
+
* Leading/trailing special characters are stripped.
|
|
171
|
+
* Returns empty string for null/undefined.
|
|
169
172
|
*
|
|
170
|
-
* @param value - The string to sanitize
|
|
171
|
-
* @returns Sanitized string
|
|
173
|
+
* @param value - The name string to sanitize
|
|
174
|
+
* @returns Sanitized name string
|
|
172
175
|
*/
|
|
173
|
-
static
|
|
176
|
+
static sanitizeName(value) {
|
|
174
177
|
if (!value)
|
|
175
178
|
return "";
|
|
179
|
+
// Normalize curly apostrophes to straight apostrophes
|
|
180
|
+
let normalized = value.replace(/[\u2018\u2019]/g, "'");
|
|
176
181
|
try {
|
|
177
|
-
//
|
|
178
|
-
|
|
182
|
+
// Keep Unicode letters, spaces, hyphens, apostrophes, and periods
|
|
183
|
+
normalized = normalized.replace(/[^\p{L} \-'.]/gu, "");
|
|
179
184
|
}
|
|
180
185
|
catch {
|
|
181
|
-
// Fallback
|
|
182
|
-
|
|
186
|
+
// Fallback for environments without Unicode property escape support
|
|
187
|
+
normalized = normalized.replace(/[^A-Za-z \-'.]/g, "");
|
|
183
188
|
}
|
|
189
|
+
// Strip leading/trailing special characters (keep only letters at boundaries)
|
|
190
|
+
return normalized.replace(/^[\-'.]+|[\-'.]+$/g, "").trim();
|
|
184
191
|
}
|
|
185
192
|
/**
|
|
186
193
|
* Format a phone number to the standard (XXX) XXX-XXXX format.
|
|
@@ -253,6 +260,11 @@ class CanvasserDataMapper {
|
|
|
253
260
|
}
|
|
254
261
|
return undefined;
|
|
255
262
|
}
|
|
263
|
+
/** @internal Exposed for unit testing only. */
|
|
264
|
+
static _testing = {
|
|
265
|
+
sanitizeName: CanvasserDataMapper.sanitizeName.bind(CanvasserDataMapper),
|
|
266
|
+
capitalizeName: CanvasserDataMapper.capitalizeName.bind(CanvasserDataMapper),
|
|
267
|
+
};
|
|
256
268
|
}
|
|
257
269
|
exports.CanvasserDataMapper = CanvasserDataMapper;
|
|
258
270
|
//# sourceMappingURL=canvasser-data-mapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasser-data-mapper.js","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAKH,mCAAsC;AAYtC;;;GAGG;AACH,MAAa,mBAAmB;IAC7B;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,eAAe,CAC1B,OAAyB,EACzB,SAA+B;QAE/B,iDAAiD;QACjD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAErC,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAC9C,OAAO,CAAC,SAAS,EACjB,mBAAW,CAAC,WAAW,CACzB,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAC1C,OAAO,CAAC,SAAS,EACjB,mBAAW,CAAC,OAAO,CACrB,CAAC;QAEF,iEAAiE;QACjE,MAAM,mBAAmB,GAAG,kBAAkB;YAC3C,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QACR,MAAM,kBAAkB,GAAG,cAAc;YACtC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;YACvC,CAAC,CAAC,EAAE,CAAC;QAER,0CAA0C;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,iDAAiD;QACjD,MAAM,SAAS,GACZ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;QAC/D,MAAM,QAAQ,GACX,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC;QAC7D,MAAM,UAAU,GACb,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;QAEjE,MAAM,UAAU,GAAkB;YAC/B,uBAAuB;YACvB,OAAO,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"canvasser-data-mapper.js","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botler/1403-form-filler-module",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Fills Alberta Form 1403 PDFs for canvassers. Fetches data from Neon PostgreSQL, fills PDF form fields, overlays cursive signatures, flattens to image-PDFs, merges per-batch, and uploads to S3.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"start:single": "npx tsx src/cli.ts --id",
|
|
33
33
|
"start:all": "npx tsx src/cli.ts --all",
|
|
34
34
|
"start:dry-run": "npx tsx src/cli.ts --all --dry-run",
|
|
35
|
-
"typecheck": "tsc --noEmit"
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"test": "vitest run"
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
39
|
"@aws-sdk/client-s3": "^3.859.0",
|
|
@@ -47,7 +48,8 @@
|
|
|
47
48
|
"@types/node": "latest",
|
|
48
49
|
"@types/pg": "latest",
|
|
49
50
|
"tsx": "latest",
|
|
50
|
-
"typescript": "latest"
|
|
51
|
+
"typescript": "latest",
|
|
52
|
+
"vitest": "^4.0.18"
|
|
51
53
|
},
|
|
52
54
|
"engines": {
|
|
53
55
|
"node": ">=18"
|