@kici-dev/sdk 0.0.0 → 0.1.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.
Files changed (112) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +1 -6
  3. package/dist/api-types.d.ts +47 -0
  4. package/dist/api-types.js +15 -0
  5. package/dist/chunk-gOLHoazu.js +4 -0
  6. package/dist/context.d.ts +185 -0
  7. package/dist/context.js +2 -0
  8. package/dist/dynamic-group.d.ts +29 -0
  9. package/dist/dynamic-group.js +34 -0
  10. package/dist/errors.d.ts +9 -0
  11. package/dist/errors.js +17 -0
  12. package/dist/events/define-event.d.ts +32 -0
  13. package/dist/events/define-event.js +29 -0
  14. package/dist/events/event-payloads.d.ts +396 -0
  15. package/dist/events/event-payloads.js +21 -0
  16. package/dist/events/index.d.ts +6 -0
  17. package/dist/events/index.js +4 -0
  18. package/dist/events/types.d.ts +13 -0
  19. package/dist/events/types.js +2 -0
  20. package/dist/fixture.d.ts +50 -0
  21. package/dist/fixture.js +35 -0
  22. package/dist/hooks/index.d.ts +33 -0
  23. package/dist/hooks/index.js +94 -0
  24. package/dist/hooks/types.d.ts +35 -0
  25. package/dist/hooks/types.js +2 -0
  26. package/dist/idempotent.d.ts +71 -0
  27. package/dist/idempotent.js +77 -0
  28. package/dist/index.d.ts +40 -0
  29. package/dist/index.js +50 -0
  30. package/dist/job.d.ts +31 -0
  31. package/dist/job.js +46 -0
  32. package/dist/matrix/expand.d.ts +32 -0
  33. package/dist/matrix/expand.js +77 -0
  34. package/dist/matrix/index.d.ts +4 -0
  35. package/dist/matrix/index.js +4 -0
  36. package/dist/matrix/types.d.ts +60 -0
  37. package/dist/matrix/types.js +18 -0
  38. package/dist/outputs.d.ts +86 -0
  39. package/dist/outputs.js +180 -0
  40. package/dist/rules/evaluator.d.ts +24 -0
  41. package/dist/rules/evaluator.js +52 -0
  42. package/dist/rules/index.d.ts +6 -0
  43. package/dist/rules/index.js +5 -0
  44. package/dist/rules/rule.d.ts +34 -0
  45. package/dist/rules/rule.js +37 -0
  46. package/dist/rules/types.d.ts +42 -0
  47. package/dist/rules/types.js +2 -0
  48. package/dist/secrets.d.ts +192 -0
  49. package/dist/secrets.js +132 -0
  50. package/dist/step.d.ts +50 -0
  51. package/dist/step.js +78 -0
  52. package/dist/triggers/comment.d.ts +20 -0
  53. package/dist/triggers/comment.js +47 -0
  54. package/dist/triggers/create.d.ts +20 -0
  55. package/dist/triggers/create.js +32 -0
  56. package/dist/triggers/delete.d.ts +20 -0
  57. package/dist/triggers/delete.js +29 -0
  58. package/dist/triggers/dispatch.d.ts +17 -0
  59. package/dist/triggers/dispatch.js +27 -0
  60. package/dist/triggers/fork.d.ts +17 -0
  61. package/dist/triggers/fork.js +26 -0
  62. package/dist/triggers/generic-webhook.d.ts +32 -0
  63. package/dist/triggers/generic-webhook.js +45 -0
  64. package/dist/triggers/index.d.ts +28 -0
  65. package/dist/triggers/index.js +25 -0
  66. package/dist/triggers/job-complete.d.ts +23 -0
  67. package/dist/triggers/job-complete.js +33 -0
  68. package/dist/triggers/kici-event.d.ts +23 -0
  69. package/dist/triggers/kici-event.js +34 -0
  70. package/dist/triggers/lifecycle.d.ts +20 -0
  71. package/dist/triggers/lifecycle.js +29 -0
  72. package/dist/triggers/pr.d.ts +27 -0
  73. package/dist/triggers/pr.js +48 -0
  74. package/dist/triggers/push.d.ts +29 -0
  75. package/dist/triggers/push.js +48 -0
  76. package/dist/triggers/release.d.ts +17 -0
  77. package/dist/triggers/release.js +27 -0
  78. package/dist/triggers/review-comment.d.ts +17 -0
  79. package/dist/triggers/review-comment.js +27 -0
  80. package/dist/triggers/review.d.ts +17 -0
  81. package/dist/triggers/review.js +28 -0
  82. package/dist/triggers/schedule.d.ts +20 -0
  83. package/dist/triggers/schedule.js +29 -0
  84. package/dist/triggers/star.d.ts +17 -0
  85. package/dist/triggers/star.js +27 -0
  86. package/dist/triggers/status.d.ts +17 -0
  87. package/dist/triggers/status.js +28 -0
  88. package/dist/triggers/tag.d.ts +20 -0
  89. package/dist/triggers/tag.js +31 -0
  90. package/dist/triggers/types.d.ts +529 -0
  91. package/dist/triggers/types.js +36 -0
  92. package/dist/triggers/watch.d.ts +17 -0
  93. package/dist/triggers/watch.js +27 -0
  94. package/dist/triggers/webhook.d.ts +19 -0
  95. package/dist/triggers/webhook.js +29 -0
  96. package/dist/triggers/workflow-complete.d.ts +23 -0
  97. package/dist/triggers/workflow-complete.js +32 -0
  98. package/dist/triggers/workflow-run.d.ts +17 -0
  99. package/dist/triggers/workflow-run.js +29 -0
  100. package/dist/types.d.ts +483 -0
  101. package/dist/types.js +35 -0
  102. package/dist/validation/dag.d.ts +42 -0
  103. package/dist/validation/dag.js +70 -0
  104. package/dist/validation/index.d.ts +3 -0
  105. package/dist/validation/index.js +3 -0
  106. package/dist/wait-for.d.ts +109 -0
  107. package/dist/wait-for.js +144 -0
  108. package/dist/workflow.d.ts +3 -0
  109. package/dist/workflow.js +83 -0
  110. package/package.json +42 -5
  111. package/sbom.spdx.json +9150 -0
  112. package/index.js +0 -3
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Typed event payload discriminated union for rule authors.
3
+ *
4
+ * Provides autocomplete when narrowing on `ctx.event.type` in rule functions.
5
+ * Each variant carries partial GitHub payload types for the most commonly
6
+ * accessed fields. The index signature on each payload interface allows
7
+ * accessing fields not explicitly typed (they resolve to `unknown`).
8
+ *
9
+ * The runtime shape mirrors SimulatedEvent from @kici-dev/engine — these types
10
+ * are the user-facing view of the same data. Keep them in sync when adding new
11
+ * event types or SimulatedEvent fields.
12
+ */
13
+ /** Partial GitHub repository object. */
14
+ export interface GitHubRepository {
15
+ full_name: string;
16
+ default_branch: string;
17
+ name?: string;
18
+ owner?: {
19
+ login: string;
20
+ [key: string]: unknown;
21
+ };
22
+ private?: boolean;
23
+ [key: string]: unknown;
24
+ }
25
+ /** Partial GitHub user/sender object. */
26
+ export interface GitHubUser {
27
+ login: string;
28
+ id?: number;
29
+ [key: string]: unknown;
30
+ }
31
+ /** Partial GitHub pull request object. */
32
+ export interface GitHubPullRequest {
33
+ number: number;
34
+ draft?: boolean;
35
+ title?: string;
36
+ body?: string;
37
+ state?: string;
38
+ merged?: boolean;
39
+ head: {
40
+ ref: string;
41
+ sha: string;
42
+ repo?: {
43
+ full_name: string;
44
+ [key: string]: unknown;
45
+ };
46
+ [key: string]: unknown;
47
+ };
48
+ base: {
49
+ ref: string;
50
+ repo?: {
51
+ full_name: string;
52
+ [key: string]: unknown;
53
+ };
54
+ [key: string]: unknown;
55
+ };
56
+ user?: GitHubUser;
57
+ labels?: Array<{
58
+ name: string;
59
+ [key: string]: unknown;
60
+ }>;
61
+ [key: string]: unknown;
62
+ }
63
+ /** Partial GitHub commit object (from push events). */
64
+ export interface GitHubCommit {
65
+ id: string;
66
+ message: string;
67
+ author?: {
68
+ name?: string;
69
+ email?: string;
70
+ username?: string;
71
+ [key: string]: unknown;
72
+ };
73
+ timestamp?: string;
74
+ added?: string[];
75
+ removed?: string[];
76
+ modified?: string[];
77
+ [key: string]: unknown;
78
+ }
79
+ /** Partial GitHub comment object (issue_comment events). */
80
+ export interface GitHubComment {
81
+ id: number;
82
+ body: string;
83
+ user: GitHubUser;
84
+ [key: string]: unknown;
85
+ }
86
+ /** Partial GitHub review object. */
87
+ export interface GitHubReview {
88
+ id: number;
89
+ state: string;
90
+ body?: string;
91
+ user: GitHubUser;
92
+ [key: string]: unknown;
93
+ }
94
+ /** Partial GitHub release object. */
95
+ export interface GitHubRelease {
96
+ id: number;
97
+ tag_name: string;
98
+ name?: string;
99
+ body?: string;
100
+ draft?: boolean;
101
+ prerelease?: boolean;
102
+ target_commitish?: string;
103
+ [key: string]: unknown;
104
+ }
105
+ /** Base fields present on all event payloads. */
106
+ export interface EventBase {
107
+ /** Normalized event type discriminant. */
108
+ type: string;
109
+ /** Sub-action (e.g. 'opened', 'created', 'submitted'). */
110
+ action?: string;
111
+ /** Target branch (push target, PR base, or default branch). */
112
+ targetBranch?: string;
113
+ /** Source branch (PR head branch). Only set for PR-like events. */
114
+ sourceBranch?: string;
115
+ /** Provider that originated this event. */
116
+ provider?: string;
117
+ /** Whether this PR comes from a fork. Only set for PR-like events. */
118
+ isForkPR?: boolean;
119
+ /** Base branch ref for PR events. */
120
+ baseBranch?: string;
121
+ /** Sender username from the webhook payload. */
122
+ senderUsername?: string;
123
+ /** Repository identifier (e.g. "owner/repo"). */
124
+ sourceRepo?: string;
125
+ /** Files changed in this event (for path filtering). */
126
+ changedFiles?: string[];
127
+ /** Raw webhook payload from the provider. May be absent in flattened event forms. */
128
+ payload?: Record<string, unknown>;
129
+ /** Index signature for backward compatibility — untyped fields resolve to unknown. */
130
+ [key: string]: unknown;
131
+ }
132
+ /** Pull request event payload. */
133
+ export interface PullRequestEventPayload extends EventBase {
134
+ type: 'pull_request';
135
+ action: string;
136
+ payload: {
137
+ action: string;
138
+ number: number;
139
+ pull_request: GitHubPullRequest;
140
+ repository: GitHubRepository;
141
+ sender: GitHubUser;
142
+ [key: string]: unknown;
143
+ };
144
+ }
145
+ /** Push event payload. */
146
+ export interface PushEventPayload extends EventBase {
147
+ type: 'push';
148
+ payload: {
149
+ ref: string;
150
+ after: string;
151
+ before: string;
152
+ head_commit?: GitHubCommit;
153
+ commits?: GitHubCommit[];
154
+ repository: GitHubRepository;
155
+ sender?: GitHubUser;
156
+ forced?: boolean;
157
+ [key: string]: unknown;
158
+ };
159
+ }
160
+ /** Tag push event payload. */
161
+ export interface TagEventPayload extends EventBase {
162
+ type: 'tag';
163
+ payload: {
164
+ ref: string;
165
+ after: string;
166
+ repository: GitHubRepository;
167
+ sender?: GitHubUser;
168
+ [key: string]: unknown;
169
+ };
170
+ }
171
+ /** Issue/PR comment event payload. */
172
+ export interface CommentEventPayload extends EventBase {
173
+ type: 'comment';
174
+ action: string;
175
+ payload: {
176
+ action: string;
177
+ comment: GitHubComment;
178
+ issue?: {
179
+ number: number;
180
+ title?: string;
181
+ pull_request?: unknown;
182
+ [key: string]: unknown;
183
+ };
184
+ repository: GitHubRepository;
185
+ sender: GitHubUser;
186
+ [key: string]: unknown;
187
+ };
188
+ }
189
+ /** Pull request review event payload. */
190
+ export interface ReviewEventPayload extends EventBase {
191
+ type: 'review';
192
+ action: string;
193
+ payload: {
194
+ action: string;
195
+ review: GitHubReview;
196
+ pull_request: GitHubPullRequest;
197
+ repository: GitHubRepository;
198
+ sender: GitHubUser;
199
+ [key: string]: unknown;
200
+ };
201
+ }
202
+ /** Pull request review comment event payload. */
203
+ export interface ReviewCommentEventPayload extends EventBase {
204
+ type: 'review_comment';
205
+ action: string;
206
+ payload: {
207
+ action: string;
208
+ comment: GitHubComment;
209
+ pull_request: GitHubPullRequest;
210
+ repository: GitHubRepository;
211
+ sender: GitHubUser;
212
+ [key: string]: unknown;
213
+ };
214
+ }
215
+ /** Release event payload. */
216
+ export interface ReleaseEventPayload extends EventBase {
217
+ type: 'release';
218
+ action: string;
219
+ payload: {
220
+ action: string;
221
+ release: GitHubRelease;
222
+ repository: GitHubRepository;
223
+ sender: GitHubUser;
224
+ [key: string]: unknown;
225
+ };
226
+ }
227
+ /** Repository dispatch event payload. */
228
+ export interface DispatchEventPayload extends EventBase {
229
+ type: 'dispatch';
230
+ payload: {
231
+ action: string;
232
+ client_payload?: Record<string, unknown>;
233
+ repository: GitHubRepository;
234
+ sender?: GitHubUser;
235
+ [key: string]: unknown;
236
+ };
237
+ }
238
+ /** Branch/tag create event payload. */
239
+ export interface CreateEventPayload extends EventBase {
240
+ type: 'create';
241
+ payload: {
242
+ ref: string;
243
+ ref_type: string;
244
+ repository: GitHubRepository;
245
+ sender: GitHubUser;
246
+ [key: string]: unknown;
247
+ };
248
+ }
249
+ /** Branch/tag delete event payload. */
250
+ export interface DeleteEventPayload extends EventBase {
251
+ type: 'delete';
252
+ payload: {
253
+ ref: string;
254
+ ref_type: string;
255
+ repository: GitHubRepository;
256
+ sender: GitHubUser;
257
+ [key: string]: unknown;
258
+ };
259
+ }
260
+ /** Commit status event payload. */
261
+ export interface StatusEventPayload extends EventBase {
262
+ type: 'status';
263
+ payload: {
264
+ state: string;
265
+ sha: string;
266
+ context: string;
267
+ description?: string;
268
+ target_url?: string;
269
+ branches?: Array<{
270
+ name: string;
271
+ [key: string]: unknown;
272
+ }>;
273
+ repository: GitHubRepository;
274
+ sender: GitHubUser;
275
+ [key: string]: unknown;
276
+ };
277
+ }
278
+ /** Workflow run event payload. */
279
+ export interface WorkflowRunEventPayload extends EventBase {
280
+ type: 'workflow_run';
281
+ action: string;
282
+ payload: {
283
+ action: string;
284
+ workflow_run: {
285
+ head_branch: string;
286
+ name: string;
287
+ conclusion?: string;
288
+ status?: string;
289
+ [key: string]: unknown;
290
+ };
291
+ repository: GitHubRepository;
292
+ sender: GitHubUser;
293
+ [key: string]: unknown;
294
+ };
295
+ }
296
+ /** Fork event payload. */
297
+ export interface ForkEventPayload extends EventBase {
298
+ type: 'fork';
299
+ payload: {
300
+ forkee: {
301
+ full_name: string;
302
+ [key: string]: unknown;
303
+ };
304
+ repository: GitHubRepository;
305
+ sender: GitHubUser;
306
+ [key: string]: unknown;
307
+ };
308
+ }
309
+ /** Star event payload. */
310
+ export interface StarEventPayload extends EventBase {
311
+ type: 'star';
312
+ action: string;
313
+ payload: {
314
+ action: string;
315
+ repository: GitHubRepository;
316
+ sender: GitHubUser;
317
+ [key: string]: unknown;
318
+ };
319
+ }
320
+ /** Watch event payload. */
321
+ export interface WatchEventPayload extends EventBase {
322
+ type: 'watch';
323
+ action: string;
324
+ payload: {
325
+ action: string;
326
+ repository: GitHubRepository;
327
+ sender: GitHubUser;
328
+ [key: string]: unknown;
329
+ };
330
+ }
331
+ /** Webhook trigger event payload. */
332
+ export interface WebhookEventPayload extends EventBase {
333
+ type: 'webhook';
334
+ }
335
+ /** Custom KiCI event payload (emitted via ctx.emit). */
336
+ export interface KiciEventPayload extends EventBase {
337
+ type: 'kici_event';
338
+ }
339
+ /** Workflow complete internal event payload. */
340
+ export interface WorkflowCompleteEventPayload extends EventBase {
341
+ type: 'workflow_complete';
342
+ }
343
+ /** Job complete internal event payload. */
344
+ export interface JobCompleteEventPayload extends EventBase {
345
+ type: 'job_complete';
346
+ }
347
+ /** Generic webhook event payload. */
348
+ export interface GenericWebhookEventPayload extends EventBase {
349
+ type: 'generic_webhook';
350
+ }
351
+ /** Schedule (cron) event payload. */
352
+ export interface ScheduleEventPayload extends EventBase {
353
+ type: 'schedule';
354
+ }
355
+ /** Lifecycle event payload. */
356
+ export interface LifecycleEventPayload extends EventBase {
357
+ type: 'lifecycle';
358
+ }
359
+ /** Re-run event payload. */
360
+ export interface RerunEventPayload extends EventBase {
361
+ type: 'rerun';
362
+ }
363
+ /** Manual schedule event payload. */
364
+ export interface ManualScheduleEventPayload extends EventBase {
365
+ type: 'manual_schedule';
366
+ }
367
+ /** Fallback for unknown/future event types. */
368
+ export interface UnknownEventPayload extends EventBase {
369
+ type: string;
370
+ }
371
+ /**
372
+ * Typed event payload — discriminated union over the `type` field.
373
+ *
374
+ * Narrow with `if (ctx.event.type === 'pull_request')` to get autocomplete
375
+ * on provider-specific fields like `ctx.event.payload.pull_request.draft`.
376
+ *
377
+ * For unrecognized event types, falls back to {@link UnknownEventPayload}
378
+ * which retains the index signature for backward-compatible property access.
379
+ */
380
+ export type EventPayload = PullRequestEventPayload | PushEventPayload | TagEventPayload | CommentEventPayload | ReviewEventPayload | ReviewCommentEventPayload | ReleaseEventPayload | DispatchEventPayload | CreateEventPayload | DeleteEventPayload | StatusEventPayload | WorkflowRunEventPayload | ForkEventPayload | StarEventPayload | WatchEventPayload | WebhookEventPayload | KiciEventPayload | WorkflowCompleteEventPayload | JobCompleteEventPayload | GenericWebhookEventPayload | ScheduleEventPayload | LifecycleEventPayload | RerunEventPayload | ManualScheduleEventPayload | UnknownEventPayload;
381
+ /**
382
+ * Narrow an EventPayload to a specific event type.
383
+ *
384
+ * @example
385
+ * ```ts
386
+ * rule('only-draft-prs', (ctx) => {
387
+ * if (!isEventType(ctx.event, 'pull_request')) return false;
388
+ * // ctx.event is now PullRequestEventPayload
389
+ * return ctx.event.payload.pull_request.draft === true;
390
+ * });
391
+ * ```
392
+ */
393
+ export declare function isEventType<T extends EventPayload['type']>(event: EventPayload, type: T): event is Extract<EventPayload, {
394
+ type: T;
395
+ }>;
396
+ //# sourceMappingURL=event-payloads.d.ts.map
@@ -0,0 +1,21 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ //#region src/events/event-payloads.ts
3
+ /**
4
+ * Narrow an EventPayload to a specific event type.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * rule('only-draft-prs', (ctx) => {
9
+ * if (!isEventType(ctx.event, 'pull_request')) return false;
10
+ * // ctx.event is now PullRequestEventPayload
11
+ * return ctx.event.payload.pull_request.draft === true;
12
+ * });
13
+ * ```
14
+ */
15
+ function isEventType(event, type) {
16
+ return event.type === type;
17
+ }
18
+ //#endregion
19
+ export { isEventType };
20
+
21
+ //# sourceMappingURL=event-payloads.js.map
@@ -0,0 +1,6 @@
1
+ export { defineEvent } from './define-event.js';
2
+ export type { EventDefinition } from './define-event.js';
3
+ export type { EventEmitOptions } from './types.js';
4
+ export { isEventType } from './event-payloads.js';
5
+ export type { EventPayload, EventBase } from './event-payloads.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,4 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ import { isEventType } from "./event-payloads.js";
3
+ import { defineEvent } from "./define-event.js";
4
+ export { defineEvent, isEventType };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Types for the event emission system.
3
+ */
4
+ /**
5
+ * Options for event emission via ctx.emit().
6
+ */
7
+ export interface EventEmitOptions {
8
+ /** Target specific repos for cross-repo event delivery. */
9
+ target?: {
10
+ repos?: string[];
11
+ };
12
+ }
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ export {};
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Fixture factory for defining test event replicas.
3
+ *
4
+ * Fixtures declare which trigger event to simulate when running
5
+ * `kici test <name>`. They are event replicas (not assertions) --
6
+ * pass/fail is determined by the pipeline execution.
7
+ */
8
+ import type { TriggerConfig } from './triggers/types.js';
9
+ /** Options for configuring a test fixture */
10
+ export interface FixtureOptions {
11
+ /** The trigger event to simulate (reuses existing SDK trigger types) */
12
+ event: TriggerConfig;
13
+ /** Override branch name (defaults to git-detected) */
14
+ branch?: string;
15
+ /** Override commit SHA (defaults to HEAD) */
16
+ sha?: string;
17
+ /** Override repository (defaults to git-detected) */
18
+ repo?: string;
19
+ /** For PR events, override PR number */
20
+ pr?: number;
21
+ /** Secret context mappings: { localName: 'remote-context-name' } */
22
+ secrets?: Record<string, string>;
23
+ /** If set, bypass trigger matching and run this workflow directly */
24
+ workflowName?: string;
25
+ }
26
+ /** Resolved fixture definition */
27
+ export interface Fixture {
28
+ /** Unique fixture ID used in `kici test <name>` */
29
+ readonly id: string;
30
+ /** Fixture options (plain object or async factory function) */
31
+ readonly options: FixtureOptions | (() => FixtureOptions | Promise<FixtureOptions>);
32
+ }
33
+ /**
34
+ * Create a test fixture definition.
35
+ *
36
+ * @param id - Unique fixture ID (no whitespace allowed, used in `kici test <name>`)
37
+ * @param options - Fixture configuration or async factory function
38
+ * @returns Frozen fixture definition
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { fixture, push } from '@kici-dev/sdk';
43
+ *
44
+ * export const pushMain = fixture('push-main', {
45
+ * event: push({ branches: ['main'] }),
46
+ * });
47
+ * ```
48
+ */
49
+ export declare function fixture(id: string, options: FixtureOptions | (() => FixtureOptions | Promise<FixtureOptions>)): Fixture;
50
+ //# sourceMappingURL=fixture.d.ts.map
@@ -0,0 +1,35 @@
1
+ import "./chunk-gOLHoazu.js";
2
+ //#region src/fixture.ts
3
+ /**
4
+ * Create a test fixture definition.
5
+ *
6
+ * @param id - Unique fixture ID (no whitespace allowed, used in `kici test <name>`)
7
+ * @param options - Fixture configuration or async factory function
8
+ * @returns Frozen fixture definition
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { fixture, push } from '@kici-dev/sdk';
13
+ *
14
+ * export const pushMain = fixture('push-main', {
15
+ * event: push({ branches: ['main'] }),
16
+ * });
17
+ * ```
18
+ */
19
+ function fixture(id, options) {
20
+ if (!id || id.length === 0) throw new Error("Fixture ID must be a non-empty string");
21
+ if (/\s/.test(id)) throw new Error(`Fixture ID must not contain whitespace: "${id}"`);
22
+ if (typeof options === "function") return Object.freeze({
23
+ id,
24
+ options
25
+ });
26
+ const frozenOptions = Object.freeze(options);
27
+ return Object.freeze({
28
+ id,
29
+ options: frozenOptions
30
+ });
31
+ }
32
+ //#endregion
33
+ export { fixture };
34
+
35
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1,33 @@
1
+ import type { HookConfig, HookInput } from './types.js';
2
+ /**
3
+ * Create an onCancel hook config.
4
+ * Runs when the job/step is cancelled.
5
+ */
6
+ export declare function onCancel(input: HookInput): HookConfig;
7
+ /**
8
+ * Create a cleanup hook config.
9
+ * Always runs after job/step completion (success, failure, or cancel).
10
+ */
11
+ export declare function cleanup(input: HookInput): HookConfig;
12
+ /**
13
+ * Create an onSuccess hook config.
14
+ * Runs when the job/workflow succeeds.
15
+ */
16
+ export declare function onSuccess(input: HookInput): HookConfig;
17
+ /**
18
+ * Create an onFailure hook config.
19
+ * Runs when the job/workflow fails.
20
+ */
21
+ export declare function onFailure(input: HookInput): HookConfig;
22
+ /**
23
+ * Create a beforeStep hook config.
24
+ * Runs before each step in the job.
25
+ */
26
+ export declare function beforeStep(input: HookInput): HookConfig;
27
+ /**
28
+ * Create an afterStep hook config.
29
+ * Runs after each step in the job.
30
+ */
31
+ export declare function afterStep(input: HookInput): HookConfig;
32
+ export type { HookConfig, HookFn, HookInput, HookContext, OutcomeMetadata } from './types.js';
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,94 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ //#region src/hooks/index.ts
3
+ /**
4
+ * Normalize HookInput to extract run function and optional timeout.
5
+ */
6
+ function normalizeInput(input) {
7
+ if (typeof input === "function") return { run: input };
8
+ return {
9
+ run: input.run,
10
+ timeout: input.timeout
11
+ };
12
+ }
13
+ /**
14
+ * Create an onCancel hook config.
15
+ * Runs when the job/step is cancelled.
16
+ */
17
+ function onCancel(input) {
18
+ const { run, timeout } = normalizeInput(input);
19
+ return {
20
+ name: "onCancel",
21
+ type: "onCancel",
22
+ run,
23
+ timeout
24
+ };
25
+ }
26
+ /**
27
+ * Create a cleanup hook config.
28
+ * Always runs after job/step completion (success, failure, or cancel).
29
+ */
30
+ function cleanup(input) {
31
+ const { run, timeout } = normalizeInput(input);
32
+ return {
33
+ name: "cleanup",
34
+ type: "cleanup",
35
+ run,
36
+ timeout
37
+ };
38
+ }
39
+ /**
40
+ * Create an onSuccess hook config.
41
+ * Runs when the job/workflow succeeds.
42
+ */
43
+ function onSuccess(input) {
44
+ const { run, timeout } = normalizeInput(input);
45
+ return {
46
+ name: "onSuccess",
47
+ type: "onSuccess",
48
+ run,
49
+ timeout
50
+ };
51
+ }
52
+ /**
53
+ * Create an onFailure hook config.
54
+ * Runs when the job/workflow fails.
55
+ */
56
+ function onFailure(input) {
57
+ const { run, timeout } = normalizeInput(input);
58
+ return {
59
+ name: "onFailure",
60
+ type: "onFailure",
61
+ run,
62
+ timeout
63
+ };
64
+ }
65
+ /**
66
+ * Create a beforeStep hook config.
67
+ * Runs before each step in the job.
68
+ */
69
+ function beforeStep(input) {
70
+ const { run, timeout } = normalizeInput(input);
71
+ return {
72
+ name: "beforeStep",
73
+ type: "beforeStep",
74
+ run,
75
+ timeout
76
+ };
77
+ }
78
+ /**
79
+ * Create an afterStep hook config.
80
+ * Runs after each step in the job.
81
+ */
82
+ function afterStep(input) {
83
+ const { run, timeout } = normalizeInput(input);
84
+ return {
85
+ name: "afterStep",
86
+ type: "afterStep",
87
+ run,
88
+ timeout
89
+ };
90
+ }
91
+ //#endregion
92
+ export { afterStep, beforeStep, cleanup, onCancel, onFailure, onSuccess };
93
+
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,35 @@
1
+ import type { StepContext } from '../context.js';
2
+ /**
3
+ * Metadata about the job/workflow outcome, available to hooks.
4
+ */
5
+ export interface OutcomeMetadata {
6
+ status: 'cancelled' | 'success' | 'failed';
7
+ reason?: string;
8
+ failedStep?: string;
9
+ stepOutputs: Record<string, unknown>;
10
+ duration: number;
11
+ }
12
+ /** Context passed to hook functions -- extends StepContext with outcome info. */
13
+ export type HookContext = StepContext & {
14
+ outcome: OutcomeMetadata;
15
+ };
16
+ /** Hook function signature. Receives HookContext and returns void. */
17
+ export type HookFn = (ctx: HookContext) => Promise<void>;
18
+ /**
19
+ * Resolved hook configuration (used internally after normalization).
20
+ */
21
+ export interface HookConfig {
22
+ name: string;
23
+ type: 'onCancel' | 'cleanup' | 'onSuccess' | 'onFailure' | 'beforeStep' | 'afterStep';
24
+ run: HookFn;
25
+ timeout?: number;
26
+ }
27
+ /**
28
+ * Hook input accepted by SDK interfaces.
29
+ * Either a bare function or an object with run function and optional timeout.
30
+ */
31
+ export type HookInput = HookFn | {
32
+ run: HookFn;
33
+ timeout?: number;
34
+ };
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ export {};