alchemy 2.0.0-beta.68 → 2.0.0-beta.69

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 (50) hide show
  1. package/bin/exec.js +124 -16
  2. package/bin/exec.js.map +1 -1
  3. package/lib/Apply.d.ts.map +1 -1
  4. package/lib/Apply.js +33 -0
  5. package/lib/Apply.js.map +1 -1
  6. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  7. package/lib/Cli/LoggingCli.js +9 -1
  8. package/lib/Cli/LoggingCli.js.map +1 -1
  9. package/lib/Cloudflare/Access/Group.d.ts +11 -2
  10. package/lib/Cloudflare/Access/Group.d.ts.map +1 -1
  11. package/lib/Cloudflare/Access/Group.js.map +1 -1
  12. package/lib/Cloudflare/Access/Policy.d.ts +11 -2
  13. package/lib/Cloudflare/Access/Policy.d.ts.map +1 -1
  14. package/lib/Cloudflare/Access/Policy.js.map +1 -1
  15. package/lib/Cloudflare/Account/Member.d.ts +1 -1
  16. package/lib/Cloudflare/Account/Member.d.ts.map +1 -1
  17. package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
  18. package/lib/Cloudflare/Website/StaticSite.js +8 -1
  19. package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
  20. package/lib/Plan.d.ts +23 -4
  21. package/lib/Plan.d.ts.map +1 -1
  22. package/lib/Plan.js +226 -22
  23. package/lib/Plan.js.map +1 -1
  24. package/lib/Rename.d.ts +132 -0
  25. package/lib/Rename.d.ts.map +1 -0
  26. package/lib/Rename.js +117 -0
  27. package/lib/Rename.js.map +1 -0
  28. package/lib/Resource.d.ts +9 -0
  29. package/lib/Resource.d.ts.map +1 -1
  30. package/lib/Resource.js +11 -0
  31. package/lib/Resource.js.map +1 -1
  32. package/lib/State/HttpStateApi.d.ts +14 -14
  33. package/lib/Sync.d.ts.map +1 -1
  34. package/lib/Sync.js +1 -0
  35. package/lib/Sync.js.map +1 -1
  36. package/lib/index.d.ts +1 -0
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/index.js +1 -0
  39. package/lib/index.js.map +1 -1
  40. package/package.json +4 -4
  41. package/src/Apply.ts +47 -0
  42. package/src/Cli/LoggingCli.ts +10 -1
  43. package/src/Cloudflare/Access/Group.ts +16 -2
  44. package/src/Cloudflare/Access/Policy.ts +16 -2
  45. package/src/Cloudflare/Website/StaticSite.ts +8 -1
  46. package/src/Plan.ts +284 -28
  47. package/src/Rename.ts +135 -0
  48. package/src/Resource.ts +27 -0
  49. package/src/Sync.ts +1 -0
  50. package/src/index.ts +1 -0
package/src/Resource.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  } from "./ProviderMode.ts";
17
17
  import { ref as makeRef } from "./Ref.ts";
18
18
  import { RemovalPolicy } from "./RemovalPolicy.ts";
19
+ import { RenamePolicy } from "./Rename.ts";
19
20
  import { Self } from "./Self.ts";
20
21
  import { Stack } from "./Stack.ts";
21
22
 
@@ -136,6 +137,15 @@ export interface ResourceLike<
136
137
  * during dev); `undefined` means the run default (`AlchemyContext.dev`).
137
138
  */
138
139
  Mode: ProviderMode | undefined;
140
+ /**
141
+ * Former FQNs this resource's state may still be persisted under,
142
+ * captured from the ambient {@link RenamePolicy} at registration (via
143
+ * `.pipe(renamedFrom("OldId"))`) and resolved against the same namespace
144
+ * as the resource's own FQN. The planner migrates a state row found at a
145
+ * former FQN to {@link FQN} instead of planning a create+delete
146
+ * replacement — see `renamedFrom` in Rename.ts for the full semantics.
147
+ */
148
+ FormerFqns: readonly string[] | undefined;
139
149
  /** @internal phantom */
140
150
  Attributes: Attributes;
141
151
  /** @internal phantom */
@@ -381,6 +391,23 @@ export function Resource<R extends ResourceLike>(
381
391
  Effect.map(Option.getOrUndefined),
382
392
  ),
383
393
  Mode: ambientMode,
394
+ // Bare-string former ids resolve against the SAME namespace as the
395
+ // resource's own id, so `renamedFrom("Site/Worker")` declared at the
396
+ // caller's level claims `<callerNs>/Site/Worker`; the `{ fqn }` form
397
+ // is absolute (cross-namespace moves).
398
+ FormerFqns: yield* Effect.serviceOption(RenamePolicy).pipe(
399
+ Effect.map(
400
+ Option.match({
401
+ onNone: () => undefined,
402
+ onSome: (formerIds) =>
403
+ formerIds.map((formerId) =>
404
+ typeof formerId === "string"
405
+ ? toFqn(namespace, formerId)
406
+ : formerId.fqn,
407
+ ),
408
+ }),
409
+ ),
410
+ ),
384
411
  bind,
385
412
  toString(this: typeof target) {
386
413
  return `Resource<${this.Type}>(${this.LogicalId})`;
package/src/Sync.ts CHANGED
@@ -472,6 +472,7 @@ export const plan = (stack: {
472
472
  Provider: Provider(persisted.resourceType),
473
473
  RemovalPolicy: persisted.removalPolicy,
474
474
  Adopt: undefined,
475
+ FormerFqns: undefined,
475
476
  Mode: persisted.providerMode,
476
477
  RuntimeContext: undefined!,
477
478
  Providers: undefined,
package/src/index.ts CHANGED
@@ -30,6 +30,7 @@ export { remote } from "./ProviderMode.ts";
30
30
  export * from "./Random.ts";
31
31
  export * from "./Ref.ts";
32
32
  export * as RemovalPolicy from "./RemovalPolicy.ts";
33
+ export { renamedFrom } from "./Rename.ts";
33
34
  export * from "./Resource.ts";
34
35
  export * as Schema from "./Schema.ts";
35
36
  export * as Server from "./Server/index.ts";