@botler/1403-form-filler-module 1.2.4 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +97 -0
- package/dist/__tests__/canvasser-data-mapper.test.js.map +1 -0
- package/dist/canvasser-data-mapper.d.ts +12 -5
- package/dist/canvasser-data-mapper.d.ts.map +1 -1
- package/dist/canvasser-data-mapper.js +19 -17
- 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,97 @@
|
|
|
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 anywhere in names", () => {
|
|
29
|
+
(0, vitest_1.expect)(sanitizeName("St. James")).toBe("St. James");
|
|
30
|
+
(0, vitest_1.expect)(sanitizeName("Jr.")).toBe("Jr.");
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)("preserves diacritics / accented characters", () => {
|
|
33
|
+
(0, vitest_1.expect)(sanitizeName("François")).toBe("François");
|
|
34
|
+
(0, vitest_1.expect)(sanitizeName("René")).toBe("René");
|
|
35
|
+
(0, vitest_1.expect)(sanitizeName("Jean-François")).toBe("Jean-François");
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)("preserves digits and symbols", () => {
|
|
38
|
+
(0, vitest_1.expect)(sanitizeName("Smith123")).toBe("Smith123");
|
|
39
|
+
(0, vitest_1.expect)(sanitizeName("Jane!@#")).toBe("Jane!@#");
|
|
40
|
+
(0, vitest_1.expect)(sanitizeName("O'Brien$%^")).toBe("O'Brien$%^");
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)("preserves leading/trailing special characters", () => {
|
|
43
|
+
(0, vitest_1.expect)(sanitizeName("--Smith")).toBe("--Smith");
|
|
44
|
+
(0, vitest_1.expect)(sanitizeName("'Brien")).toBe("'Brien");
|
|
45
|
+
(0, vitest_1.expect)(sanitizeName("Smith--")).toBe("Smith--");
|
|
46
|
+
(0, vitest_1.expect)(sanitizeName("..Smith..")).toBe("..Smith..");
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)("preserves brackets and other printable characters", () => {
|
|
49
|
+
(0, vitest_1.expect)(sanitizeName("Smith (Jr)")).toBe("Smith (Jr)");
|
|
50
|
+
(0, vitest_1.expect)(sanitizeName("Jane [Doe]")).toBe("Jane [Doe]");
|
|
51
|
+
(0, vitest_1.expect)(sanitizeName("Test {Name}")).toBe("Test {Name}");
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.it)("trims leading/trailing whitespace", () => {
|
|
54
|
+
(0, vitest_1.expect)(sanitizeName(" Smith ")).toBe("Smith");
|
|
55
|
+
(0, vitest_1.expect)(sanitizeName(" Jane Doe ")).toBe("Jane Doe");
|
|
56
|
+
(0, vitest_1.expect)(sanitizeName("Van Der Berg")).toBe("Van Der Berg");
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)("returns empty string for null/undefined/empty", () => {
|
|
59
|
+
(0, vitest_1.expect)(sanitizeName(null)).toBe("");
|
|
60
|
+
(0, vitest_1.expect)(sanitizeName(undefined)).toBe("");
|
|
61
|
+
(0, vitest_1.expect)(sanitizeName("")).toBe("");
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)("handles complex real-world names", () => {
|
|
64
|
+
(0, vitest_1.expect)(sanitizeName("Mary-Jane O'Brien")).toBe("Mary-Jane O'Brien");
|
|
65
|
+
(0, vitest_1.expect)(sanitizeName("St. Clair-D'Angelo")).toBe("St. Clair-D'Angelo");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// capitalizeName
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
(0, vitest_1.describe)("capitalizeName", () => {
|
|
72
|
+
(0, vitest_1.it)("capitalizes first letter", () => {
|
|
73
|
+
(0, vitest_1.expect)(capitalizeName("smith")).toBe("Smith");
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)("capitalizes after spaces", () => {
|
|
76
|
+
(0, vitest_1.expect)(capitalizeName("van der berg")).toBe("Van Der Berg");
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.it)("capitalizes after hyphens", () => {
|
|
79
|
+
(0, vitest_1.expect)(capitalizeName("mary-jane")).toBe("Mary-Jane");
|
|
80
|
+
(0, vitest_1.expect)(capitalizeName("jean-pierre")).toBe("Jean-Pierre");
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.it)("capitalizes after apostrophes", () => {
|
|
83
|
+
(0, vitest_1.expect)(capitalizeName("o'brien")).toBe("O'Brien");
|
|
84
|
+
(0, vitest_1.expect)(capitalizeName("d'arcy")).toBe("D'Arcy");
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.it)("capitalizes after periods", () => {
|
|
87
|
+
(0, vitest_1.expect)(capitalizeName("st. james")).toBe("St. James");
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)("returns null/undefined as-is", () => {
|
|
90
|
+
(0, vitest_1.expect)(capitalizeName(null)).toBeNull();
|
|
91
|
+
(0, vitest_1.expect)(capitalizeName(undefined)).toBeUndefined();
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.it)("returns empty string as-is", () => {
|
|
94
|
+
(0, vitest_1.expect)(capitalizeName("")).toBe("");
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# 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,15 @@ export declare class CanvasserDataMapper {
|
|
|
75
75
|
*/
|
|
76
76
|
private static capitalizeName;
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
78
|
+
* Normalize a human name: curly apostrophes are converted to straight
|
|
79
|
+
* apostrophes, and leading/trailing whitespace is trimmed.
|
|
80
|
+
* All printable characters (brackets, periods, digits, etc.) are preserved.
|
|
81
|
+
* Returns empty string for null/undefined.
|
|
80
82
|
*
|
|
81
|
-
* @param value - The string to
|
|
82
|
-
* @returns
|
|
83
|
+
* @param value - The name string to normalize
|
|
84
|
+
* @returns Normalized, trimmed name string
|
|
83
85
|
*/
|
|
84
|
-
private static
|
|
86
|
+
private static sanitizeName;
|
|
85
87
|
/**
|
|
86
88
|
* Format a phone number to the standard (XXX) XXX-XXXX format.
|
|
87
89
|
* Handles 10-digit and 11-digit (1 + area code) North American numbers.
|
|
@@ -106,5 +108,10 @@ export declare class CanvasserDataMapper {
|
|
|
106
108
|
* @returns Parsed Date or undefined if parsing fails
|
|
107
109
|
*/
|
|
108
110
|
private static parseDate;
|
|
111
|
+
/** @internal Exposed for unit testing only. */
|
|
112
|
+
static readonly _testing: {
|
|
113
|
+
sanitizeName: typeof CanvasserDataMapper.sanitizeName;
|
|
114
|
+
capitalizeName: typeof CanvasserDataMapper.capitalizeName;
|
|
115
|
+
};
|
|
109
116
|
}
|
|
110
117
|
//# 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;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAS3B;;;;;;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,23 @@ 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
|
+
* Normalize a human name: curly apostrophes are converted to straight
|
|
168
|
+
* apostrophes, and leading/trailing whitespace is trimmed.
|
|
169
|
+
* All printable characters (brackets, periods, digits, etc.) are preserved.
|
|
170
|
+
* Returns empty string for null/undefined.
|
|
169
171
|
*
|
|
170
|
-
* @param value - The string to
|
|
171
|
-
* @returns
|
|
172
|
+
* @param value - The name string to normalize
|
|
173
|
+
* @returns Normalized, trimmed name string
|
|
172
174
|
*/
|
|
173
|
-
static
|
|
175
|
+
static sanitizeName(value) {
|
|
174
176
|
if (!value)
|
|
175
177
|
return "";
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
// Fallback to ASCII letters if Unicode property escapes are unsupported
|
|
182
|
-
return value.replace(/[^A-Za-z ]/g, "").trim();
|
|
183
|
-
}
|
|
178
|
+
// Normalize curly apostrophes to straight apostrophes
|
|
179
|
+
const normalized = value.replace(/[\u2018\u2019]/g, "'");
|
|
180
|
+
return normalized.trim();
|
|
184
181
|
}
|
|
185
182
|
/**
|
|
186
183
|
* Format a phone number to the standard (XXX) XXX-XXXX format.
|
|
@@ -253,6 +250,11 @@ class CanvasserDataMapper {
|
|
|
253
250
|
}
|
|
254
251
|
return undefined;
|
|
255
252
|
}
|
|
253
|
+
/** @internal Exposed for unit testing only. */
|
|
254
|
+
static _testing = {
|
|
255
|
+
sanitizeName: CanvasserDataMapper.sanitizeName.bind(CanvasserDataMapper),
|
|
256
|
+
capitalizeName: CanvasserDataMapper.capitalizeName.bind(CanvasserDataMapper),
|
|
257
|
+
};
|
|
256
258
|
}
|
|
257
259
|
exports.CanvasserDataMapper = CanvasserDataMapper;
|
|
258
260
|
//# 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.1",
|
|
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"
|