@jaypie/mcp 0.8.139 → 0.8.140
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.
|
@@ -9,7 +9,7 @@ import { gt } from 'semver';
|
|
|
9
9
|
/**
|
|
10
10
|
* Docs Suite - Documentation services (skill, version, release_notes)
|
|
11
11
|
*/
|
|
12
|
-
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.
|
|
12
|
+
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.140#19ea447a"
|
|
13
13
|
;
|
|
14
14
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
15
15
|
const __dirname$1 = path.dirname(__filename$1);
|
package/package.json
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.15
|
|
3
|
+
date: 2026-08-27
|
|
4
|
+
summary: migrationHandler omits Data on pending polls and skips migrations on Delete
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `migrationHandler` returns `{ IsComplete: false }` with no `Data` while a migration is pending.
|
|
10
|
+
- Completed polls return `{ Data: result, IsComplete: true }`, and omit `Data` when the handler result is not a plain object.
|
|
11
|
+
- `RequestType: "Delete"` short-circuits without invoking the migration: `onEvent` returns `PhysicalResourceId`, `isComplete` returns `{ IsComplete: true }`.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
The `cr.Provider` framework throws `"Data" is not allowed if "IsComplete" is "False"`
|
|
16
|
+
when a pending `isComplete` response carries any `Data` keys. Any migration set needing
|
|
17
|
+
more than one invocation therefore failed the custom resource on the first pending poll,
|
|
18
|
+
marking the resource `CREATE_FAILED`. The rollback then invoked the same handler for the
|
|
19
|
+
`Delete` request, ran the next pending migration, failed the same way, and left the stack
|
|
20
|
+
`ROLLBACK_FAILED`.
|
|
21
|
+
|
|
22
|
+
Scalar and array results were also submitted as `Data`, which CloudFormation rejects
|
|
23
|
+
because `Data` must be a map.
|
|
24
|
+
|
|
25
|
+
## Migration
|
|
26
|
+
|
|
27
|
+
No changes required. Handlers returning `{ pending: true }` now poll correctly. Handlers
|
|
28
|
+
returning a scalar or array no longer expose that value through `Fn::GetAtt`; return a
|
|
29
|
+
plain object to keep resource attributes.
|
|
30
|
+
|
|
31
|
+
Fixes #510.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.140
|
|
3
|
+
date: 2026-08-27
|
|
4
|
+
summary: Migrations skill documents the isComplete Data protocol and Delete short-circuit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `skill("migrations")` records that pending polls carry no `Data`, that completion
|
|
10
|
+
returns `Data` only for plain-object results, and that `Delete` requests skip the
|
|
11
|
+
migration.
|
|
12
|
+
- Release notes for `@jaypie/lambda` 1.2.15 and `jaypie` 1.2.91.
|
package/skills/migrations.md
CHANGED
|
@@ -45,7 +45,7 @@ new JaypieMigration(this, "SeedData", {
|
|
|
45
45
|
|
|
46
46
|
- **Timeout**: 15 minutes per invocation (Lambda max); `totalTimeout` controls the end-to-end ceiling across all polling invocations (default 2 hours)
|
|
47
47
|
- **Role**: Tagged as `CDK.ROLE.PROCESSING`
|
|
48
|
-
- **Execution**: Uses `cr.Provider` with both `onEventHandler` and `isCompleteHandler` pointing to the same Lambda. The `onEventHandler` returns `PhysicalResourceId` immediately; the migration code runs in `isCompleteHandler` invocations, which are polled by Step Functions until `IsComplete: true`.
|
|
48
|
+
- **Execution**: Uses `cr.Provider` with both `onEventHandler` and `isCompleteHandler` pointing to the same Lambda. The `onEventHandler` returns `PhysicalResourceId` immediately; the migration code runs in `isCompleteHandler` invocations, which are polled by Step Functions until `IsComplete: true`. `Delete` requests skip the migration entirely.
|
|
49
49
|
- **Dependencies**: Use `dependencies` to ensure tables and other resources exist before the migration executes
|
|
50
50
|
- **Permissions**: Tables passed via `tables` get data-plane (`grantReadWriteData`) plus control-plane access (`DescribeTable`, `UpdateTable`, `UpdateTimeToLive`, `UpdateContinuousBackups`) scoped to the table ARN and its indexes — migrations that add GSIs, toggle TTL, or change backups work without extra IAM
|
|
51
51
|
|
|
@@ -85,7 +85,20 @@ export const handler = migrationHandler(async (event) => {
|
|
|
85
85
|
|
|
86
86
|
`migrationHandler` maps the `pending` flag onto CFN's `IsComplete` protocol:
|
|
87
87
|
- `pending: true` → `{ IsComplete: false }` — waiter re-invokes after `queryInterval`
|
|
88
|
-
- `pending: false` or omitted → `{ IsComplete: true }` — deploy proceeds
|
|
88
|
+
- `pending: false` or omitted → `{ IsComplete: true, Data: result }` — deploy proceeds
|
|
89
|
+
|
|
90
|
+
Pending responses carry no `Data`. The `cr.Provider` framework rejects
|
|
91
|
+
`Data` alongside `IsComplete: false` with `"Data" is not allowed if "IsComplete" is "False"`,
|
|
92
|
+
which fails the custom resource on the first pending poll. On completion the handler
|
|
93
|
+
result is returned as `Data` only when it is a plain object; scalar and array results
|
|
94
|
+
are reported complete without `Data` because CloudFormation accepts a map only.
|
|
95
|
+
|
|
96
|
+
### Delete requests
|
|
97
|
+
|
|
98
|
+
`migrationHandler` short-circuits `RequestType: "Delete"` without invoking the migration
|
|
99
|
+
code. The resource being migrated is usually torn down in the same operation, so running
|
|
100
|
+
migrations against it is wasted work, and a failure there strands the stack in
|
|
101
|
+
`ROLLBACK_FAILED`.
|
|
89
102
|
|
|
90
103
|
## Building Migration Code
|
|
91
104
|
|