@enactprotocol/shared 1.2.13 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/dist/config.d.ts +164 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +386 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +15 -5
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +24 -8
- package/dist/constants.js.map +1 -0
- package/dist/execution/command.d.ts +102 -0
- package/dist/execution/command.d.ts.map +1 -0
- package/dist/execution/command.js +262 -0
- package/dist/execution/command.js.map +1 -0
- package/dist/execution/index.d.ts +12 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +17 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/runtime.d.ts +82 -0
- package/dist/execution/runtime.d.ts.map +1 -0
- package/dist/execution/runtime.js +273 -0
- package/dist/execution/runtime.js.map +1 -0
- package/dist/execution/types.d.ts +306 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +14 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/execution/validation.d.ts +43 -0
- package/dist/execution/validation.d.ts.map +1 -0
- package/dist/execution/validation.js +430 -0
- package/dist/execution/validation.js.map +1 -0
- package/dist/index.d.ts +21 -21
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -25
- package/dist/index.js.map +1 -0
- package/dist/manifest/index.d.ts +7 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +10 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/loader.d.ts +76 -0
- package/dist/manifest/loader.d.ts.map +1 -0
- package/dist/manifest/loader.js +146 -0
- package/dist/manifest/loader.js.map +1 -0
- package/dist/manifest/parser.d.ts +64 -0
- package/dist/manifest/parser.d.ts.map +1 -0
- package/dist/manifest/parser.js +135 -0
- package/dist/manifest/parser.js.map +1 -0
- package/dist/manifest/validator.d.ts +95 -0
- package/dist/manifest/validator.d.ts.map +1 -0
- package/dist/manifest/validator.js +258 -0
- package/dist/manifest/validator.js.map +1 -0
- package/dist/paths.d.ts +57 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +93 -0
- package/dist/paths.js.map +1 -0
- package/dist/registry.d.ts +73 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +147 -0
- package/dist/registry.js.map +1 -0
- package/dist/resolver.d.ts +89 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +282 -0
- package/dist/resolver.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +201 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +13 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types.d.ts +5 -132
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -3
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +105 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +233 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +102 -25
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +214 -57
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/version.d.ts +60 -2
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +255 -31
- package/dist/utils/version.js.map +1 -0
- package/package.json +16 -58
- package/src/config.ts +510 -0
- package/src/constants.ts +36 -0
- package/src/execution/command.ts +314 -0
- package/src/execution/index.ts +73 -0
- package/src/execution/runtime.ts +308 -0
- package/src/execution/types.ts +379 -0
- package/src/execution/validation.ts +508 -0
- package/src/index.ts +238 -30
- package/src/manifest/index.ts +36 -0
- package/src/manifest/loader.ts +187 -0
- package/src/manifest/parser.ts +173 -0
- package/src/manifest/validator.ts +309 -0
- package/src/paths.ts +108 -0
- package/src/registry.ts +219 -0
- package/src/resolver.ts +345 -0
- package/src/types/index.ts +30 -0
- package/src/types/manifest.ts +255 -0
- package/src/types.ts +5 -188
- package/src/utils/fs.ts +281 -0
- package/src/utils/logger.ts +270 -59
- package/src/utils/version.ts +304 -36
- package/tests/config.test.ts +515 -0
- package/tests/execution/command.test.ts +317 -0
- package/tests/execution/validation.test.ts +384 -0
- package/tests/fixtures/invalid-tool.yaml +4 -0
- package/tests/fixtures/valid-tool.md +62 -0
- package/tests/fixtures/valid-tool.yaml +40 -0
- package/tests/index.test.ts +8 -0
- package/tests/manifest/loader.test.ts +291 -0
- package/tests/manifest/parser.test.ts +345 -0
- package/tests/manifest/validator.test.ts +394 -0
- package/tests/manifest-types.test.ts +358 -0
- package/tests/paths.test.ts +153 -0
- package/tests/registry.test.ts +231 -0
- package/tests/resolver.test.ts +272 -0
- package/tests/utils/fs.test.ts +388 -0
- package/tests/utils/logger.test.ts +480 -0
- package/tests/utils/version.test.ts +390 -0
- package/tsconfig.json +12 -0
- package/dist/LocalToolResolver.d.ts +0 -84
- package/dist/LocalToolResolver.js +0 -353
- package/dist/api/enact-api.d.ts +0 -130
- package/dist/api/enact-api.js +0 -428
- package/dist/api/index.d.ts +0 -2
- package/dist/api/index.js +0 -2
- package/dist/api/types.d.ts +0 -103
- package/dist/api/types.js +0 -1
- package/dist/core/DaggerExecutionProvider.d.ts +0 -169
- package/dist/core/DaggerExecutionProvider.js +0 -1029
- package/dist/core/DirectExecutionProvider.d.ts +0 -23
- package/dist/core/DirectExecutionProvider.js +0 -406
- package/dist/core/EnactCore.d.ts +0 -162
- package/dist/core/EnactCore.js +0 -597
- package/dist/core/NativeExecutionProvider.d.ts +0 -9
- package/dist/core/NativeExecutionProvider.js +0 -16
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.js +0 -3
- package/dist/exec/index.d.ts +0 -3
- package/dist/exec/index.js +0 -3
- package/dist/exec/logger.d.ts +0 -11
- package/dist/exec/logger.js +0 -57
- package/dist/exec/validate.d.ts +0 -5
- package/dist/exec/validate.js +0 -167
- package/dist/lib/enact-direct.d.ts +0 -150
- package/dist/lib/enact-direct.js +0 -159
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.js +0 -1
- package/dist/security/index.d.ts +0 -3
- package/dist/security/index.js +0 -3
- package/dist/security/security.d.ts +0 -23
- package/dist/security/security.js +0 -137
- package/dist/security/sign.d.ts +0 -103
- package/dist/security/sign.js +0 -666
- package/dist/security/verification-enforcer.d.ts +0 -53
- package/dist/security/verification-enforcer.js +0 -204
- package/dist/services/McpCoreService.d.ts +0 -98
- package/dist/services/McpCoreService.js +0 -124
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.js +0 -1
- package/dist/utils/config.d.ts +0 -111
- package/dist/utils/config.js +0 -342
- package/dist/utils/env-loader.d.ts +0 -54
- package/dist/utils/env-loader.js +0 -270
- package/dist/utils/help.d.ts +0 -36
- package/dist/utils/help.js +0 -248
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.js +0 -7
- package/dist/utils/silent-monitor.d.ts +0 -67
- package/dist/utils/silent-monitor.js +0 -242
- package/dist/utils/timeout.d.ts +0 -5
- package/dist/utils/timeout.js +0 -23
- package/dist/web/env-manager-server.d.ts +0 -29
- package/dist/web/env-manager-server.js +0 -367
- package/dist/web/index.d.ts +0 -1
- package/dist/web/index.js +0 -1
- package/src/LocalToolResolver.ts +0 -424
- package/src/api/enact-api.ts +0 -604
- package/src/api/index.ts +0 -2
- package/src/api/types.ts +0 -114
- package/src/core/DaggerExecutionProvider.ts +0 -1357
- package/src/core/DirectExecutionProvider.ts +0 -484
- package/src/core/EnactCore.ts +0 -847
- package/src/core/index.ts +0 -3
- package/src/exec/index.ts +0 -3
- package/src/exec/logger.ts +0 -63
- package/src/exec/validate.ts +0 -238
- package/src/lib/enact-direct.ts +0 -254
- package/src/lib/index.ts +0 -1
- package/src/services/McpCoreService.ts +0 -201
- package/src/services/index.ts +0 -1
- package/src/utils/config.ts +0 -438
- package/src/utils/env-loader.ts +0 -370
- package/src/utils/help.ts +0 -257
- package/src/utils/index.ts +0 -7
- package/src/utils/silent-monitor.ts +0 -328
- package/src/utils/timeout.ts +0 -26
- package/src/web/env-manager-server.ts +0 -465
- package/src/web/index.ts +0 -1
- package/src/web/static/app.js +0 -663
- package/src/web/static/index.html +0 -117
- package/src/web/static/style.css +0 -291
package/dist/utils/logger.js
CHANGED
|
@@ -1,75 +1,232 @@
|
|
|
1
|
-
// src/utils/logger.ts
|
|
2
|
-
import pc from "picocolors";
|
|
3
|
-
export var LogLevel;
|
|
4
|
-
(function (LogLevel) {
|
|
5
|
-
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
6
|
-
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
7
|
-
LogLevel[LogLevel["SUCCESS"] = 2] = "SUCCESS";
|
|
8
|
-
LogLevel[LogLevel["WARN"] = 3] = "WARN";
|
|
9
|
-
LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
|
|
10
|
-
})(LogLevel || (LogLevel = {}));
|
|
11
|
-
// Default log level
|
|
12
|
-
let currentLogLevel = LogLevel.INFO;
|
|
13
1
|
/**
|
|
14
|
-
*
|
|
2
|
+
* @enactprotocol/shared - Logger utility
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with level filtering and
|
|
5
|
+
* configurable output formats (console with colors or JSON).
|
|
15
6
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
/** Level priorities (higher = more severe) */
|
|
8
|
+
const LEVEL_PRIORITY = {
|
|
9
|
+
debug: 0,
|
|
10
|
+
info: 1,
|
|
11
|
+
warn: 2,
|
|
12
|
+
error: 3,
|
|
13
|
+
silent: 4,
|
|
14
|
+
};
|
|
15
|
+
/** ANSI color codes */
|
|
16
|
+
const COLORS = {
|
|
17
|
+
reset: "\x1b[0m",
|
|
18
|
+
dim: "\x1b[2m",
|
|
19
|
+
bold: "\x1b[1m",
|
|
20
|
+
red: "\x1b[31m",
|
|
21
|
+
yellow: "\x1b[33m",
|
|
22
|
+
blue: "\x1b[34m",
|
|
23
|
+
cyan: "\x1b[36m",
|
|
24
|
+
gray: "\x1b[90m",
|
|
25
|
+
};
|
|
26
|
+
/** Level display colors */
|
|
27
|
+
const LEVEL_COLORS = {
|
|
28
|
+
debug: COLORS.gray,
|
|
29
|
+
info: COLORS.blue,
|
|
30
|
+
warn: COLORS.yellow,
|
|
31
|
+
error: COLORS.red,
|
|
32
|
+
};
|
|
33
|
+
/** Level labels for output */
|
|
34
|
+
const LEVEL_LABELS = {
|
|
35
|
+
debug: "DEBUG",
|
|
36
|
+
info: "INFO",
|
|
37
|
+
warn: "WARN",
|
|
38
|
+
error: "ERROR",
|
|
39
|
+
};
|
|
19
40
|
/**
|
|
20
|
-
*
|
|
41
|
+
* Logger class with level filtering and structured output
|
|
21
42
|
*/
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
|
|
43
|
+
export class Logger {
|
|
44
|
+
level;
|
|
45
|
+
format;
|
|
46
|
+
colors;
|
|
47
|
+
output;
|
|
48
|
+
errorOutput;
|
|
49
|
+
prefix;
|
|
50
|
+
constructor(options = {}) {
|
|
51
|
+
this.level = options.level ?? "info";
|
|
52
|
+
this.format = options.format ?? "console";
|
|
53
|
+
this.colors = options.colors ?? true;
|
|
54
|
+
this.output = options.output ?? console.log;
|
|
55
|
+
this.errorOutput = options.errorOutput ?? console.error;
|
|
56
|
+
this.prefix = options.prefix ?? "";
|
|
25
57
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Check if a level should be logged
|
|
60
|
+
*/
|
|
61
|
+
shouldLog(level) {
|
|
62
|
+
return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[this.level];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Set the minimum log level
|
|
66
|
+
*/
|
|
67
|
+
setLevel(level) {
|
|
68
|
+
this.level = level;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the current log level
|
|
72
|
+
*/
|
|
73
|
+
getLevel() {
|
|
74
|
+
return this.level;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Set the output format
|
|
78
|
+
*/
|
|
79
|
+
setFormat(format) {
|
|
80
|
+
this.format = format;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Enable or disable colors
|
|
84
|
+
*/
|
|
85
|
+
setColors(enabled) {
|
|
86
|
+
this.colors = enabled;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Set the prefix for log messages
|
|
90
|
+
*/
|
|
91
|
+
setPrefix(prefix) {
|
|
92
|
+
this.prefix = prefix;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a child logger with a prefix
|
|
96
|
+
*/
|
|
97
|
+
child(prefix) {
|
|
98
|
+
const childPrefix = this.prefix ? `${this.prefix}:${prefix}` : prefix;
|
|
99
|
+
return new Logger({
|
|
100
|
+
level: this.level,
|
|
101
|
+
format: this.format,
|
|
102
|
+
colors: this.colors,
|
|
103
|
+
output: this.output,
|
|
104
|
+
errorOutput: this.errorOutput,
|
|
105
|
+
prefix: childPrefix,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Log a debug message
|
|
110
|
+
*/
|
|
111
|
+
debug(message, context) {
|
|
112
|
+
this.log("debug", message, context);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Log an info message
|
|
116
|
+
*/
|
|
117
|
+
info(message, context) {
|
|
118
|
+
this.log("info", message, context);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Log a warning message
|
|
122
|
+
*/
|
|
123
|
+
warn(message, context) {
|
|
124
|
+
this.log("warn", message, context);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Log an error message
|
|
128
|
+
*/
|
|
129
|
+
error(message, context) {
|
|
130
|
+
this.log("error", message, context);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Core logging method
|
|
134
|
+
*/
|
|
135
|
+
log(level, message, context) {
|
|
136
|
+
if (!this.shouldLog(level)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const entry = {
|
|
140
|
+
timestamp: new Date().toISOString(),
|
|
141
|
+
level,
|
|
142
|
+
message: this.prefix ? `[${this.prefix}] ${message}` : message,
|
|
143
|
+
context,
|
|
144
|
+
};
|
|
145
|
+
const formatted = this.format === "json" ? this.formatJson(entry) : this.formatConsole(entry);
|
|
146
|
+
// Use error output for warn/error levels
|
|
147
|
+
if (level === "warn" || level === "error") {
|
|
148
|
+
this.errorOutput(formatted);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.output(formatted);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Format entry as JSON
|
|
156
|
+
*/
|
|
157
|
+
formatJson(entry) {
|
|
158
|
+
const obj = {
|
|
159
|
+
timestamp: entry.timestamp,
|
|
160
|
+
level: entry.level,
|
|
161
|
+
message: entry.message,
|
|
162
|
+
};
|
|
163
|
+
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
164
|
+
obj.context = entry.context;
|
|
165
|
+
}
|
|
166
|
+
return JSON.stringify(obj);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Format entry for console with colors
|
|
170
|
+
*/
|
|
171
|
+
formatConsole(entry) {
|
|
172
|
+
const parts = [];
|
|
173
|
+
// Timestamp (dim)
|
|
174
|
+
if (this.colors) {
|
|
175
|
+
parts.push(`${COLORS.dim}${entry.timestamp}${COLORS.reset}`);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
parts.push(entry.timestamp);
|
|
179
|
+
}
|
|
180
|
+
// Level label with color (only active levels, not silent)
|
|
181
|
+
const level = entry.level;
|
|
182
|
+
const label = LEVEL_LABELS[level];
|
|
183
|
+
if (this.colors) {
|
|
184
|
+
const color = LEVEL_COLORS[level];
|
|
185
|
+
parts.push(`${color}${label.padEnd(5)}${COLORS.reset}`);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
parts.push(label.padEnd(5));
|
|
189
|
+
}
|
|
190
|
+
// Message
|
|
191
|
+
parts.push(entry.message);
|
|
192
|
+
// Context (if any)
|
|
193
|
+
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
194
|
+
const contextStr = JSON.stringify(entry.context);
|
|
195
|
+
if (this.colors) {
|
|
196
|
+
parts.push(`${COLORS.dim}${contextStr}${COLORS.reset}`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
parts.push(contextStr);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return parts.join(" ");
|
|
33
203
|
}
|
|
34
204
|
}
|
|
35
205
|
/**
|
|
36
|
-
*
|
|
206
|
+
* Default logger instance
|
|
37
207
|
*/
|
|
38
|
-
|
|
39
|
-
if (currentLogLevel <= LogLevel.SUCCESS) {
|
|
40
|
-
console.error(pc.green(`✓ ${message}`));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
208
|
+
let defaultLogger = new Logger();
|
|
43
209
|
/**
|
|
44
|
-
*
|
|
210
|
+
* Get the default logger instance
|
|
45
211
|
*/
|
|
46
|
-
export function
|
|
47
|
-
|
|
48
|
-
console.error(pc.yellow(`⚠️ ${message}`));
|
|
49
|
-
}
|
|
212
|
+
export function getLogger() {
|
|
213
|
+
return defaultLogger;
|
|
50
214
|
}
|
|
51
215
|
/**
|
|
52
|
-
*
|
|
216
|
+
* Configure the default logger
|
|
53
217
|
*/
|
|
54
|
-
export function
|
|
55
|
-
|
|
56
|
-
console.error(pc.red(`✗ Error: ${message}`));
|
|
57
|
-
if (details && currentLogLevel === LogLevel.DEBUG) {
|
|
58
|
-
console.error(pc.dim("Details:"));
|
|
59
|
-
console.error(details);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
218
|
+
export function configureLogger(options) {
|
|
219
|
+
defaultLogger = new Logger(options);
|
|
62
220
|
}
|
|
63
221
|
/**
|
|
64
|
-
*
|
|
222
|
+
* Create a new logger with the given options
|
|
65
223
|
*/
|
|
66
|
-
export function
|
|
67
|
-
|
|
68
|
-
if (columns) {
|
|
69
|
-
console.table(data, columns);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
console.table(data);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
224
|
+
export function createLogger(options) {
|
|
225
|
+
return new Logger(options);
|
|
75
226
|
}
|
|
227
|
+
// Convenience exports for quick logging
|
|
228
|
+
export const debug = (message, context) => defaultLogger.debug(message, context);
|
|
229
|
+
export const info = (message, context) => defaultLogger.info(message, context);
|
|
230
|
+
export const warn = (message, context) => defaultLogger.warn(message, context);
|
|
231
|
+
export const error = (message, context) => defaultLogger.error(message, context);
|
|
232
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/version.d.ts
CHANGED
|
@@ -1,4 +1,62 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @enactprotocol/shared - Version utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides semver parsing, comparison, and range checking.
|
|
3
5
|
*/
|
|
4
|
-
export
|
|
6
|
+
export interface ParsedVersion {
|
|
7
|
+
major: number;
|
|
8
|
+
minor: number;
|
|
9
|
+
patch: number;
|
|
10
|
+
prerelease?: string | undefined;
|
|
11
|
+
build?: string | undefined;
|
|
12
|
+
raw: string;
|
|
13
|
+
}
|
|
14
|
+
export interface VersionRange {
|
|
15
|
+
operator: "=" | ">" | ">=" | "<" | "<=" | "^" | "~";
|
|
16
|
+
version: ParsedVersion;
|
|
17
|
+
raw: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse a semver version string
|
|
21
|
+
* Supports: 1.0.0, 1.0, 1, 1.0.0-alpha, 1.0.0+build, 1.0.0-alpha+build
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseVersion(version: string): ParsedVersion | null;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a string is a valid semver version
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidVersion(version: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Compare two version strings
|
|
30
|
+
* @returns -1 if a < b, 0 if a === b, 1 if a > b
|
|
31
|
+
*/
|
|
32
|
+
export declare function compareVersions(a: string, b: string): -1 | 0 | 1;
|
|
33
|
+
/**
|
|
34
|
+
* Parse a version range string
|
|
35
|
+
* Supports: =1.0.0, >1.0.0, >=1.0.0, <1.0.0, <=1.0.0, ^1.0.0, ~1.0.0
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseRange(range: string): VersionRange | null;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a version satisfies a range
|
|
40
|
+
*/
|
|
41
|
+
export declare function satisfiesRange(version: string, range: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Sort versions in ascending order
|
|
44
|
+
*/
|
|
45
|
+
export declare function sortVersions(versions: string[]): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Get the highest version from a list
|
|
48
|
+
*/
|
|
49
|
+
export declare function getHighestVersion(versions: string[]): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Increment a version by bump type
|
|
52
|
+
*/
|
|
53
|
+
export declare function incrementVersion(version: string, bump: "major" | "minor" | "patch"): string | null;
|
|
54
|
+
/**
|
|
55
|
+
* Coerce a string to a valid semver, filling in missing parts
|
|
56
|
+
*/
|
|
57
|
+
export declare function coerceVersion(version: string): string | null;
|
|
58
|
+
/**
|
|
59
|
+
* Format a parsed version back to string
|
|
60
|
+
*/
|
|
61
|
+
export declare function formatVersion(version: ParsedVersion): string;
|
|
62
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;IACpD,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA2BlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAgChE;AA0CD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA6B7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgDtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAChC,MAAM,GAAG,IAAI,CAYf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAS5D"}
|
package/dist/utils/version.js
CHANGED
|
@@ -1,35 +1,259 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @enactprotocol/shared - Version utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides semver parsing, comparison, and range checking.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse a semver version string
|
|
8
|
+
* Supports: 1.0.0, 1.0, 1, 1.0.0-alpha, 1.0.0+build, 1.0.0-alpha+build
|
|
9
|
+
*/
|
|
10
|
+
export function parseVersion(version) {
|
|
11
|
+
const trimmed = version.trim();
|
|
12
|
+
// Remove leading 'v' if present (common in tags)
|
|
13
|
+
const normalized = trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
|
|
14
|
+
// Full semver regex with prerelease and build metadata
|
|
15
|
+
const semverRegex = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$/;
|
|
16
|
+
const match = normalized.match(semverRegex);
|
|
17
|
+
if (!match) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const major = Number.parseInt(match[1] ?? "0", 10);
|
|
21
|
+
const minor = Number.parseInt(match[2] ?? "0", 10);
|
|
22
|
+
const patch = Number.parseInt(match[3] ?? "0", 10);
|
|
23
|
+
return {
|
|
24
|
+
major,
|
|
25
|
+
minor,
|
|
26
|
+
patch,
|
|
27
|
+
prerelease: match[4],
|
|
28
|
+
build: match[5],
|
|
29
|
+
raw: trimmed,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if a string is a valid semver version
|
|
34
|
+
*/
|
|
35
|
+
export function isValidVersion(version) {
|
|
36
|
+
return parseVersion(version) !== null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Compare two version strings
|
|
40
|
+
* @returns -1 if a < b, 0 if a === b, 1 if a > b
|
|
41
|
+
*/
|
|
42
|
+
export function compareVersions(a, b) {
|
|
43
|
+
const parsedA = parseVersion(a);
|
|
44
|
+
const parsedB = parseVersion(b);
|
|
45
|
+
// Invalid versions sort last
|
|
46
|
+
if (!parsedA && !parsedB)
|
|
47
|
+
return 0;
|
|
48
|
+
if (!parsedA)
|
|
49
|
+
return 1;
|
|
50
|
+
if (!parsedB)
|
|
51
|
+
return -1;
|
|
52
|
+
// Compare major.minor.patch
|
|
53
|
+
if (parsedA.major !== parsedB.major) {
|
|
54
|
+
return parsedA.major < parsedB.major ? -1 : 1;
|
|
55
|
+
}
|
|
56
|
+
if (parsedA.minor !== parsedB.minor) {
|
|
57
|
+
return parsedA.minor < parsedB.minor ? -1 : 1;
|
|
58
|
+
}
|
|
59
|
+
if (parsedA.patch !== parsedB.patch) {
|
|
60
|
+
return parsedA.patch < parsedB.patch ? -1 : 1;
|
|
61
|
+
}
|
|
62
|
+
// Prerelease comparison
|
|
63
|
+
// A version without prerelease is greater than one with
|
|
64
|
+
if (!parsedA.prerelease && parsedB.prerelease)
|
|
65
|
+
return 1;
|
|
66
|
+
if (parsedA.prerelease && !parsedB.prerelease)
|
|
67
|
+
return -1;
|
|
68
|
+
// Both have prereleases - compare lexically
|
|
69
|
+
if (parsedA.prerelease && parsedB.prerelease) {
|
|
70
|
+
const prereleaseCompare = comparePrerelease(parsedA.prerelease, parsedB.prerelease);
|
|
71
|
+
if (prereleaseCompare !== 0)
|
|
72
|
+
return prereleaseCompare;
|
|
73
|
+
}
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Compare prerelease strings according to semver rules
|
|
78
|
+
*/
|
|
79
|
+
function comparePrerelease(a, b) {
|
|
80
|
+
const partsA = a.split(".");
|
|
81
|
+
const partsB = b.split(".");
|
|
82
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
83
|
+
const partA = partsA[i];
|
|
84
|
+
const partB = partsB[i];
|
|
85
|
+
// Shorter prerelease is less than longer
|
|
86
|
+
if (partA === undefined)
|
|
87
|
+
return -1;
|
|
88
|
+
if (partB === undefined)
|
|
89
|
+
return 1;
|
|
90
|
+
const numA = Number.parseInt(partA, 10);
|
|
91
|
+
const numB = Number.parseInt(partB, 10);
|
|
92
|
+
const isNumA = !Number.isNaN(numA) && String(numA) === partA;
|
|
93
|
+
const isNumB = !Number.isNaN(numB) && String(numB) === partB;
|
|
94
|
+
// Numeric identifiers are less than alphanumeric
|
|
95
|
+
if (isNumA && !isNumB)
|
|
96
|
+
return -1;
|
|
97
|
+
if (!isNumA && isNumB)
|
|
98
|
+
return 1;
|
|
99
|
+
// Both numeric - compare as numbers
|
|
100
|
+
if (isNumA && isNumB) {
|
|
101
|
+
if (numA < numB)
|
|
102
|
+
return -1;
|
|
103
|
+
if (numA > numB)
|
|
104
|
+
return 1;
|
|
105
|
+
continue;
|
|
24
106
|
}
|
|
107
|
+
// Both alphanumeric - compare lexically
|
|
108
|
+
if (partA < partB)
|
|
109
|
+
return -1;
|
|
110
|
+
if (partA > partB)
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parse a version range string
|
|
117
|
+
* Supports: =1.0.0, >1.0.0, >=1.0.0, <1.0.0, <=1.0.0, ^1.0.0, ~1.0.0
|
|
118
|
+
*/
|
|
119
|
+
export function parseRange(range) {
|
|
120
|
+
const trimmed = range.trim();
|
|
121
|
+
// Match operator at start
|
|
122
|
+
const rangeRegex = /^([=><^~]+)?\s*(.+)$/;
|
|
123
|
+
const match = trimmed.match(rangeRegex);
|
|
124
|
+
if (!match || !match[2]) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const operator = (match[1] ?? "=");
|
|
128
|
+
const versionStr = match[2];
|
|
129
|
+
// Validate operator
|
|
130
|
+
if (!["=", ">", ">=", "<", "<=", "^", "~"].includes(operator)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const version = parseVersion(versionStr);
|
|
134
|
+
if (!version) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
operator,
|
|
139
|
+
version,
|
|
140
|
+
raw: trimmed,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if a version satisfies a range
|
|
145
|
+
*/
|
|
146
|
+
export function satisfiesRange(version, range) {
|
|
147
|
+
const parsedVersion = parseVersion(version);
|
|
148
|
+
const parsedRange = parseRange(range);
|
|
149
|
+
if (!parsedVersion || !parsedRange) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const comparison = compareVersions(version, parsedRange.version.raw);
|
|
153
|
+
switch (parsedRange.operator) {
|
|
154
|
+
case "=":
|
|
155
|
+
return comparison === 0;
|
|
156
|
+
case ">":
|
|
157
|
+
return comparison === 1;
|
|
158
|
+
case ">=":
|
|
159
|
+
return comparison >= 0;
|
|
160
|
+
case "<":
|
|
161
|
+
return comparison === -1;
|
|
162
|
+
case "<=":
|
|
163
|
+
return comparison <= 0;
|
|
164
|
+
case "^":
|
|
165
|
+
// Caret range: compatible changes (same major, >= version)
|
|
166
|
+
// ^1.2.3 := >=1.2.3 <2.0.0
|
|
167
|
+
// ^0.2.3 := >=0.2.3 <0.3.0
|
|
168
|
+
// ^0.0.3 := >=0.0.3 <0.0.4
|
|
169
|
+
if (comparison === -1)
|
|
170
|
+
return false;
|
|
171
|
+
if (parsedRange.version.major === 0) {
|
|
172
|
+
if (parsedRange.version.minor === 0) {
|
|
173
|
+
// ^0.0.x - must be exact patch
|
|
174
|
+
return parsedVersion.patch === parsedRange.version.patch;
|
|
175
|
+
}
|
|
176
|
+
// ^0.x - must be same minor
|
|
177
|
+
return parsedVersion.minor === parsedRange.version.minor;
|
|
178
|
+
}
|
|
179
|
+
// ^x - must be same major
|
|
180
|
+
return parsedVersion.major === parsedRange.version.major;
|
|
181
|
+
case "~":
|
|
182
|
+
// Tilde range: patch-level changes (same major.minor, >= version)
|
|
183
|
+
// ~1.2.3 := >=1.2.3 <1.3.0
|
|
184
|
+
if (comparison === -1)
|
|
185
|
+
return false;
|
|
186
|
+
return (parsedVersion.major === parsedRange.version.major &&
|
|
187
|
+
parsedVersion.minor === parsedRange.version.minor);
|
|
188
|
+
default:
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Sort versions in ascending order
|
|
194
|
+
*/
|
|
195
|
+
export function sortVersions(versions) {
|
|
196
|
+
return [...versions].sort(compareVersions);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get the highest version from a list
|
|
200
|
+
*/
|
|
201
|
+
export function getHighestVersion(versions) {
|
|
202
|
+
const valid = versions.filter(isValidVersion);
|
|
203
|
+
if (valid.length === 0)
|
|
204
|
+
return null;
|
|
205
|
+
const sorted = sortVersions(valid);
|
|
206
|
+
const last = sorted[sorted.length - 1];
|
|
207
|
+
return last ?? null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Increment a version by bump type
|
|
211
|
+
*/
|
|
212
|
+
export function incrementVersion(version, bump) {
|
|
213
|
+
const parsed = parseVersion(version);
|
|
214
|
+
if (!parsed)
|
|
215
|
+
return null;
|
|
216
|
+
switch (bump) {
|
|
217
|
+
case "major":
|
|
218
|
+
return `${parsed.major + 1}.0.0`;
|
|
219
|
+
case "minor":
|
|
220
|
+
return `${parsed.major}.${parsed.minor + 1}.0`;
|
|
221
|
+
case "patch":
|
|
222
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}`;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Coerce a string to a valid semver, filling in missing parts
|
|
227
|
+
*/
|
|
228
|
+
export function coerceVersion(version) {
|
|
229
|
+
const trimmed = version.trim();
|
|
230
|
+
const normalized = trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
|
|
231
|
+
// Try parsing as-is first
|
|
232
|
+
const parsed = parseVersion(normalized);
|
|
233
|
+
if (parsed) {
|
|
234
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}`;
|
|
235
|
+
}
|
|
236
|
+
// Try extracting numbers
|
|
237
|
+
const numbers = normalized.match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?/);
|
|
238
|
+
if (!numbers) {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
const major = Number.parseInt(numbers[1] ?? "0", 10);
|
|
242
|
+
const minor = Number.parseInt(numbers[2] ?? "0", 10);
|
|
243
|
+
const patch = Number.parseInt(numbers[3] ?? "0", 10);
|
|
244
|
+
return `${major}.${minor}.${patch}`;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Format a parsed version back to string
|
|
248
|
+
*/
|
|
249
|
+
export function formatVersion(version) {
|
|
250
|
+
let result = `${version.major}.${version.minor}.${version.patch}`;
|
|
251
|
+
if (version.prerelease) {
|
|
252
|
+
result += `-${version.prerelease}`;
|
|
25
253
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
version = "1.0.14";
|
|
254
|
+
if (version.build) {
|
|
255
|
+
result += `+${version.build}`;
|
|
29
256
|
}
|
|
30
|
-
|
|
31
|
-
console.error(`
|
|
32
|
-
${pc.bold("Enact CLI")} ${pc.cyan(versionText)}
|
|
33
|
-
${pc.dim("A tool to create and publish enact documents.")}
|
|
34
|
-
`);
|
|
257
|
+
return result;
|
|
35
258
|
}
|
|
259
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"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"}
|