@tailor-platform/create-sdk 2.0.0-next.1 → 2.0.0-next.10

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 (100) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/package.json +10 -9
  3. package/templates/executor/.oxlintrc.json +9 -1
  4. package/templates/executor/__dot__gitignore +1 -1
  5. package/templates/executor/package.json +11 -9
  6. package/templates/executor/src/db/auditLog.ts +1 -1
  7. package/templates/executor/src/db/notification.ts +1 -1
  8. package/templates/executor/src/db/user.ts +1 -1
  9. package/templates/executor/src/generated/db.ts +3 -3
  10. package/templates/executor/tailor.d.ts +4 -2
  11. package/templates/generators/.oxlintrc.json +9 -1
  12. package/templates/generators/README.md +1 -1
  13. package/templates/generators/__dot__gitignore +1 -1
  14. package/templates/generators/package.json +14 -9
  15. package/templates/generators/src/db/category.ts +1 -1
  16. package/templates/generators/src/db/order.ts +1 -1
  17. package/templates/generators/src/db/product.ts +1 -1
  18. package/templates/generators/src/db/user.ts +1 -1
  19. package/templates/generators/src/generated/db.ts +3 -3
  20. package/templates/generators/src/generated/files.ts +5 -5
  21. package/templates/generators/src/resolver/getProduct.test.ts +31 -27
  22. package/templates/generators/src/seed/data/Order.schema.ts +2 -2
  23. package/templates/generators/src/seed/data/Product.schema.ts +2 -2
  24. package/templates/generators/src/seed/data/User.schema.ts +2 -2
  25. package/templates/generators/tailor.d.ts +4 -2
  26. package/templates/hello-world/.oxlintrc.json +9 -1
  27. package/templates/hello-world/README.md +6 -6
  28. package/templates/hello-world/__dot__gitignore +1 -1
  29. package/templates/hello-world/package.json +10 -8
  30. package/templates/hello-world/src/db/user.ts +1 -1
  31. package/templates/hello-world/src/generated/kysely-tailordb.ts +1 -1
  32. package/templates/hello-world/tailor.d.ts +4 -2
  33. package/templates/inventory-management/.oxlintrc.json +9 -1
  34. package/templates/inventory-management/README.md +8 -8
  35. package/templates/inventory-management/__dot__gitignore +1 -1
  36. package/templates/inventory-management/package.json +10 -8
  37. package/templates/inventory-management/src/db/category.ts +1 -1
  38. package/templates/inventory-management/src/db/contact.ts +1 -1
  39. package/templates/inventory-management/src/db/inventory.ts +2 -2
  40. package/templates/inventory-management/src/db/notification.ts +1 -1
  41. package/templates/inventory-management/src/db/order.ts +1 -1
  42. package/templates/inventory-management/src/db/orderItem.ts +12 -8
  43. package/templates/inventory-management/src/db/product.ts +1 -1
  44. package/templates/inventory-management/src/db/user.ts +1 -1
  45. package/templates/inventory-management/src/executor/checkInventory.ts +0 -1
  46. package/templates/inventory-management/src/generated/kysely-tailordb.ts +9 -9
  47. package/templates/inventory-management/src/resolver/registerOrder.ts +4 -2
  48. package/templates/inventory-management/tailor.d.ts +4 -2
  49. package/templates/multi-application/.oxlintrc.json +9 -1
  50. package/templates/multi-application/README.md +2 -2
  51. package/templates/multi-application/__dot__gitignore +1 -1
  52. package/templates/multi-application/apps/admin/db/adminNote.ts +2 -2
  53. package/templates/multi-application/apps/admin/tailor.config.ts +1 -1
  54. package/templates/multi-application/apps/user/db/user.ts +1 -1
  55. package/templates/multi-application/apps/user/tailor.config.ts +1 -1
  56. package/templates/multi-application/package.json +10 -8
  57. package/templates/resolver/.oxlintrc.json +9 -1
  58. package/templates/resolver/README.md +2 -2
  59. package/templates/resolver/__dot__gitignore +1 -1
  60. package/templates/resolver/package.json +11 -9
  61. package/templates/resolver/src/db/user.ts +1 -1
  62. package/templates/resolver/src/generated/db.ts +1 -1
  63. package/templates/resolver/src/resolver/add.test.ts +4 -3
  64. package/templates/resolver/src/resolver/incrementUserAge.test.ts +6 -5
  65. package/templates/resolver/src/resolver/showEnv.test.ts +2 -2
  66. package/templates/resolver/src/resolver/showUserInfo.test.ts +12 -9
  67. package/templates/resolver/src/resolver/showUserInfo.ts +3 -3
  68. package/templates/resolver/src/resolver/upsertUsers.test.ts +2 -2
  69. package/templates/resolver/tailor.d.ts +4 -2
  70. package/templates/static-web-site/.oxlintrc.json +9 -1
  71. package/templates/static-web-site/__dot__gitignore +1 -1
  72. package/templates/static-web-site/package.json +10 -8
  73. package/templates/static-web-site/src/db/user.ts +1 -1
  74. package/templates/static-web-site/tailor.d.ts +4 -2
  75. package/templates/tailordb/.oxlintrc.json +9 -1
  76. package/templates/tailordb/README.md +1 -1
  77. package/templates/tailordb/__dot__gitignore +1 -1
  78. package/templates/tailordb/package.json +11 -9
  79. package/templates/tailordb/src/db/category.ts +1 -1
  80. package/templates/tailordb/src/db/comment.ts +4 -2
  81. package/templates/tailordb/src/db/task.ts +19 -27
  82. package/templates/tailordb/src/db/user.ts +1 -1
  83. package/templates/tailordb/src/generated/db.ts +3 -3
  84. package/templates/tailordb/tailor.d.ts +4 -2
  85. package/templates/workflow/.oxlintrc.json +9 -1
  86. package/templates/workflow/README.md +2 -2
  87. package/templates/workflow/__dot__gitignore +1 -1
  88. package/templates/workflow/e2e/globalSetup.ts +1 -1
  89. package/templates/workflow/e2e/workflow.test.ts +1 -1
  90. package/templates/workflow/package.json +12 -10
  91. package/templates/workflow/src/db/order.ts +1 -1
  92. package/templates/workflow/src/db/user.ts +1 -1
  93. package/templates/workflow/src/generated/db.ts +2 -2
  94. package/templates/workflow/src/resolver/resolveApproval.test.ts +18 -13
  95. package/templates/workflow/src/workflow/approval.test.ts +16 -11
  96. package/templates/workflow/src/workflow/approval.ts +2 -2
  97. package/templates/workflow/src/workflow/order-fulfillment.test.ts +30 -18
  98. package/templates/workflow/src/workflow/order-fulfillment.ts +3 -3
  99. package/templates/workflow/tailor.d.ts +4 -2
  100. package/templates/generators/src/seed/exec.mjs +0 -485
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "workflow",
3
+ "version": "0.0.0",
3
4
  "private": true,
