runtime-resolver 0.1.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/711.js +5932 -0
- package/README.md +7 -65
- package/bin/runtime-resolver.js +26 -46
- package/index.d.ts +2480 -237
- package/index.js +127 -7
- package/{235.js → json-schema.js} +8 -2
- package/package.json +10 -8
- package/rslib-runtime.js +37 -0
- package/tsdoc-metadata.json +1 -1
- package/969.js +0 -27407
package/index.js
CHANGED
|
@@ -1,9 +1,129 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Data, Effect, Layer } from "effect";
|
|
2
|
+
import { SemVerParserLive, VersionCacheLive } from "semver-effect";
|
|
3
|
+
import { DenoReleaseCacheLive, BunRelease, AutoDenoCacheLive, NodeReleaseCacheLive, NodeReleaseCache, AutoNodeCacheLive, denoDefaultInputs, BunReleaseCache, nodeDefaultInputs, NodeResolverLive, BunVersionFetcherLive, DenoResolverLive, GitHubClientLive, BunVersionFetcher, NodeScheduleFetcher, DenoResolver, NodeScheduleFetcherLive, DenoVersionFetcherLive, NodeVersionFetcher, DenoReleaseCache, BunReleaseCacheLive, BunResolver, DenoRelease, bunDefaultInputs, NodeVersionFetcherLive, GitHubAutoAuth, BunResolverLive, NodeResolver, AutoBunCacheLive, DenoVersionFetcher, nodeDefaultScheduleData } from "./711.js";
|
|
4
|
+
class CacheError extends Data.TaggedError("CacheError") {
|
|
5
|
+
}
|
|
6
|
+
class FreshnessError extends Data.TaggedError("FreshnessError") {
|
|
7
|
+
}
|
|
8
|
+
class InvalidInputError extends Data.TaggedError("InvalidInputError") {
|
|
9
|
+
}
|
|
10
|
+
const freshSetup = Effect.gen(function*() {
|
|
11
|
+
const cache = yield* BunReleaseCache;
|
|
12
|
+
const fetcher = yield* BunVersionFetcher;
|
|
13
|
+
const { inputs } = yield* fetcher.fetch().pipe(Effect.catchTags({
|
|
14
|
+
AuthenticationError: (err)=>Effect.fail(new FreshnessError({
|
|
15
|
+
strategy: "api",
|
|
16
|
+
message: `Fresh data required but authentication failed: ${err.message}`
|
|
17
|
+
})),
|
|
18
|
+
NetworkError: (err)=>Effect.fail(new FreshnessError({
|
|
19
|
+
strategy: "api",
|
|
20
|
+
message: `Fresh data required but network unavailable: ${err.message}`
|
|
21
|
+
})),
|
|
22
|
+
ParseError: (err)=>Effect.fail(new FreshnessError({
|
|
23
|
+
strategy: "api",
|
|
24
|
+
message: `Fresh data required but parse failed: ${err.message}`
|
|
25
|
+
})),
|
|
26
|
+
RateLimitError: (err)=>Effect.fail(new FreshnessError({
|
|
27
|
+
strategy: "api",
|
|
28
|
+
message: `Fresh data required but rate limit exceeded: ${err.message}`
|
|
29
|
+
}))
|
|
30
|
+
}));
|
|
31
|
+
const releases = yield* Effect.all(inputs.map((input)=>BunRelease.fromInput(input)), {
|
|
32
|
+
concurrency: "unbounded"
|
|
33
|
+
}).pipe(Effect.orElseSucceed(()=>[]));
|
|
34
|
+
yield* cache.load(releases);
|
|
35
|
+
});
|
|
36
|
+
const SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
37
|
+
const BaseCacheLayer = BunReleaseCacheLive.pipe(Layer.provide(SemVerLayer));
|
|
38
|
+
const FreshBunCacheLive = BaseCacheLayer.pipe(Layer.tap((ctx)=>freshSetup.pipe(Effect.provide(ctx))));
|
|
39
|
+
const FreshDenoCacheLive_freshSetup = Effect.gen(function*() {
|
|
40
|
+
const cache = yield* DenoReleaseCache;
|
|
41
|
+
const fetcher = yield* DenoVersionFetcher;
|
|
42
|
+
const { inputs } = yield* fetcher.fetch().pipe(Effect.catchTags({
|
|
43
|
+
AuthenticationError: (err)=>Effect.fail(new FreshnessError({
|
|
44
|
+
strategy: "api",
|
|
45
|
+
message: `Fresh data required but authentication failed: ${err.message}`
|
|
46
|
+
})),
|
|
47
|
+
NetworkError: (err)=>Effect.fail(new FreshnessError({
|
|
48
|
+
strategy: "api",
|
|
49
|
+
message: `Fresh data required but network unavailable: ${err.message}`
|
|
50
|
+
})),
|
|
51
|
+
ParseError: (err)=>Effect.fail(new FreshnessError({
|
|
52
|
+
strategy: "api",
|
|
53
|
+
message: `Fresh data required but parse failed: ${err.message}`
|
|
54
|
+
})),
|
|
55
|
+
RateLimitError: (err)=>Effect.fail(new FreshnessError({
|
|
56
|
+
strategy: "api",
|
|
57
|
+
message: `Fresh data required but rate limit exceeded: ${err.message}`
|
|
58
|
+
}))
|
|
59
|
+
}));
|
|
60
|
+
const releases = yield* Effect.all(inputs.map((input)=>DenoRelease.fromInput(input)), {
|
|
61
|
+
concurrency: "unbounded"
|
|
62
|
+
}).pipe(Effect.orElseSucceed(()=>[]));
|
|
63
|
+
yield* cache.load(releases);
|
|
64
|
+
});
|
|
65
|
+
const FreshDenoCacheLive_SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
66
|
+
const FreshDenoCacheLive_BaseCacheLayer = DenoReleaseCacheLive.pipe(Layer.provide(FreshDenoCacheLive_SemVerLayer));
|
|
67
|
+
const FreshDenoCacheLive = FreshDenoCacheLive_BaseCacheLayer.pipe(Layer.tap((ctx)=>FreshDenoCacheLive_freshSetup.pipe(Effect.provide(ctx))));
|
|
68
|
+
const FreshNodeCacheLive_freshSetup = Effect.gen(function*() {
|
|
69
|
+
const cache = yield* NodeReleaseCache;
|
|
70
|
+
const versionFetcher = yield* NodeVersionFetcher;
|
|
71
|
+
const scheduleFetcher = yield* NodeScheduleFetcher;
|
|
72
|
+
const [fetchResult, scheduleData] = yield* Effect.all([
|
|
73
|
+
versionFetcher.fetch(),
|
|
74
|
+
scheduleFetcher.fetch()
|
|
75
|
+
]).pipe(Effect.catchTags({
|
|
76
|
+
NetworkError: (err)=>Effect.fail(new FreshnessError({
|
|
77
|
+
strategy: "api",
|
|
78
|
+
message: `Fresh data required but network unavailable: ${err.message}`
|
|
79
|
+
})),
|
|
80
|
+
ParseError: (err)=>Effect.fail(new FreshnessError({
|
|
81
|
+
strategy: "api",
|
|
82
|
+
message: `Fresh data required but response could not be parsed: ${err.message}`
|
|
83
|
+
}))
|
|
84
|
+
}));
|
|
85
|
+
yield* cache.updateSchedule(scheduleData);
|
|
86
|
+
yield* cache.loadFromInputs(fetchResult.inputs);
|
|
87
|
+
});
|
|
88
|
+
const FreshNodeCacheLive_SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
89
|
+
const FreshNodeCacheLive_BaseCacheLayer = NodeReleaseCacheLive.pipe(Layer.provide(FreshNodeCacheLive_SemVerLayer));
|
|
90
|
+
const FreshNodeCacheLive = FreshNodeCacheLive_BaseCacheLayer.pipe(Layer.tap((ctx)=>FreshNodeCacheLive_freshSetup.pipe(Effect.provide(ctx))));
|
|
91
|
+
const offlineSetup = Effect.gen(function*() {
|
|
92
|
+
const cache = yield* BunReleaseCache;
|
|
93
|
+
const releases = yield* Effect.all(bunDefaultInputs.map((input)=>BunRelease.fromInput(input)), {
|
|
94
|
+
concurrency: "unbounded"
|
|
95
|
+
}).pipe(Effect.orElseSucceed(()=>[]));
|
|
96
|
+
yield* cache.load(releases);
|
|
97
|
+
});
|
|
98
|
+
const OfflineBunCacheLive_SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
99
|
+
const OfflineBunCacheLive_BaseCacheLayer = BunReleaseCacheLive.pipe(Layer.provide(OfflineBunCacheLive_SemVerLayer));
|
|
100
|
+
const OfflineBunCacheLive = OfflineBunCacheLive_BaseCacheLayer.pipe(Layer.tap((ctx)=>offlineSetup.pipe(Effect.provide(ctx))));
|
|
101
|
+
const OfflineDenoCacheLive_offlineSetup = Effect.gen(function*() {
|
|
102
|
+
const cache = yield* DenoReleaseCache;
|
|
103
|
+
const releases = yield* Effect.all(denoDefaultInputs.map((input)=>DenoRelease.fromInput(input)), {
|
|
104
|
+
concurrency: "unbounded"
|
|
105
|
+
}).pipe(Effect.orElseSucceed(()=>[]));
|
|
106
|
+
yield* cache.load(releases);
|
|
107
|
+
});
|
|
108
|
+
const OfflineDenoCacheLive_SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
109
|
+
const OfflineDenoCacheLive_BaseCacheLayer = DenoReleaseCacheLive.pipe(Layer.provide(OfflineDenoCacheLive_SemVerLayer));
|
|
110
|
+
const OfflineDenoCacheLive = OfflineDenoCacheLive_BaseCacheLayer.pipe(Layer.tap((ctx)=>OfflineDenoCacheLive_offlineSetup.pipe(Effect.provide(ctx))));
|
|
111
|
+
const OfflineNodeCacheLive_offlineSetup = Effect.gen(function*() {
|
|
112
|
+
const cache = yield* NodeReleaseCache;
|
|
113
|
+
yield* cache.updateSchedule(nodeDefaultScheduleData);
|
|
114
|
+
yield* cache.loadFromInputs(nodeDefaultInputs);
|
|
115
|
+
});
|
|
116
|
+
const OfflineNodeCacheLive_SemVerLayer = VersionCacheLive.pipe(Layer.provide(SemVerParserLive));
|
|
117
|
+
const OfflineNodeCacheLive_BaseCacheLayer = NodeReleaseCacheLive.pipe(Layer.provide(OfflineNodeCacheLive_SemVerLayer));
|
|
118
|
+
const OfflineNodeCacheLive = OfflineNodeCacheLive_BaseCacheLayer.pipe(Layer.tap((ctx)=>OfflineNodeCacheLive_offlineSetup.pipe(Effect.provide(ctx))));
|
|
2
119
|
const GitHubLayer = GitHubClientLive.pipe(Layer.provide(GitHubAutoAuth));
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
120
|
+
const NodeFetchersLayer = Layer.merge(NodeVersionFetcherLive.pipe(Layer.provide(GitHubLayer)), NodeScheduleFetcherLive.pipe(Layer.provide(GitHubLayer)));
|
|
121
|
+
const NodeCacheLayer = AutoNodeCacheLive.pipe(Layer.provide(NodeFetchersLayer));
|
|
122
|
+
const NodeLayer = NodeResolverLive.pipe(Layer.provide(NodeCacheLayer));
|
|
123
|
+
const BunCacheLayer = AutoBunCacheLive.pipe(Layer.provide(BunVersionFetcherLive.pipe(Layer.provide(GitHubLayer))));
|
|
124
|
+
const BunLayer = BunResolverLive.pipe(Layer.provide(BunCacheLayer));
|
|
125
|
+
const DenoCacheLayer = AutoDenoCacheLive.pipe(Layer.provide(DenoVersionFetcherLive.pipe(Layer.provide(GitHubLayer))));
|
|
126
|
+
const DenoLayer = DenoResolverLive.pipe(Layer.provide(DenoCacheLayer));
|
|
7
127
|
const resolveNode = (options)=>Effect.runPromise(Effect.gen(function*() {
|
|
8
128
|
const resolver = yield* NodeResolver;
|
|
9
129
|
return yield* resolver.resolve(options);
|
|
@@ -16,5 +136,5 @@ const resolveDeno = (options)=>Effect.runPromise(Effect.gen(function*() {
|
|
|
16
136
|
const resolver = yield* DenoResolver;
|
|
17
137
|
return yield* resolver.resolve(options);
|
|
18
138
|
}).pipe(Effect.provide(DenoLayer)));
|
|
19
|
-
export { AuthenticationError,
|
|
20
|
-
export { resolveBun, resolveDeno, resolveNode };
|
|
139
|
+
export { AuthenticationError, AutoBunCacheLive, AutoDenoCacheLive, AutoNodeCacheLive, BunRelease, BunReleaseCache, BunReleaseCacheLive, BunResolver, BunResolverLive, BunVersionFetcher, BunVersionFetcherLive, DenoRelease, DenoReleaseCache, DenoReleaseCacheLive, DenoResolver, DenoResolverLive, DenoVersionFetcher, DenoVersionFetcherLive, GitHubAppAuth, GitHubAutoAuth, GitHubClient, GitHubClientLive, GitHubTokenAuth, GitHubTokenAuthFromToken, NetworkError, NodeRelease, NodeReleaseCache, NodeReleaseCacheLive, NodeResolver, NodeResolverLive, NodeSchedule, NodeScheduleFetcher, NodeScheduleFetcherLive, NodeVersionFetcher, NodeVersionFetcherLive, OctokitInstance, ParseError, RateLimitError, VersionNotFoundError, createRuntimeCache } from "./711.js";
|
|
140
|
+
export { CacheError, FreshBunCacheLive, FreshDenoCacheLive, FreshNodeCacheLive, FreshnessError, InvalidInputError, OfflineBunCacheLive, OfflineDenoCacheLive, OfflineNodeCacheLive, resolveBun, resolveDeno, resolveNode };
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __webpack_require__ } from "./rslib-runtime.js";
|
|
2
|
+
import { JSONSchema, Schema } from "effect";
|
|
3
|
+
var json_schema_namespaceObject = {};
|
|
4
|
+
__webpack_require__.r(json_schema_namespaceObject);
|
|
5
|
+
__webpack_require__.d(json_schema_namespaceObject, {
|
|
6
|
+
cliJsonSchema: ()=>cliJsonSchema
|
|
7
|
+
});
|
|
2
8
|
const CliErrorDetail = Schema.Struct({
|
|
3
9
|
_tag: Schema.String.annotations({
|
|
4
10
|
description: "Error type identifier (e.g. RateLimitError, SemverError)"
|
|
@@ -86,4 +92,4 @@ const CliResponse = Schema.Union(CliSuccessResponse, CliErrorResponse).annotatio
|
|
|
86
92
|
description: "CLI response envelope. Contains an ok discriminator and a results map with per-runtime resolution outcomes."
|
|
87
93
|
});
|
|
88
94
|
const cliJsonSchema = JSONSchema.make(CliResponse);
|
|
89
|
-
export {
|
|
95
|
+
export { json_schema_namespaceObject };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "runtime-resolver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Resolve semver-compatible versions of Node.js, Bun, and Deno runtimes with Effect-based architecture and offline fallback.",
|
|
6
6
|
"keywords": [
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"email": "spencer@beggs.codes",
|
|
31
31
|
"url": "https://spencerbeg.gs"
|
|
32
32
|
},
|
|
33
|
+
"sideEffects": false,
|
|
33
34
|
"type": "module",
|
|
34
35
|
"exports": {
|
|
35
36
|
".": {
|
|
@@ -41,26 +42,27 @@
|
|
|
41
42
|
"runtime-resolver": "./bin/runtime-resolver.js"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@effect/cli": "^0.
|
|
45
|
-
"@effect/platform": "^0.
|
|
46
|
-
"@effect/platform-node": "^0.
|
|
45
|
+
"@effect/cli": "^0.74.0",
|
|
46
|
+
"@effect/platform": "^0.95.0",
|
|
47
|
+
"@effect/platform-node": "^0.105.0",
|
|
47
48
|
"@octokit/auth-app": "^8.2.0",
|
|
48
|
-
"effect": "^3.
|
|
49
|
+
"effect": "^3.20.0",
|
|
49
50
|
"octokit": "^5.0.5",
|
|
50
|
-
"semver": "^
|
|
51
|
+
"semver-effect": "^0.2.0"
|
|
51
52
|
},
|
|
52
53
|
"files": [
|
|
53
54
|
"!runtime-resolver.api.json",
|
|
54
55
|
"!tsconfig.json",
|
|
55
56
|
"!tsdoc.json",
|
|
56
|
-
"
|
|
57
|
-
"969.js",
|
|
57
|
+
"711.js",
|
|
58
58
|
"LICENSE",
|
|
59
59
|
"README.md",
|
|
60
60
|
"bin/runtime-resolver.js",
|
|
61
61
|
"index.d.ts",
|
|
62
62
|
"index.js",
|
|
63
|
+
"json-schema.js",
|
|
63
64
|
"package.json",
|
|
65
|
+
"rslib-runtime.js",
|
|
64
66
|
"tsdoc-metadata.json"
|
|
65
67
|
]
|
|
66
68
|
}
|
package/rslib-runtime.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __webpack_module_cache__ = {};
|
|
2
|
+
function __webpack_require__(moduleId) {
|
|
3
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
4
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
5
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
6
|
+
exports: {}
|
|
7
|
+
};
|
|
8
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
9
|
+
return module.exports;
|
|
10
|
+
}
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.d = (exports, definition)=>{
|
|
13
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: definition[key]
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.add = function(modules) {
|
|
21
|
+
Object.assign(__webpack_require__.m, modules);
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
|
+
})();
|
|
27
|
+
(()=>{
|
|
28
|
+
__webpack_require__.r = (exports)=>{
|
|
29
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
|
|
30
|
+
value: 'Module'
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(exports, '__esModule', {
|
|
33
|
+
value: true
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
export { __webpack_require__ };
|