alchemy 0.20.1 → 0.21.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.
@@ -87,6 +87,10 @@ function processBindings(spec, bindings, eventSources, workerName) {
87
87
  }
88
88
  // Process each binding
89
89
  for (const [bindingName, binding] of Object.entries(bindings)) {
90
+ if (typeof binding === "function") {
91
+ // this is only reachable in the
92
+ throw new Error(`Invalid binding ${bindingName} is a function`);
93
+ }
90
94
  if (typeof binding === "string") {
91
95
  // Plain text binding - add to vars
92
96
  if (!spec.vars) {
@@ -1 +1 @@
1
- {"version":3,"file":"wrangler.json.js","sourceRoot":"","sources":["../../src/cloudflare/wrangler.json.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsDrC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAClC,0BAA0B,EAC1B,KAAK,WAEH,GAAW,EACX,KAAwB;IAExB,qDAAqD;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAEhD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,MAAM,IAAI,GAAqB;QAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,sCAAsC;QACtC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU;QACrC,oFAAoF;QACpF,kBAAkB,EAAE,MAAM,CAAC,iBAAiB;QAC5C,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB;KACrD,CAAC;IAEF,iCAAiC;IACjC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,oCAAoC;IACpC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAErC,sBAAsB;IACtB,OAAO,IAAI,CAAC;QACV,GAAG,KAAK;QACR,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAyMF;;GAEG;AACH,SAAS,eAAe,CACtB,IAAsB,EACtB,QAAkB,EAClB,YAAuC,EACvC,UAAkB;IAElB,4CAA4C;IAC5C,MAAM,YAAY,GAAsC,EAAE,CAAC;IAC3D,MAAM,cAAc,GAKd,EAAE,CAAC;IACT,MAAM,SAAS,GAA+C,EAAE,CAAC;IACjE,MAAM,QAAQ,GACZ,EAAE,CAAC;IACL,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAA4D,EAAE,CAAC;IAC9E,MAAM,WAAW,GAKX,EAAE,CAAC;IACT,MAAM,MAAM,GAUR;QACF,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,gBAAgB,GAA8C,EAAE,CAAC;IACvE,MAAM,uBAAuB,GAA2C,EAAE,CAAC;IAC3E,MAAM,UAAU,GAIV,EAAE,CAAC;IACT,MAAM,SAAS,GAA4C,EAAE,CAAC;IAE9D,KAAK,MAAM,WAAW,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE;gBAC3B,cAAc,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS;gBAC/C,eAAe,EAAE,WAAW,CAAC,QAAQ,EAAE,cAAc;gBACrD,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE,UAAU;gBAC7C,gBAAgB,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa;gBACrD,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE,UAAU;aAC9C,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,WAAW,CAAC,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,uBAAuB;IACvB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,mCAAmC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;QACnC,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,wBAAwB;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,kBAAkB;YAClB,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,OAAO,CAAC,IAAI;aACtB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC3C,uBAAuB;YACvB,YAAY,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,WAAW;gBACpB,EAAE,EAAE,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;aAChE,CAAC,CAAC;QACL,CAAC;aAAM,IACL,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,CAAC,IAAI,KAAK,0BAA0B,EAC3C,CAAC;YACD,yBAAyB;YACzB,MAAM,SAAS,GAAG,OAAiC,CAAC;YACpD,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,SAAS,CAAC,SAAS;gBAC/B,WAAW,EAAE,SAAS,CAAC,UAAU;gBACjC,WAAW,EAAE,SAAS,CAAC,WAAW;aACnC,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,WAAW;gBACpB,WAAW,EAAE,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG;gBACZ,SAAS,EAAE,OAAO,CAAC,IAAI;gBACvB,OAAO,EAAE,WAAW;aACrB,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,OAAO,CAAC,YAAY;gBAC1B,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,WAAW;gBACpB,WAAW,EAAE,OAAO,CAAC,EAAE;gBACvB,aAAa,EAAE,OAAO,CAAC,IAAI;gBAC3B,cAAc,EAAE,OAAO,CAAC,aAAa;aACtC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,OAAO,CAAC,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,gBAAgB,CAAC,IAAI,CAAC;gBACpB,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,OAAO,CAAC,IAAI;aACzB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,OAAO,GAAG;gBACb,OAAO,EAAE,WAAW;aACrB,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,EAAE,GAAG;gBACR,OAAO,EAAE,WAAW;aACrB,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC/C,uBAAuB,CAAC,IAAI,CAAC;gBAC3B,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzC,QAAQ;QACV,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzC,MAAM,QAAQ,GACZ,UAAU,IAAI,OAAO,CAAC,MAAM;gBAC1B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC;YACtD,UAAU,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,WAAW;gBACpB,EAAE,EAAE,OAAO,CAAC,YAAY;gBACxB,qBAAqB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;aACtL,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,OAAO,CAAC,IAAI;aACvB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,uEAAuE;QACzE,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG;YACrB,QAAQ,EAAE,cAAc;SACzB,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IACpC,CAAC;IAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,UAAU,GAAG;YAChB;gBACE,GAAG,EAAE,IAAI;gBACT,kBAAkB;gBAClB,WAAW;aACZ;SACF,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,yBAAyB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"wrangler.json.js","sourceRoot":"","sources":["../../src/cloudflare/wrangler.json.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export type * from "./scope.js";
5
5
  export * from "./secret.js";
6
6
  export * from "./serde.js";
7
7
  export * from "./state.js";
8
+ export * from "./type.js";
8
9
  export * from "./util/ignore.js";
9
10
  import { alchemy } from "./alchemy.js";
10
11
  export default alchemy;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,mBAAmB,cAAc,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,mBAAmB,YAAY,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,mBAAmB,cAAc,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,mBAAmB,YAAY,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,eAAe,OAAO,CAAC"}
package/lib/index.js CHANGED
@@ -2,6 +2,7 @@ export * from "./resource.js";
2
2
  export * from "./secret.js";
3
3
  export * from "./serde.js";
4
4
  export * from "./state.js";
5
+ export * from "./type.js";
5
6
  export * from "./util/ignore.js";
6
7
  import { alchemy } from "./alchemy.js";
7
8
  export default alchemy;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAE9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAE9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,eAAe,OAAO,CAAC"}
package/lib/type.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export type type<T> = typeof type<T>;
2
+ /**
3
+ * Used to construct type-level alias information.
4
+ */
5
+ export declare const type: (<T>() => T) & (new <T>() => T);
6
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC;;GAEG;AACH,eAAO,MAAM,IAAI,EAEX,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAEhB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC"}
package/lib/type.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Used to construct type-level alias information.
3
+ */
4
+ export const type = (() => {
5
+ throw new Error("Should never be called, purely for type-level aliasing");
6
+ });
7
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE;IAC7B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC5E,CAAC,CAEiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.20.1",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "scripts": {
@@ -13,6 +13,7 @@ import type { HyperdriveResource as _Hyperdrive } from "./hyperdrive.js";
13
13
  import type { PipelineResource as _Pipeline } from "./pipeline.js";
14
14
  import type { QueueResource as _Queue } from "./queue.js";
15
15
  import type { VectorizeIndexResource as _VectorizeIndex } from "./vectorize-index.js";
16
+ import type { Worker as _Worker } from "./worker.js";
16
17
  import type { Workflow as _Workflow } from "./workflow.js";
17
18
 
18
19
  export type Bound<T extends Binding> = T extends _DurableObjectNamespace<
@@ -21,38 +22,47 @@ export type Bound<T extends Binding> = T extends _DurableObjectNamespace<
21
22
  ? DurableObjectNamespace<O>
22
23
  : T extends { type: "kv_namespace" }
23
24
  ? KVNamespace
24
- : T extends { type: "service" }
25
- ? Service
26
- : T extends _R2Bucket
27
- ? R2Bucket
28
- : T extends _AiGateway
29
- ? AiGateway
30
- : T extends _Hyperdrive
31
- ? Hyperdrive
32
- : T extends Secret
33
- ? string
34
- : T extends Assets
35
- ? Service
36
- : T extends _Workflow<infer P>
37
- ? Workflow<P>
38
- : T extends D1DatabaseResource
39
- ? D1Database
40
- : T extends _VectorizeIndex
41
- ? VectorizeIndex
42
- : T extends _Queue<infer Body>
43
- ? Queue<Body>
44
- : T extends _AnalyticsEngineDataset
45
- ? AnalyticsEngineDataset
46
- : T extends _Pipeline<infer R>
47
- ? Pipeline<R>
48
- : T extends string
49
- ? string
50
- : T extends BrowserRendering
51
- ? Fetcher
52
- : T extends _Ai<infer M>
53
- ? Ai<M>
54
- : T extends Self
55
- ? Service
56
- : T extends Json<infer T>
57
- ? T
58
- : Service;
25
+ : T extends _Worker<any, infer RPC>
26
+ ? Service<RPC> & {
27
+ // cloudflare's Rpc.Provider type loses mapping between properties (jump to definition)
28
+ // we fix that using Pick to re-connect mappings
29
+ [property in keyof Pick<
30
+ RPC,
31
+ Extract<keyof Rpc.Provider<RPC, "fetch" | "connect">, keyof RPC>
32
+ >]: Rpc.Provider<RPC, "fetch" | "connect">[property];
33
+ }
34
+ : T extends { type: "service" }
35
+ ? Service
36
+ : T extends _R2Bucket
37
+ ? R2Bucket
38
+ : T extends _AiGateway
39
+ ? AiGateway
40
+ : T extends _Hyperdrive
41
+ ? Hyperdrive
42
+ : T extends Secret
43
+ ? string
44
+ : T extends Assets
45
+ ? Service
46
+ : T extends _Workflow<infer P>
47
+ ? Workflow<P>
48
+ : T extends D1DatabaseResource
49
+ ? D1Database
50
+ : T extends _VectorizeIndex
51
+ ? VectorizeIndex
52
+ : T extends _Queue<infer Body>
53
+ ? Queue<Body>
54
+ : T extends _AnalyticsEngineDataset
55
+ ? AnalyticsEngineDataset
56
+ : T extends _Pipeline<infer R>
57
+ ? Pipeline<R>
58
+ : T extends string
59
+ ? string
60
+ : T extends BrowserRendering
61
+ ? Fetcher
62
+ : T extends _Ai<infer M>
63
+ ? Ai<M>
64
+ : T extends Self
65
+ ? Service
66
+ : T extends Json<infer T>
67
+ ? T
68
+ : Service;
@@ -1,11 +1,18 @@
1
1
  import type { Context } from "../context.js";
2
2
  import { slugify } from "../util/slugify.js";
3
- import { Self, type Bindings, type WorkerBindingSpec } from "./bindings.js";
4
- import type { DurableObjectNamespace } from "./durable-object-namespace.js";
3
+ import {
4
+ Self,
5
+ type Bindings,
6
+ type WorkerBindingDurableObjectNamespace,
7
+ type WorkerBindingSpec,
8
+ } from "./bindings.js";
9
+ import {
10
+ isDurableObjectNamespace,
11
+ type DurableObjectNamespace,
12
+ } from "./durable-object-namespace.js";
5
13
  import { createAssetConfig, type AssetUploadResult } from "./worker-assets.js";
6
14
  import type { SingleStepMigration } from "./worker-migration.js";
7
15
  import type { AssetsConfig, Worker, WorkerProps } from "./worker.js";
8
- import type { Workflow } from "./workflow.js";
9
16
 
10
17
  /**
11
18
  * Metadata returned by Cloudflare API for a worker script
@@ -186,7 +193,8 @@ export interface WorkerMetadata {
186
193
 
187
194
  export async function prepareWorkerMetadata<B extends Bindings>(
188
195
  ctx: Context<Worker<B>>,
189
- oldBindings: Bindings | undefined,
196
+ oldBindings: WorkerBindingSpec[] | undefined,
197
+ oldTags: string[] | undefined,
190
198
  props: WorkerProps & {
191
199
  compatibilityDate: string;
192
200
  compatibilityFlags: string[];
@@ -194,20 +202,75 @@ export async function prepareWorkerMetadata<B extends Bindings>(
194
202
  },
195
203
  assetUploadResult?: AssetUploadResult,
196
204
  ): Promise<WorkerMetadata> {
197
- const deletedClasses = Object.entries(oldBindings ?? {})
198
- .filter(([key]) => !props.bindings?.[key])
199
- .flatMap(([_, binding]) => {
200
- if (
201
- binding &&
202
- typeof binding === "object" &&
203
- binding.type === "durable_object_namespace" &&
204
- (binding.scriptName === undefined ||
205
- binding.scriptName === props.workerName)
206
- ) {
207
- return [binding.className];
205
+ // we use Cloudflare Worker tags to store a mapping between Alchemy's stable identifier and the binding name
206
+ // e.g.
207
+ // {
208
+ // BINDING_NAME: new DurableObjectNamespace("stable-id")
209
+ // }
210
+ // will be stored as alchemy:do:stable-id:BINDING_NAME
211
+ // TODO(sam): should we base64 encode to ensure no `:` collision risk?
212
+ const bindingNameToStableId = Object.fromEntries(
213
+ oldTags?.flatMap((tag) => {
214
+ // alchemy:do:{stableId}:{bindingName}
215
+ if (tag.startsWith("alchemy:do:")) {
216
+ const [, , stableId, bindingName] = tag.split(":");
217
+ return [[bindingName, stableId]];
208
218
  }
209
219
  return [];
210
- });
220
+ }) ?? [],
221
+ );
222
+
223
+ const deletedClasses = oldBindings?.flatMap((oldBinding) => {
224
+ if (
225
+ oldBinding.type === "durable_object_namespace" &&
226
+ (oldBinding.script_name === undefined ||
227
+ // if this a cross-script binding, we don't need to do migrations in the remote worker
228
+ oldBinding.script_name === props.workerName)
229
+ ) {
230
+ // reverse the stableId from our tag-encoded metadata
231
+ const stableId = bindingNameToStableId[oldBinding.name];
232
+ if (stableId) {
233
+ if (props.bindings === undefined) {
234
+ // all classes are deleted
235
+ return [oldBinding.class_name];
236
+ }
237
+ // we created this worker on latest version, we can now intelligently determine migrations
238
+
239
+ // try and find the DO binding by stable id
240
+ const object = Object.values(props.bindings).find(
241
+ (binding): binding is DurableObjectNamespace<any> =>
242
+ isDurableObjectNamespace(binding) && binding.id === stableId,
243
+ );
244
+ if (object) {
245
+ // we found the corresponding object, it should not be deleted
246
+ return [];
247
+ } else {
248
+ // it was not found, we will now delete it
249
+ return [oldBinding.class_name];
250
+ }
251
+ } else {
252
+ // ok, we were unable to find the stableId, this worker must have been created by an old alchemy or outside of alchemy
253
+ // let's now apply a herusitic based on binding name (assume binding name is consistent)
254
+ // TODO(sam): this has a chance of being wrong, is that OK? Users should be encouraged to upgrade alchemy version and re-deploy
255
+ const object = props.bindings?.[oldBinding.name];
256
+ if (object && isDurableObjectNamespace(object)) {
257
+ if (object.className === oldBinding.class_name) {
258
+ // this is relatively safe to assume is the right match, do not delete
259
+ return [];
260
+ } else {
261
+ // the class name has changed, this could indicate one of:
262
+ // 1. the user has changed the class name and we should migrate it
263
+ // 2. the user deleted the DO a long time ago and this is unrelated (we should just create a new one)
264
+ return [oldBinding.class_name];
265
+ }
266
+ } else {
267
+ // we didn't find it, so delete it
268
+ return [oldBinding.class_name];
269
+ }
270
+ }
271
+ }
272
+ return [];
273
+ });
211
274
 
212
275
  // Prepare metadata with bindings
213
276
  const meta: WorkerMetadata = {
@@ -218,11 +281,22 @@ export async function prepareWorkerMetadata<B extends Bindings>(
218
281
  enabled: props.observability?.enabled !== false,
219
282
  },
220
283
  // TODO(sam): base64 encode instead? 0 collision risk vs readability.
221
- tags: [`alchemy:id:${slugify(ctx.fqn)}`],
284
+ tags: [
285
+ `alchemy:id:${slugify(ctx.fqn)}`,
286
+ // encode a mapping table of Durable Object stable ID -> binding name
287
+ // we use this to reliably compute class migrations based on server-side state
288
+ ...Object.entries(props.bindings ?? {}).flatMap(
289
+ ([bindingName, binding]) =>
290
+ isDurableObjectNamespace(binding)
291
+ ? // TODO(sam): base64 encode if contains `:`?
292
+ [`alchemy:do:${binding.id}:${bindingName}`]
293
+ : [],
294
+ ),
295
+ ],
222
296
  migrations: {
223
297
  new_classes: props.migrations?.new_classes ?? [],
224
298
  deleted_classes: [
225
- ...deletedClasses,
299
+ ...(deletedClasses ?? []),
226
300
  ...(props.migrations?.deleted_classes ?? []),
227
301
  ],
228
302
  renamed_classes: props.migrations?.renamed_classes ?? [],
@@ -303,7 +377,7 @@ export async function prepareWorkerMetadata<B extends Bindings>(
303
377
  binding.scriptName === props.workerName
304
378
  ) {
305
379
  // we do not need configure class migrations for cross-script bindings
306
- configureClassMigration(binding, binding.id, binding.className);
380
+ configureClassMigration(bindingName, binding);
307
381
  }
308
382
  } else if (binding.type === "r2_bucket") {
309
383
  meta.bindings.push({
@@ -393,29 +467,46 @@ export async function prepareWorkerMetadata<B extends Bindings>(
393
467
  }
394
468
 
395
469
  function configureClassMigration(
396
- binding: DurableObjectNamespace<any> | Workflow,
397
- stableId: string,
398
- className: string,
470
+ bindingName: string,
471
+ newBinding: DurableObjectNamespace<any>,
399
472
  ) {
400
- const oldBinding: DurableObjectNamespace<any> | Workflow | undefined =
401
- Object.values(oldBindings ?? {})
402
- ?.filter(
403
- (b) =>
404
- typeof b === "object" &&
405
- (b.type === "durable_object_namespace" || b.type === "workflow"),
406
- )
407
- ?.find((b) => b.id === stableId);
408
-
409
- if (!oldBinding) {
410
- if (binding.type === "durable_object_namespace" && binding.sqlite) {
411
- meta.migrations!.new_sqlite_classes!.push(className);
473
+ let prevBinding: WorkerBindingDurableObjectNamespace | undefined;
474
+ if (oldBindings) {
475
+ // try and find the prev binding for this
476
+ for (const oldBinding of oldBindings) {
477
+ if (oldBinding.type === "durable_object_namespace") {
478
+ const stableId = bindingNameToStableId[oldBinding.name];
479
+ if (stableId) {
480
+ // (happy case)
481
+ // great, this Worker was created with Alchemy and we can map stable ids
482
+ if (stableId === newBinding.id) {
483
+ prevBinding = oldBinding;
484
+ break;
485
+ }
486
+ } else {
487
+ // (heuristic case)
488
+ // we were unable to find the stableId, this Worker must not have been created with Alchemy
489
+ // now, try and resolve by assuming 1:1 binding name correspondence
490
+ // WARNING: this is an imperfect assumption. Users are advised to upgrade alchemy and re-deploy
491
+ if (oldBinding.name === bindingName) {
492
+ prevBinding = oldBinding;
493
+ break;
494
+ }
495
+ }
496
+ }
497
+ }
498
+ }
499
+
500
+ if (!prevBinding) {
501
+ if (newBinding.sqlite) {
502
+ meta.migrations!.new_sqlite_classes!.push(newBinding.className);
412
503
  } else {
413
- meta.migrations!.new_classes!.push(className);
504
+ meta.migrations!.new_classes!.push(newBinding.className);
414
505
  }
415
- } else if (oldBinding.className !== className) {
506
+ } else if (prevBinding.class_name !== newBinding.className) {
416
507
  meta.migrations!.renamed_classes!.push({
417
- from: oldBinding.className,
418
- to: className,
508
+ from: prevBinding.class_name,
509
+ to: newBinding.className,
419
510
  });
420
511
  }
421
512
  }