@awsless/awsless 0.0.602 → 0.0.604

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.
package/dist/bin.js CHANGED
@@ -185,8 +185,8 @@ import promiseLimit from "p-limit";
185
185
  import { z } from "zod";
186
186
  import "@aws-sdk/signature-v4-crt";
187
187
  var ImportKeys = createCustomResourceClass("cloudfront-kvs", "import-keys");
188
- var createCloudFrontKvsProvider = ({ profile, region }) => {
189
- const client = new CloudFrontKeyValueStoreClient({ profile, region });
188
+ var createCloudFrontKvsProvider = ({ credentials, region }) => {
189
+ const client = new CloudFrontKeyValueStoreClient({ credentials, region });
190
190
  const queues = {};
191
191
  const getConcurrencyQueue = (arn) => {
192
192
  if (!queues[arn]) {
@@ -340,8 +340,8 @@ var Invalidation = createCustomResourceClass2(
340
340
  "cloudfront",
341
341
  "invalidation"
342
342
  );
343
- var createCloudFrontProvider = ({ profile, region }) => {
344
- const cloudFront = new CloudFrontClient({ profile, region });
343
+ var createCloudFrontProvider = ({ credentials, region }) => {
344
+ const cloudFront = new CloudFrontClient({ credentials, region });
345
345
  return createCustomProvider2("cloudfront", {
346
346
  invalidation: {
347
347
  async updateResource(props) {
@@ -413,8 +413,8 @@ import { createCustomProvider as createCustomProvider4, createCustomResourceClas
413
413
  import { resolveNs } from "node:dns/promises";
414
414
  import { z as z4 } from "zod";
415
415
  var NsCheck = createCustomResourceClass4("nameservers", "check");
416
- var createNameServersProvider = ({ profile, region }) => {
417
- const client = new Route53Client({ profile, region });
416
+ var createNameServersProvider = ({ credentials, region }) => {
417
+ const client = new Route53Client({ credentials, region });
418
418
  return createCustomProvider4("nameservers", {
419
419
  check: {
420
420
  async createResource(props) {
@@ -532,8 +532,8 @@ var findRootDir = async (path, configFiles, level = 5) => {
532
532
  };
533
533
  var fileExist = async (file) => {
534
534
  try {
535
- const stat5 = await lstat(file);
536
- if (stat5.isFile()) {
535
+ const stat4 = await lstat(file);
536
+ if (stat4.isFile()) {
537
537
  return true;
538
538
  }
539
539
  } catch (error) {
@@ -561,6 +561,7 @@ var createWorkSpace = async (props) => {
561
561
  enableDebug();
562
562
  }
563
563
  await aws.install();
564
+ const cred = await props.credentials();
564
565
  const workspace = new WorkSpace({
565
566
  providers: [
566
567
  createLambdaProvider(props),
@@ -569,7 +570,10 @@ var createWorkSpace = async (props) => {
569
570
  createNameServersProvider(props),
570
571
  aws(
571
572
  {
572
- profile: props.profile,
573
+ accessKey: cred.accessKeyId,
574
+ secretKey: cred.secretAccessKey,
575
+ // token: cred.sessionToken,
576
+ // profile: props.profile,
573
577
  region: props.region,
574
578
  maxRetries: 5
575
579
  }
@@ -579,7 +583,10 @@ var createWorkSpace = async (props) => {
579
583
  ),
580
584
  aws(
581
585
  {
582
- profile: props.profile,
586
+ accessKey: cred.accessKeyId,
587
+ secretKey: cred.secretAccessKey,
588
+ // token: cred.sessionToken,
589
+ // profile: props.profile,
583
590
  region: "us-east-1",
584
591
  maxRetries: 5
585
592
  },
@@ -2144,8 +2151,8 @@ var stats = {
2144
2151
  };
2145
2152
  var WhereSchema = z40.union([
2146
2153
  z40.string().regex(/(count|avg|sum|min|max) (>|>=|<|<=) (\d)/, "Invalid where query").transform((where) => {
2147
- const [stat5, op, value] = where.split(" ");
2148
- return { stat: stat5, op, value: parseFloat(value) };
2154
+ const [stat4, op, value] = where.split(" ");
2155
+ return { stat: stat4, op, value: parseFloat(value) };
2149
2156
  }),
2150
2157
  z40.object({
2151
2158
  stat: z40.enum(["count", "avg", "sum", "min", "max"]),
@@ -3204,14 +3211,14 @@ var createHashFromFile = (file) => {
3204
3211
  var listAllFiles = async (list3) => {
3205
3212
  const files = [];
3206
3213
  for (const entry of list3) {
3207
- const stat5 = await lstat2(entry);
3208
- if (stat5.isDirectory()) {
3214
+ const stat4 = await lstat2(entry);
3215
+ if (stat4.isDirectory()) {
3209
3216
  const dirents = await readdir(entry, {
3210
3217
  recursive: true,
3211
3218
  withFileTypes: true
3212
3219
  });
3213
3220
  files.push(...dirents.filter((d) => d.isFile()).map((file) => join7(file.path, file.name)));
3214
- } else if (stat5.isFile()) {
3221
+ } else if (stat4.isFile()) {
3215
3222
  files.push(entry);
3216
3223
  }
3217
3224
  }
@@ -7697,15 +7704,14 @@ var playErrorSound = () => {
7697
7704
  // src/cli/ui/app.ts
7698
7705
  import { log as log3 } from "@awsless/clui";
7699
7706
  var logApp = (app, opt) => {
7700
- const data = {
7707
+ log3.list("App Config", {
7701
7708
  App: app.name,
7702
7709
  Region: app.region,
7703
- Profile: app.profile
7704
- };
7705
- if (opt.stage) {
7706
- data.Stage = color.warning(opt.stage);
7707
- }
7708
- log3.list("App Config", data);
7710
+ Profile: app.profile,
7711
+ ...opt.stage ? {
7712
+ Stage: color.warning(opt.stage)
7713
+ } : {}
7714
+ });
7709
7715
  };
7710
7716
 
7711
7717
  // src/cli/ui/error/error.ts
@@ -7751,12 +7757,12 @@ var formatOperation = (operation) => {
7751
7757
  case "import":
7752
7758
  return color.success.bold.inverse(value);
7753
7759
  case "update":
7760
+ case "replace":
7754
7761
  return color.warning.bold.inverse(value);
7755
7762
  case "delete":
7756
7763
  return color.error.bold.inverse(value);
7757
- case "heal":
7758
- return color.warning.bold.inverse(value);
7759
7764
  case "get":
7765
+ case "resolve":
7760
7766
  return color.info.bold.inverse(value);
7761
7767
  }
7762
7768
  return color.primary.bold.inverse(value);
@@ -8413,7 +8419,6 @@ var set = (program2) => {
8413
8419
  const { workspace } = await createWorkSpace({
8414
8420
  credentials,
8415
8421
  accountId,
8416
- profile,
8417
8422
  region
8418
8423
  });
8419
8424
  const params = new SsmStore({
@@ -8631,7 +8636,6 @@ var del2 = (program2) => {
8631
8636
  const { workspace, state: state2 } = await createWorkSpace({
8632
8637
  credentials,
8633
8638
  accountId,
8634
- profile,
8635
8639
  region
8636
8640
  });
8637
8641
  await task("Deleting the stacks to AWS", async (update2) => {
@@ -8653,80 +8657,17 @@ import wildstring4 from "wildstring";
8653
8657
 
8654
8658
  // src/cli/ui/complex/run-tests.ts
8655
8659
  import { log as log16 } from "@awsless/clui";
8656
- import { mkdir as mkdir4, readFile as readFile6, writeFile as writeFile3 } from "fs/promises";
8657
- import { join as join19 } from "path";
8660
+ import { mkdir as mkdir4, readFile as readFile5, writeFile as writeFile3 } from "fs/promises";
8661
+ import { join as join18 } from "path";
8658
8662
  import wildstring3 from "wildstring";
8659
-
8660
- // src/build/__fingerprint.ts
8661
- import { createHash as createHash6 } from "crypto";
8662
- import { readdir as readdir4, readFile as readFile5, stat as stat4 } from "fs/promises";
8663
- import { basename as basename4, dirname as dirname9, extname as extname4, join as join17 } from "path";
8664
- import parseStaticImports from "parse-static-imports";
8665
- var extensions = ["js", "mjs", "jsx", "ts", "mts", "tsx"];
8666
- var generateFileHashes = async (file, hashes) => {
8667
- if (hashes.has(file)) {
8668
- return;
8669
- }
8670
- const code = await readModuleFile(file);
8671
- const deps = await findDependencies(file, code);
8672
- const hash = createHash6("sha1").update(code).digest();
8673
- hashes.set(file, hash);
8674
- for (const dep of deps) {
8675
- if (dep.startsWith("/")) {
8676
- await generateFileHashes(dep, hashes);
8677
- }
8678
- }
8679
- };
8680
- var fingerprintFromDirectory = async (dir) => {
8681
- const hashes = /* @__PURE__ */ new Map();
8682
- const files = await readdir4(dir, { recursive: true });
8683
- for (const file of files) {
8684
- if (extensions.includes(extname4(file).substring(1)) && file.at(0) !== "_") {
8685
- await generateFileHashes(join17(dir, file), hashes);
8686
- }
8687
- }
8688
- const merge = Buffer.concat(Array.from(hashes.values()).sort());
8689
- return createHash6("sha1").update(merge).digest("hex");
8690
- };
8691
- var readModuleFile = (file) => {
8692
- if (file.endsWith(".js")) {
8693
- return readFiles([file, file.substring(0, file.length - 3) + ".ts"]);
8694
- }
8695
- if (!basename4(file).includes(".")) {
8696
- return readFiles([
8697
- file,
8698
- ...extensions.map((exp) => `${file}.${exp}`),
8699
- ...extensions.map((exp) => join17(file, `/index.${exp}`))
8700
- ]);
8701
- }
8702
- return readFile5(file, "utf8");
8703
- };
8704
- var readFiles = async (files) => {
8705
- for (const file of files) {
8706
- try {
8707
- const s = await stat4(file);
8708
- if (s.isFile()) {
8709
- return readFile5(file, "utf8");
8710
- }
8711
- } catch (_) {
8712
- continue;
8713
- }
8714
- }
8715
- throw new Error(`No such file: ${files.join(", ")}`);
8716
- };
8717
- var findDependencies = async (file, code) => {
8718
- const imports = await parseStaticImports(code);
8719
- return imports.map((entry) => entry.moduleName).filter(Boolean).map((value) => value?.startsWith(".") ? join17(dirname9(file), value) : value);
8720
- };
8721
-
8722
- // src/cli/ui/complex/run-tests.ts
8723
8663
  import { parse as parse4, stringify } from "@awsless/json";
8664
+ import { generateFolderHash, loadWorkspace as loadWorkspace2 } from "@awsless/ts-file-cache";
8724
8665
 
8725
8666
  // src/test/start.ts
8726
8667
  import commonjs from "@rollup/plugin-commonjs";
8727
8668
  import json from "@rollup/plugin-json";
8728
8669
  import nodeResolve from "@rollup/plugin-node-resolve";
8729
- import { dirname as dirname10, join as join18 } from "path";
8670
+ import { dirname as dirname9, join as join17 } from "path";
8730
8671
  import { swc } from "rollup-plugin-swc3";
8731
8672
  import { fileURLToPath as fileURLToPath4 } from "url";
8732
8673
  import { configDefaults } from "vitest/config";
@@ -8734,7 +8675,7 @@ import { startVitest } from "vitest/node";
8734
8675
  var NullReporter = class {
8735
8676
  };
8736
8677
  var startTest = async (props) => {
8737
- const __dirname4 = dirname10(fileURLToPath4(import.meta.url));
8678
+ const __dirname4 = dirname9(fileURLToPath4(import.meta.url));
8738
8679
  const startTime = process.hrtime.bigint();
8739
8680
  process.noDeprecation = true;
8740
8681
  const vitest = await startVitest(
@@ -8757,7 +8698,7 @@ var startTest = async (props) => {
8757
8698
  // },
8758
8699
  setupFiles: [
8759
8700
  //
8760
- join18(__dirname4, "test-global-setup.js")
8701
+ join17(__dirname4, "test-global-setup.js")
8761
8702
  ]
8762
8703
  // globalSetup: [
8763
8704
  // //
@@ -8948,14 +8889,14 @@ var logTestErrors = (event) => {
8948
8889
  }
8949
8890
  }
8950
8891
  };
8951
- var runTest = async (stack, dir, filters, opts) => {
8892
+ var runTest = async (stack, dir, filters, workspace, opts) => {
8952
8893
  await mkdir4(directories.test, { recursive: true });
8953
- const file = join19(directories.test, `${stack}.json`);
8954
- const fingerprint = await fingerprintFromDirectory(dir);
8894
+ const file = join18(directories.test, `${stack}.json`);
8895
+ const fingerprint = await generateFolderHash(workspace, dir);
8955
8896
  if (!process.env.NO_CACHE) {
8956
8897
  const exists = await fileExist(file);
8957
8898
  if (exists) {
8958
- const raw = await readFile6(file, { encoding: "utf8" });
8899
+ const raw = await readFile5(file, { encoding: "utf8" });
8959
8900
  const data = parse4(raw);
8960
8901
  if (data.fingerprint === fingerprint) {
8961
8902
  log16.step(
@@ -9008,6 +8949,7 @@ var runTest = async (stack, dir, filters, opts) => {
9008
8949
  return result.errors.length === 0 && result.failed === 0;
9009
8950
  };
9010
8951
  var runTests = async (tests, stackFilters = [], testFilters = [], opts) => {
8952
+ const workspace = await loadWorkspace2(directories.root);
9011
8953
  for (const test2 of tests) {
9012
8954
  if (stackFilters && stackFilters.length > 0) {
9013
8955
  const found = stackFilters.find((f) => wildstring3.match(f, test2.stackName));
@@ -9016,7 +8958,7 @@ var runTests = async (tests, stackFilters = [], testFilters = [], opts) => {
9016
8958
  }
9017
8959
  }
9018
8960
  for (const path of test2.paths) {
9019
- const result = await runTest(test2.name, path, testFilters, opts);
8961
+ const result = await runTest(test2.name, path, testFilters, workspace, opts);
9020
8962
  if (!result) {
9021
8963
  return false;
9022
8964
  }
@@ -9095,7 +9037,6 @@ var deploy = (program2) => {
9095
9037
  const { workspace, state: state2 } = await createWorkSpace({
9096
9038
  credentials,
9097
9039
  accountId,
9098
- profile,
9099
9040
  region
9100
9041
  });
9101
9042
  await log18.task({
@@ -9151,7 +9092,6 @@ var create = (program2) => {
9151
9092
  const { workspace } = await createWorkSpace({
9152
9093
  credentials,
9153
9094
  accountId,
9154
- profile,
9155
9095
  region
9156
9096
  });
9157
9097
  await workspace.hydrate(app);
@@ -9292,7 +9232,6 @@ var update = (program2) => {
9292
9232
  const { workspace } = await createWorkSpace({
9293
9233
  credentials,
9294
9234
  accountId,
9295
- profile,
9296
9235
  region
9297
9236
  });
9298
9237
  await workspace.hydrate(app);
@@ -9469,7 +9408,6 @@ var del3 = (program2) => {
9469
9408
  const { workspace } = await createWorkSpace({
9470
9409
  credentials,
9471
9410
  accountId,
9472
- profile,
9473
9411
  region
9474
9412
  });
9475
9413
  await workspace.hydrate(app);
@@ -9553,7 +9491,6 @@ var bind = (program2) => {
9553
9491
  const { workspace } = await createWorkSpace({
9554
9492
  credentials,
9555
9493
  accountId,
9556
- profile,
9557
9494
  region
9558
9495
  });
9559
9496
  await workspace.hydrate(app);
@@ -9635,7 +9572,7 @@ import { log as log23 } from "@awsless/clui";
9635
9572
 
9636
9573
  // src/type-gen/generate.ts
9637
9574
  import { mkdir as mkdir5, writeFile as writeFile4 } from "fs/promises";
9638
- import { dirname as dirname11, join as join20, relative as relative7 } from "path";
9575
+ import { dirname as dirname10, join as join19, relative as relative7 } from "path";
9639
9576
  var generateTypes = async (props) => {
9640
9577
  const files = [];
9641
9578
  await Promise.all(
@@ -9644,12 +9581,12 @@ var generateTypes = async (props) => {
9644
9581
  ...props,
9645
9582
  async write(file, data, include = false) {
9646
9583
  const code = data?.toString("utf8");
9647
- const path = join20(directories.types, file);
9584
+ const path = join19(directories.types, file);
9648
9585
  if (code) {
9649
9586
  if (include) {
9650
9587
  files.push(relative7(directories.root, path));
9651
9588
  }
9652
- await mkdir5(dirname11(path), { recursive: true });
9589
+ await mkdir5(dirname10(path), { recursive: true });
9653
9590
  await writeFile4(path, code);
9654
9591
  }
9655
9592
  }
@@ -9658,7 +9595,7 @@ var generateTypes = async (props) => {
9658
9595
  );
9659
9596
  if (files.length) {
9660
9597
  const code = files.map((file) => `/// <reference path='${file}' />`).join("\n");
9661
- await writeFile4(join20(directories.root, `awsless.d.ts`), code);
9598
+ await writeFile4(join19(directories.root, `awsless.d.ts`), code);
9662
9599
  }
9663
9600
  };
9664
9601
 
@@ -9682,7 +9619,9 @@ var dev = (program2) => {
9682
9619
  logError(error);
9683
9620
  }
9684
9621
  );
9685
- await new Promise(() => {
9622
+ await new Promise((resolve) => {
9623
+ process.once("exit", resolve);
9624
+ process.once("SIGINT", resolve);
9686
9625
  });
9687
9626
  });
9688
9627
  });
@@ -9704,7 +9643,6 @@ var resources = (program2) => {
9704
9643
  const { workspace } = await createWorkSpace({
9705
9644
  credentials,
9706
9645
  accountId,
9707
- profile,
9708
9646
  region
9709
9647
  });
9710
9648
  const stacks = await workspace.status(app);
@@ -9819,7 +9757,7 @@ var pull = (program2) => {
9819
9757
  const credentials = await getCredentials(profile);
9820
9758
  const accountId = await getAccountId(credentials, region);
9821
9759
  const { app } = createApp({ appConfig, stackConfigs, accountId });
9822
- const { state: state2 } = await createWorkSpace({ credentials, region, accountId, profile });
9760
+ const { state: state2 } = await createWorkSpace({ credentials, region, accountId });
9823
9761
  await pullRemoteState(app, state2);
9824
9762
  return "State pull was successful.";
9825
9763
  });
@@ -9836,7 +9774,7 @@ var push = (program2) => {
9836
9774
  const credentials = await getCredentials(appConfig.profile);
9837
9775
  const accountId = await getAccountId(credentials, region);
9838
9776
  const { app } = createApp({ appConfig, stackConfigs, accountId });
9839
- const { state: state2 } = await createWorkSpace({ credentials, region, accountId, profile });
9777
+ const { state: state2 } = await createWorkSpace({ credentials, region, accountId });
9840
9778
  const ok = await prompt12.confirm({
9841
9779
  message: "Pushing up the local state might corrupt your remote state. Are you sure?",
9842
9780
  initialValue: false
@@ -9860,7 +9798,7 @@ var unlock = (program2) => {
9860
9798
  const credentials = await getCredentials(profile);
9861
9799
  const accountId = await getAccountId(credentials, region);
9862
9800
  const { app } = createApp({ appConfig, stackConfigs, accountId });
9863
- const { lock } = await createWorkSpace({ credentials, region, accountId, profile });
9801
+ const { lock } = await createWorkSpace({ credentials, region, accountId });
9864
9802
  const isLocked = await lock.locked(app.urn);
9865
9803
  if (!isLocked) {
9866
9804
  return "No lock is exists.";
@@ -9932,7 +9870,6 @@ var list2 = (program2) => {
9932
9870
  const { workspace } = await createWorkSpace({
9933
9871
  credentials,
9934
9872
  accountId,
9935
- profile,
9936
9873
  region
9937
9874
  });
9938
9875
  await workspace.hydrate(app);
@@ -9969,7 +9906,6 @@ var deploy2 = (program2) => {
9969
9906
  const { workspace } = await createWorkSpace({
9970
9907
  credentials,
9971
9908
  accountId,
9972
- profile,
9973
9909
  region
9974
9910
  });
9975
9911
  await log26.task({
@@ -10025,7 +9961,6 @@ var logs = (program2) => {
10025
9961
  const { workspace } = await createWorkSpace({
10026
9962
  credentials,
10027
9963
  accountId,
10028
- profile,
10029
9964
  region
10030
9965
  });
10031
9966
  await workspace.hydrate(app);
@@ -10043,12 +9978,12 @@ var logs = (program2) => {
10043
9978
  credentials,
10044
9979
  region
10045
9980
  });
10046
- const abort = new AbortController();
9981
+ const controller = new AbortController();
10047
9982
  process.once("exit", () => {
10048
- abort.abort();
9983
+ controller.abort();
10049
9984
  });
10050
9985
  process.once("SIGINT", () => {
10051
- abort.abort();
9986
+ controller.abort();
10052
9987
  });
10053
9988
  const streams = await log27.task({
10054
9989
  initialMessage: "Connecting to the log stream...",
@@ -10060,7 +9995,7 @@ var logs = (program2) => {
10060
9995
  logGroupIdentifiers: arns
10061
9996
  });
10062
9997
  const response = await client.send(command, {
10063
- abortSignal: abort.signal
9998
+ abortSignal: controller.signal
10064
9999
  });
10065
10000
  if (!response.responseStream) {
10066
10001
  throw new Error("Failed to connect to the log stream.");
@@ -10200,7 +10135,6 @@ var clearCache = (program2) => {
10200
10135
  const { workspace } = await createWorkSpace({
10201
10136
  credentials,
10202
10137
  accountId,
10203
- profile,
10204
10138
  region
10205
10139
  });
10206
10140
  await workspace.hydrate(app);
@@ -10334,7 +10268,6 @@ var clearCache2 = (program2) => {
10334
10268
  const { workspace } = await createWorkSpace({
10335
10269
  credentials,
10336
10270
  accountId,
10337
- profile,
10338
10271
  region
10339
10272
  });
10340
10273
  await workspace.hydrate(app);
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awsless/awsless",
3
- "version": "0.0.602",
3
+ "version": "0.0.604",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -36,20 +36,20 @@
36
36
  "@awsless/big-float": "^0.1.5",
37
37
  "@awsless/cloudwatch": "^0.0.1",
38
38
  "@awsless/duration": "^0.0.4",
39
- "@awsless/clui": "^0.0.8",
40
- "@awsless/json": "^0.0.10",
41
39
  "@awsless/dynamodb": "^0.3.8",
40
+ "@awsless/json": "^0.0.10",
42
41
  "@awsless/iot": "^0.0.3",
43
42
  "@awsless/lambda": "^0.0.35",
44
43
  "@awsless/mqtt": "^0.0.2",
45
- "@awsless/s3": "^0.0.21",
46
44
  "@awsless/open-search": "^0.0.21",
47
- "@awsless/redis": "^0.0.14",
48
- "@awsless/sqs": "^0.0.16",
45
+ "@awsless/s3": "^0.0.21",
49
46
  "@awsless/sns": "^0.0.10",
47
+ "@awsless/sqs": "^0.0.16",
50
48
  "@awsless/validate": "^0.1.3",
51
49
  "@awsless/ssm": "^0.0.7",
52
- "@awsless/weak-cache": "^0.0.1"
50
+ "@awsless/clui": "^0.0.8",
51
+ "@awsless/weak-cache": "^0.0.1",
52
+ "@awsless/redis": "^0.0.14"
53
53
  },
54
54
  "dependencies": {
55
55
  "@arcanyx/cidr-slicer": "^0.3.0",
@@ -142,13 +142,13 @@
142
142
  "@awsless/big-float": "^0.1.5",
143
143
  "@awsless/cloudwatch": "^0.0.1",
144
144
  "@awsless/clui": "^0.0.8",
145
- "@awsless/duration": "^0.0.4",
146
- "@awsless/graphql": "^0.0.9",
147
145
  "@awsless/json": "^0.0.10",
146
+ "@awsless/scheduler": "^0.0.4",
148
147
  "@awsless/size": "^0.0.2",
149
- "@awsless/validate": "^0.1.3",
150
148
  "@awsless/ts-file-cache": "^0.0.12",
151
- "@awsless/scheduler": "^0.0.4"
149
+ "@awsless/validate": "^0.1.3",
150
+ "@awsless/duration": "^0.0.4",
151
+ "@awsless/graphql": "^0.0.9"
152
152
  },
153
153
  "devDependencies": {
154
154
  "@hono/node-server": "1.19.9",