@mytechtoday/augment-extensions 1.7.0 → 2.2.0
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/README.md +119 -8
- package/augment-extensions/coding-standards/bash/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/bash/metadata.json +21 -0
- package/augment-extensions/coding-standards/c/metadata.json +50 -0
- package/augment-extensions/coding-standards/css/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/css/metadata.json +30 -0
- package/augment-extensions/coding-standards/go/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/go/metadata.json +57 -0
- package/augment-extensions/coding-standards/html/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/html/metadata.json +25 -0
- package/augment-extensions/coding-standards/html-css-js/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/html-css-js/metadata.json +40 -0
- package/augment-extensions/coding-standards/js/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/js/metadata.json +37 -0
- package/augment-extensions/coding-standards/php/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/php/metadata.json +35 -0
- package/augment-extensions/coding-standards/powershell/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/powershell/metadata.json +33 -0
- package/augment-extensions/coding-standards/python/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/python/metadata.json +38 -0
- package/augment-extensions/coding-standards/react/CHANGELOG.md +51 -0
- package/augment-extensions/coding-standards/react/metadata.json +31 -0
- package/augment-extensions/coding-standards/typescript/CHANGELOG.md +39 -0
- package/augment-extensions/coding-standards/typescript/README.md +248 -19
- package/augment-extensions/coding-standards/typescript/VERSION +2 -0
- package/augment-extensions/coding-standards/typescript/examples/biome.json +199 -0
- package/augment-extensions/coding-standards/typescript/examples/eslint-flat-config.js +166 -0
- package/augment-extensions/coding-standards/typescript/examples/monorepo-config/README.md +47 -0
- package/augment-extensions/coding-standards/typescript/examples/monorepo-config/package.json +37 -0
- package/augment-extensions/coding-standards/typescript/examples/monorepo-config/pnpm-workspace.yaml +5 -0
- package/augment-extensions/coding-standards/typescript/examples/monorepo-config/tsconfig.base.json +50 -0
- package/augment-extensions/coding-standards/typescript/examples/monorepo-config/turbo.json +47 -0
- package/augment-extensions/coding-standards/typescript/examples/vitest-setup.ts +198 -0
- package/augment-extensions/coding-standards/typescript/metadata.json +46 -0
- package/augment-extensions/coding-standards/typescript/module.json +25 -7
- package/augment-extensions/coding-standards/typescript/rules/architecture.md +1096 -0
- package/augment-extensions/coding-standards/typescript/rules/error-handling.md +1174 -0
- package/augment-extensions/coding-standards/typescript/rules/modern-features.md +625 -0
- package/augment-extensions/coding-standards/typescript/rules/monorepo.md +745 -0
- package/augment-extensions/coding-standards/typescript/rules/security-performance.md +850 -0
- package/augment-extensions/coding-standards/typescript/rules/testing.md +918 -0
- package/augment-extensions/coding-standards/typescript/rules/tooling.md +1071 -0
- package/augment-extensions/coding-standards/typescript/rules/type-patterns.md +750 -0
- package/augment-extensions/domain-rules/api-design/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/api-design/metadata.json +32 -0
- package/augment-extensions/domain-rules/database/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/database/metadata.json +50 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/metadata.json +18 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/metadata.json +18 -0
- package/augment-extensions/domain-rules/mcp/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/mcp/metadata.json +42 -0
- package/augment-extensions/domain-rules/security/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/security/metadata.json +33 -0
- package/augment-extensions/domain-rules/seo-sales-marketing/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/seo-sales-marketing/metadata.json +40 -0
- package/augment-extensions/domain-rules/software-architecture/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/software-architecture/metadata.json +55 -0
- package/augment-extensions/domain-rules/wordpress/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/wordpress/metadata.json +42 -0
- package/augment-extensions/domain-rules/wordpress-plugin/CHANGELOG.md +51 -0
- package/augment-extensions/domain-rules/wordpress-plugin/metadata.json +70 -0
- package/augment-extensions/examples/design-patterns/CHANGELOG.md +51 -0
- package/augment-extensions/examples/design-patterns/metadata.json +29 -0
- package/augment-extensions/examples/gutenberg-block-plugin/CHANGELOG.md +51 -0
- package/augment-extensions/examples/gutenberg-block-plugin/metadata.json +26 -0
- package/augment-extensions/examples/rest-api-plugin/CHANGELOG.md +51 -0
- package/augment-extensions/examples/rest-api-plugin/metadata.json +27 -0
- package/augment-extensions/examples/woocommerce-extension/CHANGELOG.md +51 -0
- package/augment-extensions/examples/woocommerce-extension/metadata.json +27 -0
- package/augment-extensions/visual-design/metadata.json +34 -0
- package/augment-extensions/workflows/adr-support/CHANGELOG.md +51 -0
- package/augment-extensions/workflows/adr-support/metadata.json +41 -0
- package/augment-extensions/workflows/beads/CHANGELOG.md +51 -0
- package/augment-extensions/workflows/beads/metadata.json +23 -0
- package/augment-extensions/workflows/beads-integration/CHANGELOG.md +51 -0
- package/augment-extensions/workflows/beads-integration/metadata.json +30 -0
- package/augment-extensions/workflows/database/CHANGELOG.md +51 -0
- package/augment-extensions/workflows/database/metadata.json +30 -0
- package/augment-extensions/workflows/wordpress-plugin/CHANGELOG.md +51 -0
- package/augment-extensions/workflows/wordpress-plugin/metadata.json +41 -0
- package/augment-extensions/writing-standards/literature/shakespeare/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/literature/shakespeare/metadata.json +60 -0
- package/augment-extensions/writing-standards/screenplay/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/monty-python/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/monty-python/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/saturday-night-live/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/saturday-night-live/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/alfred-hitchcock/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/alfred-hitchcock/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/ari-aster/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/ari-aster/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brad-bird/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brad-bird/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brian-de-palma/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brian-de-palma/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/buster-keaton/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/buster-keaton/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/christopher-nolan/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/christopher-nolan/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/clint-eastwood/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/clint-eastwood/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/coen-brothers/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/coen-brothers/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/darren-aronofsky/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/darren-aronofsky/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-fincher/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-fincher/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-lynch/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-lynch/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/denis-villeneuve/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/denis-villeneuve/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/francis-ford-coppola/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/francis-ford-coppola/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gary-marshall/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gary-marshall/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-a-romero/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-a-romero/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-lucas/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-lucas/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/guillermo-del-toro/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/guillermo-del-toro/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gus-van-sant/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gus-van-sant/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/james-ivory-ismail-merchant/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/james-ivory-ismail-merchant/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jim-jarmusch/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jim-jarmusch/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-carpenter/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-carpenter/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-ford/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-ford/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-huston/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-huston/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-landis/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-landis/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jonathan-demme/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jonathan-demme/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/joseph-l-mankiewicz/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/joseph-l-mankiewicz/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kathryn-bigelow/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kathryn-bigelow/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kelly-reichardt/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kelly-reichardt/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kevin-smith/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kevin-smith/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/linda-shayne/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/linda-shayne/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/martin-scorsese/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/martin-scorsese/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mel-brooks/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mel-brooks/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/metadata.json +25 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-curtiz/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-curtiz/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-mann/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-mann/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mike-nichols/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mike-nichols/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/orson-welles/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/orson-welles/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/park-chan-wook/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/park-chan-wook/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/paul-thomas-anderson/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/paul-thomas-anderson/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/penny-marshall/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/penny-marshall/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/peter-bogdanovich/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/peter-bogdanovich/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/quentin-tarantino/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/quentin-tarantino/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/richard-linklater/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/richard-linklater/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/rob-reiner/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/rob-reiner/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-altman/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-altman/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-eggers/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-eggers/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-zemeckis/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-zemeckis/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sam-peckinpah/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sam-peckinpah/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sidney-lumet/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sidney-lumet/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/spike-lee/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/spike-lee/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-donen-gene-kelly/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-donen-gene-kelly/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-kubrick/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-kubrick/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steve-martin/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steve-martin/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steven-spielberg/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steven-spielberg/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sydney-pollack/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sydney-pollack/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/terry-gilliam/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/terry-gilliam/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tim-burton/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tim-burton/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tobe-hooper/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tobe-hooper/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/wes-anderson/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/wes-anderson/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/william-friedkin/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/william-friedkin/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/blue-ruin/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/blue-ruin/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/fast-and-furious/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/fast-and-furious/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/harry-potter/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/harry-potter/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/james-bond/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/james-bond/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/john-wick/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/john-wick/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/lord-of-the-rings/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/lord-of-the-rings/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/mcu/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/mcu/metadata.json +25 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/metadata.json +25 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-trek/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-trek/metadata.json +33 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-wars/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-wars/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/metadata.json +50 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/joseph-campbell/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/joseph-campbell/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/bruckheimer-and-simpson/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/bruckheimer-and-simpson/metadata.json +24 -0
- package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/metadata.json +23 -0
- package/augment-extensions/writing-standards/screenplay/genres/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/genres/metadata.json +43 -0
- package/augment-extensions/writing-standards/screenplay/metadata.json +65 -0
- package/augment-extensions/writing-standards/screenplay/styles/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/styles/metadata.json +38 -0
- package/augment-extensions/writing-standards/screenplay/themes/CHANGELOG.md +51 -0
- package/augment-extensions/writing-standards/screenplay/themes/metadata.json +47 -0
- package/cli/dist/__test_health-checker.d.ts +2 -0
- package/cli/dist/__test_health-checker.d.ts.map +1 -0
- package/cli/dist/__test_health-checker.js +4 -0
- package/cli/dist/__test_health-checker.js.map +1 -0
- package/cli/dist/__test_template-engine.d.ts +2 -0
- package/cli/dist/__test_template-engine.d.ts.map +1 -0
- package/cli/dist/__test_template-engine.js +4 -0
- package/cli/dist/__test_template-engine.js.map +1 -0
- package/cli/dist/cli.js +25 -0
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/generator/index.d.ts +8 -2
- package/cli/dist/commands/generate-shot-list/generator/index.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/generator/index.js +28 -3
- package/cli/dist/commands/generate-shot-list/generator/index.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/generator/types.d.ts +3 -0
- package/cli/dist/commands/generate-shot-list/generator/types.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/help-text.d.ts +1 -1
- package/cli/dist/commands/generate-shot-list/help-text.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/help-text.js +48 -5
- package/cli/dist/commands/generate-shot-list/help-text.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.d.ts +11 -1
- package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.js +61 -1
- package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/parser/docx-parser.d.ts +29 -0
- package/cli/dist/commands/generate-shot-list/parser/docx-parser.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/docx-parser.js +111 -0
- package/cli/dist/commands/generate-shot-list/parser/docx-parser.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.d.ts +18 -0
- package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.js +184 -0
- package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/index.d.ts +4 -3
- package/cli/dist/commands/generate-shot-list/parser/index.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/parser/index.js +54 -3
- package/cli/dist/commands/generate-shot-list/parser/index.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/parser/pdf-parser.d.ts +24 -0
- package/cli/dist/commands/generate-shot-list/parser/pdf-parser.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/pdf-parser.js +84 -0
- package/cli/dist/commands/generate-shot-list/parser/pdf-parser.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/rtf-parser.d.ts +28 -0
- package/cli/dist/commands/generate-shot-list/parser/rtf-parser.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/rtf-parser.js +143 -0
- package/cli/dist/commands/generate-shot-list/parser/rtf-parser.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/parser/types.d.ts +9 -6
- package/cli/dist/commands/generate-shot-list/parser/types.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list/parser/types.js.map +1 -1
- package/cli/dist/commands/generate-shot-list/style/guideline-parser.d.ts +36 -0
- package/cli/dist/commands/generate-shot-list/style/guideline-parser.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/guideline-parser.js +108 -0
- package/cli/dist/commands/generate-shot-list/style/guideline-parser.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/index.d.ts +39 -0
- package/cli/dist/commands/generate-shot-list/style/index.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/index.js +85 -0
- package/cli/dist/commands/generate-shot-list/style/index.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/style-loader.d.ts +35 -0
- package/cli/dist/commands/generate-shot-list/style/style-loader.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/style-loader.js +178 -0
- package/cli/dist/commands/generate-shot-list/style/style-loader.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/style-merger.d.ts +36 -0
- package/cli/dist/commands/generate-shot-list/style/style-merger.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/style-merger.js +123 -0
- package/cli/dist/commands/generate-shot-list/style/style-merger.js.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/types.d.ts +105 -0
- package/cli/dist/commands/generate-shot-list/style/types.d.ts.map +1 -0
- package/cli/dist/commands/generate-shot-list/style/types.js +8 -0
- package/cli/dist/commands/generate-shot-list/style/types.js.map +1 -0
- package/cli/dist/commands/generate-shot-list.d.ts +1 -0
- package/cli/dist/commands/generate-shot-list.d.ts.map +1 -1
- package/cli/dist/commands/generate-shot-list.js +44 -1
- package/cli/dist/commands/generate-shot-list.js.map +1 -1
- package/cli/dist/commands/list.d.ts +1 -0
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +21 -5
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/upgrade.d.ts +15 -0
- package/cli/dist/commands/upgrade.d.ts.map +1 -0
- package/cli/dist/commands/upgrade.js +229 -0
- package/cli/dist/commands/upgrade.js.map +1 -0
- package/cli/dist/commands/use.d.ts +15 -0
- package/cli/dist/commands/use.d.ts.map +1 -0
- package/cli/dist/commands/use.js +180 -0
- package/cli/dist/commands/use.js.map +1 -0
- package/cli/dist/commands/version-info.d.ts +15 -0
- package/cli/dist/commands/version-info.d.ts.map +1 -0
- package/cli/dist/commands/version-info.js +194 -0
- package/cli/dist/commands/version-info.js.map +1 -0
- package/cli/dist/core/compatibility-checker.d.ts +73 -0
- package/cli/dist/core/compatibility-checker.d.ts.map +1 -0
- package/cli/dist/core/compatibility-checker.js +188 -0
- package/cli/dist/core/compatibility-checker.js.map +1 -0
- package/cli/dist/core/index.d.ts +9 -0
- package/cli/dist/core/index.d.ts.map +1 -0
- package/cli/dist/core/index.js +16 -0
- package/cli/dist/core/index.js.map +1 -0
- package/cli/dist/core/module-loader.d.ts +68 -0
- package/cli/dist/core/module-loader.d.ts.map +1 -0
- package/cli/dist/core/module-loader.js +137 -0
- package/cli/dist/core/module-loader.js.map +1 -0
- package/cli/dist/core/version-manager.d.ts +62 -0
- package/cli/dist/core/version-manager.d.ts.map +1 -0
- package/cli/dist/core/version-manager.js +157 -0
- package/cli/dist/core/version-manager.js.map +1 -0
- package/cli/dist/core/version-resolver.d.ts +63 -0
- package/cli/dist/core/version-resolver.d.ts.map +1 -0
- package/cli/dist/core/version-resolver.js +163 -0
- package/cli/dist/core/version-resolver.js.map +1 -0
- package/cli/dist/gui/app.d.ts +17 -0
- package/cli/dist/gui/app.d.ts.map +1 -0
- package/cli/dist/gui/app.js +79 -0
- package/cli/dist/gui/app.js.map +1 -0
- package/cli/dist/gui/components/preview-pane.d.ts +40 -0
- package/cli/dist/gui/components/preview-pane.d.ts.map +1 -0
- package/cli/dist/gui/components/preview-pane.js +90 -0
- package/cli/dist/gui/components/preview-pane.js.map +1 -0
- package/cli/dist/gui/components/search-filter.d.ts +26 -0
- package/cli/dist/gui/components/search-filter.d.ts.map +1 -0
- package/cli/dist/gui/components/search-filter.js +168 -0
- package/cli/dist/gui/components/search-filter.js.map +1 -0
- package/cli/dist/gui/components/status-bar.d.ts +22 -0
- package/cli/dist/gui/components/status-bar.d.ts.map +1 -0
- package/cli/dist/gui/components/status-bar.js +58 -0
- package/cli/dist/gui/components/status-bar.js.map +1 -0
- package/cli/dist/gui/components/tree-navigator.d.ts +30 -0
- package/cli/dist/gui/components/tree-navigator.d.ts.map +1 -0
- package/cli/dist/gui/components/tree-navigator.js +133 -0
- package/cli/dist/gui/components/tree-navigator.js.map +1 -0
- package/cli/dist/gui/components/version-selector.d.ts +27 -0
- package/cli/dist/gui/components/version-selector.d.ts.map +1 -0
- package/cli/dist/gui/components/version-selector.js +110 -0
- package/cli/dist/gui/components/version-selector.js.map +1 -0
- package/cli/dist/gui/hooks/use-version-loader.d.ts +25 -0
- package/cli/dist/gui/hooks/use-version-loader.d.ts.map +1 -0
- package/cli/dist/gui/hooks/use-version-loader.js +116 -0
- package/cli/dist/gui/hooks/use-version-loader.js.map +1 -0
- package/cli/dist/gui/index.d.ts +15 -0
- package/cli/dist/gui/index.d.ts.map +1 -0
- package/cli/dist/gui/index.js +39 -0
- package/cli/dist/gui/index.js.map +1 -0
- package/cli/dist/gui/layouts/main-layout.d.ts +14 -0
- package/cli/dist/gui/layouts/main-layout.d.ts.map +1 -0
- package/cli/dist/gui/layouts/main-layout.js +205 -0
- package/cli/dist/gui/layouts/main-layout.js.map +1 -0
- package/cli/dist/gui/state/navigation-state.d.ts +39 -0
- package/cli/dist/gui/state/navigation-state.d.ts.map +1 -0
- package/cli/dist/gui/state/navigation-state.js +151 -0
- package/cli/dist/gui/state/navigation-state.js.map +1 -0
- package/cli/dist/gui/state/selection-state.d.ts +36 -0
- package/cli/dist/gui/state/selection-state.d.ts.map +1 -0
- package/cli/dist/gui/state/selection-state.js +132 -0
- package/cli/dist/gui/state/selection-state.js.map +1 -0
- package/cli/dist/gui/theme.d.ts +50 -0
- package/cli/dist/gui/theme.d.ts.map +1 -0
- package/cli/dist/gui/theme.js +73 -0
- package/cli/dist/gui/theme.js.map +1 -0
- package/cli/dist/utils/help.d.ts +13 -0
- package/cli/dist/utils/help.d.ts.map +1 -0
- package/cli/dist/utils/help.js +137 -0
- package/cli/dist/utils/help.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +8 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -1
- package/cli/dist/utils/module-system.js +38 -3
- package/cli/dist/utils/module-system.js.map +1 -1
- package/cli/dist/utils/validate-versioning.d.ts +43 -0
- package/cli/dist/utils/validate-versioning.d.ts.map +1 -0
- package/cli/dist/utils/validate-versioning.js +258 -0
- package/cli/dist/utils/validate-versioning.js.map +1 -0
- package/package.json +10 -1
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
# Modern TypeScript Features (5.0-5.6+)
|
|
2
|
+
|
|
3
|
+
Comprehensive guide to modern TypeScript features introduced in versions 5.0 through 5.6+.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
- [Const Type Parameters (5.0)](#const-type-parameters-50)
|
|
7
|
+
- [Inferred Type Predicates (5.5)](#inferred-type-predicates-55)
|
|
8
|
+
- [Satisfies Operator (4.9/5.0)](#satisfies-operator-4950)
|
|
9
|
+
- [Variance Annotations (4.7)](#variance-annotations-47)
|
|
10
|
+
- [Declaration Merging Patterns](#declaration-merging-patterns)
|
|
11
|
+
- [Template Literal Types](#template-literal-types)
|
|
12
|
+
- [Const Assertions](#const-assertions)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Const Type Parameters (5.0)
|
|
17
|
+
|
|
18
|
+
TypeScript 5.0 introduced `const` type parameters, which infer the most specific type possible.
|
|
19
|
+
|
|
20
|
+
### Basic Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// ❌ Before: Generic type loses literal types
|
|
24
|
+
function makeArray<T>(items: T[]): T[] {
|
|
25
|
+
return items;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const numbers = makeArray([1, 2, 3]); // Type: number[]
|
|
29
|
+
|
|
30
|
+
// ✅ After: Const type parameter preserves literal types
|
|
31
|
+
function makeArrayConst<const T>(items: T[]): T[] {
|
|
32
|
+
return items;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const numbersConst = makeArrayConst([1, 2, 3]); // Type: [1, 2, 3]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Practical Example: Configuration Objects
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
// ✅ Preserve exact configuration shape
|
|
42
|
+
function defineConfig<const T extends Record<string, unknown>>(config: T): T {
|
|
43
|
+
return config;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const appConfig = defineConfig({
|
|
47
|
+
apiUrl: 'https://api.example.com',
|
|
48
|
+
timeout: 5000,
|
|
49
|
+
retries: 3,
|
|
50
|
+
features: {
|
|
51
|
+
darkMode: true,
|
|
52
|
+
analytics: false
|
|
53
|
+
}
|
|
54
|
+
} as const);
|
|
55
|
+
|
|
56
|
+
// Type is preserved exactly:
|
|
57
|
+
// {
|
|
58
|
+
// readonly apiUrl: "https://api.example.com";
|
|
59
|
+
// readonly timeout: 5000;
|
|
60
|
+
// readonly retries: 3;
|
|
61
|
+
// readonly features: {
|
|
62
|
+
// readonly darkMode: true;
|
|
63
|
+
// readonly analytics: false;
|
|
64
|
+
// };
|
|
65
|
+
// }
|
|
66
|
+
|
|
67
|
+
// This enables autocomplete and type safety
|
|
68
|
+
appConfig.apiUrl; // ✅ Type: "https://api.example.com"
|
|
69
|
+
appConfig.timeout; // ✅ Type: 5000
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Route Definitions
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// ✅ Type-safe route definitions
|
|
76
|
+
function defineRoutes<const T extends readonly Route[]>(routes: T): T {
|
|
77
|
+
return routes;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface Route {
|
|
81
|
+
path: string;
|
|
82
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
83
|
+
handler: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const routes = defineRoutes([
|
|
87
|
+
{ path: '/users', method: 'GET', handler: 'getUsers' },
|
|
88
|
+
{ path: '/users/:id', method: 'GET', handler: 'getUser' },
|
|
89
|
+
{ path: '/users', method: 'POST', handler: 'createUser' },
|
|
90
|
+
] as const);
|
|
91
|
+
|
|
92
|
+
// Type: readonly [
|
|
93
|
+
// { readonly path: "/users"; readonly method: "GET"; readonly handler: "getUsers"; },
|
|
94
|
+
// { readonly path: "/users/:id"; readonly method: "GET"; readonly handler: "getUser"; },
|
|
95
|
+
// { readonly path: "/users"; readonly method: "POST"; readonly handler: "createUser"; }
|
|
96
|
+
// ]
|
|
97
|
+
|
|
98
|
+
type RoutePaths = typeof routes[number]['path'];
|
|
99
|
+
// Type: "/users" | "/users/:id"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Inferred Type Predicates (5.5)
|
|
105
|
+
|
|
106
|
+
TypeScript 5.5 can automatically infer type predicates from function implementations.
|
|
107
|
+
|
|
108
|
+
### Before vs After
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// ❌ Before: Manual type predicate
|
|
112
|
+
function isString(value: unknown): value is string {
|
|
113
|
+
return typeof value === 'string';
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ✅ After: Inferred type predicate (TS 5.5+)
|
|
117
|
+
function isString(value: unknown) {
|
|
118
|
+
return typeof value === 'string';
|
|
119
|
+
}
|
|
120
|
+
// TypeScript infers: value is string
|
|
121
|
+
|
|
122
|
+
// Works with arrays too
|
|
123
|
+
function filterStrings(items: unknown[]) {
|
|
124
|
+
return items.filter(isString);
|
|
125
|
+
}
|
|
126
|
+
// Return type: string[]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Complex Type Guards
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
interface User {
|
|
133
|
+
id: number;
|
|
134
|
+
name: string;
|
|
135
|
+
email: string;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
interface Admin extends User {
|
|
139
|
+
role: 'admin';
|
|
140
|
+
permissions: string[];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// ✅ Inferred type predicate
|
|
144
|
+
function isAdmin(user: User) {
|
|
145
|
+
return 'role' in user && user.role === 'admin';
|
|
146
|
+
}
|
|
147
|
+
// TypeScript infers: user is Admin
|
|
148
|
+
|
|
149
|
+
function processUser(user: User) {
|
|
150
|
+
if (isAdmin(user)) {
|
|
151
|
+
// ✅ TypeScript knows user is Admin here
|
|
152
|
+
console.log(user.permissions);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Array Filtering
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
interface Product {
|
|
161
|
+
id: number;
|
|
162
|
+
name: string;
|
|
163
|
+
price: number | null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const products: Product[] = [
|
|
167
|
+
{ id: 1, name: 'Widget', price: 10 },
|
|
168
|
+
{ id: 2, name: 'Gadget', price: null },
|
|
169
|
+
{ id: 3, name: 'Doohickey', price: 15 },
|
|
170
|
+
];
|
|
171
|
+
|
|
172
|
+
// ✅ Inferred type predicate
|
|
173
|
+
function hasPrice(product: Product) {
|
|
174
|
+
return product.price !== null;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const productsWithPrices = products.filter(hasPrice);
|
|
178
|
+
// Type: Product[] where price is number (not null)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Satisfies Operator (4.9/5.0)
|
|
184
|
+
|
|
185
|
+
The `satisfies` operator validates types without widening them.
|
|
186
|
+
|
|
187
|
+
### Basic Usage
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
// ❌ Problem: Type annotation widens the type
|
|
191
|
+
const config: Record<string, string | number> = {
|
|
192
|
+
apiUrl: 'https://api.example.com',
|
|
193
|
+
timeout: 5000
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
config.apiUrl.toUpperCase(); // ❌ Error: Property 'toUpperCase' does not exist on type 'string | number'
|
|
197
|
+
|
|
198
|
+
// ✅ Solution: Use satisfies to validate without widening
|
|
199
|
+
const configSatisfies = {
|
|
200
|
+
apiUrl: 'https://api.example.com',
|
|
201
|
+
timeout: 5000
|
|
202
|
+
} satisfies Record<string, string | number>;
|
|
203
|
+
|
|
204
|
+
configSatisfies.apiUrl.toUpperCase(); // ✅ Works! Type is still "https://api.example.com"
|
|
205
|
+
configSatisfies.timeout.toFixed(2); // ✅ Works! Type is still 5000
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Color Palette Example
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
type RGB = readonly [red: number, green: number, blue: number];
|
|
212
|
+
type Color = string | RGB;
|
|
213
|
+
|
|
214
|
+
// ✅ Validate structure while preserving exact types
|
|
215
|
+
const palette = {
|
|
216
|
+
primary: '#007bff',
|
|
217
|
+
secondary: [128, 128, 128],
|
|
218
|
+
success: '#28a745',
|
|
219
|
+
danger: [255, 0, 0],
|
|
220
|
+
warning: '#ffc107'
|
|
221
|
+
} satisfies Record<string, Color>;
|
|
222
|
+
|
|
223
|
+
// Type is preserved:
|
|
224
|
+
palette.primary; // Type: "#007bff"
|
|
225
|
+
palette.secondary; // Type: [128, 128, 128]
|
|
226
|
+
|
|
227
|
+
// But validation ensures correctness:
|
|
228
|
+
const invalid = {
|
|
229
|
+
primary: '#007bff',
|
|
230
|
+
secondary: [128, 128] // ❌ Error: Type '[number, number]' is not assignable to type 'Color'
|
|
231
|
+
} satisfies Record<string, Color>;
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### API Response Validation
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
interface ApiResponse<T> {
|
|
238
|
+
data: T;
|
|
239
|
+
status: number;
|
|
240
|
+
message: string;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ✅ Validate response shape while preserving data type
|
|
244
|
+
const userResponse = {
|
|
245
|
+
data: { id: 1, name: 'Alice', email: 'alice@example.com' },
|
|
246
|
+
status: 200,
|
|
247
|
+
message: 'Success'
|
|
248
|
+
} satisfies ApiResponse<{ id: number; name: string; email: string }>;
|
|
249
|
+
|
|
250
|
+
userResponse.data.name; // ✅ Type: string (not widened to unknown)
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Variance Annotations (4.7)
|
|
256
|
+
|
|
257
|
+
TypeScript 4.7 introduced explicit variance annotations for better type safety.
|
|
258
|
+
|
|
259
|
+
### Covariance (`out`)
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// ✅ Explicitly mark type parameter as covariant (output-only)
|
|
263
|
+
interface Producer<out T> {
|
|
264
|
+
produce(): T;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// This is safe because T only appears in output positions
|
|
268
|
+
const stringProducer: Producer<string> = { produce: () => 'hello' };
|
|
269
|
+
const unknownProducer: Producer<unknown> = stringProducer; // ✅ OK
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Contravariance (`in`)
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
// ✅ Explicitly mark type parameter as contravariant (input-only)
|
|
276
|
+
interface Consumer<in T> {
|
|
277
|
+
consume(value: T): void;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// This is safe because T only appears in input positions
|
|
281
|
+
const unknownConsumer: Consumer<unknown> = { consume: (value) => console.log(value) };
|
|
282
|
+
const stringConsumer: Consumer<string> = unknownConsumer; // ✅ OK
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Invariance (default)
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// Default: Type parameter is invariant (both input and output)
|
|
289
|
+
interface Box<T> {
|
|
290
|
+
get(): T;
|
|
291
|
+
set(value: T): void;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// ❌ Not safe to assign
|
|
295
|
+
const stringBox: Box<string> = { get: () => 'hello', set: (v) => {} };
|
|
296
|
+
const unknownBox: Box<unknown> = stringBox; // ❌ Error
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Practical Example: Event Emitter
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// ✅ Use variance annotations for type-safe event emitter
|
|
303
|
+
interface EventEmitter<out Events extends Record<string, unknown>> {
|
|
304
|
+
on<K extends keyof Events>(event: K, handler: (data: Events[K]) => void): void;
|
|
305
|
+
emit<K extends keyof Events>(event: K, data: Events[K]): void;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
interface AppEvents {
|
|
309
|
+
userLogin: { userId: number; timestamp: Date };
|
|
310
|
+
userLogout: { userId: number };
|
|
311
|
+
error: { message: string; code: number };
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const emitter: EventEmitter<AppEvents> = {
|
|
315
|
+
on: (event, handler) => {},
|
|
316
|
+
emit: (event, data) => {}
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
// ✅ Type-safe event handling
|
|
320
|
+
emitter.on('userLogin', (data) => {
|
|
321
|
+
console.log(data.userId); // ✅ Type: number
|
|
322
|
+
console.log(data.timestamp); // ✅ Type: Date
|
|
323
|
+
});
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Declaration Merging Patterns
|
|
329
|
+
|
|
330
|
+
TypeScript allows merging multiple declarations of the same name.
|
|
331
|
+
|
|
332
|
+
### Interface Merging
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
// ✅ Extend existing interfaces
|
|
336
|
+
interface User {
|
|
337
|
+
id: number;
|
|
338
|
+
name: string;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
interface User {
|
|
342
|
+
email: string;
|
|
343
|
+
createdAt: Date;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Merged interface:
|
|
347
|
+
const user: User = {
|
|
348
|
+
id: 1,
|
|
349
|
+
name: 'Alice',
|
|
350
|
+
email: 'alice@example.com',
|
|
351
|
+
createdAt: new Date()
|
|
352
|
+
};
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Module Augmentation
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
// ✅ Augment third-party modules
|
|
359
|
+
import 'express';
|
|
360
|
+
|
|
361
|
+
declare module 'express' {
|
|
362
|
+
interface Request {
|
|
363
|
+
user?: {
|
|
364
|
+
id: number;
|
|
365
|
+
email: string;
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Now Request has user property
|
|
371
|
+
app.get('/profile', (req, res) => {
|
|
372
|
+
if (req.user) {
|
|
373
|
+
res.json({ id: req.user.id, email: req.user.email });
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Global Augmentation
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
// ✅ Add properties to global objects
|
|
382
|
+
declare global {
|
|
383
|
+
interface Window {
|
|
384
|
+
analytics?: {
|
|
385
|
+
track(event: string, properties?: Record<string, unknown>): void;
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Now window.analytics is typed
|
|
391
|
+
window.analytics?.track('page_view', { path: '/home' });
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Namespace Merging
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// ✅ Merge namespace with class
|
|
398
|
+
class Album {
|
|
399
|
+
constructor(public title: string) {}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
namespace Album {
|
|
403
|
+
export function fromJSON(json: { title: string }): Album {
|
|
404
|
+
return new Album(json.title);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
export function validate(title: string): boolean {
|
|
408
|
+
return title.length > 0 && title.length <= 100;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// Use both class and namespace
|
|
413
|
+
const album = new Album('Abbey Road');
|
|
414
|
+
const albumFromJSON = Album.fromJSON({ title: 'Revolver' });
|
|
415
|
+
const isValid = Album.validate('Rubber Soul');
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Template Literal Types
|
|
421
|
+
|
|
422
|
+
Advanced string manipulation at the type level.
|
|
423
|
+
|
|
424
|
+
### Basic Template Literals
|
|
425
|
+
|
|
426
|
+
```typescript
|
|
427
|
+
// ✅ Create string literal types dynamically
|
|
428
|
+
type EventName = 'click' | 'focus' | 'blur';
|
|
429
|
+
type EventHandler = `on${Capitalize<EventName>}`;
|
|
430
|
+
// Type: "onClick" | "onFocus" | "onBlur"
|
|
431
|
+
|
|
432
|
+
type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
433
|
+
type Endpoint = `/api/${Lowercase<HTTPMethod>}`;
|
|
434
|
+
// Type: "/api/get" | "/api/post" | "/api/put" | "/api/delete"
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### CSS-in-JS Type Safety
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
// ✅ Type-safe CSS properties
|
|
441
|
+
type CSSUnit = 'px' | 'em' | 'rem' | '%' | 'vh' | 'vw';
|
|
442
|
+
type CSSValue<T extends number> = `${T}${CSSUnit}`;
|
|
443
|
+
|
|
444
|
+
interface Spacing {
|
|
445
|
+
margin: CSSValue<number>;
|
|
446
|
+
padding: CSSValue<number>;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
const spacing: Spacing = {
|
|
450
|
+
margin: '16px', // ✅ OK
|
|
451
|
+
padding: '2rem', // ✅ OK
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
const invalid: Spacing = {
|
|
455
|
+
margin: '16', // ❌ Error: Type '"16"' is not assignable to type 'CSSValue<number>'
|
|
456
|
+
padding: '2rem',
|
|
457
|
+
};
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### API Route Type Safety
|
|
461
|
+
|
|
462
|
+
```typescript
|
|
463
|
+
// ✅ Type-safe API routes
|
|
464
|
+
type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
465
|
+
type Resource = 'users' | 'posts' | 'comments';
|
|
466
|
+
type APIRoute = `/${Resource}` | `/${Resource}/:id`;
|
|
467
|
+
|
|
468
|
+
type RouteHandler<M extends HTTPMethod, R extends APIRoute> = {
|
|
469
|
+
method: M;
|
|
470
|
+
path: R;
|
|
471
|
+
handler: (req: Request, res: Response) => void;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
const getUsersRoute: RouteHandler<'GET', '/users'> = {
|
|
475
|
+
method: 'GET',
|
|
476
|
+
path: '/users',
|
|
477
|
+
handler: (req, res) => {}
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
const getUserRoute: RouteHandler<'GET', '/users/:id'> = {
|
|
481
|
+
method: 'GET',
|
|
482
|
+
path: '/users/:id',
|
|
483
|
+
handler: (req, res) => {}
|
|
484
|
+
};
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Database Query Builder
|
|
488
|
+
|
|
489
|
+
```typescript
|
|
490
|
+
// ✅ Type-safe query builder
|
|
491
|
+
type SQLOperator = 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE';
|
|
492
|
+
type TableName = 'users' | 'posts' | 'comments';
|
|
493
|
+
type Query<Op extends SQLOperator, Table extends TableName> = `${Op} * FROM ${Table}`;
|
|
494
|
+
|
|
495
|
+
function executeQuery<Op extends SQLOperator, Table extends TableName>(
|
|
496
|
+
query: Query<Op, Table>
|
|
497
|
+
): void {
|
|
498
|
+
console.log(query);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
executeQuery('SELECT * FROM users'); // ✅ OK
|
|
502
|
+
executeQuery('SELECT * FROM posts'); // ✅ OK
|
|
503
|
+
executeQuery('SELECT * FROM invalid'); // ❌ Error
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## Const Assertions
|
|
509
|
+
|
|
510
|
+
Use `as const` to create deeply readonly types with literal values.
|
|
511
|
+
|
|
512
|
+
### Object Const Assertions
|
|
513
|
+
|
|
514
|
+
```typescript
|
|
515
|
+
// ❌ Without const assertion
|
|
516
|
+
const config = {
|
|
517
|
+
apiUrl: 'https://api.example.com',
|
|
518
|
+
timeout: 5000,
|
|
519
|
+
retries: 3
|
|
520
|
+
};
|
|
521
|
+
// Type: { apiUrl: string; timeout: number; retries: number }
|
|
522
|
+
|
|
523
|
+
// ✅ With const assertion
|
|
524
|
+
const configConst = {
|
|
525
|
+
apiUrl: 'https://api.example.com',
|
|
526
|
+
timeout: 5000,
|
|
527
|
+
retries: 3
|
|
528
|
+
} as const;
|
|
529
|
+
// Type: {
|
|
530
|
+
// readonly apiUrl: "https://api.example.com";
|
|
531
|
+
// readonly timeout: 5000;
|
|
532
|
+
// readonly retries: 3;
|
|
533
|
+
// }
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
### Array Const Assertions
|
|
537
|
+
|
|
538
|
+
```typescript
|
|
539
|
+
// ❌ Without const assertion
|
|
540
|
+
const colors = ['red', 'green', 'blue'];
|
|
541
|
+
// Type: string[]
|
|
542
|
+
|
|
543
|
+
// ✅ With const assertion
|
|
544
|
+
const colorsConst = ['red', 'green', 'blue'] as const;
|
|
545
|
+
// Type: readonly ["red", "green", "blue"]
|
|
546
|
+
|
|
547
|
+
type Color = typeof colorsConst[number];
|
|
548
|
+
// Type: "red" | "green" | "blue"
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
### Enum Alternative
|
|
552
|
+
|
|
553
|
+
```typescript
|
|
554
|
+
// ✅ Use const assertion instead of enum
|
|
555
|
+
const Status = {
|
|
556
|
+
PENDING: 'pending',
|
|
557
|
+
APPROVED: 'approved',
|
|
558
|
+
REJECTED: 'rejected'
|
|
559
|
+
} as const;
|
|
560
|
+
|
|
561
|
+
type StatusValue = typeof Status[keyof typeof Status];
|
|
562
|
+
// Type: "pending" | "approved" | "rejected"
|
|
563
|
+
|
|
564
|
+
function updateStatus(status: StatusValue) {
|
|
565
|
+
console.log(status);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
updateStatus(Status.PENDING); // ✅ OK
|
|
569
|
+
updateStatus('pending'); // ✅ OK
|
|
570
|
+
updateStatus('invalid'); // ❌ Error
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## Best Practices
|
|
576
|
+
|
|
577
|
+
1. **Use const type parameters** when you need to preserve exact literal types
|
|
578
|
+
2. **Leverage inferred type predicates** to reduce boilerplate in type guards
|
|
579
|
+
3. **Use satisfies** to validate types without widening them
|
|
580
|
+
4. **Apply variance annotations** for better type safety in generic interfaces
|
|
581
|
+
5. **Use declaration merging** to extend third-party types safely
|
|
582
|
+
6. **Leverage template literal types** for type-safe string manipulation
|
|
583
|
+
7. **Use const assertions** instead of enums for better type inference
|
|
584
|
+
8. **Combine features** for maximum type safety and developer experience
|
|
585
|
+
|
|
586
|
+
---
|
|
587
|
+
|
|
588
|
+
## Migration Guide
|
|
589
|
+
|
|
590
|
+
### From TypeScript 4.x to 5.x
|
|
591
|
+
|
|
592
|
+
```typescript
|
|
593
|
+
// Before (TS 4.x)
|
|
594
|
+
function makeArray<T>(items: T[]): T[] {
|
|
595
|
+
return items;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// After (TS 5.0+)
|
|
599
|
+
function makeArray<const T>(items: T[]): T[] {
|
|
600
|
+
return items;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
// Before (TS 4.x)
|
|
604
|
+
function isString(value: unknown): value is string {
|
|
605
|
+
return typeof value === 'string';
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// After (TS 5.5+)
|
|
609
|
+
function isString(value: unknown) {
|
|
610
|
+
return typeof value === 'string';
|
|
611
|
+
}
|
|
612
|
+
// Type predicate is inferred automatically
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## References
|
|
618
|
+
|
|
619
|
+
- [TypeScript 5.0 Release Notes](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/)
|
|
620
|
+
- [TypeScript 5.5 Release Notes](https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/)
|
|
621
|
+
- [TypeScript Handbook - Advanced Types](https://www.typescriptlang.org/docs/handbook/2/types-from-types.html)
|
|
622
|
+
- [Template Literal Types](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html)
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
|