4
5
  "type": "module",
5
6
  "scripts": {
6
- "generate": "tailor-sdk generate",
7
- "deploy": "tailor-sdk deploy",
7
+ "generate": "tailor generate",
8
+ "deploy": "tailor deploy",
8
9
  "test": "vitest --project unit",
9
10
  "test:unit": "vitest --project unit",
10
11
  "test:e2e": "vitest --project e2e",
@@ -15,14 +16,15 @@
15
16
  "typecheck": "tsc --noEmit"
16
17
  },
17
18
  "devDependencies": {
18
- "@tailor-platform/sdk": "2.0.0-next.1",
19
- "@types/node": "24.13.2",
20
- "graphql": "16.14.2",
19
+ "@tailor-platform/eslint-plugin-sdk": "0.2.0-next.0",
20
+ "@tailor-platform/sdk": "2.0.0-next.10",
21
+ "@types/node": "24.13.3",
22
+ "graphql": "17.0.2",
21
23
  "graphql-request": "7.4.0",
22
- "oxfmt": "0.54.0",
23
- "oxlint": "1.69.0",
24
- "oxlint-tsgolint": "0.23.0",
25
- "typescript": "5.9.3",
26
- "vitest": "4.1.8"
24
+ "oxfmt": "0.59.0",
25
+ "oxlint": "1.74.0",
26
+ "oxlint-tsgolint": "0.25.0",
27
+ "typescript": "6.0.3",
28
+ "vitest": "4.1.10"
27
29
  }
28
30
  }
@@ -1,7 +1,7 @@
1
1
  import { db } from "@tailor-platform/sdk";
2
2
 
3
3
  export const order = db
