construct-hub 0.4.430 → 0.4.432

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 (47) hide show
  1. package/.jsii +9 -9
  2. package/docs/operator-runbook.md +96 -0
  3. package/lib/backend/orchestration/index.d.ts +5 -1
  4. package/lib/backend/orchestration/index.js +9 -2
  5. package/lib/backend/orchestration/read-uninstallable-report.d.ts +7 -0
  6. package/lib/backend/orchestration/read-uninstallable-report.js +20 -0
  7. package/lib/backend/orchestration/read-uninstallable-report.lambda.bundle/index.js +60016 -0
  8. package/lib/backend/orchestration/read-uninstallable-report.lambda.bundle/index.js.map +7 -0
  9. package/lib/backend/orchestration/read-uninstallable-report.lambda.d.ts +13 -0
  10. package/lib/backend/orchestration/read-uninstallable-report.lambda.js +33 -0
  11. package/lib/backend/orchestration/retry-uninstallable-packages.d.ts +19 -0
  12. package/lib/backend/orchestration/retry-uninstallable-packages.js +100 -0
  13. package/lib/backend/package-stats/index.d.ts +15 -2
  14. package/lib/backend/package-stats/index.js +79 -21
  15. package/lib/backend/package-stats/package-stats-aggregator.d.ts +7 -0
  16. package/lib/backend/package-stats/package-stats-aggregator.js +20 -0
  17. package/lib/backend/package-stats/package-stats-aggregator.lambda.bundle/index.js +62489 -0
  18. package/lib/backend/package-stats/{package-stats.lambda.bundle → package-stats-aggregator.lambda.bundle}/index.js.map +4 -4
  19. package/lib/backend/package-stats/package-stats-aggregator.lambda.d.ts +13 -0
  20. package/lib/backend/package-stats/package-stats-aggregator.lambda.js +78 -0
  21. package/lib/backend/package-stats/package-stats-chunker.d.ts +7 -0
  22. package/lib/backend/package-stats/package-stats-chunker.js +20 -0
  23. package/lib/backend/package-stats/package-stats-chunker.lambda.bundle/index.js +60075 -0
  24. package/lib/backend/package-stats/package-stats-chunker.lambda.bundle/index.js.map +7 -0
  25. package/lib/backend/package-stats/package-stats-chunker.lambda.d.ts +6 -0
  26. package/lib/backend/package-stats/package-stats-chunker.lambda.js +25 -0
  27. package/lib/backend/package-stats/package-stats-processor.d.ts +7 -0
  28. package/lib/backend/package-stats/package-stats-processor.js +20 -0
  29. package/lib/backend/package-stats/{package-stats.lambda.bundle → package-stats-processor.lambda.bundle}/index.js +36 -2556
  30. package/lib/backend/package-stats/package-stats-processor.lambda.bundle/index.js.map +7 -0
  31. package/lib/backend/package-stats/package-stats-processor.lambda.d.ts +10 -0
  32. package/lib/backend/package-stats/package-stats-processor.lambda.js +41 -0
  33. package/lib/backend-dashboard.js +11 -6
  34. package/lib/construct-hub.d.ts +1 -1
  35. package/lib/construct-hub.js +12 -4
  36. package/lib/package-sources/code-artifact.js +1 -1
  37. package/lib/package-sources/npmjs.js +1 -1
  38. package/lib/package-tag/index.js +3 -3
  39. package/lib/package-tag-group/index.js +2 -2
  40. package/lib/preload-file/index.js +1 -1
  41. package/lib/s3/storage.js +1 -1
  42. package/lib/spdx-license.js +1 -1
  43. package/package.json +9 -3
  44. package/lib/backend/package-stats/package-stats.d.ts +0 -7
  45. package/lib/backend/package-stats/package-stats.js +0 -20
  46. package/lib/backend/package-stats/package-stats.lambda.d.ts +0 -25
  47. package/lib/backend/package-stats/package-stats.lambda.js +0 -79
