@awsless/awsless 0.0.217 → 0.0.219

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 (2) hide show
  1. package/dist/bin.js +82 -13
  2. package/package.json +8 -8
package/dist/bin.js CHANGED
@@ -2512,11 +2512,10 @@ var functionFeature = defineFeature({
2512
2512
  const resource2 = new TypeObject(2);
2513
2513
  const mock = new TypeObject(2);
2514
2514
  const mockResponse = new TypeObject(2);
2515
- for (const [name, fileOrProps] of Object.entries(stack.functions || {})) {
2515
+ for (const [name, props] of Object.entries(stack.functions || {})) {
2516
2516
  const varName = camelCase3(`${stack.name}-${name}`);
2517
2517
  const funcName = formatLocalResourceName(ctx.appConfig.name, stack.name, "function", name);
2518
- const file = typeof fileOrProps === "string" ? fileOrProps : fileOrProps.file;
2519
- const relFile = relative(directories.types, file);
2518
+ const relFile = relative(directories.types, props.file);
2520
2519
  types2.addImport(varName, relFile);
2521
2520
  resource2.addType(name, `Invoke<'${funcName}', typeof ${varName}>`);
2522
2521
  mock.addType(name, `MockBuilder<typeof ${varName}>`);
@@ -4029,6 +4028,75 @@ var restFeature = defineFeature({
4029
4028
  }
4030
4029
  });
4031
4030
 
4031
+ // src/feature/task/index.ts
4032
+ import { camelCase as camelCase6 } from "change-case";
4033
+ import { relative as relative4 } from "path";
4034
+ import { Node as Node19, aws as aws19 } from "@awsless/formation";
4035
+ var typeGenCode7 = `
4036
+ import { InvokeOptions } from '@awsless/lambda'
4037
+ import type { Mock } from 'vitest'
4038
+
4039
+ type Func = (...args: any[]) => any
4040
+
4041
+ type Invoke<Name extends string, F extends Func> = {
4042
+ readonly name: Name
4043
+ (payload: Parameters<F>[0], options?: Omit<InvokeOptions, 'name' | 'payload' | 'type'>): Promise<void>
4044
+ }
4045
+
4046
+ type MockHandle<F extends Func> = (payload: Parameters<F>[0]) => void | Promise<void> | Promise<Promise<void>>
4047
+ type MockBuilder<F extends Func> = (handle?: MockHandle<F>) => void
4048
+ type MockObject<F extends Func> = Mock<Parameters<F>, ReturnType<F>>
4049
+ `;
4050
+ var taskFeature = defineFeature({
4051
+ name: "task",
4052
+ async onTypeGen(ctx) {
4053
+ const types2 = new TypeFile("@awsless/awsless");
4054
+ const resources = new TypeObject(1);
4055
+ const mocks = new TypeObject(1);
4056
+ const mockResponses = new TypeObject(1);
4057
+ for (const stack of ctx.stackConfigs) {
4058
+ const resource2 = new TypeObject(2);
4059
+ const mock = new TypeObject(2);
4060
+ const mockResponse = new TypeObject(2);
4061
+ for (const [name, props] of Object.entries(stack.tasks || {})) {
4062
+ const varName = camelCase6(`${stack.name}-${name}`);
4063
+ const funcName = formatLocalResourceName(ctx.appConfig.name, stack.name, "task", name);
4064
+ const relFile = relative4(directories.types, props.consumer.file);
4065
+ types2.addImport(varName, relFile);
4066
+ resource2.addType(name, `Invoke<'${funcName}', typeof ${varName}>`);
4067
+ mock.addType(name, `MockBuilder<typeof ${varName}>`);
4068
+ mockResponse.addType(name, `MockObject<typeof ${varName}>`);
4069
+ }
4070
+ mocks.addType(stack.name, mock);
4071
+ resources.addType(stack.name, resource2);
4072
+ mockResponses.addType(stack.name, mockResponse);
4073
+ }
4074
+ types2.addCode(typeGenCode7);
4075
+ types2.addInterface("TaskResources", resources);
4076
+ types2.addInterface("TaskMock", mocks);
4077
+ types2.addInterface("TaskMockResponse", mockResponses);
4078
+ await ctx.write("task.d.ts", types2, true);
4079
+ },
4080
+ onStack(ctx) {
4081
+ for (const [id, props] of Object.entries(ctx.stackConfig.tasks ?? {})) {
4082
+ const group = new Node19(ctx.stack, "task", id);
4083
+ const { lambda, policy } = createLambdaFunction(group, ctx, "task", id, props.consumer);
4084
+ const invokeConfig = new aws19.lambda.EventInvokeConfig(group, "config", {
4085
+ functionArn: lambda.arn,
4086
+ retryAttempts: props.retryAttempts,
4087
+ onFailure: getGlobalOnFailure(ctx)
4088
+ });
4089
+ invokeConfig.dependsOn(policy);
4090
+ if (hasOnFailure(ctx.stackConfigs)) {
4091
+ policy.addStatement({
4092
+ actions: ["sqs:SendMessage", "sqs:GetQueueUrl"],
4093
+ resources: [getGlobalOnFailure(ctx)]
4094
+ });
4095
+ }
4096
+ }
4097
+ }
4098
+ });
4099
+
4032
4100
  // src/feature/index.ts
4033
4101
  var features = [
4034
4102
  // 1
@@ -4047,9 +4115,10 @@ var features = [
4047
4115
  topicFeature,
4048
4116
  queueFeature,
4049
4117
  storeFeature,
4118
+ cacheFeature,
4119
+ taskFeature,
4050
4120
  testFeature,
4051
4121
  cronFeature,
4052
- cacheFeature,
4053
4122
  httpFeature,
4054
4123
  restFeature,
4055
4124
  siteFeature
@@ -4367,20 +4436,20 @@ var config = (program2) => {
4367
4436
  import { confirm as confirm3 } from "@clack/prompts";
4368
4437
 
4369
4438
  // src/util/workspace.ts
4370
- import { WorkSpace, aws as aws19, local } from "@awsless/formation";
4439
+ import { WorkSpace, aws as aws20, local } from "@awsless/formation";
4371
4440
  import { minutes as minutes4 } from "@awsless/duration";
4372
4441
  import { dirname as dirname8, join as join9 } from "path";
4373
4442
  import { mkdir as mkdir2, readFile as readFile6, rm, writeFile as writeFile2 } from "fs/promises";
4374
4443
  var createWorkSpace = (props) => {
4375
- const lockProvider = new aws19.dynamodb.LockProvider({
4444
+ const lockProvider = new aws20.dynamodb.LockProvider({
4376
4445
  ...props,
4377
4446
  tableName: "awsless-locks"
4378
4447
  });
4379
- const stateProvider = new aws19.s3.StateProvider({
4448
+ const stateProvider = new aws20.s3.StateProvider({
4380
4449
  ...props,
4381
4450
  bucket: "awsless-state"
4382
4451
  });
4383
- const cloudProviders = aws19.createCloudProviders({
4452
+ const cloudProviders = aws20.createCloudProviders({
4384
4453
  ...props,
4385
4454
  timeout: minutes4(60)
4386
4455
  });
@@ -4756,7 +4825,7 @@ var deploy = (program2) => {
4756
4825
  };
4757
4826
 
4758
4827
  // src/cli/command/diff.ts
4759
- import { WorkSpace as WorkSpace2, aws as aws20 } from "@awsless/formation";
4828
+ import { WorkSpace as WorkSpace2, aws as aws21 } from "@awsless/formation";
4760
4829
  import chalk7 from "chalk";
4761
4830
  var diff = (program2) => {
4762
4831
  program2.command("diff").description("Diff your app with AWS").action(async (filters) => {
@@ -4768,12 +4837,12 @@ var diff = (program2) => {
4768
4837
  const { app, builders } = createApp({ appConfig, stackConfigs, accountId }, filters);
4769
4838
  await buildAssets(builders);
4770
4839
  const workspace = new WorkSpace2({
4771
- stateProvider: new aws20.dynamodb.DynamoDBStateProvider({
4840
+ stateProvider: new aws21.dynamodb.DynamoDBStateProvider({
4772
4841
  credentials,
4773
4842
  region,
4774
4843
  tableName: "awsless-state"
4775
4844
  }),
4776
- cloudProviders: aws20.createCloudProviders({
4845
+ cloudProviders: aws21.createCloudProviders({
4777
4846
  credentials,
4778
4847
  region: appConfig.region
4779
4848
  })
@@ -4829,7 +4898,7 @@ import { log as log9 } from "@clack/prompts";
4829
4898
 
4830
4899
  // src/type-gen/generate.ts
4831
4900
  import { mkdir as mkdir4, writeFile as writeFile4 } from "fs/promises";
4832
- import { dirname as dirname9, join as join11, relative as relative4 } from "path";
4901
+ import { dirname as dirname9, join as join11, relative as relative5 } from "path";
4833
4902
  var generateTypes = async (props) => {
4834
4903
  const files = [];
4835
4904
  await Promise.all(
@@ -4841,7 +4910,7 @@ var generateTypes = async (props) => {
4841
4910
  const path = join11(directories.types, file);
4842
4911
  if (code) {
4843
4912
  if (include) {
4844
- files.push(relative4(directories.root, path));
4913
+ files.push(relative5(directories.root, path));
4845
4914
  }
4846
4915
  await mkdir4(dirname9(path), { recursive: true });
4847
4916
  await writeFile4(path, code);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awsless/awsless",
3
- "version": "0.0.217",
3
+ "version": "0.0.219",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -29,14 +29,14 @@
29
29
  },
30
30
  "peerDependencies": {
31
31
  "@awsless/lambda": "^0.0.18",
32
- "@awsless/redis": "^0.0.12",
33
32
  "@awsless/open-search": "^0.0.12",
33
+ "@awsless/redis": "^0.0.12",
34
34
  "@awsless/s3": "^0.0.10",
35
35
  "@awsless/sns": "^0.0.7",
36
- "@awsless/sqs": "^0.0.7",
36
+ "@awsless/validate": "^0.0.13",
37
37
  "@awsless/ssm": "^0.0.7",
38
- "@awsless/weak-cache": "^0.0.1",
39
- "@awsless/validate": "^0.0.13"
38
+ "@awsless/sqs": "^0.0.7",
39
+ "@awsless/weak-cache": "^0.0.1"
40
40
  },
41
41
  "dependencies": {
42
42
  "@aws-appsync/utils": "^1.5.0",
@@ -97,11 +97,11 @@
97
97
  "wrap-ansi": "^8.1.0",
98
98
  "zod": "^3.21.4",
99
99
  "zod-to-json-schema": "^3.22.3",
100
- "@awsless/formation": "^0.0.21",
101
- "@awsless/graphql": "^0.0.9",
102
100
  "@awsless/duration": "^0.0.1",
103
- "@awsless/validate": "^0.0.13",
101
+ "@awsless/formation": "^0.0.21",
104
102
  "@awsless/size": "^0.0.1",
103
+ "@awsless/validate": "^0.0.13",
104
+ "@awsless/graphql": "^0.0.9",
105
105
  "@awsless/code": "^0.0.10"
106
106
  },
107
107
  "scripts": {