@awsless/awsless 0.0.173 → 0.0.175

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 +99 -74
  2. package/package.json +6 -6
package/dist/bin.js CHANGED
@@ -2479,7 +2479,7 @@ import { paramCase as paramCase5 } from "change-case";
2479
2479
  import { mergeTypeDefs } from "@graphql-tools/merge";
2480
2480
  import { generate } from "@awsless/graphql";
2481
2481
  import { buildSchema, print } from "graphql";
2482
- import { readFile as readFile4 } from "fs/promises";
2482
+ import { readFile as readFile5 } from "fs/promises";
2483
2483
  import { Asset as Asset2, Node as Node6, aws as aws6 } from "@awsless/formation";
2484
2484
 
2485
2485
  // src/feature/domain/util.ts
@@ -2500,6 +2500,74 @@ var formatFullDomainName = (config2, id, subDomain) => {
2500
2500
  return domain;
2501
2501
  };
2502
2502
 
2503
+ // src/build/fingerprint.ts
2504
+ import { createHash as createHash3 } from "crypto";
2505
+ import { readFile as readFile4, readdir as readdir2, stat as stat4 } from "fs/promises";
2506
+ import { basename as basename4, dirname as dirname6, extname as extname3, join as join7 } from "path";
2507
+ import parseStaticImports2 from "parse-static-imports";
2508
+ var extensions2 = ["js", "mjs", "jsx", "ts", "mts", "tsx"];
2509
+ var generateFileHashes2 = async (file, hashes) => {
2510
+ if (hashes.has(file)) {
2511
+ return;
2512
+ }
2513
+ const code = await readModuleFile2(file);
2514
+ const deps = await findDependencies2(file, code);
2515
+ const hash = createHash3("sha1").update(code).digest();
2516
+ hashes.set(file, hash);
2517
+ for (const dep of deps) {
2518
+ if (dep.startsWith("/")) {
2519
+ await generateFileHashes2(dep, hashes);
2520
+ }
2521
+ }
2522
+ };
2523
+ var fingerprintFromFile2 = async (file) => {
2524
+ const hashes = /* @__PURE__ */ new Map();
2525
+ await generateFileHashes2(file, hashes);
2526
+ const merge2 = Buffer.concat(Array.from(hashes.values()).sort());
2527
+ return createHash3("sha1").update(merge2).digest("hex");
2528
+ };
2529
+ var fingerprintFromDirectory = async (dir) => {
2530
+ const hashes = /* @__PURE__ */ new Map();
2531
+ const files = await readdir2(dir, { recursive: true });
2532
+ for (const file of files) {
2533
+ if (extensions2.includes(extname3(file).substring(1))) {
2534
+ await generateFileHashes2(join7(dir, file), hashes);
2535
+ }
2536
+ }
2537
+ const merge2 = Buffer.concat(Array.from(hashes.values()).sort());
2538
+ return createHash3("sha1").update(merge2).digest("hex");
2539
+ };
2540
+ var readModuleFile2 = (file) => {
2541
+ if (file.endsWith(".js")) {
2542
+ return readFiles2([file, file.substring(0, file.length - 3) + ".ts"]);
2543
+ }
2544
+ if (!basename4(file).includes(".")) {
2545
+ return readFiles2([
2546
+ file,
2547
+ ...extensions2.map((exp) => `${file}.${exp}`),
2548
+ ...extensions2.map((exp) => join7(file, `/index.${exp}`))
2549
+ ]);
2550
+ }
2551
+ return readFile4(file, "utf8");
2552
+ };
2553
+ var readFiles2 = async (files) => {
2554
+ for (const file of files) {
2555
+ try {
2556
+ const s = await stat4(file);
2557
+ if (s.isFile()) {
2558
+ return readFile4(file, "utf8");
2559
+ }
2560
+ } catch (_) {
2561
+ continue;
2562
+ }
2563
+ }
2564
+ throw new Error(`No such file: ${files.join(", ")}`);
2565
+ };
2566
+ var findDependencies2 = async (file, code) => {
2567
+ const imports = await parseStaticImports2(code);
2568
+ return imports.map((entry) => entry.moduleName).filter(Boolean).map((value) => value?.startsWith(".") ? join7(dirname6(file), value) : value);
2569
+ };
2570
+
2503
2571
  // src/feature/graphql/index.ts
