@relkit/deploy-pulumi 0.0.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/aws-program-environment.d.ts +12 -0
  4. package/dist/aws-program-environment.d.ts.map +1 -0
  5. package/dist/aws-program-environment.js +73 -0
  6. package/dist/aws-program-environment.js.map +1 -0
  7. package/dist/aws-program-support.d.ts +10 -0
  8. package/dist/aws-program-support.d.ts.map +1 -0
  9. package/dist/aws-program-support.js +111 -0
  10. package/dist/aws-program-support.js.map +1 -0
  11. package/dist/aws-program.d.ts +33 -0
  12. package/dist/aws-program.d.ts.map +1 -0
  13. package/dist/aws-program.js +92 -0
  14. package/dist/aws-program.js.map +1 -0
  15. package/dist/events-report.d.ts +8 -0
  16. package/dist/events-report.d.ts.map +1 -0
  17. package/dist/events-report.js +72 -0
  18. package/dist/events-report.js.map +1 -0
  19. package/dist/events-support.d.ts +22 -0
  20. package/dist/events-support.d.ts.map +1 -0
  21. package/dist/events-support.js +105 -0
  22. package/dist/events-support.js.map +1 -0
  23. package/dist/events-types.d.ts +56 -0
  24. package/dist/events-types.d.ts.map +1 -0
  25. package/dist/events-types.js +2 -0
  26. package/dist/events-types.js.map +1 -0
  27. package/dist/events.d.ts +19 -0
  28. package/dist/events.d.ts.map +1 -0
  29. package/dist/events.js +103 -0
  30. package/dist/events.js.map +1 -0
  31. package/dist/index.d.ts +6 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/program-support.d.ts +13 -0
  36. package/dist/program-support.d.ts.map +1 -0
  37. package/dist/program-support.js +98 -0
  38. package/dist/program-support.js.map +1 -0
  39. package/dist/program.d.ts +27 -0
  40. package/dist/program.d.ts.map +1 -0
  41. package/dist/program.js +95 -0
  42. package/dist/program.js.map +1 -0
  43. package/dist/workspace.d.ts +43 -0
  44. package/dist/workspace.d.ts.map +1 -0
  45. package/dist/workspace.js +127 -0
  46. package/dist/workspace.js.map +1 -0
  47. package/package.json +46 -0
