@start9labs/start-sdk 0.4.0-beta.50 → 0.4.0-beta.52
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/base/lib/Effects.d.ts +4 -0
- package/base/lib/actions/input/builder/inputSpec.d.ts +129 -8
- package/base/lib/actions/input/builder/inputSpec.js +223 -13
- package/base/lib/actions/input/builder/inputSpec.js.map +1 -1
- package/base/lib/actions/input/builder/inputSpecTools.d.ts +3 -3
- package/base/lib/actions/input/builder/list.d.ts +24 -3
- package/base/lib/actions/input/builder/list.js +26 -5
- package/base/lib/actions/input/builder/list.js.map +1 -1
- package/base/lib/actions/input/builder/value.d.ts +70 -16
- package/base/lib/actions/input/builder/value.js +89 -34
- package/base/lib/actions/input/builder/value.js.map +1 -1
- package/base/lib/actions/input/builder/variants.d.ts +14 -3
- package/base/lib/actions/input/builder/variants.js +22 -7
- package/base/lib/actions/input/builder/variants.js.map +1 -1
- package/base/lib/actions/input/inputSpecConstants.d.ts +203 -5
- package/base/lib/actions/input/inputSpecConstants.js +118 -38
- package/base/lib/actions/input/inputSpecConstants.js.map +1 -1
- package/base/lib/actions/input/inputSpecTypes.d.ts +99 -0
- package/base/lib/actions/input/inputSpecTypes.js +6 -1
- package/base/lib/actions/input/inputSpecTypes.js.map +1 -1
- package/base/lib/actions/setupActions.d.ts +6 -3
- package/base/lib/actions/setupActions.js +7 -4
- package/base/lib/actions/setupActions.js.map +1 -1
- package/base/lib/exver/index.d.ts +233 -2
- package/base/lib/exver/index.js +197 -3
- package/base/lib/exver/index.js.map +1 -1
- package/base/lib/index.d.ts +23 -1
- package/base/lib/index.js +4 -2
- package/base/lib/index.js.map +1 -1
- package/base/lib/inits/setupInit.d.ts +17 -0
- package/base/lib/inits/setupInit.js +7 -0
- package/base/lib/inits/setupInit.js.map +1 -1
- package/base/lib/inits/setupUninit.d.ts +12 -0
- package/base/lib/inits/setupUninit.js +7 -0
- package/base/lib/inits/setupUninit.js.map +1 -1
- package/base/lib/interfaces/Host.js +2 -4
- package/base/lib/interfaces/Host.js.map +1 -1
- package/base/lib/osBindings/GetOutboundGatewayParams.d.ts +4 -0
- package/base/lib/osBindings/GetOutboundGatewayParams.js +3 -0
- package/base/lib/osBindings/GetOutboundGatewayParams.js.map +1 -0
- package/base/lib/osBindings/ServerHostname.d.ts +1 -0
- package/base/lib/osBindings/ServerHostname.js +4 -0
- package/base/lib/osBindings/ServerHostname.js.map +1 -0
- package/base/lib/osBindings/ServerInfo.d.ts +1 -0
- package/base/lib/osBindings/SetServerHostnameParams.d.ts +4 -0
- package/base/lib/osBindings/SetServerHostnameParams.js +4 -0
- package/base/lib/osBindings/SetServerHostnameParams.js.map +1 -0
- package/base/lib/osBindings/SetupExecuteParams.d.ts +3 -1
- package/base/lib/osBindings/SmtpSecurity.d.ts +1 -0
- package/base/lib/osBindings/SmtpSecurity.js +4 -0
- package/base/lib/osBindings/SmtpSecurity.js.map +1 -0
- package/base/lib/osBindings/SmtpValue.d.ts +4 -2
- package/base/lib/osBindings/SmtpValue.js +0 -1
- package/base/lib/osBindings/SmtpValue.js.map +1 -1
- package/base/lib/osBindings/StartOsRecoveryInfo.d.ts +2 -2
- package/base/lib/osBindings/TestSmtpParams.d.ts +4 -2
- package/base/lib/osBindings/TestSmtpParams.js +0 -1
- package/base/lib/osBindings/TestSmtpParams.js.map +1 -1
- package/base/lib/osBindings/index.d.ts +4 -1
- package/base/lib/s9pk/index.d.ts +66 -0
- package/base/lib/s9pk/index.js +70 -1
- package/base/lib/s9pk/index.js.map +1 -1
- package/base/lib/types.d.ts +68 -2
- package/base/lib/types.js +14 -0
- package/base/lib/types.js.map +1 -1
- package/base/lib/util/GetOutboundGateway.d.ts +30 -0
- package/base/lib/util/GetOutboundGateway.js +90 -0
- package/base/lib/util/GetOutboundGateway.js.map +1 -0
- package/base/lib/util/asError.d.ts +8 -0
- package/base/lib/util/asError.js +8 -0
- package/base/lib/util/asError.js.map +1 -1
- package/base/lib/util/deepEqual.d.ts +15 -0
- package/base/lib/util/deepEqual.js +16 -2
- package/base/lib/util/deepEqual.js.map +1 -1
- package/base/lib/util/deepMerge.d.ts +18 -0
- package/base/lib/util/deepMerge.js +18 -0
- package/base/lib/util/deepMerge.js.map +1 -1
- package/base/lib/util/getDefaultString.d.ts +8 -0
- package/base/lib/util/getDefaultString.js +8 -0
- package/base/lib/util/getDefaultString.js.map +1 -1
- package/base/lib/util/graph.d.ts +57 -0
- package/base/lib/util/graph.js +47 -0
- package/base/lib/util/graph.js.map +1 -1
- package/base/lib/util/inMs.d.ts +15 -0
- package/base/lib/util/inMs.js +15 -0
- package/base/lib/util/inMs.js.map +1 -1
- package/base/lib/util/index.d.ts +1 -0
- package/base/lib/util/index.js +3 -1
- package/base/lib/util/index.js.map +1 -1
- package/base/lib/util/ip.d.ts +81 -0
- package/base/lib/util/ip.js +81 -0
- package/base/lib/util/ip.js.map +1 -1
- package/base/lib/util/once.d.ts +13 -0
- package/base/lib/util/once.js +13 -0
- package/base/lib/util/once.js.map +1 -1
- package/base/lib/util/patterns.d.ts +11 -0
- package/base/lib/util/patterns.js +11 -0
- package/base/lib/util/patterns.js.map +1 -1
- package/base/lib/util/regexes.d.ts +38 -0
- package/base/lib/util/regexes.js +38 -0
- package/base/lib/util/regexes.js.map +1 -1
- package/base/lib/util/splitCommand.d.ts +14 -0
- package/base/lib/util/splitCommand.js +15 -2
- package/base/lib/util/splitCommand.js.map +1 -1
- package/base/lib/util/stringFromStdErrOut.d.ts +7 -0
- package/base/lib/util/stringFromStdErrOut.js +7 -0
- package/base/lib/util/stringFromStdErrOut.js.map +1 -1
- package/base/lib/util/typeHelpers.d.ts +35 -0
- package/base/lib/util/typeHelpers.js +7 -0
- package/base/lib/util/typeHelpers.js.map +1 -1
- package/package/lib/StartSdk.d.ts +330 -3
- package/package/lib/StartSdk.js +143 -1
- package/package/lib/StartSdk.js.map +1 -1
- package/package/lib/backup/Backups.d.ts +71 -0
- package/package/lib/backup/Backups.js +69 -0
- package/package/lib/backup/Backups.js.map +1 -1
- package/package/lib/backup/setupBackups.d.ts +14 -0
- package/package/lib/backup/setupBackups.js +9 -0
- package/package/lib/backup/setupBackups.js.map +1 -1
- package/package/lib/health/HealthCheck.d.ts +16 -0
- package/package/lib/health/HealthCheck.js +16 -2
- package/package/lib/health/HealthCheck.js.map +1 -1
- package/package/lib/health/checkFns/HealthCheckResult.d.ts +6 -0
- package/package/lib/health/checkFns/index.d.ts +8 -0
- package/package/lib/health/checkFns/index.js +8 -0
- package/package/lib/health/checkFns/index.js.map +1 -1
- package/package/lib/index.d.ts +2 -2
- package/package/lib/index.js +2 -2
- package/package/lib/index.js.map +1 -1
- package/package/lib/mainFn/CommandController.d.ts +29 -0
- package/package/lib/mainFn/CommandController.js +29 -0
- package/package/lib/mainFn/CommandController.js.map +1 -1
- package/package/lib/mainFn/Daemon.d.ts +38 -2
- package/package/lib/mainFn/Daemon.js +38 -2
- package/package/lib/mainFn/Daemon.js.map +1 -1
- package/package/lib/mainFn/Daemons.d.ts +31 -0
- package/package/lib/mainFn/Daemons.js +13 -0
- package/package/lib/mainFn/Daemons.js.map +1 -1
- package/package/lib/mainFn/Mounts.d.ts +38 -0
- package/package/lib/mainFn/Mounts.js +38 -0
- package/package/lib/mainFn/Mounts.js.map +1 -1
- package/package/lib/mainFn/index.d.ts +1 -0
- package/package/lib/mainFn/index.js +1 -0
- package/package/lib/mainFn/index.js.map +1 -1
- package/package/lib/manifest/setupManifest.d.ts +9 -0
- package/package/lib/manifest/setupManifest.js +9 -0
- package/package/lib/manifest/setupManifest.js.map +1 -1
- package/package/lib/test/output.d.ts +2 -2
- package/package/lib/test/output.js +418 -329
- package/package/lib/test/output.js.map +1 -1
- package/package/lib/test/output.sdk.d.ts +193 -2
- package/package/lib/util/SubContainer.d.ts +46 -0
- package/package/lib/util/SubContainer.js +10 -0
- package/package/lib/util/SubContainer.js.map +1 -1
- package/package/lib/util/fileHelper.d.ts +43 -10
- package/package/lib/util/fileHelper.js +13 -11
- package/package/lib/util/fileHelper.js.map +1 -1
- package/package/lib/version/VersionGraph.d.ts +64 -13
- package/package/lib/version/VersionGraph.js +64 -18
- package/package/lib/version/VersionGraph.js.map +1 -1
- package/package/lib/version/VersionInfo.d.ts +17 -0
- package/package/lib/version/VersionInfo.js +12 -0
- package/package/lib/version/VersionInfo.js.map +1 -1
- package/package/package.json +9 -8
- package/package.json +9 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../../../base/lib/util/deepMerge.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../../../base/lib/util/deepMerge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
import { DefaultString } from '../actions/input/inputSpecTypes';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a DefaultString spec into a concrete string value.
|
|
4
|
+
* If the spec is a plain string, returns it directly.
|
|
5
|
+
* If it is a random-string specification, generates a random string accordingly.
|
|
6
|
+
*
|
|
7
|
+
* @param defaultSpec - A string literal or a random-string generation spec
|
|
8
|
+
* @returns The resolved default string value
|
|
9
|
+
*/
|
|
2
10
|
export declare function getDefaultString(defaultSpec: DefaultString): string;
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDefaultString = getDefaultString;
|
|
4
4
|
const getRandomString_1 = require("./getRandomString");
|
|
5
|
+
/**
|
|
6
|
+
* Resolves a DefaultString spec into a concrete string value.
|
|
7
|
+
* If the spec is a plain string, returns it directly.
|
|
8
|
+
* If it is a random-string specification, generates a random string accordingly.
|
|
9
|
+
*
|
|
10
|
+
* @param defaultSpec - A string literal or a random-string generation spec
|
|
11
|
+
* @returns The resolved default string value
|
|
12
|
+
*/
|
|
5
13
|
function getDefaultString(defaultSpec) {
|
|
6
14
|
if (typeof defaultSpec === 'string') {
|
|
7
15
|
return defaultSpec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDefaultString.js","sourceRoot":"","sources":["../../../../base/lib/util/getDefaultString.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getDefaultString.js","sourceRoot":"","sources":["../../../../base/lib/util/getDefaultString.ts"],"names":[],"mappings":";;AAWA,4CAMC;AAhBD,uDAAmD;AAEnD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,WAA0B;IACzD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,WAAW,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,IAAA,iCAAe,EAAC,WAAW,CAAC,CAAA;IACrC,CAAC;AACH,CAAC"}
|
package/base/lib/util/graph.d.ts
CHANGED
|
@@ -1,20 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A vertex (node) in a directed graph, holding metadata and a list of connected edges.
|
|
3
|
+
* @typeParam VMetadata - The type of metadata stored on vertices
|
|
4
|
+
* @typeParam EMetadata - The type of metadata stored on edges
|
|
5
|
+
*/
|
|
1
6
|
export type Vertex<VMetadata = null, EMetadata = null> = {
|
|
2
7
|
metadata: VMetadata;
|
|
3
8
|
edges: Array<Edge<EMetadata, VMetadata>>;
|
|
4
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* A directed edge connecting two vertices, with its own metadata.
|
|
12
|
+
* @typeParam EMetadata - The type of metadata stored on edges
|
|
13
|
+
* @typeParam VMetadata - The type of metadata stored on the connected vertices
|
|
14
|
+
*/
|
|
5
15
|
export type Edge<EMetadata = null, VMetadata = null> = {
|
|
6
16
|
metadata: EMetadata;
|
|
7
17
|
from: Vertex<VMetadata, EMetadata>;
|
|
8
18
|
to: Vertex<VMetadata, EMetadata>;
|
|
9
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* A directed graph data structure supporting vertex/edge management and graph traversal algorithms
|
|
22
|
+
* including breadth-first search, reverse BFS, and shortest path computation.
|
|
23
|
+
*
|
|
24
|
+
* @typeParam VMetadata - The type of metadata stored on vertices
|
|
25
|
+
* @typeParam EMetadata - The type of metadata stored on edges
|
|
26
|
+
*/
|
|
10
27
|
export declare class Graph<VMetadata = null, EMetadata = null> {
|
|
11
28
|
private readonly vertices;
|
|
12
29
|
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Serializes the graph to a JSON string for debugging.
|
|
32
|
+
* @param metadataRepr - Optional function to transform metadata values before serialization
|
|
33
|
+
* @returns A pretty-printed JSON string of the graph structure
|
|
34
|
+
*/
|
|
13
35
|
dump(metadataRepr?: (metadata: VMetadata | EMetadata) => any): string;
|
|
36
|
+
/**
|
|
37
|
+
* Adds a new vertex to the graph, optionally connecting it to existing vertices via edges.
|
|
38
|
+
* @param metadata - The metadata to attach to the new vertex
|
|
39
|
+
* @param fromEdges - Edges pointing from existing vertices to this new vertex
|
|
40
|
+
* @param toEdges - Edges pointing from this new vertex to existing vertices
|
|
41
|
+
* @returns The newly created vertex
|
|
42
|
+
*/
|
|
14
43
|
addVertex(metadata: VMetadata, fromEdges: Array<Omit<Edge<EMetadata, VMetadata>, 'to'>>, toEdges: Array<Omit<Edge<EMetadata, VMetadata>, 'from'>>): Vertex<VMetadata, EMetadata>;
|
|
44
|
+
/**
|
|
45
|
+
* Returns a generator that yields all vertices matching the predicate.
|
|
46
|
+
* @param predicate - A function to test each vertex
|
|
47
|
+
* @returns A generator of matching vertices
|
|
48
|
+
*/
|
|
15
49
|
findVertex(predicate: (vertex: Vertex<VMetadata, EMetadata>) => boolean): Generator<Vertex<VMetadata, EMetadata>, null>;
|
|
50
|
+
/**
|
|
51
|
+
* Adds a directed edge between two existing vertices.
|
|
52
|
+
* @param metadata - The metadata to attach to the edge
|
|
53
|
+
* @param from - The source vertex
|
|
54
|
+
* @param to - The destination vertex
|
|
55
|
+
* @returns The newly created edge
|
|
56
|
+
*/
|
|
16
57
|
addEdge(metadata: EMetadata, from: Vertex<VMetadata, EMetadata>, to: Vertex<VMetadata, EMetadata>): Edge<EMetadata, VMetadata>;
|
|
58
|
+
/**
|
|
59
|
+
* Performs a breadth-first traversal following outgoing edges from the starting vertex or vertices.
|
|
60
|
+
* @param from - A starting vertex, or a predicate to select multiple starting vertices
|
|
61
|
+
* @returns A generator yielding vertices in BFS order
|
|
62
|
+
*/
|
|
17
63
|
breadthFirstSearch(from: Vertex<VMetadata, EMetadata> | ((vertex: Vertex<VMetadata, EMetadata>) => boolean)): Generator<Vertex<VMetadata, EMetadata>, null>;
|
|
64
|
+
/**
|
|
65
|
+
* Performs a reverse breadth-first traversal following incoming edges from the starting vertex or vertices.
|
|
66
|
+
* @param to - A starting vertex, or a predicate to select multiple starting vertices
|
|
67
|
+
* @returns A generator yielding vertices in reverse BFS order
|
|
68
|
+
*/
|
|
18
69
|
reverseBreadthFirstSearch(to: Vertex<VMetadata, EMetadata> | ((vertex: Vertex<VMetadata, EMetadata>) => boolean)): Generator<Vertex<VMetadata, EMetadata>, null>;
|
|
70
|
+
/**
|
|
71
|
+
* Finds the shortest path (by edge count) between two vertices using BFS.
|
|
72
|
+
* @param from - The starting vertex, or a predicate to select starting vertices
|
|
73
|
+
* @param to - The target vertex, or a predicate to identify target vertices
|
|
74
|
+
* @returns An array of edges forming the shortest path, or `null` if no path exists
|
|
75
|
+
*/
|
|
19
76
|
shortestPath(from: Vertex<VMetadata, EMetadata> | ((vertex: Vertex<VMetadata, EMetadata>) => boolean), to: Vertex<VMetadata, EMetadata> | ((vertex: Vertex<VMetadata, EMetadata>) => boolean)): Array<Edge<EMetadata, VMetadata>> | null;
|
|
20
77
|
}
|
package/base/lib/util/graph.js
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Graph = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A directed graph data structure supporting vertex/edge management and graph traversal algorithms
|
|
6
|
+
* including breadth-first search, reverse BFS, and shortest path computation.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam VMetadata - The type of metadata stored on vertices
|
|
9
|
+
* @typeParam EMetadata - The type of metadata stored on edges
|
|
10
|
+
*/
|
|
4
11
|
class Graph {
|
|
5
12
|
constructor() {
|
|
6
13
|
this.vertices = [];
|
|
7
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Serializes the graph to a JSON string for debugging.
|
|
17
|
+
* @param metadataRepr - Optional function to transform metadata values before serialization
|
|
18
|
+
* @returns A pretty-printed JSON string of the graph structure
|
|
19
|
+
*/
|
|
8
20
|
dump(metadataRepr = (a) => a) {
|
|
9
21
|
const seen = new WeakSet();
|
|
10
22
|
return JSON.stringify(this.vertices, (k, v) => {
|
|
@@ -17,6 +29,13 @@ class Graph {
|
|
|
17
29
|
return v;
|
|
18
30
|
}, 2);
|
|
19
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Adds a new vertex to the graph, optionally connecting it to existing vertices via edges.
|
|
34
|
+
* @param metadata - The metadata to attach to the new vertex
|
|
35
|
+
* @param fromEdges - Edges pointing from existing vertices to this new vertex
|
|
36
|
+
* @param toEdges - Edges pointing from this new vertex to existing vertices
|
|
37
|
+
* @returns The newly created vertex
|
|
38
|
+
*/
|
|
20
39
|
addVertex(metadata, fromEdges, toEdges) {
|
|
21
40
|
const vertex = {
|
|
22
41
|
metadata,
|
|
@@ -43,6 +62,11 @@ class Graph {
|
|
|
43
62
|
this.vertices.push(vertex);
|
|
44
63
|
return vertex;
|
|
45
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns a generator that yields all vertices matching the predicate.
|
|
67
|
+
* @param predicate - A function to test each vertex
|
|
68
|
+
* @returns A generator of matching vertices
|
|
69
|
+
*/
|
|
46
70
|
findVertex(predicate) {
|
|
47
71
|
const veritces = this.vertices;
|
|
48
72
|
function* gen() {
|
|
@@ -55,6 +79,13 @@ class Graph {
|
|
|
55
79
|
}
|
|
56
80
|
return gen();
|
|
57
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Adds a directed edge between two existing vertices.
|
|
84
|
+
* @param metadata - The metadata to attach to the edge
|
|
85
|
+
* @param from - The source vertex
|
|
86
|
+
* @param to - The destination vertex
|
|
87
|
+
* @returns The newly created edge
|
|
88
|
+
*/
|
|
58
89
|
addEdge(metadata, from, to) {
|
|
59
90
|
const edge = {
|
|
60
91
|
metadata,
|
|
@@ -65,6 +96,11 @@ class Graph {
|
|
|
65
96
|
edge.to.edges.push(edge);
|
|
66
97
|
return edge;
|
|
67
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Performs a breadth-first traversal following outgoing edges from the starting vertex or vertices.
|
|
101
|
+
* @param from - A starting vertex, or a predicate to select multiple starting vertices
|
|
102
|
+
* @returns A generator yielding vertices in BFS order
|
|
103
|
+
*/
|
|
68
104
|
breadthFirstSearch(from) {
|
|
69
105
|
const visited = [];
|
|
70
106
|
function* rec(vertex) {
|
|
@@ -110,6 +146,11 @@ class Graph {
|
|
|
110
146
|
return rec(from);
|
|
111
147
|
}
|
|
112
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Performs a reverse breadth-first traversal following incoming edges from the starting vertex or vertices.
|
|
151
|
+
* @param to - A starting vertex, or a predicate to select multiple starting vertices
|
|
152
|
+
* @returns A generator yielding vertices in reverse BFS order
|
|
153
|
+
*/
|
|
113
154
|
reverseBreadthFirstSearch(to) {
|
|
114
155
|
const visited = [];
|
|
115
156
|
function* rec(vertex) {
|
|
@@ -155,6 +196,12 @@ class Graph {
|
|
|
155
196
|
return rec(to);
|
|
156
197
|
}
|
|
157
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Finds the shortest path (by edge count) between two vertices using BFS.
|
|
201
|
+
* @param from - The starting vertex, or a predicate to select starting vertices
|
|
202
|
+
* @param to - The target vertex, or a predicate to identify target vertices
|
|
203
|
+
* @returns An array of edges forming the shortest path, or `null` if no path exists
|
|
204
|
+
*/
|
|
158
205
|
shortestPath(from, to) {
|
|
159
206
|
const isDone = to instanceof Function
|
|
160
207
|
? to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../../base/lib/util/graph.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../../base/lib/util/graph.ts"],"names":[],"mappings":"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"}
|
package/base/lib/util/inMs.d.ts
CHANGED
|
@@ -1 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a human-readable time string to milliseconds.
|
|
3
|
+
* Supports units: `ms`, `s`, `m`, `h`, `d`. If a number is passed, it is returned as-is.
|
|
4
|
+
*
|
|
5
|
+
* @param time - A time string (e.g. `"500ms"`, `"1.5s"`, `"2h"`) or a numeric millisecond value
|
|
6
|
+
* @returns The time in milliseconds, or `undefined` if `time` is falsy
|
|
7
|
+
* @throws Error if the string format is invalid
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* inMs("2s") // 2000
|
|
12
|
+
* inMs("1.5h") // 5400000
|
|
13
|
+
* inMs(500) // 500
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
1
16
|
export declare const inMs: (time?: string | number) => number | undefined;
|
package/base/lib/util/inMs.js
CHANGED
|
@@ -24,6 +24,21 @@ const digitsMs = (digits, multiplier) => {
|
|
|
24
24
|
const divideBy = multiplier / Math.pow(10, digits.length - 1);
|
|
25
25
|
return Math.round(value * divideBy);
|
|
26
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Converts a human-readable time string to milliseconds.
|
|
29
|
+
* Supports units: `ms`, `s`, `m`, `h`, `d`. If a number is passed, it is returned as-is.
|
|
30
|
+
*
|
|
31
|
+
* @param time - A time string (e.g. `"500ms"`, `"1.5s"`, `"2h"`) or a numeric millisecond value
|
|
32
|
+
* @returns The time in milliseconds, or `undefined` if `time` is falsy
|
|
33
|
+
* @throws Error if the string format is invalid
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* inMs("2s") // 2000
|
|
38
|
+
* inMs("1.5h") // 5400000
|
|
39
|
+
* inMs(500) // 500
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
27
42
|
const inMs = (time) => {
|
|
28
43
|
if (typeof time === 'number')
|
|
29
44
|
return time;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMs.js","sourceRoot":"","sources":["../../../../base/lib/util/inMs.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,mCAAmC,CAAA;AAE1D,MAAM,cAAc,GAAG,CAAC,IAAa,EAAE,EAAE;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAA;IACnB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAA;IAC3B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAClC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,CAAA;IACvC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IAC5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;AAC1C,CAAC,CAAA;AACD,MAAM,QAAQ,GAAG,CAAC,MAAqB,EAAE,UAAkB,EAAE,EAAE;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAA;AACrC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"inMs.js","sourceRoot":"","sources":["../../../../base/lib/util/inMs.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,mCAAmC,CAAA;AAE1D,MAAM,cAAc,GAAG,CAAC,IAAa,EAAE,EAAE;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAA;IACnB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAA;IAC3B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAClC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,CAAA;IACvC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IAC5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;AAC1C,CAAC,CAAA;AACD,MAAM,QAAQ,GAAG,CAAC,MAAqB,EAAE,UAAkB,EAAE,EAAE;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAA;AACrC,CAAC,CAAA;AACD;;;;;;;;;;;;;;GAcG;AACI,MAAM,IAAI,GAAG,CAAC,IAAsB,EAAE,EAAE;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAA;IAC7D,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAA;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,UAAU,CAAA;IAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAEhD,OAAO,UAAU,GAAG,WAAW,CAAA;AACjC,CAAC,CAAA;AAXY,QAAA,IAAI,QAWhB"}
|
package/base/lib/util/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { once } from './once';
|
|
|
7
7
|
export { asError } from './asError';
|
|
8
8
|
export * as Patterns from './patterns';
|
|
9
9
|
export * from './typeHelpers';
|
|
10
|
+
export { GetOutboundGateway } from './GetOutboundGateway';
|
|
10
11
|
export { GetSystemSmtp } from './GetSystemSmtp';
|
|
11
12
|
export { Graph, Vertex } from './graph';
|
|
12
13
|
export { inMs } from './inMs';
|
package/base/lib/util/index.js
CHANGED
|
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.stringFromStdErrOut = exports.regexes = exports.deepEqual = exports.partialDiff = exports.deepMerge = exports.nullIfEmpty = exports.splitCommand = exports.inMs = exports.Graph = exports.GetSystemSmtp = exports.Patterns = exports.asError = exports.once = exports.getServiceInterfaces = exports.filledAddress = exports.getServiceInterface = exports.GetServiceInterface = exports.getDefaultString = exports.addressHostToUrl = void 0;
|
|
39
|
+
exports.stringFromStdErrOut = exports.regexes = exports.deepEqual = exports.partialDiff = exports.deepMerge = exports.nullIfEmpty = exports.splitCommand = exports.inMs = exports.Graph = exports.GetSystemSmtp = exports.GetOutboundGateway = exports.Patterns = exports.asError = exports.once = exports.getServiceInterfaces = exports.filledAddress = exports.getServiceInterface = exports.GetServiceInterface = exports.getDefaultString = exports.addressHostToUrl = void 0;
|
|
40
40
|
/// Currently being used
|
|
41
41
|
var getServiceInterface_1 = require("./getServiceInterface");
|
|
42
42
|
Object.defineProperty(exports, "addressHostToUrl", { enumerable: true, get: function () { return getServiceInterface_1.addressHostToUrl; } });
|
|
@@ -56,6 +56,8 @@ var asError_1 = require("./asError");
|
|
|
56
56
|
Object.defineProperty(exports, "asError", { enumerable: true, get: function () { return asError_1.asError; } });
|
|
57
57
|
exports.Patterns = __importStar(require("./patterns"));
|
|
58
58
|
__exportStar(require("./typeHelpers"), exports);
|
|
59
|
+
var GetOutboundGateway_1 = require("./GetOutboundGateway");
|
|
60
|
+
Object.defineProperty(exports, "GetOutboundGateway", { enumerable: true, get: function () { return GetOutboundGateway_1.GetOutboundGateway; } });
|
|
59
61
|
var GetSystemSmtp_1 = require("./GetSystemSmtp");
|
|
60
62
|
Object.defineProperty(exports, "GetSystemSmtp", { enumerable: true, get: function () { return GetSystemSmtp_1.GetSystemSmtp; } });
|
|
61
63
|
var graph_1 = require("./graph");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../base/lib/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAAwB;AACxB,6DAAwD;AAA/C,uHAAA,gBAAgB,OAAA;AACzB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,uCAAoB;AAEpB,sDAAsD;AACtD,6DAI8B;AAH5B,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,oHAAA,aAAa,OAAA;AAEf,+DAA6D;AAApD,4HAAA,oBAAoB,OAAA;AAC7B,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,qCAAmC;AAA1B,kGAAA,OAAO,OAAA;AAChB,uDAAsC;AACtC,gDAA6B;AAC7B,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,iCAAuC;AAA9B,8FAAA,KAAK,OAAA;AACd,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,yCAAoD;AAA3C,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC/B,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,qDAAoC;AACpC,6DAA2D;AAAlD,0HAAA,mBAAmB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../base/lib/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAAwB;AACxB,6DAAwD;AAA/C,uHAAA,gBAAgB,OAAA;AACzB,uDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,uCAAoB;AAEpB,sDAAsD;AACtD,6DAI8B;AAH5B,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,oHAAA,aAAa,OAAA;AAEf,+DAA6D;AAApD,4HAAA,oBAAoB,OAAA;AAC7B,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,qCAAmC;AAA1B,kGAAA,OAAO,OAAA;AAChB,uDAAsC;AACtC,gDAA6B;AAC7B,2DAAyD;AAAhD,wHAAA,kBAAkB,OAAA;AAC3B,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,iCAAuC;AAA9B,8FAAA,KAAK,OAAA;AACd,+BAA6B;AAApB,4FAAA,IAAI,OAAA;AACb,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,yCAAoD;AAA3C,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC/B,yCAAuC;AAA9B,sGAAA,SAAS,OAAA;AAClB,qDAAoC;AACpC,6DAA2D;AAAlD,0HAAA,mBAAmB,OAAA"}
|
package/base/lib/util/ip.d.ts
CHANGED
|
@@ -1,30 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents an IPv4 or IPv6 address as raw octets with arithmetic and comparison operations.
|
|
3
|
+
*
|
|
4
|
+
* IPv4 addresses have 4 octets, IPv6 addresses have 16 octets.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const ip = IpAddress.parse("192.168.1.1")
|
|
9
|
+
* const next = ip.add(1) // 192.168.1.2
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
1
12
|
export declare class IpAddress {
|
|
2
13
|
octets: number[];
|
|
3
14
|
private renderedAddress;
|
|
4
15
|
private renderedOctets;
|
|
5
16
|
protected constructor(octets: number[], renderedAddress: string);
|
|
17
|
+
/**
|
|
18
|
+
* Parses an IP address string into an IpAddress instance.
|
|
19
|
+
* Supports both IPv4 dotted-decimal and IPv6 colon-hex notation (including `::` shorthand).
|
|
20
|
+
* @param address - The IP address string to parse
|
|
21
|
+
* @returns A new IpAddress instance
|
|
22
|
+
* @throws Error if the address format is invalid
|
|
23
|
+
*/
|
|
6
24
|
static parse(address: string): IpAddress;
|
|
25
|
+
/**
|
|
26
|
+
* Creates an IpAddress from a raw octet array.
|
|
27
|
+
* @param octets - Array of 4 octets (IPv4) or 16 octets (IPv6), each 0-255
|
|
28
|
+
* @returns A new IpAddress instance
|
|
29
|
+
* @throws Error if the octet array length is not 4 or 16, or any octet exceeds 255
|
|
30
|
+
*/
|
|
7
31
|
static fromOctets(octets: number[]): IpAddress;
|
|
32
|
+
/** Returns true if this is an IPv4 address (4 octets). */
|
|
8
33
|
isIpv4(): boolean;
|
|
34
|
+
/** Returns true if this is an IPv6 address (16 octets). */
|
|
9
35
|
isIpv6(): boolean;
|
|
36
|
+
/** Returns true if this is a public IPv4 address (not in any private range). */
|
|
10
37
|
isPublic(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Returns a new IpAddress incremented by `n`.
|
|
40
|
+
* @param n - The integer amount to add (fractional part is truncated)
|
|
41
|
+
* @returns A new IpAddress with the result
|
|
42
|
+
* @throws Error on overflow
|
|
43
|
+
*/
|
|
11
44
|
add(n: number): IpAddress;
|
|
45
|
+
/**
|
|
46
|
+
* Returns a new IpAddress decremented by `n`.
|
|
47
|
+
* @param n - The integer amount to subtract (fractional part is truncated)
|
|
48
|
+
* @returns A new IpAddress with the result
|
|
49
|
+
* @throws Error on underflow
|
|
50
|
+
*/
|
|
12
51
|
sub(n: number): IpAddress;
|
|
52
|
+
/**
|
|
53
|
+
* Compares this address to another, returning -1, 0, or 1.
|
|
54
|
+
* @param other - An IpAddress instance or string to compare against
|
|
55
|
+
* @returns -1 if this < other, 0 if equal, 1 if this > other
|
|
56
|
+
*/
|
|
13
57
|
cmp(other: string | IpAddress): -1 | 0 | 1;
|
|
58
|
+
/** The string representation of this IP address (e.g. `"192.168.1.1"` or `"::1"`). Cached and recomputed only when octets change. */
|
|
14
59
|
get address(): string;
|
|
15
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Represents an IP network (CIDR notation) combining an IP address with a prefix length.
|
|
63
|
+
* Extends IpAddress with network-specific operations like containment checks and broadcast calculation.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const net = IpNet.parse("192.168.1.0/24")
|
|
68
|
+
* net.contains("192.168.1.100") // true
|
|
69
|
+
* net.broadcast() // 192.168.1.255
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
16
72
|
export declare class IpNet extends IpAddress {
|
|
17
73
|
prefix: number;
|
|
18
74
|
private constructor();
|
|
75
|
+
/**
|
|
76
|
+
* Creates an IpNet from an IpAddress and prefix length.
|
|
77
|
+
* @param ip - The base IP address
|
|
78
|
+
* @param prefix - The CIDR prefix length (0-32 for IPv4, 0-128 for IPv6)
|
|
79
|
+
* @returns A new IpNet instance
|
|
80
|
+
* @throws Error if prefix exceeds the address bit length
|
|
81
|
+
*/
|
|
19
82
|
static fromIpPrefix(ip: IpAddress, prefix: number): IpNet;
|
|
83
|
+
/**
|
|
84
|
+
* Parses a CIDR notation string (e.g. `"192.168.1.0/24"`) into an IpNet.
|
|
85
|
+
* @param ipnet - The CIDR string to parse
|
|
86
|
+
* @returns A new IpNet instance
|
|
87
|
+
*/
|
|
20
88
|
static parse(ipnet: string): IpNet;
|
|
89
|
+
/**
|
|
90
|
+
* Checks whether this network contains the given address or subnet.
|
|
91
|
+
* @param address - An IP address or subnet (string, IpAddress, or IpNet)
|
|
92
|
+
* @returns True if the address falls within this network's range
|
|
93
|
+
*/
|
|
21
94
|
contains(address: string | IpAddress | IpNet): boolean;
|
|
95
|
+
/** Returns the network address (all host bits zeroed) for this subnet. */
|
|
22
96
|
zero(): IpAddress;
|
|
97
|
+
/** Returns the broadcast address (all host bits set to 1) for this subnet. */
|
|
23
98
|
broadcast(): IpAddress;
|
|
99
|
+
/** The CIDR notation string for this network (e.g. `"192.168.1.0/24"`). */
|
|
24
100
|
get ipnet(): string;
|
|
25
101
|
}
|
|
102
|
+
/** All private IPv4 ranges: loopback (127.0.0.0/8), Class A (10.0.0.0/8), Class B (172.16.0.0/12), Class C (192.168.0.0/16). */
|
|
26
103
|
export declare const PRIVATE_IPV4_RANGES: IpNet[];
|
|
104
|
+
/** IPv4 loopback network (127.0.0.0/8). */
|
|
27
105
|
export declare const IPV4_LOOPBACK: IpNet;
|
|
106
|
+
/** IPv6 loopback address (::1/128). */
|
|
28
107
|
export declare const IPV6_LOOPBACK: IpNet;
|
|
108
|
+
/** IPv6 link-local network (fe80::/10). */
|
|
29
109
|
export declare const IPV6_LINK_LOCAL: IpNet;
|
|
110
|
+
/** Carrier-Grade NAT (CGNAT) address range (100.64.0.0/10), per RFC 6598. */
|
|
30
111
|
export declare const CGNAT: IpNet;
|
package/base/lib/util/ip.js
CHANGED
|
@@ -1,12 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CGNAT = exports.IPV6_LINK_LOCAL = exports.IPV6_LOOPBACK = exports.IPV4_LOOPBACK = exports.PRIVATE_IPV4_RANGES = exports.IpNet = exports.IpAddress = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Represents an IPv4 or IPv6 address as raw octets with arithmetic and comparison operations.
|
|
6
|
+
*
|
|
7
|
+
* IPv4 addresses have 4 octets, IPv6 addresses have 16 octets.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const ip = IpAddress.parse("192.168.1.1")
|
|
12
|
+
* const next = ip.add(1) // 192.168.1.2
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
4
15
|
class IpAddress {
|
|
5
16
|
constructor(octets, renderedAddress) {
|
|
6
17
|
this.octets = octets;
|
|
7
18
|
this.renderedAddress = renderedAddress;
|
|
8
19
|
this.renderedOctets = [...octets];
|
|
9
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Parses an IP address string into an IpAddress instance.
|
|
23
|
+
* Supports both IPv4 dotted-decimal and IPv6 colon-hex notation (including `::` shorthand).
|
|
24
|
+
* @param address - The IP address string to parse
|
|
25
|
+
* @returns A new IpAddress instance
|
|
26
|
+
* @throws Error if the address format is invalid
|
|
27
|
+
*/
|
|
10
28
|
static parse(address) {
|
|
11
29
|
let octets;
|
|
12
30
|
if (address.includes(':')) {
|
|
@@ -42,6 +60,12 @@ class IpAddress {
|
|
|
42
60
|
}
|
|
43
61
|
return new IpAddress(octets, address);
|
|
44
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Creates an IpAddress from a raw octet array.
|
|
65
|
+
* @param octets - Array of 4 octets (IPv4) or 16 octets (IPv6), each 0-255
|
|
66
|
+
* @returns A new IpAddress instance
|
|
67
|
+
* @throws Error if the octet array length is not 4 or 16, or any octet exceeds 255
|
|
68
|
+
*/
|
|
45
69
|
static fromOctets(octets) {
|
|
46
70
|
if (octets.length == 4) {
|
|
47
71
|
if (octets.some((o) => o > 255)) {
|
|
@@ -72,15 +96,24 @@ class IpAddress {
|
|
|
72
96
|
throw new Error('invalid ip address');
|
|
73
97
|
}
|
|
74
98
|
}
|
|
99
|
+
/** Returns true if this is an IPv4 address (4 octets). */
|
|
75
100
|
isIpv4() {
|
|
76
101
|
return this.octets.length === 4;
|
|
77
102
|
}
|
|
103
|
+
/** Returns true if this is an IPv6 address (16 octets). */
|
|
78
104
|
isIpv6() {
|
|
79
105
|
return this.octets.length === 16;
|
|
80
106
|
}
|
|
107
|
+
/** Returns true if this is a public IPv4 address (not in any private range). */
|
|
81
108
|
isPublic() {
|
|
82
109
|
return this.isIpv4() && !exports.PRIVATE_IPV4_RANGES.some((r) => r.contains(this));
|
|
83
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Returns a new IpAddress incremented by `n`.
|
|
113
|
+
* @param n - The integer amount to add (fractional part is truncated)
|
|
114
|
+
* @returns A new IpAddress with the result
|
|
115
|
+
* @throws Error on overflow
|
|
116
|
+
*/
|
|
84
117
|
add(n) {
|
|
85
118
|
let octets = [...this.octets];
|
|
86
119
|
n = Math.floor(n);
|
|
@@ -99,6 +132,12 @@ class IpAddress {
|
|
|
99
132
|
}
|
|
100
133
|
return IpAddress.fromOctets(octets);
|
|
101
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns a new IpAddress decremented by `n`.
|
|
137
|
+
* @param n - The integer amount to subtract (fractional part is truncated)
|
|
138
|
+
* @returns A new IpAddress with the result
|
|
139
|
+
* @throws Error on underflow
|
|
140
|
+
*/
|
|
102
141
|
sub(n) {
|
|
103
142
|
let octets = [...this.octets];
|
|
104
143
|
n = Math.floor(n);
|
|
@@ -117,6 +156,11 @@ class IpAddress {
|
|
|
117
156
|
}
|
|
118
157
|
return IpAddress.fromOctets(octets);
|
|
119
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Compares this address to another, returning -1, 0, or 1.
|
|
161
|
+
* @param other - An IpAddress instance or string to compare against
|
|
162
|
+
* @returns -1 if this < other, 0 if equal, 1 if this > other
|
|
163
|
+
*/
|
|
120
164
|
cmp(other) {
|
|
121
165
|
if (typeof other === 'string')
|
|
122
166
|
other = IpAddress.parse(other);
|
|
@@ -133,6 +177,7 @@ class IpAddress {
|
|
|
133
177
|
}
|
|
134
178
|
return 0;
|
|
135
179
|
}
|
|
180
|
+
/** The string representation of this IP address (e.g. `"192.168.1.1"` or `"::1"`). Cached and recomputed only when octets change. */
|
|
136
181
|
get address() {
|
|
137
182
|
if (this.renderedOctets.length === this.octets.length &&
|
|
138
183
|
this.renderedOctets.every((o, idx) => o === this.octets[idx])) {
|
|
@@ -169,23 +214,51 @@ class IpAddress {
|
|
|
169
214
|
}
|
|
170
215
|
}
|
|
171
216
|
exports.IpAddress = IpAddress;
|
|
217
|
+
/**
|
|
218
|
+
* Represents an IP network (CIDR notation) combining an IP address with a prefix length.
|
|
219
|
+
* Extends IpAddress with network-specific operations like containment checks and broadcast calculation.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```ts
|
|
223
|
+
* const net = IpNet.parse("192.168.1.0/24")
|
|
224
|
+
* net.contains("192.168.1.100") // true
|
|
225
|
+
* net.broadcast() // 192.168.1.255
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
172
228
|
class IpNet extends IpAddress {
|
|
173
229
|
constructor(octets, prefix, address) {
|
|
174
230
|
super(octets, address);
|
|
175
231
|
this.prefix = prefix;
|
|
176
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Creates an IpNet from an IpAddress and prefix length.
|
|
235
|
+
* @param ip - The base IP address
|
|
236
|
+
* @param prefix - The CIDR prefix length (0-32 for IPv4, 0-128 for IPv6)
|
|
237
|
+
* @returns A new IpNet instance
|
|
238
|
+
* @throws Error if prefix exceeds the address bit length
|
|
239
|
+
*/
|
|
177
240
|
static fromIpPrefix(ip, prefix) {
|
|
178
241
|
if (prefix > ip.octets.length * 8) {
|
|
179
242
|
throw new Error('invalid prefix');
|
|
180
243
|
}
|
|
181
244
|
return new IpNet(ip.octets, prefix, ip.address);
|
|
182
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Parses a CIDR notation string (e.g. `"192.168.1.0/24"`) into an IpNet.
|
|
248
|
+
* @param ipnet - The CIDR string to parse
|
|
249
|
+
* @returns A new IpNet instance
|
|
250
|
+
*/
|
|
183
251
|
static parse(ipnet) {
|
|
184
252
|
const [address, prefixStr] = ipnet.split('/', 2);
|
|
185
253
|
const ip = IpAddress.parse(address);
|
|
186
254
|
const prefix = Number(prefixStr);
|
|
187
255
|
return IpNet.fromIpPrefix(ip, prefix);
|
|
188
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Checks whether this network contains the given address or subnet.
|
|
259
|
+
* @param address - An IP address or subnet (string, IpAddress, or IpNet)
|
|
260
|
+
* @returns True if the address falls within this network's range
|
|
261
|
+
*/
|
|
189
262
|
contains(address) {
|
|
190
263
|
if (typeof address === 'string')
|
|
191
264
|
address = IpAddress.parse(address);
|
|
@@ -207,6 +280,7 @@ class IpNet extends IpAddress {
|
|
|
207
280
|
const mask = 255 ^ (255 >> prefix);
|
|
208
281
|
return (this.octets[idx] & mask) === (address.octets[idx] & mask);
|
|
209
282
|
}
|
|
283
|
+
/** Returns the network address (all host bits zeroed) for this subnet. */
|
|
210
284
|
zero() {
|
|
211
285
|
let octets = [];
|
|
212
286
|
let prefix = this.prefix;
|
|
@@ -223,6 +297,7 @@ class IpNet extends IpAddress {
|
|
|
223
297
|
}
|
|
224
298
|
return IpAddress.fromOctets(octets);
|
|
225
299
|
}
|
|
300
|
+
/** Returns the broadcast address (all host bits set to 1) for this subnet. */
|
|
226
301
|
broadcast() {
|
|
227
302
|
let octets = [];
|
|
228
303
|
let prefix = this.prefix;
|
|
@@ -239,19 +314,25 @@ class IpNet extends IpAddress {
|
|
|
239
314
|
}
|
|
240
315
|
return IpAddress.fromOctets(octets);
|
|
241
316
|
}
|
|
317
|
+
/** The CIDR notation string for this network (e.g. `"192.168.1.0/24"`). */
|
|
242
318
|
get ipnet() {
|
|
243
319
|
return `${this.address}/${this.prefix}`;
|
|
244
320
|
}
|
|
245
321
|
}
|
|
246
322
|
exports.IpNet = IpNet;
|
|
323
|
+
/** All private IPv4 ranges: loopback (127.0.0.0/8), Class A (10.0.0.0/8), Class B (172.16.0.0/12), Class C (192.168.0.0/16). */
|
|
247
324
|
exports.PRIVATE_IPV4_RANGES = [
|
|
248
325
|
IpNet.parse('127.0.0.0/8'),
|
|
249
326
|
IpNet.parse('10.0.0.0/8'),
|
|
250
327
|
IpNet.parse('172.16.0.0/12'),
|
|
251
328
|
IpNet.parse('192.168.0.0/16'),
|
|
252
329
|
];
|
|
330
|
+
/** IPv4 loopback network (127.0.0.0/8). */
|
|
253
331
|
exports.IPV4_LOOPBACK = IpNet.parse('127.0.0.0/8');
|
|
332
|
+
/** IPv6 loopback address (::1/128). */
|
|
254
333
|
exports.IPV6_LOOPBACK = IpNet.parse('::1/128');
|
|
334
|
+
/** IPv6 link-local network (fe80::/10). */
|
|
255
335
|
exports.IPV6_LINK_LOCAL = IpNet.parse('fe80::/10');
|
|
336
|
+
/** Carrier-Grade NAT (CGNAT) address range (100.64.0.0/10), per RFC 6598. */
|
|
256
337
|
exports.CGNAT = IpNet.parse('100.64.0.0/10');
|
|
257
338
|
//# sourceMappingURL=ip.js.map
|