@mailwoman/annotations 4.15.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/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # @mailwoman/annotations
2
+
3
+ The composer for [Mailwoman](https://mailwoman.sister.software)'s OpenCage-style enrichment block. A
4
+ resolved coordinate gets enriched with derived data — timezone, UN/LOCODE, ISO/NUTS, coordinate formats
5
+ (DMS/MGRS/geohash/Maidenhead/Mercator), calling code, currency, sun times.
6
+
7
+ ```ts
8
+ import { composeAnnotators, toOpenCage, type Annotator } from "@mailwoman/annotations"
9
+
10
+ const annotate = composeAnnotators([coordinateFormats, countryReference, timezone])
11
+ const set = await annotate({ lat: 38.8977, lon: -77.0365 })
12
+
13
+ // native (camelCase) for our own API:
14
+ set.timezone?.name // "America/New_York"
15
+
16
+ // OpenCage-keyed for the compat APIs:
17
+ toOpenCage(set).timezone // { name: "America/New_York", offset_sec: -18000 }
18
+ ```
19
+
20
+ ## Design
21
+
22
+ `AnnotationSet` is the native typed representation (camelCase, source of truth). Each recipe package
23
+ implements `Annotator` — `(input: { lat, lon, place? }) => Partial<AnnotationSet>` — and fills the slice
24
+ it owns; `composeAnnotators` runs them concurrently and merges, skipping any that throw. Two serializers,
25
+ `toOpenCage()` and `toNative()`, render the set at the API edge. One schema, two shapes (the hybrid
26
+ decision).
27
+
28
+ Recipe packages: coordinate formats live in [`@mailwoman/spatial`](../spatial), country reference in
29
+ [`@mailwoman/codex`](../codex), and the data-backed lookups ship standalone
30
+ ([`@mailwoman/timezone-lookup`](../timezone-lookup), [`@mailwoman/un-locode-lookup`](../un-locode-lookup)).
package/out/index.d.ts ADDED
@@ -0,0 +1,163 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * `@mailwoman/annotations` — the composer for the OpenCage-style enrichment block.
7
+ *
8
+ * {@link AnnotationSet} is the native, typed, camelCase representation. Each recipe package
9
+ * (timezone, un-locode, coordinate formats in `@mailwoman/spatial`, country reference in
10
+ * `@mailwoman/codex`) implements the {@link Annotator} interface and fills part of it.
11
+ * {@link composeAnnotators} runs a set of annotators and merges their output. {@link toOpenCage}
12
+ * serializes to OpenCage's documented key names for the compat APIs; {@link toNative} returns our
13
+ * own shape. One schema, two serializers (the hybrid decision).
14
+ */
15
+ /** Degrees-minutes-seconds, rendered. */
16
+ export interface DMS {
17
+ lat: string;
18
+ lon: string;
19
+ }
20
+ /** Web Mercator (EPSG:3857) coordinate. */
21
+ export interface Mercator {
22
+ x: number;
23
+ y: number;
24
+ }
25
+ /** ISO 4217 currency. */
26
+ export interface CurrencyInfo {
27
+ isoCode: string;
28
+ name?: string;
29
+ symbol?: string;
30
+ }
31
+ /** IANA timezone + current offset. */
32
+ export interface TimezoneInfo {
33
+ name: string;
34
+ offsetSec?: number;
35
+ offsetString?: string;
36
+ }
37
+ /** Solar event times, epoch seconds (UTC) for the queried date. */
38
+ export interface SunTimes {
39
+ rise?: number;
40
+ set?: number;
41
+ noon?: number;
42
+ }
43
+ /** ISO 3166 codes for the resolved country. */
44
+ export interface Iso3166 {
45
+ alpha2?: string;
46
+ alpha3?: string;
47
+ numeric?: string;
48
+ }
49
+ /** EU NUTS statistical-region codes. */
50
+ export interface Nuts {
51
+ level1?: string;
52
+ level2?: string;
53
+ level3?: string;
54
+ }
55
+ /**
56
+ * The native enrichment set. Every field is optional; an annotator fills the slice it owns.
57
+ * camelCase throughout, structured sub-objects — the internal representation the serializers map
58
+ * from.
59
+ */
60
+ export interface AnnotationSet {
61
+ dms?: DMS;
62
+ mgrs?: string;
63
+ maidenhead?: string;
64
+ geohash?: string;
65
+ mercator?: Mercator;
66
+ /** Initial bearing (degrees) to Mecca. */
67
+ qiblaBearing?: number;
68
+ sun?: SunTimes;
69
+ /** E.164 country calling code (e.g. 1, 44). */
70
+ callingCode?: number;
71
+ currency?: CurrencyInfo;
72
+ /** Country flag emoji. */
73
+ flag?: string;
74
+ timezone?: TimezoneInfo;
75
+ iso3166?: Iso3166;
76
+ nuts?: Nuts;
77
+ /** UN/LOCODE, e.g. "US NYC". */
78
+ unLocode?: string;
79
+ /** US county FIPS. */
80
+ fips?: string;
81
+ /** Wikidata QID. */
82
+ wikidata?: string;
83
+ }
84
+ /** The input every annotator receives: a coordinate, and the resolved place when one is available. */
85
+ export interface AnnotatorInput {
86
+ lat: number;
87
+ lon: number;
88
+ /** The resolved place (ancestry, country, region…); shape owned by the resolver. */
89
+ place?: unknown;
90
+ /** ISO 3166-1 alpha-2 of the resolved country, when known — feeds country-reference annotators. */
91
+ countryCode?: string;
92
+ /** The resolved place's name (locality), when known — feeds name-keyed annotators (UN/LOCODE). */
93
+ placeName?: string;
94
+ /** The queried date for time-dependent annotations (sun times); defaults to "now" per annotator. */
95
+ date?: Date;
96
+ }
97
+ /** A unit of enrichment: takes a coordinate/place, returns the slice of the set it can fill. */
98
+ export type Annotator = (input: AnnotatorInput) => Partial<AnnotationSet> | Promise<Partial<AnnotationSet>>;
99
+ /**
100
+ * Compose a set of annotators into a single runner. Calling the returned function runs all
101
+ * annotators (concurrently) over one input and merges their results into one {@link AnnotationSet}.
102
+ * Later annotators win on key collisions. An annotator that throws is skipped, so one failing
103
+ * enrichment never sinks the rest.
104
+ */
105
+ export declare function composeAnnotators(annotators: Annotator[]): (input: AnnotatorInput) => Promise<AnnotationSet>;
106
+ /** OpenCage's `annotations` block, keyed and cased as OpenCage documents it. */
107
+ export interface OpenCageAnnotations {
108
+ DMS?: {
109
+ lat: string;
110
+ lng: string;
111
+ };
112
+ MGRS?: string;
113
+ Maidenhead?: string;
114
+ Mercator?: {
115
+ x: number;
116
+ y: number;
117
+ };
118
+ geohash?: string;
119
+ qibla?: number;
120
+ sun?: {
121
+ rise?: Record<string, number>;
122
+ set?: Record<string, number>;
123
+ };
124
+ callingcode?: number;
125
+ currency?: {
126
+ iso_code: string;
127
+ name?: string;
128
+ symbol?: string;
129
+ };
130
+ flag?: string;
131
+ timezone?: {
132
+ name: string;
133
+ offset_sec?: number;
134
+ offset_string?: string;
135
+ };
136
+ NUTS?: {
137
+ NUTS0?: {
138
+ code: string;
139
+ };
140
+ NUTS1?: {
141
+ code: string;
142
+ };
143
+ NUTS2?: {
144
+ code: string;
145
+ };
146
+ NUTS3?: {
147
+ code: string;
148
+ };
149
+ };
150
+ UN_LOCODE?: string;
151
+ wikidata?: string;
152
+ FIPS?: {
153
+ county?: string;
154
+ };
155
+ }
156
+ /**
157
+ * Serialize the native set to OpenCage's `annotations` key names + casing, for the compat APIs.
158
+ * Only the populated fields are emitted.
159
+ */
160
+ export declare function toOpenCage(set: AnnotationSet): OpenCageAnnotations;
161
+ /** Return the native set (the stable public native shape). */
162
+ export declare function toNative(set: AnnotationSet): AnnotationSet;
163
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/out/index.js ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * `@mailwoman/annotations` — the composer for the OpenCage-style enrichment block.
7
+ *
8
+ * {@link AnnotationSet} is the native, typed, camelCase representation. Each recipe package
9
+ * (timezone, un-locode, coordinate formats in `@mailwoman/spatial`, country reference in
10
+ * `@mailwoman/codex`) implements the {@link Annotator} interface and fills part of it.
11
+ * {@link composeAnnotators} runs a set of annotators and merges their output. {@link toOpenCage}
12
+ * serializes to OpenCage's documented key names for the compat APIs; {@link toNative} returns our
13
+ * own shape. One schema, two serializers (the hybrid decision).
14
+ */
15
+ /**
16
+ * Compose a set of annotators into a single runner. Calling the returned function runs all
17
+ * annotators (concurrently) over one input and merges their results into one {@link AnnotationSet}.
18
+ * Later annotators win on key collisions. An annotator that throws is skipped, so one failing
19
+ * enrichment never sinks the rest.
20
+ */
21
+ export function composeAnnotators(annotators) {
22
+ return async (input) => {
23
+ const parts = await Promise.all(annotators.map(async (annotate) => {
24
+ try {
25
+ return await annotate(input);
26
+ }
27
+ catch {
28
+ return {};
29
+ }
30
+ }));
31
+ return Object.assign({}, ...parts);
32
+ };
33
+ }
34
+ /**
35
+ * Serialize the native set to OpenCage's `annotations` key names + casing, for the compat APIs.
36
+ * Only the populated fields are emitted.
37
+ */
38
+ export function toOpenCage(set) {
39
+ const out = {};
40
+ if (set.dms)
41
+ out.DMS = { lat: set.dms.lat, lng: set.dms.lon };
42
+ if (set.mgrs != null)
43
+ out.MGRS = set.mgrs;
44
+ if (set.maidenhead != null)
45
+ out.Maidenhead = set.maidenhead;
46
+ if (set.mercator)
47
+ out.Mercator = { x: set.mercator.x, y: set.mercator.y };
48
+ if (set.geohash != null)
49
+ out.geohash = set.geohash;
50
+ if (set.qiblaBearing != null)
51
+ out.qibla = set.qiblaBearing;
52
+ if (set.sun) {
53
+ out.sun = {};
54
+ if (set.sun.rise != null)
55
+ out.sun.rise = { apparent: set.sun.rise };
56
+ if (set.sun.set != null)
57
+ out.sun.set = { apparent: set.sun.set };
58
+ }
59
+ if (set.callingCode != null)
60
+ out.callingcode = set.callingCode;
61
+ if (set.currency) {
62
+ out.currency = { iso_code: set.currency.isoCode };
63
+ if (set.currency.name != null)
64
+ out.currency.name = set.currency.name;
65
+ if (set.currency.symbol != null)
66
+ out.currency.symbol = set.currency.symbol;
67
+ }
68
+ if (set.flag != null)
69
+ out.flag = set.flag;
70
+ if (set.timezone) {
71
+ out.timezone = { name: set.timezone.name };
72
+ if (set.timezone.offsetSec != null)
73
+ out.timezone.offset_sec = set.timezone.offsetSec;
74
+ if (set.timezone.offsetString != null)
75
+ out.timezone.offset_string = set.timezone.offsetString;
76
+ }
77
+ if (set.nuts) {
78
+ out.NUTS = {};
79
+ if (set.nuts.level1 != null)
80
+ out.NUTS.NUTS1 = { code: set.nuts.level1 };
81
+ if (set.nuts.level2 != null)
82
+ out.NUTS.NUTS2 = { code: set.nuts.level2 };
83
+ if (set.nuts.level3 != null)
84
+ out.NUTS.NUTS3 = { code: set.nuts.level3 };
85
+ }
86
+ if (set.unLocode != null)
87
+ out.UN_LOCODE = set.unLocode;
88
+ if (set.wikidata != null)
89
+ out.wikidata = set.wikidata;
90
+ if (set.fips != null)
91
+ out.FIPS = { county: set.fips };
92
+ return out;
93
+ }
94
+ /** Return the native set (the stable public native shape). */
95
+ export function toNative(set) {
96
+ return set;
97
+ }
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@mailwoman/annotations",
3
+ "version": "4.15.0",
4
+ "description": "The annotations composer — a native typed AnnotationSet, the Annotator interface, and OpenCage/native serializers. Each recipe package (timezone, un-locode, coordinate formats, country reference) implements Annotator; this composes them into the block the drop-in APIs return.",
5
+ "license": "AGPL-3.0-only",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/sister-software/mailwoman.git",
9
+ "directory": "annotations"
10
+ },
11
+ "type": "module",
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ ".": "./out/index.js"
15
+ },
16
+ "files": [
17
+ "out/**/*.js",
18
+ "out/**/*.js.map",
19
+ "out/**/*.d.ts",
20
+ "out/**/*.d.ts.map",
21
+ "README.md"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ }
26
+ }