2504
2572
  var defaultResolver = `
2505
2573
  export function request(ctx) {
@@ -2545,7 +2613,7 @@ var graphqlFeature = defineFeature({
2545
2613
  for (const [id, files] of apis) {
2546
2614
  const sources = await Promise.all(
2547
2615
  files.map((file) => {
2548
- return readFile4(file, "utf8");
2616
+ return readFile5(file, "utf8");
2549
2617
  })
2550
2618
  );
2551
2619
  if (sources.length) {
@@ -2609,8 +2677,28 @@ var graphqlFeature = defineFeature({
2609
2677
  }
2610
2678
  }
2611
2679
  });
2612
- ctx.base.export(`graphql-${id}-id`, api.id);
2613
2680
  group.add(api);
2681
+ ctx.base.export(`graphql-${id}-id`, api.id);
2682
+ if (props.resolver) {
2683
+ ctx.registerBuild("graphql-resolver", id, async (build3) => {
2684
+ const resolver = props.resolver;
2685
+ const version = await fingerprintFromFile2(resolver);
2686
+ return build3(version, async (write) => {
2687
+ const bundle = await bundleTypeScript({ file: resolver });
2688
+ const file = bundle.files[0];
2689
+ if (!file) {
2690
+ throw new FileError(resolver, `Failed to build a graphql resolver.`);
2691
+ }
2692
+ await write("resolver.js", file.code);
2693
+ if (file.map) {
2694
+ await write("resolver.map", file.map);
2695
+ }
2696
+ return {
2697
+ size: formatByteSize(file.code.byteLength)
2698
+ };
2699
+ });
2700
+ });
2701
+ }
2614
2702
  if (props.domain) {
2615
2703
  const domainName = formatFullDomainName(ctx.appConfig, props.domain, props.subDomain);
2616
2704
  const domainGroup = new Node6("domain", domainName);
@@ -2707,9 +2795,8 @@ var graphqlFeature = defineFeature({
2707
2795
  let code = Asset2.fromString(defaultResolver);
2708
2796
  if ("resolver" in props2 && props2.resolver) {
2709
2797
  code = Asset2.fromFile(props2.resolver);
2710
- }
2711
- if (defaultProps.resolver) {
2712
- code = Asset2.fromString(defaultProps.resolver);
2798
+ } else if (defaultProps.resolver) {
2799
+ code = Asset2.fromFile(getBuildPath("graphql-resolver", id, "resolver.js"));
2713
2800
  }
2714
2801
  const config2 = new aws6.appsync.FunctionConfiguration("config", {
2715
2802
  apiId: api.id,
@@ -3292,9 +3379,9 @@ import { camelCase as camelCase5 } from "change-case";
3292
3379
  import { relative as relative3 } from "path";
3293
3380
 
3294
3381
  // src/util/id.ts
3295
- import { createHash as createHash3 } from "crypto";
3382
+ import { createHash as createHash4 } from "crypto";
3296
3383
  var shortId = (ns) => {
3297
- return createHash3("md5").update(ns).digest("hex").substring(0, 10);
3384
+ return createHash4("md5").update(ns).digest("hex").substring(0, 10);
3298
3385
  };
3299
3386
 
3300
3387
  // src/feature/http/index.ts
@@ -3528,11 +3615,11 @@ var searchFeature = defineFeature({
3528
3615
  import { Asset as Asset3, Node as Node17, aws as aws17 } from "@awsless/formation";
3529
3616
  import { days as days3, seconds as seconds3 } from "@awsless/duration";
3530
3617
  import { glob as glob2 } from "glob";
3531
- import { join as join7 } from "path";
3618
+ import { join as join8 } from "path";
3532
3619
 
3533
3620
  // src/feature/site/util.ts
3534
3621
  import { lookup, contentType } from "mime-types";
3535
- import { extname as extname3 } from "path";
3622
+ import { extname as extname4 } from "path";
3536
3623
  var getCacheControl = (file) => {
3537
3624
  switch (lookup(file)) {
3538
3625
  case false:
@@ -3547,7 +3634,7 @@ var getCacheControl = (file) => {
3547
3634
  }
3548
3635
  };
3549
3636
  var getContentType = (file) => {
3550
- return contentType(extname3(file)) || "text/html; charset=utf-8";
3637
+ return contentType(extname4(file)) || "text/html; charset=utf-8";
3551
3638
  };
3552
3639
 
3553
3640
  // src/feature/site/index.ts
@@ -3622,7 +3709,7 @@ var siteFeature = defineFeature({
3622
3709
  const object = new aws17.s3.BucketObject(file, {
3623
3710
  bucket: bucket.name,
3624
3711
  key: file,
3625
- body: Asset3.fromFile(join7(props.static, file)),
3712
+ body: Asset3.fromFile(join8(props.static, file)),
3626
3713
  cacheControl: getCacheControl(file),
3627
3714
  contentType: getContentType(file)
3628
3715
  });
@@ -4097,68 +4184,6 @@ import { run } from "promise-dag";
4097
4184
  import { join as join9 } from "path";
4098
4185
  import { mkdir as mkdir2, readFile as readFile6, writeFile as writeFile2 } from "fs/promises";
4099
4186
 
4100
- // src/build/fingerprint.ts
4101
- import { createHash as createHash4 } from "crypto";
4102
- import { readFile as readFile5, readdir as readdir2, stat as stat4 } from "fs/promises";
4103
- import { basename as basename4, dirname as dirname6, extname as extname4, join as join8 } from "path";
4104
- import parseStaticImports2 from "parse-static-imports";
4105
- var extensions2 = ["js", "mjs", "jsx", "ts", "mts", "tsx"];
4106
- var generateFileHashes2 = async (file, hashes) => {
4107
- if (hashes.has(file)) {
4108
- return;
4109
- }
4110
- const code = await readModuleFile2(file);
4111
- const deps = await findDependencies2(file, code);
4112
- const hash = createHash4("sha1").update(code).digest();
4113
- hashes.set(file, hash);
4114
- for (const dep of deps) {
4115
- if (dep.startsWith("/")) {
4116
- await generateFileHashes2(dep, hashes);
4117
- }
4118
- }
4119
- };
4120
- var fingerprintFromDirectory = async (dir) => {
4121
- const hashes = /* @__PURE__ */ new Map();
4122
- const files = await readdir2(dir, { recursive: true });
4123
- for (const file of files) {
4124
- if (extensions2.includes(extname4(file).substring(1))) {
4125
- await generateFileHashes2(join8(dir, file), hashes);
4126
- }
4127
- }
4128
- const merge2 = Buffer.concat(Array.from(hashes.values()).sort());
4129
- return createHash4("sha1").update(merge2).digest("hex");
4130
- };
4131
- var readModuleFile2 = (file) => {
4132
- if (file.endsWith(".js")) {
4133
- return readFiles2([file, file.substring(0, file.length - 3) + ".ts"]);
4134
- }
4135
- if (!basename4(file).includes(".")) {
4136
- return readFiles2([
4137
- file,
4138
- ...extensions2.map((exp) => `${file}.${exp}`),
4139
- ...extensions2.map((exp) => join8(file, `/index.${exp}`))
4140
- ]);
4141
- }
4142
- return readFile5(file, "utf8");
4143
- };
4144
- var readFiles2 = async (files) => {
4145
- for (const file of files) {
4146
- try {
4147
- const s = await stat4(file);
4148
- if (s.isFile()) {
4149
- return readFile5(file, "utf8");
4150
- }
4151
- } catch (_) {
4152
- continue;
4153
- }
4154
- }
4155
- throw new Error(`No such file: ${files.join(", ")}`);
4156
- };
4157
- var findDependencies2 = async (file, code) => {
4158
- const imports = await parseStaticImports2(code);
4159
- return imports.map((entry) => entry.moduleName).filter(Boolean).map((value) => value?.startsWith(".") ? join8(dirname6(file), value) : value);
4160
- };
4161
-
4162
4187
  // src/test/reporter.ts
4163
4188
  import { getSuites, getTests } from "@vitest/runner/utils";
4164
4189
  var CustomReporter = class {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awsless/awsless",
3
- "version": "0.0.173",
3
+ "version": "0.0.175",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -30,12 +30,12 @@
30
30
  "peerDependencies": {
31
31
  "@awsless/redis": "^0.0.12",
32
32
  "@awsless/s3": "^0.0.10",
33
- "@awsless/sns": "^0.0.7",
34
33
  "@awsless/lambda": "^0.0.18",
34
+ "@awsless/validate": "^0.0.13",
35
35
  "@awsless/ssm": "^0.0.7",
36
+ "@awsless/sns": "^0.0.7",
36
37
  "@awsless/sqs": "^0.0.7",
37
- "@awsless/weak-cache": "^0.0.1",
38
- "@awsless/validate": "^0.0.13"
38
+ "@awsless/weak-cache": "^0.0.1"
39
39
  },
40
40
  "dependencies": {
41
41
  "@aws-appsync/utils": "^1.5.0",
@@ -96,10 +96,10 @@
96
96
  "wrap-ansi": "^8.1.0",
97
97
  "zod": "^3.21.4",
98
98
  "zod-to-json-schema": "^3.22.3",
99
- "@awsless/duration": "^0.0.1",
100
99
  "@awsless/graphql": "^0.0.9",
101
- "@awsless/formation": "^0.0.4",
102
100
  "@awsless/size": "^0.0.1",
101
+ "@awsless/duration": "^0.0.1",
102
+ "@awsless/formation": "^0.0.5",
103
103
  "@awsless/validate": "^0.0.13",
104
104
  "@awsless/code": "^0.0.10"
105
105
  },