@ac-kit/core 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/CHANGELOG.md +56 -0
- package/dist/big-int/from-bytes-be.d.ts +14 -0
- package/dist/big-int/from-bytes-be.d.ts.map +1 -0
- package/dist/big-int/from-bytes-be.js +20 -0
- package/dist/big-int/from-bytes-be.js.map +1 -0
- package/dist/big-int/from-bytes-le.d.ts +15 -0
- package/dist/big-int/from-bytes-le.d.ts.map +1 -0
- package/dist/big-int/from-bytes-le.js +21 -0
- package/dist/big-int/from-bytes-le.js.map +1 -0
- package/dist/big-int/to-bytes-be.d.ts +19 -0
- package/dist/big-int/to-bytes-be.d.ts.map +1 -0
- package/dist/big-int/to-bytes-be.js +60 -0
- package/dist/big-int/to-bytes-be.js.map +1 -0
- package/dist/big-int/to-bytes-le.d.ts +19 -0
- package/dist/big-int/to-bytes-le.d.ts.map +1 -0
- package/dist/big-int/to-bytes-le.js +22 -0
- package/dist/big-int/to-bytes-le.js.map +1 -0
- package/dist/buffer/bytes-combine.d.ts +18 -0
- package/dist/buffer/bytes-combine.d.ts.map +1 -0
- package/dist/buffer/bytes-combine.js +25 -0
- package/dist/buffer/bytes-combine.js.map +1 -0
- package/dist/buffer/bytes-map.d.ts +14 -0
- package/dist/buffer/bytes-map.d.ts.map +1 -0
- package/dist/buffer/bytes-map.js +21 -0
- package/dist/buffer/bytes-map.js.map +1 -0
- package/dist/buffer/text/next-utf8-boundary.d.ts +17 -0
- package/dist/buffer/text/next-utf8-boundary.d.ts.map +1 -0
- package/dist/buffer/text/next-utf8-boundary.js +27 -0
- package/dist/buffer/text/next-utf8-boundary.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/object/flatten-record.d.ts +67 -0
- package/dist/object/flatten-record.d.ts.map +1 -0
- package/dist/object/flatten-record.js +81 -0
- package/dist/object/flatten-record.js.map +1 -0
- package/dist/object/unflatten-record.d.ts +63 -0
- package/dist/object/unflatten-record.d.ts.map +1 -0
- package/dist/object/unflatten-record.js +71 -0
- package/dist/object/unflatten-record.js.map +1 -0
- package/dist/string/ascii/is-ascii-blank.d.ts +8 -0
- package/dist/string/ascii/is-ascii-blank.d.ts.map +1 -0
- package/dist/string/ascii/is-ascii-blank.js +11 -0
- package/dist/string/ascii/is-ascii-blank.js.map +1 -0
- package/dist/string/ascii/is-ascii-control.d.ts +6 -0
- package/dist/string/ascii/is-ascii-control.d.ts.map +1 -0
- package/dist/string/ascii/is-ascii-control.js +9 -0
- package/dist/string/ascii/is-ascii-control.js.map +1 -0
- package/dist/string/ascii/is-ascii-graphic.d.ts +7 -0
- package/dist/string/ascii/is-ascii-graphic.d.ts.map +1 -0
- package/dist/string/ascii/is-ascii-graphic.js +10 -0
- package/dist/string/ascii/is-ascii-graphic.js.map +1 -0
- package/dist/string/ascii/is-ascii-printable.d.ts +7 -0
- package/dist/string/ascii/is-ascii-printable.d.ts.map +1 -0
- package/dist/string/ascii/is-ascii-printable.js +10 -0
- package/dist/string/ascii/is-ascii-printable.js.map +1 -0
- package/dist/string/ascii/is-ascii-punctuation.d.ts +6 -0
- package/dist/string/ascii/is-ascii-punctuation.d.ts.map +1 -0
- package/dist/string/ascii/is-ascii-punctuation.js +10 -0
- package/dist/string/ascii/is-ascii-punctuation.js.map +1 -0
- package/package.json +1 -1
- package/dist/system/net/ephemeral-port.d.ts +0 -13
- package/dist/system/net/ephemeral-port.d.ts.map +0 -1
- package/dist/system/net/ephemeral-port.js +0 -19
- package/dist/system/net/ephemeral-port.js.map +0 -1
- package/dist/system/net/inet-address.d.ts +0 -20
- package/dist/system/net/inet-address.d.ts.map +0 -1
- package/dist/system/net/inet-address.js +0 -42
- package/dist/system/net/inet-address.js.map +0 -1
- package/dist/system/net/inet-endpoint.d.ts +0 -7
- package/dist/system/net/inet-endpoint.d.ts.map +0 -1
- package/dist/system/net/inet-endpoint.js +0 -2
- package/dist/system/net/inet-endpoint.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type FlattenRecordOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* Separator joining the segments of an output key. Default `"."`.
|
|
4
|
+
*
|
|
5
|
+
* Must not be empty: `unflattenRecord` splits on it, and splitting on `""`
|
|
6
|
+
* would take every key apart character by character.
|
|
7
|
+
*/
|
|
8
|
+
readonly delimiter?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Descends into arrays, numbering their elements. Default `false`, which
|
|
11
|
+
* leaves an array whole as a leaf value.
|
|
12
|
+
*
|
|
13
|
+
* Off by default because an index is the one segment a flattened key cannot
|
|
14
|
+
* tell apart from an ordinary key spelled `"0"`, so numbering costs the round
|
|
15
|
+
* trip its only ambiguity-free case.
|
|
16
|
+
*/
|
|
17
|
+
readonly flattenArrays?: boolean | null;
|
|
18
|
+
/**
|
|
19
|
+
* Greatest number of segments an output key may have. Default: unbounded.
|
|
20
|
+
*
|
|
21
|
+
* A value below that depth is copied across whole, still nested. `1` copies
|
|
22
|
+
* the record's own entries without flattening anything.
|
|
23
|
+
*/
|
|
24
|
+
readonly maxDepth?: number | null;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Collapse a nested record into a one-level one, naming each leaf by the
|
|
28
|
+
* delimiter-joined path that reached it.
|
|
29
|
+
*
|
|
30
|
+
* A leaf is anything that is not a plain object — a `Date`, a `Map`, a class
|
|
31
|
+
* instance and, by default, an array are all copied across whole. So is an
|
|
32
|
+
* empty plain object, which has no entry to name and would otherwise vanish.
|
|
33
|
+
*
|
|
34
|
+
* **A key that contains the delimiter is not escaped.** `{ "a.b": 1 }` flattens
|
|
35
|
+
* to `{ "a.b": 1 }`, exactly as `{ a: { b: 1 } }` does, and
|
|
36
|
+
* {@link unflattenRecord} reads both back as `{ a: { b: 1 } }` — the delimiter
|
|
37
|
+
* always wins over a literal occurrence of it. Two inputs colliding onto one
|
|
38
|
+
* output key leave the last one written, in `Object.keys` order. Pick a
|
|
39
|
+
* delimiter the keys cannot contain when the round trip has to hold.
|
|
40
|
+
*
|
|
41
|
+
* Keys are written with `setRecordEntry`, so an input key named `__proto__`
|
|
42
|
+
* becomes an own entry of the result instead of reaching the prototype setter.
|
|
43
|
+
*
|
|
44
|
+
* Time is linear in the number of nodes visited, plus the cost of building the
|
|
45
|
+
* keys, which is the total length of the output's keys. Memory is the output
|
|
46
|
+
* record plus one stack frame per level of nesting, so a record nested deeper
|
|
47
|
+
* than the engine's stack overflows rather than degrading.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* flattenRecord({ key1: { keyA: "v" }, key2: { a: { b: 2 } } });
|
|
52
|
+
* // { "key1.keyA": "v", "key2.a.b": 2 }
|
|
53
|
+
*
|
|
54
|
+
* flattenRecord({ host: { tags: ["a", "b"] } });
|
|
55
|
+
* // { "host.tags": ["a", "b"] } — an array is a leaf
|
|
56
|
+
*
|
|
57
|
+
* flattenRecord({ a: { b: { c: 1 } } }, { delimiter: "/", maxDepth: 2 });
|
|
58
|
+
* // { "a/b": { c: 1 } }
|
|
59
|
+
* ```;
|
|
60
|
+
*
|
|
61
|
+
* @param source The record to flatten; it is not modified.
|
|
62
|
+
* @param options Delimiter, array handling and depth cap.
|
|
63
|
+
* @returns A new one-level record.
|
|
64
|
+
* @throws RangeError If the delimiter is empty or `maxDepth` is below 1.
|
|
65
|
+
*/
|
|
66
|
+
export declare function flattenRecord(source: Readonly<Record<string, unknown>>, options?: FlattenRecordOptions): Record<string, unknown>;
|
|
67
|
+
//# sourceMappingURL=flatten-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten-record.d.ts","sourceRoot":"","sources":["../../src/object/flatten-record.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AA4CF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { isPojo } from "../guards/is-pojo.js";
|
|
2
|
+
import { setRecordEntry } from "./set-record-entry.js";
|
|
3
|
+
/** An empty container has no entry to name, so flattening it would lose the key. */
|
|
4
|
+
function isDescendable_(value, options) {
|
|
5
|
+
if (Array.isArray(value)) {
|
|
6
|
+
return options.flattenArrays && value.length > 0;
|
|
7
|
+
}
|
|
8
|
+
return isPojo(value) && Object.keys(value).length > 0;
|
|
9
|
+
}
|
|
10
|
+
function step_(source, prefix, depth, output, options) {
|
|
11
|
+
// Own keys only: `for...in` would walk a hostile source's prototype too.
|
|
12
|
+
for (const key of Object.keys(source)) {
|
|
13
|
+
const value = source[key];
|
|
14
|
+
// `null` rather than `""` for the root: a top-level key may itself be empty.
|
|
15
|
+
const outputKey = prefix === null ? key : prefix + options.delimiter + key;
|
|
16
|
+
if (depth < options.maxDepth && isDescendable_(value, options)) {
|
|
17
|
+
step_(value, outputKey, depth + 1, output, options);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
setRecordEntry(output, outputKey, value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Collapse a nested record into a one-level one, naming each leaf by the
|
|
26
|
+
* delimiter-joined path that reached it.
|
|
27
|
+
*
|
|
28
|
+
* A leaf is anything that is not a plain object — a `Date`, a `Map`, a class
|
|
29
|
+
* instance and, by default, an array are all copied across whole. So is an
|
|
30
|
+
* empty plain object, which has no entry to name and would otherwise vanish.
|
|
31
|
+
*
|
|
32
|
+
* **A key that contains the delimiter is not escaped.** `{ "a.b": 1 }` flattens
|
|
33
|
+
* to `{ "a.b": 1 }`, exactly as `{ a: { b: 1 } }` does, and
|
|
34
|
+
* {@link unflattenRecord} reads both back as `{ a: { b: 1 } }` — the delimiter
|
|
35
|
+
* always wins over a literal occurrence of it. Two inputs colliding onto one
|
|
36
|
+
* output key leave the last one written, in `Object.keys` order. Pick a
|
|
37
|
+
* delimiter the keys cannot contain when the round trip has to hold.
|
|
38
|
+
*
|
|
39
|
+
* Keys are written with `setRecordEntry`, so an input key named `__proto__`
|
|
40
|
+
* becomes an own entry of the result instead of reaching the prototype setter.
|
|
41
|
+
*
|
|
42
|
+
* Time is linear in the number of nodes visited, plus the cost of building the
|
|
43
|
+
* keys, which is the total length of the output's keys. Memory is the output
|
|
44
|
+
* record plus one stack frame per level of nesting, so a record nested deeper
|
|
45
|
+
* than the engine's stack overflows rather than degrading.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* flattenRecord({ key1: { keyA: "v" }, key2: { a: { b: 2 } } });
|
|
50
|
+
* // { "key1.keyA": "v", "key2.a.b": 2 }
|
|
51
|
+
*
|
|
52
|
+
* flattenRecord({ host: { tags: ["a", "b"] } });
|
|
53
|
+
* // { "host.tags": ["a", "b"] } — an array is a leaf
|
|
54
|
+
*
|
|
55
|
+
* flattenRecord({ a: { b: { c: 1 } } }, { delimiter: "/", maxDepth: 2 });
|
|
56
|
+
* // { "a/b": { c: 1 } }
|
|
57
|
+
* ```;
|
|
58
|
+
*
|
|
59
|
+
* @param source The record to flatten; it is not modified.
|
|
60
|
+
* @param options Delimiter, array handling and depth cap.
|
|
61
|
+
* @returns A new one-level record.
|
|
62
|
+
* @throws RangeError If the delimiter is empty or `maxDepth` is below 1.
|
|
63
|
+
*/
|
|
64
|
+
export function flattenRecord(source, options) {
|
|
65
|
+
const resolved = {
|
|
66
|
+
delimiter: options?.delimiter ?? ".",
|
|
67
|
+
flattenArrays: options?.flattenArrays ?? false,
|
|
68
|
+
maxDepth: options?.maxDepth ?? Number.POSITIVE_INFINITY,
|
|
69
|
+
};
|
|
70
|
+
if (resolved.delimiter.length === 0) {
|
|
71
|
+
throw new RangeError("flattenRecord: delimiter must not be empty");
|
|
72
|
+
}
|
|
73
|
+
// Negated so a `NaN` depth is rejected rather than silently flattening nothing.
|
|
74
|
+
if (!(resolved.maxDepth >= 1)) {
|
|
75
|
+
throw new RangeError("flattenRecord: maxDepth must be at least 1");
|
|
76
|
+
}
|
|
77
|
+
const output = {};
|
|
78
|
+
step_(source, null, 1, output, resolved);
|
|
79
|
+
return output;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=flatten-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten-record.js","sourceRoot":"","sources":["../../src/object/flatten-record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAoCvD,oFAAoF;AACpF,SAAS,cAAc,CAAC,KAAc,EAAE,OAAkB;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,KAAK,CACb,MAAyC,EACzC,MAAqB,EACrB,KAAa,EACb,MAA+B,EAC/B,OAAkB;IAElB,yEAAyE;IACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,6EAA6E;QAC7E,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QAE3E,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAChE,KAAK,CACJ,KAA0C,EAC1C,SAAS,EACT,KAAK,GAAG,CAAC,EACT,MAAM,EACN,OAAO,CACP,CAAC;QACH,CAAC;aAAM,CAAC;YACP,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,aAAa,CAC5B,MAAyC,EACzC,OAA8B;IAE9B,MAAM,QAAQ,GAAc;QAC3B,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;QACpC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,KAAK;QAC9C,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,iBAAiB;KACvD,CAAC;IAEF,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IACD,gFAAgF;IAChF,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type UnflattenRecordOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* Separator the input keys are split on. Default `"."`.
|
|
4
|
+
*
|
|
5
|
+
* Must not be empty, which would take every key apart character by character.
|
|
6
|
+
*/
|
|
7
|
+
readonly delimiter?: string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Rebuilds an array wherever a segment is a canonical decimal index. Default
|
|
10
|
+
* `false`, which keeps every segment an object key.
|
|
11
|
+
*
|
|
12
|
+
* Enable it only for keys produced by {@link flattenRecord} with
|
|
13
|
+
* `flattenArrays`. A key out of untrusted input can name an index of any
|
|
14
|
+
* size, and while the sparse array that creates is cheap to hold, its
|
|
15
|
+
* `length` is the index — enough to make a later `JSON.stringify` or
|
|
16
|
+
* iteration over it unbounded work.
|
|
17
|
+
*/
|
|
18
|
+
readonly buildArrays?: boolean | null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Rebuild a nested record from one whose keys are delimiter-joined paths — the
|
|
22
|
+
* inverse of {@link flattenRecord}.
|
|
23
|
+
*
|
|
24
|
+
* `unflattenRecord(flattenRecord(x))` deep-equals `x` for any `x` whose keys
|
|
25
|
+
* contain neither the delimiter nor, below the top level, one of the three
|
|
26
|
+
* prototype-reaching names named further down. A key that does contain the
|
|
27
|
+
* delimiter is indistinguishable from nesting and is split: `{ "a.b": 1 }`
|
|
28
|
+
* becomes `{ a: { b: 1 } }`, whatever the input meant by it.
|
|
29
|
+
*
|
|
30
|
+
* Where two keys disagree about a segment's shape — `"a"` holding `1` beside
|
|
31
|
+
* `"a.b"` holding `2` — the deeper key replaces the scalar with a container,
|
|
32
|
+
* and the entries are applied in `Object.keys` order, so the last one wins.
|
|
33
|
+
*
|
|
34
|
+
* A key with two or more segments is a path walk, and one whose segments
|
|
35
|
+
* include `__proto__`, `constructor` or `prototype` is dropped whole: the
|
|
36
|
+
* intermediate _reads_ of such a walk reach a prototype shared with every other
|
|
37
|
+
* object, before anything is assigned. A single-segment key is an ordinary leaf
|
|
38
|
+
* write and is kept, stored as an own entry by `setRecordEntry` — a record of
|
|
39
|
+
* environment variables should still be able to hold one named `constructor`.
|
|
40
|
+
*
|
|
41
|
+
* Time is linear in the total length of the input keys plus the number of
|
|
42
|
+
* segments walked. Memory is the rebuilt record plus one segment array per
|
|
43
|
+
* entry, which is released as each entry is written.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* unflattenRecord({ "key1.keyA": "v", "key2.a.b": 2 });
|
|
48
|
+
* // { key1: { keyA: "v" }, key2: { a: { b: 2 } } }
|
|
49
|
+
*
|
|
50
|
+
* unflattenRecord({ "hello.you.0": "x" });
|
|
51
|
+
* // { hello: { you: { "0": "x" } } }
|
|
52
|
+
*
|
|
53
|
+
* unflattenRecord({ "hello.you.0": "x" }, { buildArrays: true });
|
|
54
|
+
* // { hello: { you: ["x"] } }
|
|
55
|
+
* ```;
|
|
56
|
+
*
|
|
57
|
+
* @param source The one-level record to expand; it is not modified.
|
|
58
|
+
* @param options Delimiter and array rebuilding.
|
|
59
|
+
* @returns A new nested record.
|
|
60
|
+
* @throws RangeError If the delimiter is empty.
|
|
61
|
+
*/
|
|
62
|
+
export declare function unflattenRecord(source: Readonly<Record<string, unknown>>, options?: UnflattenRecordOptions): Record<string, unknown>;
|
|
63
|
+
//# sourceMappingURL=unflatten-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unflatten-record.d.ts","sourceRoot":"","sources":["../../src/object/unflatten-record.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACtC,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE,sBAAsB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { setAtPath } from "./set-at-path.js";
|
|
2
|
+
import { setRecordEntry } from "./set-record-entry.js";
|
|
3
|
+
/** Canonical decimal, so `"01"` and `"1e2"` stay object keys. */
|
|
4
|
+
const INDEX_PATTERN_ = /^(?:0|[1-9]\d*)$/;
|
|
5
|
+
function toPath_(segments, buildArrays) {
|
|
6
|
+
if (!buildArrays) {
|
|
7
|
+
return segments;
|
|
8
|
+
}
|
|
9
|
+
return segments.map((segment) => INDEX_PATTERN_.test(segment) ? Number(segment) : segment);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Rebuild a nested record from one whose keys are delimiter-joined paths — the
|
|
13
|
+
* inverse of {@link flattenRecord}.
|
|
14
|
+
*
|
|
15
|
+
* `unflattenRecord(flattenRecord(x))` deep-equals `x` for any `x` whose keys
|
|
16
|
+
* contain neither the delimiter nor, below the top level, one of the three
|
|
17
|
+
* prototype-reaching names named further down. A key that does contain the
|
|
18
|
+
* delimiter is indistinguishable from nesting and is split: `{ "a.b": 1 }`
|
|
19
|
+
* becomes `{ a: { b: 1 } }`, whatever the input meant by it.
|
|
20
|
+
*
|
|
21
|
+
* Where two keys disagree about a segment's shape — `"a"` holding `1` beside
|
|
22
|
+
* `"a.b"` holding `2` — the deeper key replaces the scalar with a container,
|
|
23
|
+
* and the entries are applied in `Object.keys` order, so the last one wins.
|
|
24
|
+
*
|
|
25
|
+
* A key with two or more segments is a path walk, and one whose segments
|
|
26
|
+
* include `__proto__`, `constructor` or `prototype` is dropped whole: the
|
|
27
|
+
* intermediate _reads_ of such a walk reach a prototype shared with every other
|
|
28
|
+
* object, before anything is assigned. A single-segment key is an ordinary leaf
|
|
29
|
+
* write and is kept, stored as an own entry by `setRecordEntry` — a record of
|
|
30
|
+
* environment variables should still be able to hold one named `constructor`.
|
|
31
|
+
*
|
|
32
|
+
* Time is linear in the total length of the input keys plus the number of
|
|
33
|
+
* segments walked. Memory is the rebuilt record plus one segment array per
|
|
34
|
+
* entry, which is released as each entry is written.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* unflattenRecord({ "key1.keyA": "v", "key2.a.b": 2 });
|
|
39
|
+
* // { key1: { keyA: "v" }, key2: { a: { b: 2 } } }
|
|
40
|
+
*
|
|
41
|
+
* unflattenRecord({ "hello.you.0": "x" });
|
|
42
|
+
* // { hello: { you: { "0": "x" } } }
|
|
43
|
+
*
|
|
44
|
+
* unflattenRecord({ "hello.you.0": "x" }, { buildArrays: true });
|
|
45
|
+
* // { hello: { you: ["x"] } }
|
|
46
|
+
* ```;
|
|
47
|
+
*
|
|
48
|
+
* @param source The one-level record to expand; it is not modified.
|
|
49
|
+
* @param options Delimiter and array rebuilding.
|
|
50
|
+
* @returns A new nested record.
|
|
51
|
+
* @throws RangeError If the delimiter is empty.
|
|
52
|
+
*/
|
|
53
|
+
export function unflattenRecord(source, options) {
|
|
54
|
+
const delimiter = options?.delimiter ?? ".";
|
|
55
|
+
const buildArrays = options?.buildArrays ?? false;
|
|
56
|
+
if (delimiter.length === 0) {
|
|
57
|
+
throw new RangeError("unflattenRecord: delimiter must not be empty");
|
|
58
|
+
}
|
|
59
|
+
const output = {};
|
|
60
|
+
// Own keys only: `for...in` would walk a hostile source's prototype too.
|
|
61
|
+
for (const key of Object.keys(source)) {
|
|
62
|
+
const segments = key.split(delimiter);
|
|
63
|
+
if (segments.length === 1) {
|
|
64
|
+
setRecordEntry(output, key, source[key]);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
setAtPath(output, toPath_(segments, buildArrays), source[key]);
|
|
68
|
+
}
|
|
69
|
+
return output;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=unflatten-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unflatten-record.js","sourceRoot":"","sources":["../../src/object/unflatten-record.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAuBvD,iEAAiE;AACjE,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C,SAAS,OAAO,CACf,QAA2B,EAC3B,WAAoB;IAEpB,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CACxD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,eAAe,CAC9B,MAAyC,EACzC,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,GAAG,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;IAElD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,yEAAyE;IACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,SAAS;QACV,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Equivalent to C's `isblank` — whether `code` is a space or a horizontal tab.
|
|
3
|
+
*
|
|
4
|
+
* The two characters that separate words on one line, as against
|
|
5
|
+
* {@link isAsciiWhitespace}, which also holds the line terminators.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isAsciiBlank(code: number): boolean;
|
|
8
|
+
//# sourceMappingURL=is-ascii-blank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-blank.d.ts","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-blank.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { HT, SPACE } from "../../constants/ascii.js";
|
|
2
|
+
/**
|
|
3
|
+
* Equivalent to C's `isblank` — whether `code` is a space or a horizontal tab.
|
|
4
|
+
*
|
|
5
|
+
* The two characters that separate words on one line, as against
|
|
6
|
+
* {@link isAsciiWhitespace}, which also holds the line terminators.
|
|
7
|
+
*/
|
|
8
|
+
export function isAsciiBlank(code) {
|
|
9
|
+
return code === SPACE || code === HT;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=is-ascii-blank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-blank.js","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-blank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-control.d.ts","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-control.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DEL, NUL, US } from "../../constants/ascii.js";
|
|
2
|
+
/**
|
|
3
|
+
* Equivalent to C's `iscntrl` — whether `code` is an ASCII control character:
|
|
4
|
+
* `NUL` through `US`, plus `DEL`.
|
|
5
|
+
*/
|
|
6
|
+
export function isAsciiControl(code) {
|
|
7
|
+
return (code >= NUL && code <= US) || code === DEL;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=is-ascii-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-control.js","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Equivalent to C's `isgraph` — whether `code` is an ASCII character with a
|
|
3
|
+
* visible glyph: `!` through `~`, which is every printable character except the
|
|
4
|
+
* space.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isAsciiGraphic(code: number): boolean;
|
|
7
|
+
//# sourceMappingURL=is-ascii-graphic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-graphic.d.ts","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-graphic.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EXCLAMATION_MARK, TILDE } from "../../constants/ascii.js";
|
|
2
|
+
/**
|
|
3
|
+
* Equivalent to C's `isgraph` — whether `code` is an ASCII character with a
|
|
4
|
+
* visible glyph: `!` through `~`, which is every printable character except the
|
|
5
|
+
* space.
|
|
6
|
+
*/
|
|
7
|
+
export function isAsciiGraphic(code) {
|
|
8
|
+
return code >= EXCLAMATION_MARK && code <= TILDE;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=is-ascii-graphic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-graphic.js","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-graphic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,IAAI,IAAI,gBAAgB,IAAI,IAAI,IAAI,KAAK,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Equivalent to C's `isprint` — whether `code` is an ASCII printable character:
|
|
3
|
+
* the space through `~`. {@link isAsciiGraphic} is the same set without the
|
|
4
|
+
* space.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isAsciiPrintable(code: number): boolean;
|
|
7
|
+
//# sourceMappingURL=is-ascii-printable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-printable.d.ts","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-printable.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SPACE, TILDE } from "../../constants/ascii.js";
|
|
2
|
+
/**
|
|
3
|
+
* Equivalent to C's `isprint` — whether `code` is an ASCII printable character:
|
|
4
|
+
* the space through `~`. {@link isAsciiGraphic} is the same set without the
|
|
5
|
+
* space.
|
|
6
|
+
*/
|
|
7
|
+
export function isAsciiPrintable(code) {
|
|
8
|
+
return code >= SPACE && code <= TILDE;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=is-ascii-printable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-printable.js","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-printable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Equivalent to C's `ispunct` — whether `code` is an ASCII punctuation or
|
|
3
|
+
* symbol character: printable, visible, and neither a letter nor a digit.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isAsciiPunctuation(code: number): boolean;
|
|
6
|
+
//# sourceMappingURL=is-ascii-punctuation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-punctuation.d.ts","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-punctuation.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isAsciiAlphaNumeric } from "./is-ascii-alpha-numeric.js";
|
|
2
|
+
import { isAsciiGraphic } from "./is-ascii-graphic.js";
|
|
3
|
+
/**
|
|
4
|
+
* Equivalent to C's `ispunct` — whether `code` is an ASCII punctuation or
|
|
5
|
+
* symbol character: printable, visible, and neither a letter nor a digit.
|
|
6
|
+
*/
|
|
7
|
+
export function isAsciiPunctuation(code) {
|
|
8
|
+
return isAsciiGraphic(code) && !isAsciiAlphaNumeric(code);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=is-ascii-punctuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-ascii-punctuation.js","sourceRoot":"","sources":["../../../src/string/ascii/is-ascii-punctuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ac-kit/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Foundational JavaScript and TypeScript extensions with no domain knowledge: guards, type helpers, collection and string utilities, JSON, pattern matching, promises, time, errors and a byte cursor.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"esm",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/** First port of the RFC 6335 dynamic / private range. */
|
|
2
|
-
export declare const EPHEMERAL_PORT_MIN_VALUE = 49152;
|
|
3
|
-
/** Last port of the RFC 6335 dynamic / private range. */
|
|
4
|
-
export declare const EPHEMERAL_PORT_MAX_VALUE = 65535;
|
|
5
|
-
/**
|
|
6
|
-
* Get a random ephemeral port number in the range suggested by RFC 6335 and the
|
|
7
|
-
* Internet Assigned Numbers Authority (IANA) for dynamic or private ports
|
|
8
|
-
* (between 49152 and 65535).
|
|
9
|
-
*
|
|
10
|
-
* @returns A random ephemeral port number.
|
|
11
|
-
*/
|
|
12
|
-
export declare function getRandomEphemeralPort(): number;
|
|
13
|
-
//# sourceMappingURL=ephemeral-port.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ephemeral-port.d.ts","sourceRoot":"","sources":["../../../src/system/net/ephemeral-port.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAE9C,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAK9C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAK/C"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/** First port of the RFC 6335 dynamic / private range. */
|
|
2
|
-
export const EPHEMERAL_PORT_MIN_VALUE = 49152;
|
|
3
|
-
/** Last port of the RFC 6335 dynamic / private range. */
|
|
4
|
-
export const EPHEMERAL_PORT_MAX_VALUE = 65535;
|
|
5
|
-
const EPHEMERAL_PORT_COUNT = EPHEMERAL_PORT_MAX_VALUE - EPHEMERAL_PORT_MIN_VALUE + 1;
|
|
6
|
-
/**
|
|
7
|
-
* Get a random ephemeral port number in the range suggested by RFC 6335 and the
|
|
8
|
-
* Internet Assigned Numbers Authority (IANA) for dynamic or private ports
|
|
9
|
-
* (between 49152 and 65535).
|
|
10
|
-
*
|
|
11
|
-
* @returns A random ephemeral port number.
|
|
12
|
-
*/
|
|
13
|
-
export function getRandomEphemeralPort() {
|
|
14
|
-
const draw = new Uint16Array(1);
|
|
15
|
-
crypto.getRandomValues(draw);
|
|
16
|
-
// 65536 is an exact multiple of the 16384-port range, so the modulo is unbiased.
|
|
17
|
-
return EPHEMERAL_PORT_MIN_VALUE + (draw[0] % EPHEMERAL_PORT_COUNT);
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=ephemeral-port.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ephemeral-port.js","sourceRoot":"","sources":["../../../src/system/net/ephemeral-port.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,yDAAyD;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,oBAAoB,GACzB,wBAAwB,GAAG,wBAAwB,GAAG,CAAC,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACrC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,iFAAiF;IACjF,OAAO,wBAAwB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,oBAAoB,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/** Represents an Internet address with IP family and address. */
|
|
2
|
-
export type InetAddress = {
|
|
3
|
-
/** IP family: 4 for IPv4, 6 for IPv6, or null for unknown family. */
|
|
4
|
-
family: 4 | 6 | null;
|
|
5
|
-
/** IP address string. */
|
|
6
|
-
address: string;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Composes an InetAddress from a family and address. Validates and converts the
|
|
10
|
-
* family to ensure it is 4, 6, or null.
|
|
11
|
-
*
|
|
12
|
-
* @param family The IP family, either as a string ('IPv4', 'IPv6'), number (4,
|
|
13
|
-
* 6), or null for unknown.
|
|
14
|
-
* @param address The IP address string.
|
|
15
|
-
* @returns An InetAddress object.
|
|
16
|
-
* @throws {UnsupportedError} If the family is not valid (not 'IPv4'/'IPv6' or
|
|
17
|
-
* 4/6 or null).
|
|
18
|
-
*/
|
|
19
|
-
export declare function composeInetAddress(family: string | number | null, address: string): InetAddress;
|
|
20
|
-
//# sourceMappingURL=inet-address.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inet-address.d.ts","sourceRoot":"","sources":["../../../src/system/net/inet-address.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG;IACzB,qEAAqE;IACrE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC9B,OAAO,EAAE,MAAM,GACb,WAAW,CA6Bb"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { UnsupportedError } from "@ac-kit/core";
|
|
2
|
-
/**
|
|
3
|
-
* Composes an InetAddress from a family and address. Validates and converts the
|
|
4
|
-
* family to ensure it is 4, 6, or null.
|
|
5
|
-
*
|
|
6
|
-
* @param family The IP family, either as a string ('IPv4', 'IPv6'), number (4,
|
|
7
|
-
* 6), or null for unknown.
|
|
8
|
-
* @param address The IP address string.
|
|
9
|
-
* @returns An InetAddress object.
|
|
10
|
-
* @throws {UnsupportedError} If the family is not valid (not 'IPv4'/'IPv6' or
|
|
11
|
-
* 4/6 or null).
|
|
12
|
-
*/
|
|
13
|
-
export function composeInetAddress(family, address) {
|
|
14
|
-
let validatedFamily;
|
|
15
|
-
if (typeof family === "string") {
|
|
16
|
-
if (family === "IPv4") {
|
|
17
|
-
validatedFamily = 4;
|
|
18
|
-
}
|
|
19
|
-
else if (family === "IPv6") {
|
|
20
|
-
validatedFamily = 6;
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
throw new UnsupportedError(`Unsupported IP family: ${family}. Expected 'IPv4' or 'IPv6'.`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
else if (typeof family === "number") {
|
|
27
|
-
if (family === 4 || family === 6) {
|
|
28
|
-
validatedFamily = family;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
throw new UnsupportedError(`Unsupported IP family: ${family}. Expected 4 (IPv4) or 6 (IPv6).`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
validatedFamily = null;
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
family: validatedFamily,
|
|
39
|
-
address,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=inet-address.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inet-address.js","sourceRoot":"","sources":["../../../src/system/net/inet-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUhD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CACjC,MAA8B,EAC9B,OAAe;IAEf,IAAI,eAA6B,CAAC;IAElC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACvB,eAAe,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,eAAe,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,gBAAgB,CACzB,0BAA0B,MAAM,8BAA8B,CAC9D,CAAC;QACH,CAAC;IACF,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,eAAe,GAAG,MAAM,CAAC;QAC1B,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,gBAAgB,CACzB,0BAA0B,MAAM,kCAAkC,CAClE,CAAC;QACH,CAAC;IACF,CAAC;SAAM,CAAC;QACP,eAAe,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,OAAO;QACN,MAAM,EAAE,eAAe;QACvB,OAAO;KACP,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inet-endpoint.d.ts","sourceRoot":"","sources":["../../../src/system/net/inet-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACxC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;CACb,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inet-endpoint.js","sourceRoot":"","sources":["../../../src/system/net/inet-endpoint.ts"],"names":[],"mappings":""}
|