@@ -0,0 +1,13 @@
1
+ import type { Context } from 'aws-lambda';
2
+ interface ProcessorResult {
3
+ chunkIndex: number;
4
+ chunkKey: string;
5
+ packageCount: number;
6
+ }
7
+ interface StepFunctionEvent {
8
+ processResults: Array<{
9
+ Payload: ProcessorResult;
10
+ }>;
11
+ }
12
+ export declare function handler(event: StepFunctionEvent, context: Context): Promise<void>;
13
+ export {};
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handler = handler;
4
+ const client_s3_1 = require("@aws-sdk/client-s3");
5
+ const aws_embedded_metrics_1 = require("aws-embedded-metrics");
6
+ const constants_1 = require("./constants");
7
+ const caching_1 = require("../../caching");
8
+ const aws_lambda_shared_1 = require("../shared/aws.lambda-shared");
9
+ const env_lambda_shared_1 = require("../shared/env.lambda-shared");
10
+ async function handler(event, context) {
11
+ const STATS_BUCKET_NAME = (0, env_lambda_shared_1.requireEnv)('STATS_BUCKET_NAME');
12
+ const STATS_OBJECT_KEY = (0, env_lambda_shared_1.requireEnv)('STATS_OBJECT_KEY');
13
+ const results = event.processResults.map((r) => r.Payload);
14
+ console.log(`Aggregating ${results.length} chunks`);
15
+ const currentDate = new Date().toISOString();
16
+ const aggregatedStats = {};
17
+ let failedChunks = 0;
18
+ // Read and aggregate all chunk results
19
+ for (const result of results) {
20
+ // Skip results that have errors (failed chunks)
21
+ if ('error' in result) {
22
+ console.warn(`Skipping failed chunk ${result.chunkIndex}`);
23
+ failedChunks++;
24
+ continue;
25
+ }
26
+ try {
27
+ const response = await aws_lambda_shared_1.S3_CLIENT.send(new client_s3_1.GetObjectCommand({
28
+ Bucket: STATS_BUCKET_NAME,
29
+ Key: result.chunkKey,
30
+ }));
31
+ const chunkData = JSON.parse(await response.Body.transformToString());
32
+ Object.assign(aggregatedStats, chunkData);
33
+ // Clean up chunk file
34
+ await aws_lambda_shared_1.S3_CLIENT.send(new client_s3_1.DeleteObjectCommand({
35
+ Bucket: STATS_BUCKET_NAME,
36
+ Key: result.chunkKey,
37
+ }));
38
+ }
39
+ catch (error) {
40
+ console.error(`Failed to process chunk ${result.chunkIndex}:`, error);
41
+ failedChunks++;
42
+ }
43
+ }
44
+ const finalStats = {
45
+ packages: aggregatedStats,
46
+ updated: currentDate,
47
+ };
48
+ const statsCount = Object.keys(aggregatedStats).length;
49
+ console.log(`Aggregated stats for ${statsCount} packages (${failedChunks} chunks failed)`);
50
+ if (failedChunks > 0) {
51
+ console.warn(`Warning: ${failedChunks} chunks failed, stats may be incomplete`);
52
+ }
53
+ // Update metrics
54
+ await (0, aws_embedded_metrics_1.metricScope)((metrics) => async () => {
55
+ metrics.setDimensions({});
56
+ metrics.setNamespace(constants_1.METRICS_NAMESPACE);
57
+ metrics.putMetric("RegisteredPackagesWithStats" /* MetricName.REGISTERED_PACKAGES_WITH_STATS */, statsCount, aws_embedded_metrics_1.Unit.Count);
58
+ })();
59
+ // Upload final stats to S3
60
+ await aws_lambda_shared_1.S3_CLIENT.send(new client_s3_1.PutObjectCommand({
61
+ Bucket: STATS_BUCKET_NAME,
62
+ Key: STATS_OBJECT_KEY,
63
+ Body: JSON.stringify(finalStats, null, 2),
64
+ ContentType: 'application/json',
65
+ CacheControl: caching_1.CacheStrategy.default().toString(),
66
+ Metadata: {
67
+ 'Lambda-Log-Group': context.logGroupName,
68
+ 'Lambda-Log-Stream': context.logStreamName,
69
+ 'Lambda-Run-Id': context.awsRequestId,
70
+ 'Package-Stats-Count': `${statsCount}`,
71
+ },
72
+ }));
73
+ // Fail the state machine if any chunks failed
74
+ if (failedChunks > 0) {
75
+ throw new Error(`${failedChunks} chunks failed during processing`);
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1zdGF0cy1hZ2dyZWdhdG9yLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL3BhY2thZ2Utc3RhdHMvcGFja2FnZS1zdGF0cy1hZ2dyZWdhdG9yLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdCQSwwQkE0RkM7QUFwSEQsa0RBSTRCO0FBQzVCLCtEQUF5RDtBQUV6RCwyQ0FBNEQ7QUFDNUQsMkNBQThDO0FBQzlDLG1FQUF3RDtBQUN4RCxtRUFBeUQ7QUFjbEQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUF3QixFQUFFLE9BQWdCO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUcsSUFBQSw4QkFBVSxFQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDhCQUFVLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUV4RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQztJQUVwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE1BQU0sZUFBZSxHQUFzRCxFQUFFLENBQUM7SUFDOUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXJCLHVDQUF1QztJQUN2QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLGdEQUFnRDtRQUNoRCxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMzRCxZQUFZLEVBQUUsQ0FBQztZQUNmLFNBQVM7UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSw2QkFBUyxDQUFDLElBQUksQ0FDbkMsSUFBSSw0QkFBZ0IsQ0FBQztnQkFDbkIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQ3JCLENBQUMsQ0FDSCxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLHNCQUFzQjtZQUN0QixNQUFNLDZCQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLCtCQUFtQixDQUFDO2dCQUN0QixNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDckIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RSxZQUFZLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFFBQVEsRUFBRSxlQUFlO1FBQ3pCLE9BQU8sRUFBRSxXQUFXO0tBQ3JCLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULHdCQUF3QixVQUFVLGNBQWMsWUFBWSxpQkFBaUIsQ0FDOUUsQ0FBQztJQUVGLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsWUFBWSxZQUFZLHlDQUF5QyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQjtJQUNqQixNQUFNLElBQUEsa0NBQVcsRUFBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDeEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixPQUFPLENBQUMsWUFBWSxDQUFDLDZCQUFpQixDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLFNBQVMsZ0ZBRWYsVUFBVSxFQUNWLDJCQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO0lBRUwsMkJBQTJCO0lBQzNCLE1BQU0sNkJBQVMsQ0FBQyxJQUFJLENBQ2xCLElBQUksNEJBQWdCLENBQUM7UUFDbkIsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsWUFBWSxFQUFFLHVCQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ2hELFFBQVEsRUFBRTtZQUNSLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ3hDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQzFDLGVBQWUsRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNyQyxxQkFBcUIsRUFBRSxHQUFHLFVBQVUsRUFBRTtTQUN2QztLQUNGLENBQUMsQ0FDSCxDQUFDO0lBRUYsOENBQThDO0lBQzlDLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGtDQUFrQyxDQUFDLENBQUM7SUFDckUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHsgbWV0cmljU2NvcGUsIFVuaXQgfSBmcm9tICdhd3MtZW1iZWRkZWQtbWV0cmljcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB7IE1ldHJpY05hbWUsIE1FVFJJQ1NfTkFNRVNQQUNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ2FjaGVTdHJhdGVneSB9IGZyb20gJy4uLy4uL2NhY2hpbmcnO1xuaW1wb3J0IHsgUzNfQ0xJRU5UIH0gZnJvbSAnLi4vc2hhcmVkL2F3cy5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IHJlcXVpcmVFbnYgfSBmcm9tICcuLi9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuXG5pbnRlcmZhY2UgUHJvY2Vzc29yUmVzdWx0IHtcbiAgY2h1bmtJbmRleDogbnVtYmVyO1xuICBjaHVua0tleTogc3RyaW5nO1xuICBwYWNrYWdlQ291bnQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBGdW5jdGlvbkV2ZW50IHtcbiAgcHJvY2Vzc1Jlc3VsdHM6IEFycmF5PHtcbiAgICBQYXlsb2FkOiBQcm9jZXNzb3JSZXN1bHQ7XG4gIH0+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogU3RlcEZ1bmN0aW9uRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgY29uc3QgU1RBVFNfQlVDS0VUX05BTUUgPSByZXF1aXJlRW52KCdTVEFUU19CVUNLRVRfTkFNRScpO1xuICBjb25zdCBTVEFUU19PQkpFQ1RfS0VZID0gcmVxdWlyZUVudignU1RBVFNfT0JKRUNUX0tFWScpO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSBldmVudC5wcm9jZXNzUmVzdWx0cy5tYXAoKHIpID0+IHIuUGF5bG9hZCk7XG4gIGNvbnNvbGUubG9nKGBBZ2dyZWdhdGluZyAke3Jlc3VsdHMubGVuZ3RofSBjaHVua3NgKTtcblxuICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgYWdncmVnYXRlZFN0YXRzOiB7IFtrZXk6IHN0cmluZ106IHsgZG93bmxvYWRzOiB7IG5wbTogbnVtYmVyIH0gfSB9ID0ge307XG4gIGxldCBmYWlsZWRDaHVua3MgPSAwO1xuXG4gIC8vIFJlYWQgYW5kIGFnZ3JlZ2F0ZSBhbGwgY2h1bmsgcmVzdWx0c1xuICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgLy8gU2tpcCByZXN1bHRzIHRoYXQgaGF2ZSBlcnJvcnMgKGZhaWxlZCBjaHVua3MpXG4gICAgaWYgKCdlcnJvcicgaW4gcmVzdWx0KSB7XG4gICAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIGZhaWxlZCBjaHVuayAke3Jlc3VsdC5jaHVua0luZGV4fWApO1xuICAgICAgZmFpbGVkQ2h1bmtzKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTM19DTElFTlQuc2VuZChcbiAgICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgICAgIEJ1Y2tldDogU1RBVFNfQlVDS0VUX05BTUUsXG4gICAgICAgICAgS2V5OiByZXN1bHQuY2h1bmtLZXksXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjaHVua0RhdGEgPSBKU09OLnBhcnNlKGF3YWl0IHJlc3BvbnNlLkJvZHkhLnRyYW5zZm9ybVRvU3RyaW5nKCkpO1xuICAgICAgT2JqZWN0LmFzc2lnbihhZ2dyZWdhdGVkU3RhdHMsIGNodW5rRGF0YSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIGNodW5rIGZpbGVcbiAgICAgIGF3YWl0IFMzX0NMSUVOVC5zZW5kKFxuICAgICAgICBuZXcgRGVsZXRlT2JqZWN0Q29tbWFuZCh7XG4gICAgICAgICAgQnVja2V0OiBTVEFUU19CVUNLRVRfTkFNRSxcbiAgICAgICAgICBLZXk6IHJlc3VsdC5jaHVua0tleSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIGNodW5rICR7cmVzdWx0LmNodW5rSW5kZXh9OmAsIGVycm9yKTtcbiAgICAgIGZhaWxlZENodW5rcysrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbmFsU3RhdHMgPSB7XG4gICAgcGFja2FnZXM6IGFnZ3JlZ2F0ZWRTdGF0cyxcbiAgICB1cGRhdGVkOiBjdXJyZW50RGF0ZSxcbiAgfTtcblxuICBjb25zdCBzdGF0c0NvdW50ID0gT2JqZWN0LmtleXMoYWdncmVnYXRlZFN0YXRzKS5sZW5ndGg7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBBZ2dyZWdhdGVkIHN0YXRzIGZvciAke3N0YXRzQ291bnR9IHBhY2thZ2VzICgke2ZhaWxlZENodW5rc30gY2h1bmtzIGZhaWxlZClgXG4gICk7XG5cbiAgaWYgKGZhaWxlZENodW5rcyA+IDApIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgV2FybmluZzogJHtmYWlsZWRDaHVua3N9IGNodW5rcyBmYWlsZWQsIHN0YXRzIG1heSBiZSBpbmNvbXBsZXRlYFxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGUgbWV0cmljc1xuICBhd2FpdCBtZXRyaWNTY29wZSgobWV0cmljcykgPT4gYXN5bmMgKCkgPT4ge1xuICAgIG1ldHJpY3Muc2V0RGltZW5zaW9ucyh7fSk7XG4gICAgbWV0cmljcy5zZXROYW1lc3BhY2UoTUVUUklDU19OQU1FU1BBQ0UpO1xuICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgTWV0cmljTmFtZS5SRUdJU1RFUkVEX1BBQ0tBR0VTX1dJVEhfU1RBVFMsXG4gICAgICBzdGF0c0NvdW50LFxuICAgICAgVW5pdC5Db3VudFxuICAgICk7XG4gIH0pKCk7XG5cbiAgLy8gVXBsb2FkIGZpbmFsIHN0YXRzIHRvIFMzXG4gIGF3YWl0IFMzX0NMSUVOVC5zZW5kKFxuICAgIG5ldyBQdXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogU1RBVFNfQlVDS0VUX05BTUUsXG4gICAgICBLZXk6IFNUQVRTX09CSkVDVF9LRVksXG4gICAgICBCb2R5OiBKU09OLnN0cmluZ2lmeShmaW5hbFN0YXRzLCBudWxsLCAyKSxcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBDYWNoZUNvbnRyb2w6IENhY2hlU3RyYXRlZ3kuZGVmYXVsdCgpLnRvU3RyaW5nKCksXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICAnTGFtYmRhLUxvZy1Hcm91cCc6IGNvbnRleHQubG9nR3JvdXBOYW1lLFxuICAgICAgICAnTGFtYmRhLUxvZy1TdHJlYW0nOiBjb250ZXh0LmxvZ1N0cmVhbU5hbWUsXG4gICAgICAgICdMYW1iZGEtUnVuLUlkJzogY29udGV4dC5hd3NSZXF1ZXN0SWQsXG4gICAgICAgICdQYWNrYWdlLVN0YXRzLUNvdW50JzogYCR7c3RhdHNDb3VudH1gLFxuICAgICAgfSxcbiAgICB9KVxuICApO1xuXG4gIC8vIEZhaWwgdGhlIHN0YXRlIG1hY2hpbmUgaWYgYW55IGNodW5rcyBmYWlsZWRcbiAgaWYgKGZhaWxlZENodW5rcyA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmFpbGVkQ2h1bmtzfSBjaHVua3MgZmFpbGVkIGR1cmluZyBwcm9jZXNzaW5nYCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
2
+ import { Construct } from 'constructs';
3
+ export interface PackageStatsChunkerProps extends lambda.FunctionOptions {
4
+ }
5
+ export declare class PackageStatsChunker extends lambda.Function {
6
+ constructor(scope: Construct, id: string, props?: PackageStatsChunkerProps);
7
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackageStatsChunker = void 0;
4
+ // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
5
+ const path = require("path");
6
+ const lambda = require("aws-cdk-lib/aws-lambda");
7
+ class PackageStatsChunker extends lambda.Function {
8
+ constructor(scope, id, props) {
9
+ super(scope, id, {
10
+ description: 'backend/package-stats/package-stats-chunker.lambda.ts',
11
+ ...props,
12
+ architecture: lambda.Architecture.ARM_64,
13
+ runtime: lambda.Runtime.NODEJS_22_X,
14
+ handler: 'index.handler',
15
+ code: lambda.Code.fromAsset(path.join(__dirname, '/package-stats-chunker.lambda.bundle')),
16
+ });
17
+ }
18
+ }
19
+ exports.PackageStatsChunker = PackageStatsChunker;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1zdGF0cy1jaHVua2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmQvcGFja2FnZS1zdGF0cy9wYWNrYWdlLXN0YXRzLWNodW5rZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFNakQsTUFBYSxtQkFBb0IsU0FBUSxNQUFNLENBQUMsUUFBUTtJQUN0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLHVEQUF1RDtZQUNwRSxHQUFHLEtBQUs7WUFDUixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7U0FDMUYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBWEQsa0RBV0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJucHggcHJvamVuXCIuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVN0YXRzQ2h1bmtlclByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWNrYWdlU3RhdHNDaHVua2VyIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBQYWNrYWdlU3RhdHNDaHVua2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnYmFja2VuZC9wYWNrYWdlLXN0YXRzL3BhY2thZ2Utc3RhdHMtY2h1bmtlci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy9wYWNrYWdlLXN0YXRzLWNodW5rZXIubGFtYmRhLmJ1bmRsZScpKSxcbiAgICB9KTtcbiAgfVxufSJdfQ==