diff --git a/docs/docs/04-standard-library/01-cloud/queue.md b/docs/docs/04-standard-library/01-cloud/queue.md
index 1a6d4ce92f6..d56866e37d8 100644
--- a/docs/docs/04-standard-library/01-cloud/queue.md
+++ b/docs/docs/04-standard-library/01-cloud/queue.md
@@ -239,25 +239,11 @@ let QueueProps = cloud.QueueProps{ ... };
| **Name** | **Type** | **Description** |
| --- | --- | --- |
-| initialMessages
| MutArray<str>
| Initialize the queue with a set of messages. |
| retentionPeriod
| duration
| How long a queue retains a message. |
| timeout
| duration
| How long a queue's consumers have to process a message. |
---
-##### `initialMessages`Optional
-
-```wing
-initialMessages: MutArray;
-```
-
-- *Type:* MutArray<str>
-- *Default:* []
-
-Initialize the queue with a set of messages.
-
----
-
##### `retentionPeriod`Optional
```wing
diff --git a/libs/wingc/src/lsp/snapshots/completions/incomplete_inflight_namespace.snap b/libs/wingc/src/lsp/snapshots/completions/incomplete_inflight_namespace.snap
index daaec034816..75be35689ec 100644
--- a/libs/wingc/src/lsp/snapshots/completions/incomplete_inflight_namespace.snap
+++ b/libs/wingc/src/lsp/snapshots/completions/incomplete_inflight_namespace.snap
@@ -203,7 +203,7 @@ source: libs/wingc/src/lsp/completions.rs
kind: 22
documentation:
kind: markdown
- value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `initialMessages?` — Initialize the queue with a set of messages.\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
+ value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
sortText: hh|QueueProps
- label: QueueSetConsumerProps
kind: 22
diff --git a/libs/wingc/src/lsp/snapshots/completions/namespace_middle_dot.snap b/libs/wingc/src/lsp/snapshots/completions/namespace_middle_dot.snap
index daaec034816..75be35689ec 100644
--- a/libs/wingc/src/lsp/snapshots/completions/namespace_middle_dot.snap
+++ b/libs/wingc/src/lsp/snapshots/completions/namespace_middle_dot.snap
@@ -203,7 +203,7 @@ source: libs/wingc/src/lsp/completions.rs
kind: 22
documentation:
kind: markdown
- value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `initialMessages?` — Initialize the queue with a set of messages.\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
+ value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
sortText: hh|QueueProps
- label: QueueSetConsumerProps
kind: 22
diff --git a/libs/wingc/src/lsp/snapshots/completions/variable_type_annotation_namespace.snap b/libs/wingc/src/lsp/snapshots/completions/variable_type_annotation_namespace.snap
index daaec034816..75be35689ec 100644
--- a/libs/wingc/src/lsp/snapshots/completions/variable_type_annotation_namespace.snap
+++ b/libs/wingc/src/lsp/snapshots/completions/variable_type_annotation_namespace.snap
@@ -203,7 +203,7 @@ source: libs/wingc/src/lsp/completions.rs
kind: 22
documentation:
kind: markdown
- value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `initialMessages?` — Initialize the queue with a set of messages.\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
+ value: "```wing\nstruct QueueProps\n```\n---\nOptions for `Queue`.\n### Fields\n- `retentionPeriod?` — How long a queue retains a message.\n- `timeout?` — How long a queue's consumers have to process a message."
sortText: hh|QueueProps
- label: QueueSetConsumerProps
kind: 22
diff --git a/libs/wingsdk/src/cloud/queue.ts b/libs/wingsdk/src/cloud/queue.ts
index 357e7aeb15a..3adc3975669 100644
--- a/libs/wingsdk/src/cloud/queue.ts
+++ b/libs/wingsdk/src/cloud/queue.ts
@@ -24,12 +24,6 @@ export interface QueueProps {
* @default undefined
*/
readonly retentionPeriod?: Duration;
-
- /**
- * Initialize the queue with a set of messages.
- * @default []
- */
- readonly initialMessages?: string[];
}
/**
diff --git a/libs/wingsdk/src/target-awscdk/queue.ts b/libs/wingsdk/src/target-awscdk/queue.ts
index b2766149b4b..3d5eb69effe 100644
--- a/libs/wingsdk/src/target-awscdk/queue.ts
+++ b/libs/wingsdk/src/target-awscdk/queue.ts
@@ -29,12 +29,6 @@ export class Queue extends cloud.Queue {
? Duration.seconds(props.retentionPeriod?.seconds)
: undefined,
});
-
- if ((props.initialMessages ?? []).length) {
- throw new Error(
- "initialMessages not supported yet for AWS target - https://github.com/winglang/wing/issues/281"
- );
- }
}
public setConsumer(
diff --git a/libs/wingsdk/src/target-sim/queue.inflight.ts b/libs/wingsdk/src/target-sim/queue.inflight.ts
index 126736c103a..fb420910bdd 100644
--- a/libs/wingsdk/src/target-sim/queue.inflight.ts
+++ b/libs/wingsdk/src/target-sim/queue.inflight.ts
@@ -25,14 +25,6 @@ export class Queue
private readonly retentionPeriod: number;
constructor(props: QueueSchema["props"], context: ISimulatorContext) {
- if (props.initialMessages) {
- this.messages.push(
- ...props.initialMessages.map(
- (message) => new QueueMessage(this.retentionPeriod, message)
- )
- );
- }
-
this.timeout = props.timeout;
this.retentionPeriod = props.retentionPeriod;
this.intervalId = setInterval(() => this.processMessages(), 100); // every 0.1 seconds
diff --git a/libs/wingsdk/src/target-sim/queue.ts b/libs/wingsdk/src/target-sim/queue.ts
index 08d2ce945d0..6e01e2cfb72 100644
--- a/libs/wingsdk/src/target-sim/queue.ts
+++ b/libs/wingsdk/src/target-sim/queue.ts
@@ -19,7 +19,6 @@ import { BaseResourceSchema } from "../testing/simulator";
export class Queue extends cloud.Queue implements ISimulatorResource {
private readonly timeout: Duration;
private readonly retentionPeriod: Duration;
- private readonly initialMessages: string[] = [];
constructor(scope: Construct, id: string, props: cloud.QueueProps = {}) {
super(scope, id, props);
@@ -31,8 +30,6 @@ export class Queue extends cloud.Queue implements ISimulatorResource {
"Retention period must be greater than or equal to timeout"
);
}
-
- this.initialMessages.push(...(props.initialMessages ?? []));
}
public setConsumer(
@@ -104,7 +101,6 @@ export class Queue extends cloud.Queue implements ISimulatorResource {
props: {
timeout: this.timeout.seconds,
retentionPeriod: this.retentionPeriod.seconds,
- initialMessages: this.initialMessages,
},
attrs: {} as any,
};
diff --git a/libs/wingsdk/src/target-sim/schema-resources.ts b/libs/wingsdk/src/target-sim/schema-resources.ts
index a73728b097f..c660c860a9e 100644
--- a/libs/wingsdk/src/target-sim/schema-resources.ts
+++ b/libs/wingsdk/src/target-sim/schema-resources.ts
@@ -80,8 +80,6 @@ export interface QueueSchema extends BaseResourceSchema {
readonly timeout: number;
/** How long a queue retains a message, in seconds */
readonly retentionPeriod: number;
- /** Initial messages to be pushed to the queue. */
- readonly initialMessages: string[];
};
}
diff --git a/libs/wingsdk/src/target-tf-aws/queue.ts b/libs/wingsdk/src/target-tf-aws/queue.ts
index fa06e6a25e3..2d57275622d 100644
--- a/libs/wingsdk/src/target-tf-aws/queue.ts
+++ b/libs/wingsdk/src/target-tf-aws/queue.ts
@@ -35,12 +35,6 @@ export class Queue extends cloud.Queue {
messageRetentionSeconds: props.retentionPeriod?.seconds,
name: ResourceNames.generateName(this, NAME_OPTS),
});
-
- if ((props.initialMessages ?? []).length) {
- throw new Error(
- "initialMessages not supported yet for AWS target - https://github.com/winglang/wing/issues/281"
- );
- }
}
public setConsumer(
diff --git a/libs/wingsdk/test/target-sim/__snapshots__/file-counter.test.ts.snap b/libs/wingsdk/test/target-sim/__snapshots__/file-counter.test.ts.snap
index 3deb47e728a..191b6be620e 100644
--- a/libs/wingsdk/test/target-sim/__snapshots__/file-counter.test.ts.snap
+++ b/libs/wingsdk/test/target-sim/__snapshots__/file-counter.test.ts.snap
@@ -79,7 +79,6 @@ bucket: (function(env) {
"attrs": {},
"path": "root/HelloWorld/Queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 10,
},
diff --git a/libs/wingsdk/test/target-sim/__snapshots__/queue.test.ts.snap b/libs/wingsdk/test/target-sim/__snapshots__/queue.test.ts.snap
index 5c8a6e29ec3..8e0f433233b 100644
--- a/libs/wingsdk/test/target-sim/__snapshots__/queue.test.ts.snap
+++ b/libs/wingsdk/test/target-sim/__snapshots__/queue.test.ts.snap
@@ -16,7 +16,6 @@ exports[`create a queue 1`] = `
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 10,
},
@@ -136,7 +135,6 @@ async handle(message) {
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 1,
"timeout": 2,
},
@@ -369,7 +367,6 @@ async handle(message) {
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 1,
},
@@ -606,7 +603,6 @@ async handle(message) {
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 1,
},
@@ -805,7 +801,6 @@ exports[`queue batch size of 2, purge the queue 2`] = `
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 10,
},
@@ -867,8 +862,20 @@ exports[`queue with one subscriber, batch size of 5 1`] = `
"wingsdk.cloud.Function created.",
"wingsdk.cloud.Queue created.",
"wingsdk.sim.EventMapping created.",
+ "wingsdk.cloud.Function created.",
+ "Push (message=A).",
+ "Push (message=B).",
+ "Push (message=C).",
+ "Push (message=D).",
+ "Push (message=E).",
+ "Push (message=F).",
+ "Invoke (payload=\\"\\").",
+ "OnDeploy invoked.",
+ "wingsdk.cloud.OnDeploy created.",
"Sending messages (messages=[\\"A\\",\\"B\\",\\"C\\",\\"D\\",\\"E\\"], subscriber=sim-1).",
"Sending messages (messages=[\\"F\\"], subscriber=sim-1).",
+ "wingsdk.cloud.OnDeploy deleted.",
+ "wingsdk.cloud.Function deleted.",
"wingsdk.sim.EventMapping deleted.",
"wingsdk.cloud.Queue deleted.",
"wingsdk.cloud.Function deleted.",
@@ -878,6 +885,33 @@ exports[`queue with one subscriber, batch size of 5 1`] = `
exports[`queue with one subscriber, batch size of 5 2`] = `
{
+ ".wing/function_c8ab799f.js": "exports.handler = async function(event) {
+ return await (new ((function(){
+return class Handler {
+ constructor(clients) {
+ for (const [name, client] of Object.entries(clients)) {
+ this[name] = client;
+ }
+ }
+ async handle() {
+ await this.queue.push(\\"A\\");
+ await this.queue.push(\\"B\\");
+ await this.queue.push(\\"C\\");
+ await this.queue.push(\\"D\\");
+ await this.queue.push(\\"E\\");
+ await this.queue.push(\\"F\\");
+}
+};
+})())({
+queue: (function(env) {
+ let handle = process.env[env];
+ if (!handle) {
+ throw new Error(\\"Missing environment variable: \\" + env);
+ }
+ return $simulator.findInstance(handle);
+ })(\\"QUEUE_HANDLE_54fcf4cd\\")
+})).handle(event);
+};",
".wing/my_queue-setconsumer-e645076f_c8ddc1ce.js": "exports.handler = async function(event) {
return await (new (require(\\"[REDACTED]/wingsdk/src/target-sim/queue.setconsumer.inflight.js\\")).QueueSetConsumerHandlerClient({ handler: new ((function(){
return class Handler {
@@ -922,14 +956,6 @@ async handle(message) {
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- ],
"retentionPeriod": 3600,
"timeout": 10,
},
@@ -947,6 +973,27 @@ async handle(message) {
},
"type": "wingsdk.sim.EventMapping",
},
+ {
+ "attrs": {},
+ "path": "root/my_queue_messages/Function",
+ "props": {
+ "environmentVariables": {
+ "QUEUE_HANDLE_54fcf4cd": "\${root/my_queue#attrs.handle}",
+ },
+ "sourceCodeFile": ".wing/function_c8ab799f.js",
+ "sourceCodeLanguage": "javascript",
+ "timeout": 60000,
+ },
+ "type": "wingsdk.cloud.Function",
+ },
+ {
+ "attrs": {},
+ "path": "root/my_queue_messages",
+ "props": {
+ "functionHandle": "\${root/my_queue_messages/Function#attrs.handle}",
+ },
+ "type": "wingsdk.cloud.OnDeploy",
+ },
],
"sdkVersion": "0.0.0",
},
@@ -982,6 +1029,22 @@ async handle(message) {
"id": "Handler",
"path": "root/Handler",
},
+ "OnDeployHandler": {
+ "attributes": {
+ "wing:resource:connections": [],
+ },
+ "constructInfo": {
+ "fqn": "constructs.Construct",
+ "version": "10.1.314",
+ },
+ "display": {
+ "description": "An inflight resource",
+ "hidden": true,
+ "title": "Inflight",
+ },
+ "id": "OnDeployHandler",
+ "path": "root/OnDeployHandler",
+ },
"cloud.TestRunner": {
"attributes": {
"wing:resource:connections": [],
@@ -1007,6 +1070,18 @@ async handle(message) {
"relationship": "setConsumer()",
"resource": "root/my_queue/my_queue-SetConsumer-e645076f",
},
+ {
+ "direction": "inbound",
+ "implicit": false,
+ "relationship": "push()",
+ "resource": "root/my_queue_messages/Function",
+ },
+ {
+ "direction": "inbound",
+ "implicit": false,
+ "relationship": "$inflight_init()",
+ "resource": "root/my_queue_messages/Function",
+ },
],
},
"children": {
@@ -1085,6 +1160,52 @@ async handle(message) {
"id": "my_queue",
"path": "root/my_queue",
},
+ "my_queue_messages": {
+ "attributes": {
+ "wing:resource:connections": [],
+ },
+ "children": {
+ "Function": {
+ "attributes": {
+ "wing:resource:connections": [
+ {
+ "direction": "outbound",
+ "implicit": false,
+ "relationship": "push()",
+ "resource": "root/my_queue",
+ },
+ {
+ "direction": "outbound",
+ "implicit": false,
+ "relationship": "$inflight_init()",
+ "resource": "root/my_queue",
+ },
+ ],
+ },
+ "constructInfo": {
+ "fqn": "constructs.Construct",
+ "version": "10.1.314",
+ },
+ "display": {
+ "description": "A cloud function (FaaS)",
+ "sourceModule": "@winglang/sdk",
+ "title": "Function",
+ },
+ "id": "Function",
+ "path": "root/my_queue_messages/Function",
+ },
+ },
+ "constructInfo": {
+ "fqn": "constructs.Construct",
+ "version": "10.1.314",
+ },
+ "display": {
+ "description": "Run code during the app's deployment.",
+ "title": "OnDeploy",
+ },
+ "id": "my_queue_messages",
+ "path": "root/my_queue_messages",
+ },
},
"constructInfo": {
"fqn": "constructs.Construct",
@@ -1161,7 +1282,6 @@ async handle(message) {
"attrs": {},
"path": "root/my_queue",
"props": {
- "initialMessages": [],
"retentionPeriod": 3600,
"timeout": 10,
},
diff --git a/libs/wingsdk/test/target-sim/queue.test.ts b/libs/wingsdk/test/target-sim/queue.test.ts
index 9b4ccba10b9..9955332d337 100644
--- a/libs/wingsdk/test/target-sim/queue.test.ts
+++ b/libs/wingsdk/test/target-sim/queue.test.ts
@@ -28,7 +28,6 @@ test("create a queue", async () => {
},
path: "root/my_queue",
props: {
- initialMessages: [],
timeout: 10,
retentionPeriod: 3600,
},
@@ -96,11 +95,32 @@ test("queue batch size of 2, purge the queue", async () => {
test("queue with one subscriber, batch size of 5", async () => {
// GIVEN
const app = new SimApp();
+
+ const queue = cloud.Queue._newQueue(app, "my_queue");
const handler = Testing.makeHandler(app, "Handler", INFLIGHT_CODE);
- const queue = cloud.Queue._newQueue(app, "my_queue", {
- initialMessages: ["A", "B", "C", "D", "E", "F"],
- });
queue.setConsumer(handler, { batchSize: 5 });
+
+ // initialize the queue with some messages
+ const onDeployHandler = Testing.makeHandler(
+ app,
+ "OnDeployHandler",
+ `async handle() {
+ await this.queue.push("A");
+ await this.queue.push("B");
+ await this.queue.push("C");
+ await this.queue.push("D");
+ await this.queue.push("E");
+ await this.queue.push("F");
+}`,
+ {
+ queue: {
+ obj: queue,
+ ops: [cloud.QueueInflightMethods.PUSH],
+ },
+ }
+ );
+ cloud.OnDeploy._newOnDeploy(app, "my_queue_messages", onDeployHandler);
+
const s = await app.startSimulator();
// WHEN
@@ -276,17 +296,22 @@ test("queue has display title and description properties", async () => {
});
});
-test("queue pops messages", async () => {
+test("can pop messages from queue", async () => {
// GIVEN
const app = new SimApp();
const messages = ["A", "B", "C", "D", "E", "F"];
- cloud.Queue._newQueue(app, "my_queue", {
- initialMessages: messages,
- });
+ cloud.Queue._newQueue(app, "my_queue");
// WHEN
const s = await app.startSimulator();
const queueClient = s.getResource("/my_queue") as cloud.IQueueClient;
+
+ // initialize the messages
+ for (const message of messages) {
+ await queueClient.push(message);
+ }
+
+ // try popping them
const poppedMessages: Array = [];
for (let i = 0; i < messages.length; i++) {
poppedMessages.push(await queueClient.pop());
@@ -299,7 +324,7 @@ test("queue pops messages", async () => {
expect(poppedOnEmptyQueue).toBeUndefined();
});
-test("empty queue pops nothing", async () => {
+test("pop from empty queue returns nothing", async () => {
// GIVEN
const app = new SimApp();
cloud.Queue._newQueue(app, "my_queue");