Skip to content

Instantly share code, notes, and snippets.

@lannonbr
Created March 10, 2022 00:21
Show Gist options
  • Save lannonbr/b63d08bab4d4eeb2ed693a43ec9a5bd1 to your computer and use it in GitHub Desktop.
Save lannonbr/b63d08bab4d4eeb2ed693a43ec9a5bd1 to your computer and use it in GitHub Desktop.
One off script for ESM Checker to add a description attribute to items in a package table
require("dotenv").config();
const fetch = require("node-fetch");
const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const {
DynamoDBDocumentClient,
UpdateCommand,
ScanCommand,
} = require("@aws-sdk/lib-dynamodb");
const ddbClient = new DynamoDBClient();
const docClient = DynamoDBDocumentClient.from(ddbClient);
async function run() {
const packages = await docClient.send(
new ScanCommand({
TableName: process.env.DYNAMO_PACKAGE_TABLE_NAME,
AttributesToGet: ["package_name"],
})
);
let package_names = packages.Items.map((p) => p.package_name);
let package_contents = await Promise.all(
package_names.map((name) => {
return fetch(`https://registry.npmjs.com/${name}`, {
headers: {
"User-Agent":
"esm-checker/0.3.0 (+https://github.com/lannonbr/esm-checker)",
},
}).then((res) => res.json());
})
);
package_contents = package_contents
.filter((p) => typeof p.description !== "undefined")
.map((p) => {
return { name: p.name, description: p.description };
});
await Promise.all(
package_contents.map((package) => {
return docClient.send(
new UpdateCommand({
TableName: process.env.DYNAMO_PACKAGE_TABLE_NAME,
Key: {
package_name: package.name,
},
UpdateExpression: "SET description = :d",
ExpressionAttributeValues: {
":d": package.description,
},
})
);
})
);
}
run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment