diff --git a/apps/wing/src/commands/pack.test.ts b/apps/wing/src/commands/pack.test.ts
index d424bb258ba..6834f60ecf7 100644
--- a/apps/wing/src/commands/pack.test.ts
+++ b/apps/wing/src/commands/pack.test.ts
@@ -186,10 +186,18 @@ describe("wing pack", () => {
await extractTarball(join(outdir, tarballPath), outdir);
// symlink node_modules/@winglang/sdk to our version of the sdk so the import works
- await fs.mkdir(join(outdir, "package", "node_modules", "@winglang"), { recursive: true });
+ await fs.mkdir(join(outdir, "package", "node_modules", "@winglang", "sdk", "lib"), {
+ recursive: true,
+ });
+
+ await fs.symlink(
+ require.resolve("@winglang/sdk/lib/index.js"),
+ join(outdir, "package", "node_modules", "@winglang", "sdk", "index.js")
+ );
+
await fs.symlink(
- require.resolve("@winglang/sdk"),
- join(outdir, "package", "node_modules", "@winglang", "sdk")
+ require.resolve("@winglang/sdk/lib/macros.js"),
+ join(outdir, "package", "node_modules", "@winglang", "sdk", "lib", "macros.js")
);
const packagePath = join(outdir, "package");
diff --git a/docs/api/04-standard-library/std/string.md b/docs/api/04-standard-library/std/string.md
index 63d7c79498e..54985c73ff8 100644
--- a/docs/api/04-standard-library/std/string.md
+++ b/docs/api/04-standard-library/std/string.md
@@ -22,7 +22,7 @@ String.
| endsWith
| Does this string end with the given searchString? |
| indexOf
| Returns the index of the first occurrence of searchString found. |
| lowercase
| Returns this string in lower case. |
-| replace
| Replaces the first occurence of a substring within a string. |
+| replace
| Replaces the first occurrence of a substring within a string. |
| replaceAll
| Replaces all occurrences of a substring within a string. |
| split
| Splits string by separator. |
| startsWith
| Does this string start with the given searchString? |
@@ -126,7 +126,7 @@ Returns this string in lower case.
replace(searchString: str, replaceString: str): str
```
-Replaces the first occurence of a substring within a string.
+Replaces the first occurrence of a substring within a string.
###### `searchString`Required
diff --git a/examples/tests/sdk_tests/function/aws-function.test.w b/examples/tests/sdk_tests/function/aws-function.test.w
index 1da2ac9c8dd..c78b8d2a09a 100644
--- a/examples/tests/sdk_tests/function/aws-function.test.w
+++ b/examples/tests/sdk_tests/function/aws-function.test.w
@@ -37,7 +37,7 @@ let fn = new cloud.Function(inflight (msg: Json?) => {
let fnInfo = getFunctionInfo(fn);
-test "AWS Function" {
+new std.Test(inflight () => {
if let info = fnInfo {
if target == "tf-aws" {
assert(info.get("functionArn").contains("arn:aws:lambda:"));
@@ -73,4 +73,4 @@ test "AWS Function" {
msg = err;
}
expect.ok(msg.contains("fake error"), "Expected fake error message");
-}
+}, timeout: 3m) as "AWS Function";
diff --git a/examples/tests/valid/chaining_macros.test.w b/examples/tests/valid/chaining_macros.test.w
new file mode 100644
index 00000000000..ab4532616b5
--- /dev/null
+++ b/examples/tests/valid/chaining_macros.test.w
@@ -0,0 +1,91 @@
+bring expect;
+bring math;
+
+struct Result {
+ item: Json?;
+ items: Array?;
+ mapItem: Map?;
+ mapItems: Array