@@ -0,0 +1,105 @@
1
+ import { redactRecord } from "@relkit/observability";
2
+ import { canonicalJson } from "@relkit/contracts";
3
+ export const OP_TYPES = [
4
+ "same",
5
+ "create",
6
+ "update",
7
+ "delete",
8
+ "replace",
9
+ "create-replacement",
10
+ "delete-replaced",
11
+ "read",
12
+ "read-replacement",
13
+ "refresh",
14
+ "discard",
15
+ "discard-replaced",
16
+ "remove-pending-replace",
17
+ "import",
18
+ "import-replacement",
19
+ ];
20
+ export function changes(value) {
21
+ const result = {};
22
+ for (const key of OP_TYPES) {
23
+ const count = value?.[key];
24
+ if (typeof count === "number" && Number.isSafeInteger(count) && count >= 0)
25
+ result[key] = count;
26
+ }
27
+ return result;
28
+ }
29
+ export function safeValue(value, options) {
30
+ return options.redact ? options.redact(value) : redactRecord(value, options.redaction);
31
+ }
32
+ export function safeFields(value, options) {
33
+ const safe = safeValue(value, options);
34
+ return safe !== null && typeof safe === "object" && !Array.isArray(safe)
35
+ ? safe
36
+ : {};
37
+ }
38
+ export function safeText(value, options) {
39
+ const safe = safeValue(value, options);
40
+ return typeof safe === "string" ? safe : "[unavailable]";
41
+ }
42
+ export function resourceLog(base, kind, message, event, extra = {}) {
43
+ return base(kind, kind === "resource-failed" ? "error" : "info", message, {
44
+ operation: event.metadata.op,
45
+ resourceType: event.metadata.type,
46
+ urn: event.metadata.urn,
47
+ logical: event.metadata.logical ?? false,
48
+ ...extra,
49
+ });
50
+ }
51
+ export function eventLogs(events, toLog) {
52
+ return Object.freeze(events
53
+ .map(toLog)
54
+ .filter((value) => value !== undefined)
55
+ .sort((left, right) => left.sequence - right.sequence ||
56
+ left.kind.localeCompare(right.kind) ||
57
+ canonicalJson(left).localeCompare(canonicalJson(right))));
58
+ }
59
+ export function summarizePulumiEvents(events) {
60
+ const summaries = events
61
+ .filter((event) => event.summaryEvent !== undefined)
62
+ .sort((left, right) => nonNegativeInteger(left.sequence) - nonNegativeInteger(right.sequence) ||
63
+ finiteNumber(left.timestamp) - finiteNumber(right.timestamp) ||
64
+ canonicalJson(left.summaryEvent).localeCompare(canonicalJson(right.summaryEvent)));
65
+ const summary = summaries.at(-1)?.summaryEvent;
66
+ const diagnostics = { info: 0, warning: 0, error: 0 };
67
+ const counted = {};
68
+ for (const event of events) {
69
+ if (event.resourcePreEvent) {
70
+ const op = event.resourcePreEvent.metadata.op;
71
+ counted[op] = (counted[op] ?? 0) + 1;
72
+ }
73
+ const severity = event.diagnosticEvent?.severity;
74
+ if (severity === "error" || severity === "info#err")
75
+ diagnostics.error += 1;
76
+ else if (severity === "warning")
77
+ diagnostics.warning += 1;
78
+ else if (severity === "info")
79
+ diagnostics.info += 1;
80
+ }
81
+ return Object.freeze({
82
+ resourceChanges: summary ? changes(summary.resourceChanges) : changes(counted),
83
+ diagnostics: Object.freeze(diagnostics),
84
+ maybeCorrupt: summary?.maybeCorrupt ?? false,
85
+ ...(summary === undefined ? {} : { durationSeconds: finiteNumber(summary.durationSeconds) }),
86
+ });
87
+ }
88
+ export function redactPulumiOutputs(outputs, options) {
89
+ const result = {};
90
+ for (const name of Object.keys(outputs).sort()) {
91
+ const output = outputs[name];
92
+ result[name] =
93
+ output !== null && typeof output === "object" && output.secret === true
94
+ ? { secret: true }
95
+ : { secret: false, value: safeValue(output?.value, options) };
96
+ }
97
+ return Object.freeze(result);
98
+ }
99
+ export function finiteNumber(value) {
100
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
101
+ }
102
+ export function nonNegativeInteger(value) {
103
+ return Number.isSafeInteger(value) && value >= 0 ? value : 0;
104
+ }
105
+ //# sourceMappingURL=events-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-support.js","sourceRoot":"","sources":["../src/events-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { OpMap, UpdateResult } from "@pulumi/pulumi/automation";
2
+ import type { JsonValue } from "@relkit/contracts";
3
+ export declare const PULUMI_REPORT_VERSION: 1;
4
+ export type PulumiLogLevel = "info" | "warn" | "error";
5
+ export interface PulumiEventOptions {
6
+ readonly redaction?: import("@relkit/observability").RedactionPolicy;
7
+ readonly redact?: (value: unknown) => JsonValue;
8
+ }
9
+ export interface PulumiEventLog {
10
+ readonly sequence: number;
11
+ readonly timestamp: number;
12
+ readonly kind: string;
13
+ readonly level: PulumiLogLevel;
14
+ readonly message: string;
15
+ readonly fields: Readonly<Record<string, JsonValue>>;
16
+ }
17
+ export interface PulumiEventSummary {
18
+ readonly resourceChanges: OpMap;
19
+ readonly diagnostics: Readonly<{
20
+ readonly info: number;
21
+ readonly warning: number;
22
+ readonly error: number;
23
+ }>;
24
+ readonly maybeCorrupt: boolean;
25
+ readonly durationSeconds?: number;
26
+ readonly result?: UpdateResult;
27
+ }
28
+ export interface PulumiOutput {
29
+ readonly secret: false;
30
+ readonly value: JsonValue;
31
+ }
32
+ export interface PulumiSecretOutput {
33
+ readonly secret: true;
34
+ }
35
+ export type PulumiOutputValue = PulumiOutput | PulumiSecretOutput;
36
+ export type PulumiOutputs = Readonly<Record<string, PulumiOutputValue>>;
37
+ export interface PulumiPreviewReport {
38
+ readonly version: typeof PULUMI_REPORT_VERSION;
39
+ readonly kind: "preview";
40
+ readonly summary: PulumiEventSummary;
41
+ readonly logs: readonly PulumiEventLog[];
42
+ }
43
+ export interface PulumiUpdateReport {
44
+ readonly version: typeof PULUMI_REPORT_VERSION;
45
+ readonly kind: "update";
46
+ readonly summary: PulumiEventSummary;
47
+ readonly outputs: PulumiOutputs;
48
+ readonly logs: readonly PulumiEventLog[];
49
+ }
50
+ export interface PulumiOutputReport {
51
+ readonly version: typeof PULUMI_REPORT_VERSION;
52
+ readonly kind: "outputs";
53
+ readonly outputs: PulumiOutputs;
54
+ }
55
+ export type PulumiReport = PulumiPreviewReport | PulumiUpdateReport | PulumiOutputReport;
56
+ //# sourceMappingURL=events-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-types.d.ts","sourceRoot":"","sources":["../src/events-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,uBAAuB,EAAE,eAAe,CAAC;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;CACjD;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACtD;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;CACvB;AACD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;CAC1C;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;CAC1C;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AACD,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const PULUMI_REPORT_VERSION = 1;
2
+ //# sourceMappingURL=events-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-types.js","sourceRoot":"","sources":["../src/events-types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAU,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Effect } from "effect";
2
+ import type { EngineEvent, OutputMap, PreviewResult, UpResult } from "@pulumi/pulumi/automation";
3
+ import { redactPulumiOutputs } from "./events-support.js";
4
+ import { type PulumiEventLog, type PulumiEventOptions, type PulumiEventSummary, type PulumiOutputReport, type PulumiPreviewReport, type PulumiUpdateReport } from "./events-types.js";
5
+ export { PULUMI_REPORT_VERSION, type PulumiEventLog, type PulumiEventOptions, type PulumiEventSummary, type PulumiLogLevel, type PulumiOutput, type PulumiOutputReport, type PulumiOutputValue, type PulumiOutputs, type PulumiPreviewReport, type PulumiReport, type PulumiSecretOutput, type PulumiUpdateReport, } from "./events-types.js";
6
+ /** Converts one Automation API event into safe data suitable for Effect logs. */
7
+ export declare function toPulumiLog(event: EngineEvent, options?: PulumiEventOptions): PulumiEventLog | undefined;
8
+ /** Builds an Effect log with only the already-redacted event message and fields. */
9
+ export declare function toPulumiEffectLog(event: EngineEvent, options?: PulumiEventOptions): Effect.Effect<void>;
10
+ /** Adapts the synchronous Automation API callback to an existing Effect runtime/logger. */
11
+ export declare function createPulumiEventLogger(emit: (effect: Effect.Effect<void>) => void, options?: PulumiEventOptions): (event: EngineEvent) => void;
12
+ /** Produces a stable summary from event order-independent engine data. */
13
+ export declare function summarizePulumiEvents(events: readonly EngineEvent[]): PulumiEventSummary;
14
+ export { formatPulumiSummary, serializePulumiReport } from "./events-report.js";
15
+ export declare function createPreviewReport(result: Pick<PreviewResult, "changeSummary">, events?: readonly EngineEvent[], options?: PulumiEventOptions): PulumiPreviewReport;
16
+ export declare function createUpdateReport(result: Pick<UpResult, "summary" | "outputs">, events?: readonly EngineEvent[], options?: PulumiEventOptions): PulumiUpdateReport;
17
+ export declare function createOutputReport(outputs: OutputMap, options?: PulumiEventOptions): PulumiOutputReport;
18
+ export { redactPulumiOutputs };
19
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAIL,mBAAmB,EAKpB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,iFAAiF;AACjF,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,kBAAuB,GAC/B,cAAc,GAAG,SAAS,CAoF5B;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAUrB;AAED,2FAA2F;AAC3F,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAC3C,OAAO,GAAE,kBAAuB,GAC/B,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAQ9B;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,kBAAkB,CAExF;AAED,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,EAC5C,MAAM,GAAE,SAAS,WAAW,EAAO,EACnC,OAAO,GAAE,kBAAuB,GAC/B,mBAAmB,CAErB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC,EAC7C,MAAM,GAAE,SAAS,WAAW,EAAO,EACnC,OAAO,GAAE,kBAAuB,GAC/B,kBAAkB,CAEpB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,EAClB,OAAO,GAAE,kBAAuB,GAC/B,kBAAkB,CAEpB;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
package/dist/events.js ADDED
@@ -0,0 +1,103 @@
1
+ import { Effect } from "effect";
2
+ import { changes, finiteNumber, nonNegativeInteger, redactPulumiOutputs, resourceLog, safeFields, safeText, summarizePulumiEvents as summarize, } from "./events-support.js";
3
+ import { createOutputReport as buildOutputReport, createPreviewReport as buildPreviewReport, createUpdateReport as buildUpdateReport, } from "./events-report.js";
4
+ import {} from "./events-types.js";
5
+ export { PULUMI_REPORT_VERSION, } from "./events-types.js";
6
+ /** Converts one Automation API event into safe data suitable for Effect logs. */
7
+ export function toPulumiLog(event, options = {}) {
8
+ const base = (kind, level, message, fields = {}) => Object.freeze({
9
+ sequence: nonNegativeInteger(event.sequence),
10
+ timestamp: finiteNumber(event.timestamp),
11
+ kind,
12
+ level,
13
+ message: safeText(message, options),
14
+ fields: safeFields({ component: "deploy.pulumi", pulumiEvent: kind, ...fields }, options),
15
+ });
16
+ if (event.cancelEvent)
17
+ return base("cancel", "warn", "Pulumi operation cancelled");
18
+ if (event.stdoutEvent)
19
+ return base("stdout", "info", event.stdoutEvent.message, { stream: "stdout" });
20
+ if (event.diagnosticEvent) {
21
+ const diagnostic = event.diagnosticEvent;
22
+ const level = diagnostic.severity === "error" || diagnostic.severity === "info#err"
23
+ ? "error"
24
+ : diagnostic.severity === "warning"
25
+ ? "warn"
26
+ : "info";
27
+ return base("diagnostic", level, diagnostic.message, {
28
+ severity: diagnostic.severity,
29
+ ...(diagnostic.urn === undefined ? {} : { urn: diagnostic.urn }),
30
+ });
31
+ }
32
+ if (event.preludeEvent)
33
+ return base("prelude", "info", "Pulumi operation started", {
34
+ configurationNames: Object.keys(event.preludeEvent.config).sort(),
35
+ });
36
+ if (event.summaryEvent) {
37
+ const summary = event.summaryEvent;
38
+ return base("summary", summary.maybeCorrupt ? "warn" : "info", "Pulumi operation completed", {
39
+ resourceChanges: changes(summary.resourceChanges),
40
+ durationSeconds: finiteNumber(summary.durationSeconds),
41
+ maybeCorrupt: summary.maybeCorrupt,
42
+ });
43
+ }
44
+ if (event.resourcePreEvent)
45
+ return resourceLog(base, "resource-pre", "Pulumi resource operation started", event.resourcePreEvent);
46
+ if (event.resOutputsEvent)
47
+ return resourceLog(base, "resource-outputs", "Pulumi resource operation completed", event.resOutputsEvent);
48
+ if (event.resOpFailedEvent)
49
+ return resourceLog(base, "resource-failed", "Pulumi resource operation failed", event.resOpFailedEvent, { status: event.resOpFailedEvent.status, steps: event.resOpFailedEvent.steps });
50
+ if (event.policyEvent) {
51
+ const policy = event.policyEvent;
52
+ return base("policy", policy.enforcementLevel === "mandatory" ? "error" : "warn", policy.message, {
53
+ enforcement: policy.enforcementLevel,
54
+ policyName: policy.policyName,
55
+ policyPackName: policy.policyPackName,
56
+ ...(policy.resourceUrn === undefined ? {} : { resourceUrn: policy.resourceUrn }),
57
+ });
58
+ }
59
+ if (event.startDebuggingEvent)
60
+ return base("debugging", "info", "Pulumi debugger started", {
61
+ configurationNames: Object.keys(event.startDebuggingEvent.config).sort(),
62
+ });
63
+ return undefined;
64
+ }
65
+ /** Builds an Effect log with only the already-redacted event message and fields. */
66
+ export function toPulumiEffectLog(event, options = {}) {
67
+ const log = toPulumiLog(event, options);
68
+ if (log === undefined)
69
+ return Effect.void;
70
+ const effect = log.level === "error"
71
+ ? Effect.logError(log.message)
72
+ : log.level === "warn"
73
+ ? Effect.logWarning(log.message)
74
+ : Effect.logInfo(log.message);
75
+ return effect.pipe(Effect.annotateLogs({ ...log.fields }));
76
+ }
77
+ /** Adapts the synchronous Automation API callback to an existing Effect runtime/logger. */
78
+ export function createPulumiEventLogger(emit, options = {}) {
79
+ return (event) => {
80
+ try {
81
+ emit(toPulumiEffectLog(event, options));
82
+ }
83
+ catch {
84
+ /* logging must not change deployment */
85
+ }
86
+ };
87
+ }
88
+ /** Produces a stable summary from event order-independent engine data. */
89
+ export function summarizePulumiEvents(events) {
90
+ return summarize(events);
91
+ }
92
+ export { formatPulumiSummary, serializePulumiReport } from "./events-report.js";
93
+ export function createPreviewReport(result, events = [], options = {}) {
94
+ return buildPreviewReport(result, events, (event) => toPulumiLog(event, options));
95
+ }
96
+ export function createUpdateReport(result, events = [], options = {}) {
97
+ return buildUpdateReport(result, events, (event) => toPulumiLog(event, options), options);
98
+ }
99
+ export function createOutputReport(outputs, options = {}) {
100
+ return buildOutputReport(outputs, options);
101
+ }
102
+ export { redactPulumiOutputs };
103
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export {};
2
+ export * from "./program.js";
3
+ export * from "./aws-program.js";
4
+ export * from "./workspace.js";
5
+ export * from "./events.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC;AACV,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export {};
2
+ export * from "./program.js";
3
+ export * from "./aws-program.js";
4
+ export * from "./workspace.js";
5
+ export * from "./events.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC;AACV,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DeploymentPlan } from "@relkit/deploy";
2
+ export interface ResourceEntry {
3
+ readonly kind: string;
4
+ readonly logicalName: string;
5
+ readonly value: object;
6
+ }
7
+ export declare function snapshotPlan(plan: DeploymentPlan): DeploymentPlan;
8
+ export declare function resourceEntries(plan: DeploymentPlan): readonly ResourceEntry[];
9
+ export declare function requiredTags(plan: DeploymentPlan, stackName: string): Record<string, string>;
10
+ export declare function entryTags(value: object, tags: Record<string, string>): Record<string, string>;
11
+ export declare function scopedName(stackName: string, logicalName: string): string;
12
+ export declare function identity(value: string, label: string): string;
13
+ //# sourceMappingURL=program-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-support.d.ts","sourceRoot":"","sources":["../src/program-support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CA4CjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,aAAa,EAAE,CAuB9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO5F;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ7F;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7D"}
@@ -0,0 +1,98 @@
1
+ import { canonicalJson } from "@relkit/contracts";
2
+ export function snapshotPlan(plan) {
3
+ const value = JSON.parse(canonicalJson(plan));
4
+ return {
5
+ ...value,
6
+ application: {
7
+ ...value.application,
8
+ environmentNames: [...value.application.environmentNames].sort(),
9
+ },
10
+ http: {
11
+ ...value.http,
12
+ configurationNames: [...value.http.configurationNames].sort(),
13
+ routes: [...value.http.routes].sort((left, right) => left.id.localeCompare(right.id)),
14
+ },
15
+ jobs: sortEntries(value.jobs),
16
+ schedules: sortEntries(value.schedules),
17
+ events: sortEntries(value.events),
18
+ eventTriggers: sortEntries(value.eventTriggers),
19
+ buckets: sortEntries(value.buckets),
20
+ caches: sortEntries(value.caches),
21
+ iam: {
22
+ serviceRole: {
23
+ ...value.iam.serviceRole,
24
+ statements: [...value.iam.serviceRole.statements].sort((left, right) => left.capability.localeCompare(right.capability) ||
25
+ left.actions.join(",").localeCompare(right.actions.join(","))),
26
+ },
27
+ perFunction: [...value.iam.perFunction].sort((left, right) => left.functionId.localeCompare(right.functionId) ||
28
+ left.capability.localeCompare(right.capability) ||
29
+ left.resourceId.localeCompare(right.resourceId)),
30
+ },
31
+ ...(value.observability === undefined
32
+ ? {}
33
+ : {
34
+ observability: {
35
+ ...value.observability,
36
+ configurationNames: [...value.observability.configurationNames].sort(),
37
+ },
38
+ }),
39
+ };
40
+ }
41
+ export function resourceEntries(plan) {
42
+ return [
43
+ { kind: "http", logicalName: plan.http.logicalName, value: plan.http },
44
+ ...(plan.observability === undefined
45
+ ? []
46
+ : [
47
+ {
48
+ kind: "observability",
49
+ logicalName: plan.observability.logicalName,
50
+ value: plan.observability,
51
+ },
52
+ ]),
53
+ ...plan.jobs.map((value) => ({ kind: "job", logicalName: value.logicalName, value })),
54
+ ...plan.schedules.map((value) => ({ kind: "schedule", logicalName: value.logicalName, value })),
55
+ ...plan.events.map((value) => ({ kind: "event", logicalName: value.logicalName, value })),
56
+ ...plan.eventTriggers.map((value) => ({
57
+ kind: "event-trigger",
58
+ logicalName: value.logicalName,
59
+ value,
60
+ })),
61
+ ...plan.buckets.map((value) => ({ kind: "bucket", logicalName: value.logicalName, value })),
62
+ ...plan.caches.map((value) => ({ kind: "cache", logicalName: value.logicalName, value })),
63
+ ];
64
+ }
65
+ export function requiredTags(plan, stackName) {
66
+ return {
67
+ app: plan.application.id,
68
+ stack: stackName,
69
+ graphHash: plan.graphHash,
70
+ "managed-by": "relkit",
71
+ };
72
+ }
73
+ export function entryTags(value, tags) {
74
+ const existing = value.tags;
75
+ return {
76
+ ...(existing !== null && typeof existing === "object" && !Array.isArray(existing)
77
+ ? existing
78
+ : {}),
79
+ ...tags,
80
+ };
81
+ }
82
+ export function scopedName(stackName, logicalName) {
83
+ return identity(`${stackName}-${logicalName}`, "resourceName");
84
+ }
85
+ export function identity(value, label) {
86
+ const normalized = value
87
+ .trim()
88
+ .toLowerCase()
89
+ .replace(/[^a-z0-9]+/g, "-")
90
+ .replace(/^-+|-+$/g, "");
91
+ if (normalized === "")
92
+ throw new TypeError(`Pulumi ${label} must not be empty.`);
93
+ return normalized;
94
+ }
95
+ function sortEntries(values) {
96
+ return [...values].sort((left, right) => left.logicalName.localeCompare(right.logicalName) || left.id.localeCompare(right.id));
97
+ }
98
+ //# sourceMappingURL=program-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-support.js","sourceRoot":"","sources":["../src/program-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { DeploymentPlan } from "@relkit/deploy";
2
+ import type { PulumiFn } from "@pulumi/pulumi/automation";
3
+ import { type AwsProgramOptions } from "./aws-program.js";
4
+ export declare const PULUMI_PROGRAM_VERSION: 1;
5
+ export interface PulumiProgramOptions {
6
+ readonly stackName?: string;
7
+ readonly projectName?: string;
8
+ readonly projectRoot?: string;
9
+ readonly directory?: string;
10
+ readonly aws?: Omit<AwsProgramOptions, "stackName">;
11
+ }
12
+ export interface PulumiProgramFiles {
13
+ readonly directory: string;
14
+ readonly projectName: string;
15
+ readonly stackName: string;
16
+ readonly pulumiYaml: string;
17
+ readonly indexTs: string;
18
+ readonly planJson: string;
19
+ }
20
+ /** Renders a path-independent Pulumi project from a provider-neutral plan. */
21
+ export declare function renderPulumiProgram(plan: DeploymentPlan, options?: PulumiProgramOptions): PulumiProgramFiles;
22
+ /** Writes only the deterministic Pulumi project files and returns their contents. */
23
+ export declare function writePulumiProgram(plan: DeploymentPlan, options?: PulumiProgramOptions): Promise<PulumiProgramFiles>;
24
+ /** Creates the same plan-only resource tree for Pulumi Automation API inline use. */
25
+ export declare function createPulumiProgram(plan: DeploymentPlan, options?: PulumiProgramOptions): PulumiFn;
26
+ export declare const createInlinePulumiProgram: typeof createPulumiProgram;
27
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAC;AAIjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,oBAAyB,GACjC,kBAAkB,CAiBpB;AAED,qFAAqF;AACrF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAQ7B;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CAgBV;AAED,eAAO,MAAM,yBAAyB,4BAAsB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { canonicalJson } from "@relkit/contracts";
4
+ import * as pulumi from "@pulumi/pulumi";
5
+ import { identity, snapshotPlan } from "./program-support.js";
6
+ import { createAwsPulumiResources } from "./aws-program.js";
7
+ export const PULUMI_PROGRAM_VERSION = 1;
8
+ const DEFAULT_STACK = "development";
9
+ const DEFAULT_DIRECTORY = ".relkit/generated/pulumi";
10
+ /** Renders a path-independent Pulumi project from a provider-neutral plan. */
11
+ export function renderPulumiProgram(plan, options = {}) {
12
+ const snapshot = snapshotPlan(plan);
13
+ const stackName = identity(options.stackName ?? DEFAULT_STACK, "stackName");
14
+ const projectName = identity(options.projectName ?? snapshot.application.id, "projectName");
15
+ const directory = resolve(options.projectRoot ?? process.cwd(), options.directory ?? DEFAULT_DIRECTORY);
16
+ const planJson = `${canonicalJson(snapshot)}\n`;
17
+ return Object.freeze({
18
+ directory,
19
+ projectName,
20
+ stackName,
21
+ pulumiYaml: `name: ${projectName}\nruntime: nodejs\nmain: .\ndescription: RelKit deterministic deployment program\n`,
22
+ indexTs: renderIndex(snapshot, stackName),
23
+ planJson,
24
+ });
25
+ }
26
+ /** Writes only the deterministic Pulumi project files and returns their contents. */
27
+ export async function writePulumiProgram(plan, options = {}) {
28
+ const files = renderPulumiProgram(plan, options);
29
+ await Promise.all([
30
+ writeProjectFile(join(files.directory, "Pulumi.yaml"), files.pulumiYaml),
31
+ writeIfChanged(join(files.directory, "index.ts"), files.indexTs),
32
+ writeIfChanged(join(files.directory, "plan.json"), files.planJson),
33
+ ]);
34
+ return files;
35
+ }
36
+ /** Creates the same plan-only resource tree for Pulumi Automation API inline use. */
37
+ export function createPulumiProgram(plan, options = {}) {
38
+ const snapshot = snapshotPlan(plan);
39
+ const stackName = identity(options.stackName ?? DEFAULT_STACK, "stackName");
40
+ return async () => {
41
+ const resources = createAwsPulumiResources(snapshot, { ...options.aws, stackName });
42
+ return {
43
+ graphHash: snapshot.graphHash,
44
+ resourceCount: 9 + (resources.policy === undefined ? 0 : 1),
45
+ endpoint: pulumi.interpolate `http://${resources.service.loadBalancer.dnsName}`,
46
+ bucketName: resources.buckets.buckets[0]?.name,
47
+ queueUrl: resources.jobs.queues[0]?.worker.queueUrl,
48
+ eventBusName: resources.events.eventBusName,
49
+ cacheUrl: resources.caches.caches[0]?.url,
50
+ logGroupName: resources.service.logGroup.name,
51
+ };
52
+ };
53
+ }
54
+ export const createInlinePulumiProgram = createPulumiProgram;
55
+ function renderIndex(plan, stackName) {
56
+ return `import { createAwsPulumiResources } from "@relkit/deploy-pulumi";
57
+
58
+ const plan = ${canonicalJson(plan)} as const;
59
+ const stackName = ${JSON.stringify(stackName)};
60
+ const resources = createAwsPulumiResources(plan, { stackName });
61
+ export const endpoint = resources.service.loadBalancer.dnsName.apply((value) => \`http://\${value}\`);
62
+
63
+ export const graphHash = plan.graphHash;
64
+ export const relkitPulumiProgramVersion = ${PULUMI_PROGRAM_VERSION};
65
+ `;
66
+ }
67
+ async function writeIfChanged(filePath, content) {
68
+ const next = Buffer.from(content, "utf8");
69
+ try {
70
+ if ((await readFile(filePath)).equals(next))
71
+ return;
72
+ }
73
+ catch (error) {
74
+ if (!isMissingFile(error))
75
+ throw error;
76
+ }
77
+ await mkdir(resolve(filePath, ".."), { recursive: true });
78
+ await writeFile(filePath, next);
79
+ }
80
+ async function writeProjectFile(filePath, content) {
81
+ try {
82
+ const existing = await readFile(filePath, "utf8");
83
+ if (existing.split("\n").some((line) => line.startsWith("backend:")))
84
+ return;
85
+ }
86
+ catch (error) {
87
+ if (!isMissingFile(error))
88
+ throw error;
89
+ }
90
+ await writeIfChanged(filePath, content);
91
+ }
92
+ function isMissingFile(error) {
93
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
94
+ }
95
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}