4
- .type("Order", {
4
+ .table("Order", {
5
5
  customerName: db.string(),
6
6
  amount: db.int(),
7
7
  status: db.enum(["PENDING", "PROCESSING", "COMPLETED", "FAILED"]),
@@ -1,7 +1,7 @@
1
1
  import { db } from "@tailor-platform/sdk";
2
2
 
3
3
  export const user = db
4
- .type("User", {
4
+ .table("User", {
5
5
  name: db.string(),
6
6
  email: db.string().unique(),
7
7
  age: db.int(),
@@ -19,7 +19,7 @@ export interface Namespace {
19
19
  amount: number;
20
20
  status: "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED";
21
21
  createdAt: Generated<Timestamp>;
22
- updatedAt: Timestamp | null;
22
+ updatedAt: Generated<Timestamp>;
23
23
  }
24
24
 
25
25
  User: {
@@ -28,7 +28,7 @@ export interface Namespace {
28
28
  email: string;
29
29
  age: number;
30
30
  createdAt: Generated<Timestamp>;
31
- updatedAt: Timestamp | null;
31
+ updatedAt: Generated<Timestamp>;
32
32
  }
33
33
  }
34
34
  }
@@ -1,42 +1,47 @@
1
1
  import { describe, expect, test } from "vitest";
2
2
  import { mockWorkflow } from "@tailor-platform/sdk/vitest";
3
- import { unauthenticatedTailorUser } from "@tailor-platform/sdk/test";
3
+ import { approval } from "../workflow/approval";
4
4
  import resolver from "./resolveApproval";
5
5
 
6
6
  describe("resolveApproval resolver", () => {
7
7
  test("resolves approval with approved=true", async () => {
8
8
  using wf = mockWorkflow();
9
- wf.setResolveHandler((_executionId, _key, callback) => {
10
- const callbackResult = callback({
11
- message: "Please approve order order-1",
12
- orderId: "order-1",
13
- });
14
- expect(callbackResult).toEqual({ approved: true });
9
+ const approvalMock = wf.waitPoint(approval);
10
+ const payload = {
11
+ message: "Please approve order order-1",
12
+ orderId: "order-1",
13
+ };
14
+ approvalMock.resolve.mockImplementation(async (_executionId, callback) => {
15
+ expect(await callback(payload)).toEqual({ approved: true });
15
16
  });
16
17
 
17
18
  const result = await resolver.body({
18
19
  input: { executionId: "exec-1", approved: true },
19
- user: unauthenticatedTailorUser,
20
+ caller: null,
21
+ invoker: null,
20
22
  env: {},
21
23
  });
22
24
 
23
25
  expect(result).toEqual({ resolved: true });
24
- expect(wf.resolveCalls).toEqual([{ executionId: "exec-1", key: "approval" }]);
26
+ expect(approvalMock.resolve).toHaveBeenCalledWith("exec-1", expect.any(Function));
25
27
  });
26
28
 
27
29
  test("resolves approval with approved=false", async () => {
28
30
  using wf = mockWorkflow();
29
- wf.setResolveHandler((_executionId, _key, callback) => {
30
- const callbackResult = callback({ message: "Please approve", orderId: "order-2" });
31
- expect(callbackResult).toEqual({ approved: false });
31
+ const approvalMock = wf.waitPoint(approval);
32
+ const payload = { message: "Please approve", orderId: "order-2" };
33
+ approvalMock.resolve.mockImplementation(async (_executionId, callback) => {
34
+ expect(await callback(payload)).toEqual({ approved: false });
32
35
  });
33
36
 
34
37
  const result = await resolver.body({
35
38
  input: { executionId: "exec-2", approved: false },
36
- user: unauthenticatedTailorUser,
39
+ caller: null,
40
+ invoker: null,
37
41
  env: {},
38
42
  });
39
43
 
40
44
  expect(result).toEqual({ resolved: true });
45
+ expect(approvalMock.resolve).toHaveBeenCalledWith("exec-2", expect.any(Function));
41
46
  });
42
47
  });
@@ -1,28 +1,33 @@
1
1
  import { describe, expect, test } from "vitest";
2
2
  import { mockWorkflow } from "@tailor-platform/sdk/vitest";
3
- import workflow, { processWithApproval } from "./approval";
3
+ import workflow, { approval, processWithApproval } from "./approval";
4
4
 
5
5
  describe("approval workflow", () => {
6
6
  test("approved flow returns approved status", async () => {
7
7
  using wf = mockWorkflow();
8
- wf.setWaitHandler((_key, _payload) => ({ approved: true }));
8
+ const approvalMock = wf.waitPoint(approval);
9
+ approvalMock.wait.mockResolvedValue({ approved: true });
9
10
 
10
- const result = await processWithApproval.body({ orderId: "order-1" }, { env: {} });
11
+ const result = await processWithApproval.body(
12
+ { orderId: "order-1" },
13
+ { env: {}, invoker: null },
14
+ );
11
15
 
12
16
  expect(result).toEqual({ orderId: "order-1", status: "approved" });
13
- expect(wf.waitCalls).toEqual([
14
- {
15
- key: "approval",
16
- payload: { message: "Please approve order order-1", orderId: "order-1" },
17
- },
18
- ]);
17
+ expect(approvalMock.wait).toHaveBeenCalledWith({
18
+ message: "Please approve order order-1",
19
+ orderId: "order-1",
20
+ });
19
21
  });
20
22
 
21
23
  test("rejected flow returns rejected status", async () => {
22
24
  using wf = mockWorkflow();
23
- wf.setWaitHandler({ approved: false });
25
+ wf.waitPoint(approval).wait.mockResolvedValue({ approved: false });
24
26
 
25
- const result = await processWithApproval.body({ orderId: "order-2" }, { env: {} });
27
+ const result = await processWithApproval.body(
28
+ { orderId: "order-2" },
29
+ { env: {}, invoker: null },
30
+ );
26
31
 
27
32
  expect(result).toEqual({ orderId: "order-2", status: "rejected" });
28
33
  });
@@ -1,6 +1,6 @@
1
- import { createWorkflow, createWorkflowJob, defineWaitPoints } from "@tailor-platform/sdk";
1
+ import { createWaitPoints, createWorkflow, createWorkflowJob } from "@tailor-platform/sdk";
2
2
 
3
- export const { approval } = defineWaitPoints((define) => ({
3
+ export const { approval } = createWaitPoints((define) => ({
4
4
  /** Approval for order processing */
5
5
  approval: define<{ message: string; orderId: string }, { approved: boolean }>(),
6
6
  }));
@@ -10,18 +10,24 @@ import workflow, {
10
10
  describe("order fulfillment workflow", () => {
11
11
  describe("individual job tests with .body()", () => {
12
12
  test("validateOrder accepts valid order", () => {
13
- const result = validateOrder.body({ orderId: "order-1", amount: 100 }, { env: {} });
13
+ const result = validateOrder.body(
14
+ { orderId: "order-1", amount: 100 },
15
+ { env: {}, invoker: null },
16
+ );
14
17
  expect(result).toEqual({ valid: true, orderId: "order-1" });
15
18
  });
16
19
 
17
20
  test("validateOrder rejects zero amount", () => {
18
- expect(() => validateOrder.body({ orderId: "order-1", amount: 0 }, { env: {} })).toThrow(
19
- "Order amount must be positive",
20
- );
21
+ expect(() =>
22
+ validateOrder.body({ orderId: "order-1", amount: 0 }, { env: {}, invoker: null }),
23
+ ).toThrow("Order amount must be positive");
21
24
  });
22
25
 
23
26
  test("processPayment returns transaction", () => {
24
- const result = processPayment.body({ orderId: "order-1", amount: 100 }, { env: {} });
27
+ const result = processPayment.body(
28
+ { orderId: "order-1", amount: 100 },
29
+ { env: {}, invoker: null },
30
+ );
25
31
  expect(result).toEqual({
26
32
  transactionId: "txn-order-1",
27
33
  amount: 100,
@@ -32,7 +38,7 @@ describe("order fulfillment workflow", () => {
32
38
  test("sendConfirmation returns confirmation", () => {
33
39
  const result = sendConfirmation.body(
34
40
  { orderId: "order-1", transactionId: "txn-1" },
35
- { env: {} },
41
+ { env: {}, invoker: null },
36
42
  );
37
43
  expect(result).toEqual({
38
44
  orderId: "order-1",
@@ -42,34 +48,37 @@ describe("order fulfillment workflow", () => {
42
48
  });
43
49
  });
44
50
 
45
- describe("orchestration tests with mocked triggers", () => {
51
+ describe("orchestration tests with mocked starts", () => {
46
52
  test("fulfillOrder chains all jobs", async () => {
47
- using _validateSpy = vi.spyOn(validateOrder, "trigger").mockReturnValue({
53
+ using _validateSpy = vi.spyOn(validateOrder, "start").mockReturnValue({
48
54
  valid: true,
49
55
  orderId: "order-1",
50
56
  });
51
- using _paymentSpy = vi.spyOn(processPayment, "trigger").mockReturnValue({
57
+ using _paymentSpy = vi.spyOn(processPayment, "start").mockReturnValue({
52
58
  transactionId: "txn-order-1",
53
59
  amount: 100,
54
60
  status: "completed" as const,
55
61
  });
56
- using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockReturnValue({
62
+ using _confirmSpy = vi.spyOn(sendConfirmation, "start").mockReturnValue({
57
63
  orderId: "order-1",
58
64
  transactionId: "txn-order-1",
59
65
  confirmed: true,
60
66
  });
61
67
 
62
- const result = await fulfillOrder.body({ orderId: "order-1", amount: 100 }, { env: {} });
68
+ const result = await fulfillOrder.body(
69
+ { orderId: "order-1", amount: 100 },
70
+ { env: {}, invoker: null },
71
+ );
63
72
 
64
- expect(validateOrder.trigger).toHaveBeenCalledWith({
73
+ expect(validateOrder.start).toHaveBeenCalledWith({
65
74
  orderId: "order-1",
66
75
  amount: 100,
67
76
  });
68
- expect(processPayment.trigger).toHaveBeenCalledWith({
77
+ expect(processPayment.start).toHaveBeenCalledWith({
69
78
  orderId: "order-1",
70
79
  amount: 100,
71
80
  });
72
- expect(sendConfirmation.trigger).toHaveBeenCalledWith({
81
+ expect(sendConfirmation.start).toHaveBeenCalledWith({
73
82
  orderId: "order-1",
74
83
  transactionId: "txn-order-1",
75
84
  });
@@ -82,22 +91,25 @@ describe("order fulfillment workflow", () => {
82
91
  });
83
92
 
84
93
  test("workflow.mainJob.body() chains all jobs", async () => {
85
- using _validateSpy = vi.spyOn(validateOrder, "trigger").mockReturnValue({
94
+ using _validateSpy = vi.spyOn(validateOrder, "start").mockReturnValue({
86
95
  valid: true,
87
96
  orderId: "order-2",
88
97
  });
89
- using _paymentSpy = vi.spyOn(processPayment, "trigger").mockReturnValue({
98
+ using _paymentSpy = vi.spyOn(processPayment, "start").mockReturnValue({
90
99
  transactionId: "txn-order-2",
91
100
  amount: 200,
92
101
  status: "completed" as const,
93
102
  });
94
- using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockReturnValue({
103
+ using _confirmSpy = vi.spyOn(sendConfirmation, "start").mockReturnValue({
95
104
  orderId: "order-2",
96
105
  transactionId: "txn-order-2",
97
106
  confirmed: true,
98
107
  });
99
108
 
100
- const result = await workflow.mainJob.body({ orderId: "order-2", amount: 200 }, { env: {} });
109
+ const result = await workflow.mainJob.body(
110
+ { orderId: "order-2", amount: 200 },
111
+ { env: {}, invoker: null },
112
+ );
101
113
 
102
114
  expect(result).toEqual({
103
115
  orderId: "order-2",
@@ -35,7 +35,7 @@ export const sendConfirmation = createWorkflowJob({
35
35
  export const fulfillOrder = createWorkflowJob({
36
36
  name: "fulfill-order",
37
37
  body: (input: { orderId: string; amount: number }) => {
38
- const validation = validateOrder.trigger({
38
+ const validation = validateOrder.start({
39
39
  orderId: input.orderId,
40
40
  amount: input.amount,
41
41
  });
@@ -44,12 +44,12 @@ export const fulfillOrder = createWorkflowJob({
44
44
  throw new Error("Order validation failed");
45
45
  }
46
46
 
47
- const payment = processPayment.trigger({
47
+ const payment = processPayment.start({
48
48
  orderId: input.orderId,
49
49
  amount: input.amount,
50
50
  });
51
51
 
52
- const confirmation = sendConfirmation.trigger({
52
+ const confirmation = sendConfirmation.start({
53
53
  orderId: input.orderId,
54
54
  transactionId: payment.transactionId,
55
55
  });
@@ -1,9 +1,9 @@
1
1
  // This file is auto-generated by @tailor-platform/sdk
2
2
  // Do not edit this file manually
3
- // Regenerated automatically when running 'tailor-sdk deploy' or 'tailor-sdk generate'
3
+ // Regenerated automatically when running 'tailor deploy' or 'tailor generate'
4
4
 
5
5
  declare module "@tailor-platform/sdk" {
6
- interface AttributeMap {
6
+ interface Attributes {
7
7
  role: string;
8
8
  }
9
9
  interface AttributeList {
@@ -14,6 +14,8 @@ declare module "@tailor-platform/sdk" {
14
14
  admin: true;
15
15
  }
16
16
  interface IdpNameRegistry {}
17
+ interface ConnectionNameRegistry {}
18
+ interface AIGatewayNameRegistry {}
17
19
  }
18
20
 
19
21
  export {};