@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.
- package/dist/bin.js +99 -74
- 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
|
|
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
|
|
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
|
-
|
|
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
|
|
3382
|
+
import { createHash as createHash4 } from "crypto";
|
|
3296
3383
|
var shortId = (ns) => {
|
|
3297
|
-
return
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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.
|
|
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
|
},
|