Skip to content

Commit c85ffb7

Browse files
committed
Clean up Google addServices lint handling
1 parent c688870 commit c85ffb7

1 file changed

Lines changed: 47 additions & 36 deletions

File tree

packages/plugins/google/src/sdk/plugin.ts

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Effect, Option, Schema } from "effect";
1+
import { Effect } from "effect";
22
import type { Layer } from "effect";
33
import { HttpClient } from "effect/unstable/http";
44

@@ -25,6 +25,7 @@ import {
2525
listHealthCheckCandidatesOpenApi,
2626
makeDefaultOpenapiStore,
2727
normalizeOpenApiAuthInputs,
28+
OpenApiExtractionError,
2829
OpenApiParseError,
2930
openApiStoredOperationsFromCompiled,
3031
resolveOpenApiBackedAnnotations,
@@ -161,18 +162,21 @@ const googleOpenApiPresetById: ReadonlyMap<string, GoogleOpenApiPreset> = new Ma
161162
googleOpenApiPresets.map((preset) => [preset.id, preset]),
162163
);
163164

164-
const ErrorMessage = Schema.Struct({ message: Schema.String });
165-
const decodeErrorMessage = Schema.decodeUnknownOption(ErrorMessage);
166-
const googleAddServicesErrorMessage = (error: unknown): string =>
167-
Option.getOrElse(
168-
Option.map(decodeErrorMessage(error), ({ message }) => message),
169-
() => String(error),
170-
);
165+
type GoogleAddServiceOutcome = {
166+
readonly added: readonly GoogleAddServicesAdded[];
167+
readonly skipped: readonly GoogleAddServicesSkipped[];
168+
readonly failed: readonly GoogleAddServicesFailed[];
169+
};
171170

172-
type GoogleAddServiceOutcome =
173-
| { readonly _tag: "added"; readonly value: GoogleAddServicesAdded }
174-
| { readonly _tag: "skipped"; readonly value: GoogleAddServicesSkipped }
175-
| { readonly _tag: "failed"; readonly value: GoogleAddServicesFailed };
171+
const googleAddServiceFailure = (
172+
service: GoogleServiceConfig,
173+
slug: IntegrationSlug,
174+
error: string,
175+
): GoogleAddServiceOutcome => ({
176+
added: [],
177+
skipped: [],
178+
failed: [{ slug, presetId: service.presetId, error }],
179+
});
176180

177181
const googlePhotosBundlePresetIdByUrl = new Map(
178182
googlePhotosOpenApiPresets.flatMap((preset) =>
@@ -374,43 +378,50 @@ const makeGooglePluginExtension = (
374378
return addOneService(service, input.baseUrl).pipe(
375379
Effect.map(
376380
(result): GoogleAddServiceOutcome => ({
377-
_tag: "added",
378-
value: {
379-
slug: result.slug,
380-
presetId: service.presetId,
381-
toolCount: result.toolCount,
382-
},
381+
added: [
382+
{
383+
slug: result.slug,
384+
presetId: service.presetId,
385+
toolCount: result.toolCount,
386+
},
387+
],
388+
skipped: [],
389+
failed: [],
383390
}),
384391
),
385392
Effect.catchTag("IntegrationAlreadyExistsError", () =>
386393
Effect.succeed({
387-
_tag: "skipped" as const,
388-
value: {
389-
slug,
390-
presetId: service.presetId,
391-
reason: "already_exists" as const,
392-
},
394+
added: [],
395+
skipped: [
396+
{
397+
slug,
398+
presetId: service.presetId,
399+
reason: "already_exists" as const,
400+
},
401+
],
402+
failed: [],
393403
}),
394404
),
395-
Effect.catch((error) =>
396-
Effect.succeed({
397-
_tag: "failed" as const,
398-
value: {
399-
slug,
400-
presetId: service.presetId,
401-
error: googleAddServicesErrorMessage(error),
402-
},
403-
}),
405+
Effect.catchTags({
406+
OpenApiParseError: (error: OpenApiParseError) =>
407+
Effect.succeed(googleAddServiceFailure(service, slug, error.message)),
408+
OpenApiExtractionError: (error: OpenApiExtractionError) =>
409+
Effect.succeed(googleAddServiceFailure(service, slug, error.message)),
410+
}),
411+
Effect.catch(() =>
412+
Effect.succeed(
413+
googleAddServiceFailure(service, slug, "Failed to add Google service"),
414+
),
404415
),
405416
);
406417
},
407418
{ concurrency: 1 },
408419
);
409420

410421
return {
411-
added: outcomes.flatMap((outcome) => (outcome._tag === "added" ? [outcome.value] : [])),
412-
skipped: outcomes.flatMap((outcome) => (outcome._tag === "skipped" ? [outcome.value] : [])),
413-
failed: outcomes.flatMap((outcome) => (outcome._tag === "failed" ? [outcome.value] : [])),
422+
added: outcomes.flatMap((outcome) => outcome.added),
423+
skipped: outcomes.flatMap((outcome) => outcome.skipped),
424+
failed: outcomes.flatMap((outcome) => outcome.failed),
414425
};
415426
});
416427

0 commit comments

Comments
 (0)