{"_id":"@dynotable/dynamodb-reserved-words","name":"@dynotable/dynamodb-reserved-words","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dynotable/dynamodb-reserved-words","version":"0.1.0","description":"The complete list of 573 DynamoDB reserved words, with helpers to check attribute names and generate ExpressionAttributeNames aliases. Zero dependencies.","keywords":["dynamodb","reserved-words","reserved-keywords","expression-attribute-names","aws","validation"],"license":"MIT","author":{"name":"DynoTable","email":"support@dynotable.com","url":"https://dynotable.com"},"homepage":"https://dynotable.com/tools/dynamodb-reserved-words-checker","repository":{"type":"git","url":"git+https://github.com/dynotable/dynamodb-reserved-words.git"},"bugs":{"url":"https://github.com/dynotable/dynamodb-reserved-words/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"engines":{"node":">=24"},"publishConfig":{"access":"public","provenance":true},"packageManager":"pnpm@10.15.0","scripts":{"build":"tsdown","test":"vitest run","lint":"oxlint src tests","typecheck":"tsc --noEmit","check:package":"publint && attw --pack ."},"devDependencies":{"@arethetypeswrong/cli":"^0.18.2","@types/node":"^26.2.0","oxlint":"^1.35.0","publint":"^0.3.14","tsdown":"^0.15.7","typescript":"^5.9.3","vitest":"^4.0.0"},"_id":"@dynotable/dynamodb-reserved-words@0.1.0","gitHead":"062e6035c8612c607ca964e9a21ac7157578bf22","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-MTwRLIAi8al4wbCKi4aRUa6JAJpsmE3CqvFGBCpFj2vhXEftopuqFPITa1jjLC7MHDV4pGWhhKedGs7J8Axkug==","shasum":"c6d7e3fab66ac6738e9f1cd9acd7c521084591ec","tarball":"https://registry.npmjs.org/@dynotable/dynamodb-reserved-words/-/dynamodb-reserved-words-0.1.0.tgz","fileCount":7,"unpackedSize":34856,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3xGqSv90w6f77Ht3mCHrGuHhAZPUxvuyR1q3b2FPA9AIhAMIKPVo42WlfqY+yc0N5sDQzO4/YV3T9thIvkF9h5dj6"}]},"_npmUser":{"name":"dynotable-user","email":"support@dynotable.com"},"directories":{},"maintainers":[{"name":"dynotable-user","email":"support@dynotable.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dynamodb-reserved-words_0.1.0_1786787481767_0.24396171118530385"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-15T09:51:21.595Z","0.1.0":"2026-08-15T09:51:21.933Z","modified":"2026-08-15T09:51:22.185Z"},"maintainers":[{"name":"dynotable-user","email":"support@dynotable.com"}],"description":"The complete list of 573 DynamoDB reserved words, with helpers to check attribute names and generate ExpressionAttributeNames aliases. Zero dependencies.","homepage":"https://dynotable.com/tools/dynamodb-reserved-words-checker","keywords":["dynamodb","reserved-words","reserved-keywords","expression-attribute-names","aws","validation"],"repository":{"type":"git","url":"git+https://github.com/dynotable/dynamodb-reserved-words.git"},"author":{"name":"DynoTable","email":"support@dynotable.com","url":"https://dynotable.com"},"bugs":{"url":"https://github.com/dynotable/dynamodb-reserved-words/issues"},"license":"MIT","readme":"# dynamodb-reserved-words\n\nThe complete list of 573 DynamoDB reserved words, as data, with helpers to check attribute names and generate the `ExpressionAttributeNames` aliases that unblock them. Zero dependencies.\n\nDynamoDB reserves 573 words (`name`, `status`, `date`, `year`, `count`, and 568 more) that you can't use directly as attribute names in expressions. Hit one and the request fails with a `ValidationException` (\"Attribute name is a reserved keyword; reserved keyword: status\"). The fix is always the same: alias the name with a `#`-prefixed placeholder and map it in `ExpressionAttributeNames`. This package is that list and that fix.\n\nThe list is verbatim from the AWS [Reserved words in DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) reference (captured 2026-07-13, re-verified byte-identical 2026-08-15) and the count is pinned by tests, twice: the deduplicated set size and the raw token count, so a duplicate or a drift from the AWS page fails the build.\n\n## Install\n\n```sh\nnpm install @dynotable/dynamodb-reserved-words\n```\n\nESM and CJS, browser-safe.\n\n## Thirty seconds\n\n```ts\nimport {checkNames, expressionAttributeNames} from '@dynotable/dynamodb-reserved-words';\n\nconst checks = checkNames(['userId', 'status', 'name']);\n// [\n//   {name: 'userId', reserved: false, alias: '#userId'},\n//   {name: 'status', reserved: true,  alias: '#status'},\n//   {name: 'name',   reserved: true,  alias: '#name'}\n// ]\n\nexpressionAttributeNames(checks);\n// {'#status': 'status', '#name': 'name'}   ← paste into your query params\n```\n\n```ts\nimport {isReserved} from '@dynotable/dynamodb-reserved-words';\n\nisReserved('status'); // true (case-insensitive)\nisReserved('userId'); // false\n```\n\n## API\n\n| Export | What it does |\n| --- | --- |\n| `isReserved(word)` | Case-insensitive membership check against the 573-word list. |\n| `checkNames(names)` | Check a list of attribute names. Each result carries a unique, collision-safe `#` alias. Blanks dropped, duplicates de-duplicated, order preserved. |\n| `expressionAttributeNames(checks)` | The `ExpressionAttributeNames` map for the reserved names in a `checkNames` result. Empty object when nothing is reserved. |\n| `splitNames(input)` | Split a pasted blob (newlines, commas, spaces, semicolons) into names. |\n| `RESERVED_WORDS` | The list as a `ReadonlySet<string>`, upper-cased. |\n| `RESERVED_WORDS_RAW` | The verbatim captured block, for auditing against the AWS page. |\n| `reservedWordsByLetter()` | The list grouped by initial letter, for rendering a reference. |\n\nAlias generation handles the awkward cases: non-word characters collapse to `_`, colliding aliases get numeric suffixes, a name that cleans to nothing falls back to `#attr`. The output is always a valid `ExpressionAttributeNames` key.\n\n## Check names without installing anything\n\nThe same checker runs in the browser at [dynotable.com/tools/dynamodb-reserved-words-checker](https://dynotable.com/tools/dynamodb-reserved-words-checker), with the full browsable list.\n\n## License\n\nMIT © [DynoTable](https://dynotable.com)\n","readmeFilename":"README.md","_rev":"1-a8d6a4ae821dac381fccc220eddad680"}