milsymbol-sidc 0.2.0 → 0.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/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # milsymbol-sidc
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/milsymbol-sidc.svg)](https://www.npmjs.com/package/milsymbol-sidc)
4
+ [![npm downloads](https://img.shields.io/npm/dm/milsymbol-sidc.svg)](https://www.npmjs.com/package/milsymbol-sidc)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-%E2%89%A55.7-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
+
3
8
  A fluent TypeScript builder for **20-character numeric SIDC strings** — the
4
9
  symbol identification code format used by [MIL-STD-2525E](https://en.wikipedia.org/wiki/MIL-STD-2525)
5
10
  and [APP-6](https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology) — made
@@ -7,6 +12,7 @@ for constructing symbols with the
7
12
  [milsymbol](https://github.com/spatialillusions/milsymbol) library.
8
13
 
9
14
  ```ts
15
+ import ms from "milsymbol";
10
16
  import { Sidc, StandardIdentity, SymbolSet } from "milsymbol-sidc";
11
17
 
12
18
  const sidc = new Sidc()
@@ -23,15 +29,18 @@ new ms.Symbol(sidc).asSVG(); // friendly land unit icon
23
29
  - **Validated output** — invalid values throw; inconsistent combinations warn
24
30
  (or throw in `strict` mode), using the same rules milsymbol applies when it
25
31
  parses a SIDC.
26
- - **milsymbol-ready** — positions 8–20 are zero-filled so every generated
27
- string is accepted by `new ms.Symbol(...)` out of the box.
32
+ - **milsymbol-ready** — every generated 20-character string is accepted by
33
+ milsymbol's numeric parser. Full rendering depends on the entity and
34
+ modifier codes you supply, exactly as it does for any raw SIDC.
28
35
 
29
- > **Coverage:** positions 1–7 of the numeric SIDC (version, context, standard
30
- > identity, symbol set, status). Positions 8–20 (HQ/task force/dummy, echelon,
31
- > entity code, sector modifiers) are reserved for future releases.
36
+ > **Coverage:** complete structural encoding for positions 1–20 of the numeric
37
+ > SIDC. Positions 8–10 have named universal codes; positions 11–20 accept
38
+ > validated raw entity and modifier codes. Symbol-set-specific entity and
39
+ > modifier catalogs remain future work.
32
40
 
33
41
  ## Installation
34
42
 
43
+ Published on npm as [`milsymbol-sidc`](https://www.npmjs.com/package/milsymbol-sidc).
35
44
  Requires Node.js >= 18.
36
45
 
37
46
  ```bash
@@ -42,6 +51,15 @@ yarn add milsymbol-sidc
42
51
  pnpm add milsymbol-sidc
43
52
  ```
44
53
 
54
+ The rendering examples use [`milsymbol`](https://github.com/spatialillusions/milsymbol)
55
+ to draw the generated SIDC. It is **not** a dependency of this package —
56
+ `milsymbol-sidc` has zero runtime dependencies — so install it alongside when
57
+ you want to render symbols:
58
+
59
+ ```bash
60
+ npm install milsymbol
61
+ ```
62
+
45
63
  The package ships ESM with bundled TypeScript declarations (`dist/`).
46
64
 
47
65
  ## Quick start
@@ -73,6 +91,8 @@ The builder is **immutable**: each setter returns a new instance, so a base
73
91
  configuration can be safely reused:
74
92
 
75
93
  ```ts
94
+ import { Sidc, Standard, StandardIdentity } from "milsymbol-sidc";
95
+
76
96
  const base = new Sidc({ standard: Standard.App6 });
77
97
 
78
98
  const friendly = base.identity(StandardIdentity.Friend).toString();
@@ -82,24 +102,33 @@ const hostile = base.identity(StandardIdentity.SuspectJoker).toString();
82
102
 
83
103
  ## Anatomy of the generated SIDC
84
104
 
85
- ```
86
- 1 3 0 3 1 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0
87
- └─┬─┘ │ │ └─┬─┘ └──────────┬───────────┘
88
- │ │ zero-filled (future fields)
89
- │ │ status (7)
90
- │ └ symbol set (5-6)
91
- standard identity (4)
92
- context (3)
93
- version (1-2)
105
+ ```text
106
+ 13 0 3 10 0 2 16 123456 78 90
107
+ │ │ │ │ │ │ │ │
108
+ │ │ │ │ │ │ └ modifier 2 (19–20)
109
+ │ │ │ │ │ │ └ │ modifier 1 (17–18)
110
+ │ │ │ │ │ │ entity code (11–16)
111
+ │ │ │ └ │ │ │ amplifier (9–10)
112
+ │ │ │ │ │ │ │ │ HQ/task force/feint-dummy (8)
113
+ │ │ └ │ │ │ │ │ status (7)
114
+ │ │ │ └ │ │ │ │ │ │ symbol set (5–6)
115
+ │ │ └ │ │ │ │ │ │ │ standard identity (4)
116
+ │ └ │ │ │ │ │ │ │ │ context (3)
117
+ └ │ │ │ │ │ │ │ │ │ version / edition (1–2)
94
118
  ```
95
119
 
96
- | Position | Field | Enum |
120
+ | Position | Field | API |
97
121
  | -------- | ------------------ | ----------------- |
98
- | 1–2 | Version / edition | `Version` |
99
- | 3 | Context | `Context` |
100
- | 4 | Standard identity | `StandardIdentity` |
101
- | 5–6 | Symbol set | `SymbolSet` |
102
- | 7 | Status / condition | `Status` |
122
+ | 1–2 | Version / edition | `Version`, `version()` |
123
+ | 3 | Context | `Context`, `context()` |
124
+ | 4 | Standard identity | `StandardIdentity`, `identity()` |
125
+ | 5–6 | Symbol set | `SymbolSet`, `symbolSet()` |
126
+ | 7 | Status / condition | `Status`, `status()` |
127
+ | 8 | HQ/task force/feint-dummy | `HqTaskForceDummy`, `hqTaskForceDummy()` |
128
+ | 9–10 | Amplifier | `Amplifier`, `amplifier()` |
129
+ | 11–16 | Entity code | `entity()` — six raw digits |
130
+ | 17–18 | Modifier 1 | `modifier1()` — two raw digits |
131
+ | 19–20 | Modifier 2 | `modifier2()` — two raw digits |
103
132
 
104
133
  ## API
105
134
 
@@ -126,6 +155,11 @@ All setters validate their argument and return a new immutable `Sidc`.
126
155
  | `identity(i)` | Position 4 | A `StandardIdentity` constant |
127
156
  | `symbolSet(s)` | Positions 5–6 | A `SymbolSet` constant or any two-digit string |
128
157
  | `status(s)` | Position 7 | A `Status` constant |
158
+ | `hqTaskForceDummy(v)` | Position 8 | An `HqTaskForceDummy` constant |
159
+ | `amplifier(v)` | Positions 9–10 | An `Amplifier` constant |
160
+ | `entity(v)` | Positions 11–16 | Any six-digit string; symbol-set-specific catalogs are not included |
161
+ | `modifier1(v)` | Positions 17–18 | Any two-digit string; symbol-set-specific catalogs are not included |
162
+ | `modifier2(v)` | Positions 19–20 | Any two-digit string; symbol-set-specific catalogs are not included |
129
163
  | `toString()` | — | Validates combinations and renders the 20-character SIDC |
130
164
 
131
165
  ### Enum reference
@@ -140,6 +174,63 @@ same constant can configure both libraries.
140
174
  | `MilStd2525` | `"2525"` | US MIL-STD-2525 (**default behavior when omitted**) |
141
175
  | `App6` | `"APP6"` | NATO APP-6 |
142
176
 
177
+ #### `HqTaskForceDummy`
178
+
179
+ Position 8 values identify headquarters, task force, and feint/dummy variants.
180
+
181
+ | Constant | Code | Meaning |
182
+ | -------- | ---- | ------- |
183
+ | `None` | `"0"` | None / not applicable |
184
+ | `FeintDummy` | `"1"` | Feint/dummy |
185
+ | `Headquarters` | `"2"` | Headquarters |
186
+ | `FeintDummyHeadquarters` | `"3"` | Feint/dummy headquarters |
187
+ | `TaskForce` | `"4"` | Task force |
188
+ | `FeintDummyTaskForce` | `"5"` | Feint/dummy task force |
189
+ | `TaskForceHeadquarters` | `"6"` | Task-force headquarters |
190
+ | `FeintDummyTaskForceHeadquarters` | `"7"` | Feint/dummy task-force headquarters |
191
+
192
+ #### `Amplifier`
193
+
194
+ Position 9–10 values identify echelon, mobility, leadership, or auxiliary
195
+ amplifiers. `None` writes the zero/no-amplifier code `"00"`.
196
+
197
+ | Constant | Code | Meaning |
198
+ | -------- | ---- | ------- |
199
+ | `None` | `"00"` | None / not specified |
200
+ | `TeamCrew` | `"11"` | Team/crew |
201
+ | `Squad` | `"12"` | Squad |
202
+ | `Section` | `"13"` | Section |
203
+ | `PlatoonDetachment` | `"14"` | Platoon/detachment |
204
+ | `CompanyBatteryTroop` | `"15"` | Company/battery/troop |
205
+ | `BattalionSquadron` | `"16"` | Battalion/squadron |
206
+ | `RegimentGroup` | `"17"` | Regiment/group |
207
+ | `Brigade` | `"18"` | Brigade |
208
+ | `Division` | `"21"` | Division |
209
+ | `CorpsMef` | `"22"` | Corps/MEF |
210
+ | `Army` | `"23"` | Army |
211
+ | `ArmyGroupFront` | `"24"` | Army group/front |
212
+ | `RegionTheater` | `"25"` | Region/theater |
213
+ | `Command` | `"26"` | Command |
214
+ | `WheeledLimitedCrossCountry` | `"31"` | Wheeled, limited cross-country |
215
+ | `WheeledCrossCountry` | `"32"` | Wheeled, cross-country |
216
+ | `Tracked` | `"33"` | Tracked |
217
+ | `WheeledTrackedCombination` | `"34"` | Wheeled and tracked combination |
218
+ | `Towed` | `"35"` | Towed |
219
+ | `Rail` | `"36"` | Rail |
220
+ | `PackAnimals` | `"37"` | Pack animals |
221
+ | `OverSnowPrimeMover` | `"41"` | Over snow, prime mover |
222
+ | `Sled` | `"42"` | Sled |
223
+ | `Barge` | `"51"` | Barge |
224
+ | `Amphibious` | `"52"` | Amphibious |
225
+ | `ShortTowedArray` | `"61"` | Short towed array |
226
+ | `LongTowedArray` | `"62"` | Long towed array |
227
+ | `LeaderIndividual` | `"71"` | Leader individual |
228
+ | `DeputyIndividual` | `"72"` | Deputy individual |
229
+
230
+ Entity and modifier setters intentionally accept raw digit strings so callers
231
+ can use codes specific to their symbol set and edition. They validate width and
232
+ ASCII digits but do not validate catalog membership.
233
+
143
234
  #### `Version`
144
235
 
145
236
  | Constant | Code | Standard |
@@ -216,8 +307,10 @@ string escape hatch.
216
307
  Two layers of validation run at different times:
217
308
 
218
309
  1. **Setter-time (`SidcValidationError`)** — thrown immediately for malformed
219
- input (wrong number of digits) or unknown enum codes. This catches bugs at
220
- the call site rather than deep inside rendering code.
310
+ input (wrong number of digits) or unknown enum codes. Values must be
311
+ strings: passing a number or other non-string value throws rather than
312
+ being coerced. This catches bugs at the call site rather than deep inside
313
+ rendering code.
221
314
  2. **`toString()`-time combination checks** — cross-field rules mirroring
222
315
  milsymbol's parser. By default problems are emitted with `console.warn`;
223
316
  with `{ strict: true }` they throw `SidcCombinationError`.
@@ -235,7 +328,18 @@ Active combination rules:
235
328
  - Raw version/symbol-set codes outside milsymbol's known tables are reported.
236
329
 
237
330
  ```ts
238
- import { Sidc, SidcValidationError, SidcCombinationError, Context, StandardIdentity, SymbolSet, Status } from "milsymbol-sidc";
331
+ import {
332
+ Amplifier,
333
+ Context,
334
+ HqTaskForceDummy,
335
+ Sidc,
336
+ SidcCombinationError,
337
+ SidcValidationError,
338
+ Standard,
339
+ StandardIdentity,
340
+ Status,
341
+ SymbolSet,
342
+ } from "milsymbol-sidc";
239
343
 
240
344
  // Throws immediately: "9" is not a valid identity code.
241
345
  new Sidc().identity("9" as never); // SidcValidationError
@@ -252,6 +356,17 @@ new Sidc({ strict: true })
252
356
  .symbolSet(SymbolSet.LandUnit)
253
357
  .toString(); // "13161000000000000000", no warnings
254
358
 
359
+ // A complete structural 20-position SIDC using raw entity/modifier codes.
360
+ new Sidc({ standard: Standard.App6, strict: true })
361
+ .identity(StandardIdentity.Friend)
362
+ .symbolSet(SymbolSet.LandUnit)
363
+ .hqTaskForceDummy(HqTaskForceDummy.Headquarters)
364
+ .amplifier(Amplifier.BattalionSquadron)
365
+ .entity("123456")
366
+ .modifier1("01")
367
+ .modifier2("09")
368
+ .toString(); // "14031002161234560109"
369
+
255
370
  // A real combination problem: condition status on a control measure.
256
371
  new Sidc({ strict: true })
257
372
  .symbolSet(SymbolSet.ControlMeasure)
@@ -304,11 +419,29 @@ const svg = symbol.asSVG();
304
419
 
305
420
  ### Node.js (CommonJS)
306
421
 
422
+ `milsymbol-sidc` is ESM-only. From CommonJS, load it with dynamic `import()`.
423
+ `milsymbol` itself can be `require`d directly:
424
+
307
425
  ```js
308
426
  const ms = require("milsymbol");
309
- // same API as above
427
+
428
+ async function render() {
429
+ const { Sidc, Standard, StandardIdentity, SymbolSet } = await import(
430
+ "milsymbol-sidc"
431
+ );
432
+
433
+ const sidc = new Sidc({ standard: Standard.App6 })
434
+ .identity(StandardIdentity.Friend)
435
+ .symbolSet(SymbolSet.LandUnit)
436
+ .toString();
437
+
438
+ return new ms.Symbol(sidc, { size: 32 }).asSVG();
439
+ }
310
440
  ```
311
441
 
442
+ Node.js 20.19+ and 22.12+ can also `require("milsymbol-sidc")` directly via
443
+ `require(esm)`; earlier Node 18/20 releases must use `import()`.
444
+
312
445
  ### Browser
313
446
 
314
447
  ```html
@@ -330,6 +463,18 @@ const ms = require("milsymbol");
330
463
  ### Recipes
331
464
 
332
465
  ```ts
466
+ import {
467
+ Amplifier,
468
+ Context,
469
+ HqTaskForceDummy,
470
+ Sidc,
471
+ Standard,
472
+ StandardIdentity,
473
+ Status,
474
+ SymbolSet,
475
+ Version,
476
+ } from "milsymbol-sidc";
477
+
333
478
  // Hostile planned armored unit
334
479
  new Sidc()
335
480
  .identity(StandardIdentity.SuspectJoker)
@@ -358,6 +503,15 @@ new Sidc({ standard: Standard.App6, strict: true })
358
503
  .symbolSet(SymbolSet.SeaSubsurface)
359
504
  .toString(); // "14153500000000000000"
360
505
 
506
+ // APP-6 unit with structural entity and modifier fields
507
+ new Sidc({ standard: Standard.App6, strict: true })
508
+ .identity(StandardIdentity.Friend)
509
+ .symbolSet(SymbolSet.LandUnit)
510
+ .entity("123456")
511
+ .modifier1("01")
512
+ .modifier2("09")
513
+ .toString(); // "14031000001234560109"
514
+
361
515
  // APP-6 D configuration retains an explicitly selected compatible edition
362
516
  new Sidc({ standard: Standard.App6, strict: true })
363
517
  .version(Version.App6D)
@@ -375,14 +529,15 @@ npm run build
375
529
  ```
376
530
 
377
531
  Test coverage includes per-field offset encoding for every enum member,
378
- defaults, immutability, setter validation errors, all combination rules in
379
- both warn and strict modes, raw-code escape hatches, and error class
380
- hierarchy.
532
+ defaults, immutability, setter validation errors, extended-field offsets,
533
+ all combination rules in both warn and strict modes, raw-code escape hatches,
534
+ and error class hierarchy.
381
535
 
382
536
  ## Roadmap
383
537
 
384
- - Positions 8–20: HQ/task force/dummy, echelon/mobility, entity catalog with
385
- named icon codes, sector modifiers.
538
+ - Symbol-set-specific named entity and modifier catalogs with semantic
539
+ validation.
540
+ - Official positions 21–30 / Set C extension data.
386
541
  - Parsing/decoding SIDC strings back into structured fields.
387
542
 
388
543
  ## License
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Configuration values and field codes for positions 1-7 of the 20-character
2
+ * Configuration values and field codes for positions 1-20 of the 20-character
3
3
  * numeric SIDC (MIL-STD-2525D/E and APP-6 D/E coding structure).
4
4
  *
5
5
  * SIDC field values are the literal digit codes that appear in the string.
@@ -16,6 +16,52 @@ export declare const Standard: {
16
16
  readonly App6: "APP6";
17
17
  };
18
18
  export type Standard = (typeof Standard)[keyof typeof Standard];
19
+ /** Position 8: headquarters, task force, and feint/dummy indicator. */
20
+ export declare const HqTaskForceDummy: {
21
+ readonly None: "0";
22
+ readonly FeintDummy: "1";
23
+ readonly Headquarters: "2";
24
+ readonly FeintDummyHeadquarters: "3";
25
+ readonly TaskForce: "4";
26
+ readonly FeintDummyTaskForce: "5";
27
+ readonly TaskForceHeadquarters: "6";
28
+ readonly FeintDummyTaskForceHeadquarters: "7";
29
+ };
30
+ export type HqTaskForceDummy = (typeof HqTaskForceDummy)[keyof typeof HqTaskForceDummy];
31
+ /** Positions 9-10: echelon, mobility, leadership, or auxiliary amplifier. */
32
+ export declare const Amplifier: {
33
+ readonly None: "00";
34
+ readonly TeamCrew: "11";
35
+ readonly Squad: "12";
36
+ readonly Section: "13";
37
+ readonly PlatoonDetachment: "14";
38
+ readonly CompanyBatteryTroop: "15";
39
+ readonly BattalionSquadron: "16";
40
+ readonly RegimentGroup: "17";
41
+ readonly Brigade: "18";
42
+ readonly Division: "21";
43
+ readonly CorpsMef: "22";
44
+ readonly Army: "23";
45
+ readonly ArmyGroupFront: "24";
46
+ readonly RegionTheater: "25";
47
+ readonly Command: "26";
48
+ readonly WheeledLimitedCrossCountry: "31";
49
+ readonly WheeledCrossCountry: "32";
50
+ readonly Tracked: "33";
51
+ readonly WheeledTrackedCombination: "34";
52
+ readonly Towed: "35";
53
+ readonly Rail: "36";
54
+ readonly PackAnimals: "37";
55
+ readonly OverSnowPrimeMover: "41";
56
+ readonly Sled: "42";
57
+ readonly Barge: "51";
58
+ readonly Amphibious: "52";
59
+ readonly ShortTowedArray: "61";
60
+ readonly LongTowedArray: "62";
61
+ readonly LeaderIndividual: "71";
62
+ readonly DeputyIndividual: "72";
63
+ };
64
+ export type Amplifier = (typeof Amplifier)[keyof typeof Amplifier];
19
65
  /** Positions 1-2: Version / standard edition. */
20
66
  export declare const Version: {
21
67
  /** MIL-STD-2525D (edition D) */
@@ -1 +1 @@
1
- {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACnB,qDAAqD;;IAErD,kBAAkB;;CAEV,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,iDAAiD;AACjD,eAAO,MAAM,OAAO;IAClB,gCAAgC;;IAEhC,sBAAsB;;IAEtB,8CAA8C;;IAE9C,sBAAsB;;CAEd,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,2BAA2B;AAC3B,eAAO,MAAM,OAAO;;;;CAIV,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,mDAAmD;AACnD,eAAO,MAAM,gBAAgB;;;;;;IAM3B,sDAAsD;;IAEtD,sDAAsD;;CAE9C,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAExF,8EAA8E;AAC9E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;CAsBZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,sCAAsC;AACtC,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACnB,qDAAqD;;IAErD,kBAAkB;;CAEV,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,uEAAuE;AACvE,eAAO,MAAM,gBAAgB;;;;;;;;;CASnB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,6EAA6E;AAC7E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,iDAAiD;AACjD,eAAO,MAAM,OAAO;IAClB,gCAAgC;;IAEhC,sBAAsB;;IAEtB,8CAA8C;;IAE9C,sBAAsB;;CAEd,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,2BAA2B;AAC3B,eAAO,MAAM,OAAO;;;;CAIV,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,mDAAmD;AACnD,eAAO,MAAM,gBAAgB;;;;;;IAM3B,sDAAsD;;IAEtD,sDAAsD;;CAE9C,CAAC;AACX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,8EAA8E;AAC9E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;CAsBZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,sCAAsC;AACtC,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC"}
package/dist/src/enums.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Configuration values and field codes for positions 1-7 of the 20-character
2
+ * Configuration values and field codes for positions 1-20 of the 20-character
3
3
  * numeric SIDC (MIL-STD-2525D/E and APP-6 D/E coding structure).
4
4
  *
5
5
  * SIDC field values are the literal digit codes that appear in the string.
@@ -15,6 +15,50 @@ export const Standard = {
15
15
  /** NATO APP-6. */
16
16
  App6: "APP6",
17
17
  };
18
+ /** Position 8: headquarters, task force, and feint/dummy indicator. */
19
+ export const HqTaskForceDummy = {
20
+ None: "0",
21
+ FeintDummy: "1",
22
+ Headquarters: "2",
23
+ FeintDummyHeadquarters: "3",
24
+ TaskForce: "4",
25
+ FeintDummyTaskForce: "5",
26
+ TaskForceHeadquarters: "6",
27
+ FeintDummyTaskForceHeadquarters: "7",
28
+ };
29
+ /** Positions 9-10: echelon, mobility, leadership, or auxiliary amplifier. */
30
+ export const Amplifier = {
31
+ None: "00",
32
+ TeamCrew: "11",
33
+ Squad: "12",
34
+ Section: "13",
35
+ PlatoonDetachment: "14",
36
+ CompanyBatteryTroop: "15",
37
+ BattalionSquadron: "16",
38
+ RegimentGroup: "17",
39
+ Brigade: "18",
40
+ Division: "21",
41
+ CorpsMef: "22",
42
+ Army: "23",
43
+ ArmyGroupFront: "24",
44
+ RegionTheater: "25",
45
+ Command: "26",
46
+ WheeledLimitedCrossCountry: "31",
47
+ WheeledCrossCountry: "32",
48
+ Tracked: "33",
49
+ WheeledTrackedCombination: "34",
50
+ Towed: "35",
51
+ Rail: "36",
52
+ PackAnimals: "37",
53
+ OverSnowPrimeMover: "41",
54
+ Sled: "42",
55
+ Barge: "51",
56
+ Amphibious: "52",
57
+ ShortTowedArray: "61",
58
+ LongTowedArray: "62",
59
+ LeaderIndividual: "71",
60
+ DeputyIndividual: "72",
61
+ };
18
62
  /** Positions 1-2: Version / standard edition. */
19
63
  export const Version = {
20
64
  /** MIL-STD-2525D (edition D) */
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qDAAqD;IACrD,UAAU,EAAE,MAAM;IAClB,kBAAkB;IAClB,IAAI,EAAE,MAAM;CACJ,CAAC;AAGX,iDAAiD;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,gCAAgC;IAChC,WAAW,EAAE,IAAI;IACjB,sBAAsB;IACtB,KAAK,EAAE,IAAI;IACX,8CAA8C;IAC9C,WAAW,EAAE,IAAI;IACjB,sBAAsB;IACtB,KAAK,EAAE,IAAI;CACH,CAAC;AAGX,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;CACP,CAAC;AAGX,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,sDAAsD;IACtD,YAAY,EAAE,GAAG;IACjB,sDAAsD;IACtD,YAAY,EAAE,GAAG;CACT,CAAC;AAGX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,IAAI;IACb,GAAG,EAAE,IAAI;IACT,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,wBAAwB,EAAE,IAAI;IAC9B,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,wBAAwB,EAAE,IAAI;IAC9B,sBAAsB,EAAE,IAAI;IAC5B,uBAAuB,EAAE,IAAI;IAC7B,6BAA6B,EAAE,IAAI;IACnC,6BAA6B,EAAE,IAAI;IACnC,UAAU,EAAE,IAAI;CACR,CAAC;AAGX,sCAAsC;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;IACd,cAAc,EAAE,GAAG;CACX,CAAC"}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { Context, Standard, StandardIdentity, Status, SymbolSet, Version, } from "./enums.js";
1
+ export { Amplifier, Context, HqTaskForceDummy, Standard, StandardIdentity, Status, SymbolSet, Version, } from "./enums.js";
2
2
  export { Sidc, type SidcOptions } from "./sidc.js";
3
3
  export { SidcCombinationError, SidcError, SidcValidationError, } from "./validate.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Context, Standard, StandardIdentity, Status, SymbolSet, Version, } from "./enums.js";
1
+ export { Amplifier, Context, HqTaskForceDummy, Standard, StandardIdentity, Status, SymbolSet, Version, } from "./enums.js";
2
2
  export { Sidc } from "./sidc.js";
3
3
  export { SidcCombinationError, SidcError, SidcValidationError, } from "./validate.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AAEnD,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AAEnD,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Context, Standard, StandardIdentity, Status, SymbolSet, Version } from "./enums.js";
1
+ import { Amplifier, Context, HqTaskForceDummy, Standard, StandardIdentity, Status, SymbolSet, Version } from "./enums.js";
2
2
  import { type SidcFields } from "./validate.js";
3
3
  export interface SidcOptions {
4
4
  /**
@@ -18,8 +18,8 @@ export interface SidcOptions {
18
18
  * Fluent builder for 20-character numeric SIDC strings
19
19
  * (MIL-STD-2525E / APP-6 coding structure).
20
20
  *
21
- * Covers positions 1-7; positions 8-20 are zero-filled so the result can be
22
- * passed straight to milsymbol's `new ms.Symbol(sidc)`.
21
+ * Covers all positions 1-20 of the numeric SIDC so the result can be passed
22
+ * straight to milsymbol's `new ms.Symbol(sidc)`.
23
23
  *
24
24
  * All setters are immutable: they return a new `Sidc` and leave the original
25
25
  * untouched.
@@ -39,8 +39,11 @@ export declare class Sidc {
39
39
  /**
40
40
  * @param options Builder behaviour flags.
41
41
  * @param fields Initial field values. Internal; used for immutable clones.
42
+ * Legacy records may omit the newly supported tail fields; omitted and
43
+ * explicitly-undefined values are normalized to their zero defaults. Every
44
+ * supplied value is validated, so this path cannot produce a malformed SIDC.
42
45
  */
43
- constructor(options?: SidcOptions, fields?: SidcFields);
46
+ constructor(options?: SidcOptions, fields?: Partial<SidcFields> | null);
44
47
  /**
45
48
  * Configures the standard family and its validation rules.
46
49
  *
@@ -48,6 +51,20 @@ export declare class Sidc {
48
51
  * it is reset to that family's latest edition (APP-6 E or MIL-STD-2525E).
49
52
  */
50
53
  standard(standard: Standard): Sidc;
54
+ /**
55
+ * Position 8: headquarters, task force, and feint/dummy indicator.
56
+ */
57
+ hqTaskForceDummy(value: HqTaskForceDummy): Sidc;
58
+ /**
59
+ * Positions 9-10: echelon, mobility, leadership, or auxiliary amplifier.
60
+ */
61
+ amplifier(value: Amplifier): Sidc;
62
+ /** Positions 11-16: six-digit entity code. */
63
+ entity(value: string): Sidc;
64
+ /** Positions 17-18: two-digit modifier 1 code. */
65
+ modifier1(value: string): Sidc;
66
+ /** Positions 19-20: two-digit modifier 2 code. */
67
+ modifier2(value: string): Sidc;
51
68
  /** Positions 1-2: standard edition. Accepts known codes or a raw two-digit code. */
52
69
  version(version: Version | (string & {})): Sidc;
53
70
  /** Position 3: context. */
@@ -1 +1 @@
1
- {"version":3,"file":"sidc.d.ts","sourceRoot":"","sources":["../../src/sidc.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,EACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAWL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AASD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC;;;OAGG;gBACS,OAAO,GAAE,WAAgB,EAAE,MAAM,CAAC,EAAE,UAAU;IAuB1D;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAYlC,oFAAoF;IACpF,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI;IAK/C,2BAA2B;IAC3B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQ/B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAU1C,8EAA8E;IAC9E,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI;IAKrD,sCAAsC;IACtC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM;IA8BlB,OAAO,CAAC,IAAI;CAGb"}
1
+ {"version":3,"file":"sidc.d.ts","sourceRoot":"","sources":["../../src/sidc.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,OAAO,EACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAkBL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAcD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC;;;;;;OAMG;gBACS,OAAO,GAAE,WAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IA8B1E;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUlC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAK/C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKjC,8CAA8C;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,kDAAkD;IAClD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,kDAAkD;IAClD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,oFAAoF;IACpF,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI;IAK/C,2BAA2B;IAC3B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK/B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAK1C,8EAA8E;IAC9E,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI;IAKrD,sCAAsC;IACtC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM;IA0ClB,OAAO,CAAC,IAAI;CAGb"}