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/index.js CHANGED
@@ -1,9 +1,129 @@
1
- import { Layer, NodeResolver, GitHubAutoAuth, BunResolverLive, DenoResolverLive, GitHubClientLive, VersionCacheLive, Effect, BunResolver, DenoResolver, NodeResolverLive } from "./969.js";
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 SharedLayer = Layer.merge(GitHubLayer, VersionCacheLive);
4
- const NodeLayer = NodeResolverLive.pipe(Layer.provide(SharedLayer));
5
- const BunLayer = BunResolverLive.pipe(Layer.provide(SharedLayer));
6
- const DenoLayer = DenoResolverLive.pipe(Layer.provide(SharedLayer));
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, AuthenticationErrorBase, BunResolver, BunResolverLive, CacheError, CacheErrorBase, DenoResolver, DenoResolverLive, FreshnessError, FreshnessErrorBase, GitHubAppAuth, GitHubAutoAuth, GitHubClient, GitHubClientLive, GitHubTokenAuth, GitHubTokenAuthFromToken, InvalidInputError, InvalidInputErrorBase, NetworkError, NetworkErrorBase, NodeResolver, NodeResolverLive, OctokitInstance, ParseError, ParseErrorBase, RateLimitError, RateLimitErrorBase, VersionCache, VersionCacheLive, VersionNotFoundError, VersionNotFoundErrorBase } from "./969.js";
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 { JSONSchema, Schema } from "./969.js";
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 { cliJsonSchema };
95
+ export { json_schema_namespaceObject };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runtime-resolver",
3
- "version": "0.1.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.73.2",
45
- "@effect/platform": "^0.94.5",
46
- "@effect/platform-node": "^0.104.1",
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.19.19",
49
+ "effect": "^3.20.0",
49
50
  "octokit": "^5.0.5",
50
- "semver": "^7.7.4"
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
- "235.js",
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
  }
@@ -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__ };
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.57.6"
8
+ "packageVersion": "7.57.7"
9
9
  }
10
10
  ]
11
11
  }