From 4de08bb7e64ee688fad2d0391fedfb8766603ad4 Mon Sep 17 00:00:00 2001 From: Simon Walker Date: Thu, 8 Feb 2024 11:00:21 +0000 Subject: [PATCH 1/4] Use non-dir import for dynamodb When importing the modules using the `scripts/coverage.mjs` script I got an import error because the dynamodb utils use the main utils, and were importing them by directory. I do not understand JS import rules enough to debug this properly, so we just import from the `index.js` instead. Let's see if the CI passes and we can actually use the functions. --- dynamodb/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamodb/index.js b/dynamodb/index.js index 1464ef8..e81dd35 100644 --- a/dynamodb/index.js +++ b/dynamodb/index.js @@ -1,4 +1,4 @@ -import { util } from '..'; +import { util } from '../index.js'; // TODO: consistentRead // TODO: projection From e1b160199b6a73f971b33771f74b3818ff84d72d Mon Sep 17 00:00:00 2001 From: Simon Walker Date: Thu, 8 Feb 2024 11:02:22 +0000 Subject: [PATCH 2/4] Add script to capture coverage of methods used --- package.json | 3 ++- scripts/coverage.mjs | 51 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 scripts/coverage.mjs diff --git a/package.json b/package.json index 49a2d09..b3c55a5 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "scripts": { "test:aws": "NODE_OPTIONS=\"--experimental-vm-modules\" TEST_TARGET=AWS_CLOUD jest -u", "test": "NODE_OPTIONS=\"--experimental-vm-modules\" jest --ci", - "evaluate": "node ./scripts/evaluate.js ./scripts/testcode.js" + "evaluate": "node ./scripts/evaluate.js ./scripts/testcode.js", + "coverage": "node --experimental-specifier-resolution=node ./scripts/coverage.mjs" }, "repository": { "type": "git", diff --git a/scripts/coverage.mjs b/scripts/coverage.mjs new file mode 100644 index 0000000..8aecc93 --- /dev/null +++ b/scripts/coverage.mjs @@ -0,0 +1,51 @@ +import { util } from '../index.js'; +import * as rds from '../rds/index.js'; +import * as dynamodb from '../dynamodb/index.js'; + +class Namespace { + constructor(name, obj) { + this.name = name; + this.obj = obj; + } +}; + +// ns must be a Namespace type +function evaluateNamespace(ns) { + for (const [key, value] of Object.entries(ns.obj)) { + switch (typeof value) { + case 'function': { + console.log(`* ${ns.name}.${key}`); + break; + }; + case "object": { + const newNs = new Namespace(`${ns.name}.${key}`, value); + evaluateNamespace(newNs); + break; + }; + default: { + console.error(`Unhandled type ${typeof value}`); + break; + }; + } + } +} + +function printImportMessage(text) { + console.log(` +Assuming the following import: + +\`\`\`javascript +${text} +\`\`\` + `); +} + +printImportMessage(`import { util } from '@aws-appsync/utils'`); +evaluateNamespace(new Namespace("util", util)); + +printImportMessage(`import * as rds from '@aws-appsync/utils/rds'`); +evaluateNamespace(new Namespace("rds", rds)); + +printImportMessage(`import * as dynamodb from '@aws-appsync/utils/dynamodb'`); +evaluateNamespace(new Namespace("dynamodb", dynamodb)); + From d6158943ce58ce075b38d1292355df229f1fd979 Mon Sep 17 00:00:00 2001 From: Simon Walker Date: Thu, 8 Feb 2024 11:05:38 +0000 Subject: [PATCH 3/4] Wrap function names in `` --- scripts/coverage.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/coverage.mjs b/scripts/coverage.mjs index 8aecc93..45f1b0e 100644 --- a/scripts/coverage.mjs +++ b/scripts/coverage.mjs @@ -14,7 +14,7 @@ function evaluateNamespace(ns) { for (const [key, value] of Object.entries(ns.obj)) { switch (typeof value) { case 'function': { - console.log(`* ${ns.name}.${key}`); + console.log(`* \`${ns.name}.${key}\``); break; }; case "object": { From 2d3a7f8e97fd49652f3292f355d8c9542f54ba36 Mon Sep 17 00:00:00 2001 From: Simon Walker Date: Thu, 8 Feb 2024 11:12:32 +0000 Subject: [PATCH 4/4] Support partial coverage notes --- scripts/coverage.mjs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/coverage.mjs b/scripts/coverage.mjs index 45f1b0e..1a56966 100644 --- a/scripts/coverage.mjs +++ b/scripts/coverage.mjs @@ -9,12 +9,25 @@ class Namespace { } }; +const partialImplementations = { + 'util.appendError': { + message: "the function exists but errors are not yet captured", + }, +}; + // ns must be a Namespace type function evaluateNamespace(ns) { for (const [key, value] of Object.entries(ns.obj)) { switch (typeof value) { case 'function': { - console.log(`* \`${ns.name}.${key}\``); + const qualifiedName = `${ns.name}.${key}`; + let message = `* \`${qualifiedName}\``; + if (partialImplementations[qualifiedName] !== undefined) { + const partialDescription = partialImplementations[qualifiedName].message; + message = `${message} _(partial, ${partialDescription})_`; + } else { + }; + console.log(message); break; }; case "object": {