tsc-ts 0.0.4 → 0.0.6
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 +34 -2
- package/dist/api/compiler/ast-utilities.d.ts +82 -0
- package/dist/api/compiler/ast-utilities.js +462 -0
- package/dist/api/compiler/ast.d.ts +2351 -0
- package/dist/api/compiler/ast.js +11212 -0
- package/dist/api/compiler/astnav.d.ts +37 -0
- package/dist/api/compiler/astnav.js +767 -0
- package/dist/api/compiler/binder-utilities.d.ts +182 -0
- package/dist/api/compiler/binder-utilities.js +1241 -0
- package/dist/api/compiler/binder.d.ts +33 -0
- package/dist/api/compiler/binder.js +2359 -0
- package/dist/api/compiler/character-codes.d.ts +161 -0
- package/dist/api/compiler/character-codes.js +160 -0
- package/dist/api/compiler/checker-calls.d.ts +46 -0
- package/dist/api/compiler/checker-calls.js +1641 -0
- package/dist/api/compiler/checker-classes.d.ts +30 -0
- package/dist/api/compiler/checker-classes.js +582 -0
- package/dist/api/compiler/checker-contextual.d.ts +77 -0
- package/dist/api/compiler/checker-contextual.js +1136 -0
- package/dist/api/compiler/checker-declaration-order.d.ts +12 -0
- package/dist/api/compiler/checker-declaration-order.js +357 -0
- package/dist/api/compiler/checker-declarations.d.ts +33 -0
- package/dist/api/compiler/checker-declarations.js +888 -0
- package/dist/api/compiler/checker-declared-types.d.ts +48 -0
- package/dist/api/compiler/checker-declared-types.js +788 -0
- package/dist/api/compiler/checker-decorators.d.ts +26 -0
- package/dist/api/compiler/checker-decorators.js +562 -0
- package/dist/api/compiler/checker-deprecation.d.ts +33 -0
- package/dist/api/compiler/checker-deprecation.js +314 -0
- package/dist/api/compiler/checker-destructuring.d.ts +34 -0
- package/dist/api/compiler/checker-destructuring.js +584 -0
- package/dist/api/compiler/checker-elaboration.d.ts +15 -0
- package/dist/api/compiler/checker-elaboration.js +291 -0
- package/dist/api/compiler/checker-emit-helpers.d.ts +58 -0
- package/dist/api/compiler/checker-emit-helpers.js +154 -0
- package/dist/api/compiler/checker-emit-resolver.d.ts +75 -0
- package/dist/api/compiler/checker-emit-resolver.js +580 -0
- package/dist/api/compiler/checker-evaluator.d.ts +27 -0
- package/dist/api/compiler/checker-evaluator.js +188 -0
- package/dist/api/compiler/checker-expressions.d.ts +67 -0
- package/dist/api/compiler/checker-expressions.js +1351 -0
- package/dist/api/compiler/checker-features.d.ts +6 -0
- package/dist/api/compiler/checker-features.js +354 -0
- package/dist/api/compiler/checker-flow.d.ts +86 -0
- package/dist/api/compiler/checker-flow.js +169 -0
- package/dist/api/compiler/checker-functions.d.ts +43 -0
- package/dist/api/compiler/checker-functions.js +1002 -0
- package/dist/api/compiler/checker-generated-code.d.ts +25 -0
- package/dist/api/compiler/checker-generated-code.js +168 -0
- package/dist/api/compiler/checker-globals.d.ts +14 -0
- package/dist/api/compiler/checker-globals.js +37 -0
- package/dist/api/compiler/checker-grammar.d.ts +35 -0
- package/dist/api/compiler/checker-grammar.js +2587 -0
- package/dist/api/compiler/checker-heritage.d.ts +28 -0
- package/dist/api/compiler/checker-heritage.js +901 -0
- package/dist/api/compiler/checker-inference.d.ts +179 -0
- package/dist/api/compiler/checker-inference.js +2105 -0
- package/dist/api/compiler/checker-iteration.d.ts +115 -0
- package/dist/api/compiler/checker-iteration.js +857 -0
- package/dist/api/compiler/checker-javascript.d.ts +42 -0
- package/dist/api/compiler/checker-javascript.js +442 -0
- package/dist/api/compiler/checker-jsdoc.d.ts +30 -0
- package/dist/api/compiler/checker-jsdoc.js +320 -0
- package/dist/api/compiler/checker-jsx.d.ts +94 -0
- package/dist/api/compiler/checker-jsx.js +1433 -0
- package/dist/api/compiler/checker-literals.d.ts +6 -0
- package/dist/api/compiler/checker-literals.js +43 -0
- package/dist/api/compiler/checker-members.d.ts +200 -0
- package/dist/api/compiler/checker-members.js +2148 -0
- package/dist/api/compiler/checker-modules.d.ts +85 -0
- package/dist/api/compiler/checker-modules.js +2141 -0
- package/dist/api/compiler/checker-narrowing.d.ts +120 -0
- package/dist/api/compiler/checker-narrowing.js +2797 -0
- package/dist/api/compiler/checker-object-literals.d.ts +14 -0
- package/dist/api/compiler/checker-object-literals.js +483 -0
- package/dist/api/compiler/checker-operators.d.ts +33 -0
- package/dist/api/compiler/checker-operators.js +1040 -0
- package/dist/api/compiler/checker-overloads.d.ts +7 -0
- package/dist/api/compiler/checker-overloads.js +271 -0
- package/dist/api/compiler/checker-property-access.d.ts +34 -0
- package/dist/api/compiler/checker-property-access.js +672 -0
- package/dist/api/compiler/checker-services.d.ts +49 -0
- package/dist/api/compiler/checker-services.js +995 -0
- package/dist/api/compiler/checker-signatures.d.ts +55 -0
- package/dist/api/compiler/checker-signatures.js +789 -0
- package/dist/api/compiler/checker-source-file.d.ts +27 -0
- package/dist/api/compiler/checker-source-file.js +619 -0
- package/dist/api/compiler/checker-statements.d.ts +18 -0
- package/dist/api/compiler/checker-statements.js +226 -0
- package/dist/api/compiler/checker-super.d.ts +13 -0
- package/dist/api/compiler/checker-super.js +241 -0
- package/dist/api/compiler/checker-symbol-types.d.ts +51 -0
- package/dist/api/compiler/checker-symbol-types.js +955 -0
- package/dist/api/compiler/checker-symbols.d.ts +181 -0
- package/dist/api/compiler/checker-symbols.js +1784 -0
- package/dist/api/compiler/checker-type-factory.d.ts +142 -0
- package/dist/api/compiler/checker-type-factory.js +2542 -0
- package/dist/api/compiler/checker-type-nodes.d.ts +26 -0
- package/dist/api/compiler/checker-type-nodes.js +828 -0
- package/dist/api/compiler/checker-type-operators.d.ts +109 -0
- package/dist/api/compiler/checker-type-operators.js +1842 -0
- package/dist/api/compiler/checker-types.d.ts +1093 -0
- package/dist/api/compiler/checker-types.js +1874 -0
- package/dist/api/compiler/checker-unused.d.ts +19 -0
- package/dist/api/compiler/checker-unused.js +524 -0
- package/dist/api/compiler/checker-utilities.d.ts +33 -0
- package/dist/api/compiler/checker-utilities.js +141 -0
- package/dist/api/compiler/checker.d.ts +512 -0
- package/dist/api/compiler/checker.js +932 -0
- package/dist/api/compiler/command-line.d.ts +32 -0
- package/dist/api/compiler/command-line.js +383 -0
- package/dist/api/compiler/compile-program.d.ts +118 -0
- package/dist/api/compiler/compile-program.js +384 -0
- package/dist/api/compiler/diagnostic-locales.d.ts +22 -0
- package/dist/api/compiler/diagnostic-locales.js +64 -0
- package/dist/api/compiler/diagnostic-messages.d.ts +2166 -0
- package/dist/api/compiler/diagnostic-messages.js +184 -0
- package/dist/api/compiler/diagnostics.d.ts +161 -0
- package/dist/api/compiler/diagnostics.js +784 -0
- package/dist/api/compiler/emitter.d.ts +71 -0
- package/dist/api/compiler/emitter.js +327 -0
- package/dist/api/compiler/file-include.d.ts +144 -0
- package/dist/api/compiler/file-include.js +599 -0
- package/dist/api/compiler/file-loader.d.ts +290 -0
- package/dist/api/compiler/file-loader.js +1323 -0
- package/dist/api/compiler/file-system.d.ts +51 -0
- package/dist/api/compiler/file-system.js +132 -0
- package/dist/api/compiler/flow.d.ts +60 -0
- package/dist/api/compiler/flow.js +45 -0
- package/dist/api/compiler/instantiation.d.ts +74 -0
- package/dist/api/compiler/instantiation.js +835 -0
- package/dist/api/compiler/jsdoc.d.ts +75 -0
- package/dist/api/compiler/jsdoc.js +1229 -0
- package/dist/api/compiler/link-tables.d.ts +105 -0
- package/dist/api/compiler/link-tables.js +319 -0
- package/dist/api/compiler/locale-data.d.ts +24 -0
- package/dist/api/compiler/locale-data.js +183 -0
- package/dist/api/compiler/locale.d.ts +4 -0
- package/dist/api/compiler/locale.js +317 -0
- package/dist/api/compiler/locales/cs-CZ.d.ts +2 -0
- package/dist/api/compiler/locales/cs-CZ.js +3 -0
- package/dist/api/compiler/locales/de-DE.d.ts +2 -0
- package/dist/api/compiler/locales/de-DE.js +3 -0
- package/dist/api/compiler/locales/es-ES.d.ts +2 -0
- package/dist/api/compiler/locales/es-ES.js +3 -0
- package/dist/api/compiler/locales/fr-FR.d.ts +2 -0
- package/dist/api/compiler/locales/fr-FR.js +3 -0
- package/dist/api/compiler/locales/it-IT.d.ts +2 -0
- package/dist/api/compiler/locales/it-IT.js +3 -0
- package/dist/api/compiler/locales/ja-JP.d.ts +2 -0
- package/dist/api/compiler/locales/ja-JP.js +3 -0
- package/dist/api/compiler/locales/ko-KR.d.ts +2 -0
- package/dist/api/compiler/locales/ko-KR.js +3 -0
- package/dist/api/compiler/locales/pl-PL.d.ts +2 -0
- package/dist/api/compiler/locales/pl-PL.js +3 -0
- package/dist/api/compiler/locales/pt-BR.d.ts +2 -0
- package/dist/api/compiler/locales/pt-BR.js +3 -0
- package/dist/api/compiler/locales/ru-RU.d.ts +2 -0
- package/dist/api/compiler/locales/ru-RU.js +3 -0
- package/dist/api/compiler/locales/tr-TR.d.ts +2 -0
- package/dist/api/compiler/locales/tr-TR.js +3 -0
- package/dist/api/compiler/locales/zh-CN.d.ts +2 -0
- package/dist/api/compiler/locales/zh-CN.js +3 -0
- package/dist/api/compiler/locales/zh-TW.d.ts +2 -0
- package/dist/api/compiler/locales/zh-TW.js +3 -0
- package/dist/api/compiler/module-resolution-types.d.ts +83 -0
- package/dist/api/compiler/module-resolution-types.js +176 -0
- package/dist/api/compiler/module-resolution.d.ts +71 -0
- package/dist/api/compiler/module-resolution.js +1598 -0
- package/dist/api/compiler/module-specifiers.d.ts +64 -0
- package/dist/api/compiler/module-specifiers.js +1101 -0
- package/dist/api/compiler/name-resolver.d.ts +43 -0
- package/dist/api/compiler/name-resolver.js +509 -0
- package/dist/api/compiler/node-builder-names.d.ts +32 -0
- package/dist/api/compiler/node-builder-names.js +854 -0
- package/dist/api/compiler/node-builder-pseudo.d.ts +36 -0
- package/dist/api/compiler/node-builder-pseudo.js +745 -0
- package/dist/api/compiler/node-builder-reuse.d.ts +4 -0
- package/dist/api/compiler/node-builder-reuse.js +647 -0
- package/dist/api/compiler/node-builder.d.ts +270 -0
- package/dist/api/compiler/node-builder.js +2645 -0
- package/dist/api/compiler/option-declarations.d.ts +90 -0
- package/dist/api/compiler/option-declarations.js +1460 -0
- package/dist/api/compiler/options.d.ts +289 -0
- package/dist/api/compiler/options.js +1197 -0
- package/dist/api/compiler/output-paths.d.ts +42 -0
- package/dist/api/compiler/output-paths.js +195 -0
- package/dist/api/compiler/package-json.d.ts +175 -0
- package/dist/api/compiler/package-json.js +1015 -0
- package/dist/api/compiler/parallel-parse.d.ts +221 -0
- package/dist/api/compiler/parallel-parse.js +541 -0
- package/dist/api/compiler/parser.d.ts +604 -0
- package/dist/api/compiler/parser.js +6426 -0
- package/dist/api/compiler/path.d.ts +91 -0
- package/dist/api/compiler/path.js +705 -0
- package/dist/api/compiler/printer/async-helpers.d.ts +22 -0
- package/dist/api/compiler/printer/async-helpers.js +91 -0
- package/dist/api/compiler/printer/auto-generate.d.ts +13 -0
- package/dist/api/compiler/printer/auto-generate.js +20 -0
- package/dist/api/compiler/printer/decorator-helpers.d.ts +24 -0
- package/dist/api/compiler/printer/decorator-helpers.js +118 -0
- package/dist/api/compiler/printer/emit-context.d.ts +157 -0
- package/dist/api/compiler/printer/emit-context.js +582 -0
- package/dist/api/compiler/printer/emit-flags.d.ts +60 -0
- package/dist/api/compiler/printer/emit-flags.js +2 -0
- package/dist/api/compiler/printer/factory-base.d.ts +171 -0
- package/dist/api/compiler/printer/factory-base.js +1505 -0
- package/dist/api/compiler/printer/factory.d.ts +147 -0
- package/dist/api/compiler/printer/factory.js +542 -0
- package/dist/api/compiler/printer/helpers.d.ts +27 -0
- package/dist/api/compiler/printer/helpers.js +164 -0
- package/dist/api/compiler/printer/name-generator.d.ts +41 -0
- package/dist/api/compiler/printer/name-generator.js +283 -0
- package/dist/api/compiler/printer/printer.d.ts +411 -0
- package/dist/api/compiler/printer/printer.js +4517 -0
- package/dist/api/compiler/printer/text-writer.d.ts +46 -0
- package/dist/api/compiler/printer/text-writer.js +172 -0
- package/dist/api/compiler/printer/utilities.d.ts +82 -0
- package/dist/api/compiler/printer/utilities.js +817 -0
- package/dist/api/compiler/program-checker.d.ts +156 -0
- package/dist/api/compiler/program-checker.js +529 -0
- package/dist/api/compiler/program-utilities.d.ts +52 -0
- package/dist/api/compiler/program-utilities.js +365 -0
- package/dist/api/compiler/program.d.ts +180 -0
- package/dist/api/compiler/program.js +1019 -0
- package/dist/api/compiler/pseudo-bigint.d.ts +5 -0
- package/dist/api/compiler/pseudo-bigint.js +61 -0
- package/dist/api/compiler/regexp-checker.d.ts +38 -0
- package/dist/api/compiler/regexp-checker.js +942 -0
- package/dist/api/compiler/relations.d.ts +263 -0
- package/dist/api/compiler/relations.js +4002 -0
- package/dist/api/compiler/reparser.d.ts +48 -0
- package/dist/api/compiler/reparser.js +1323 -0
- package/dist/api/compiler/scanner.d.ts +256 -0
- package/dist/api/compiler/scanner.js +2853 -0
- package/dist/api/compiler/side-state.d.ts +16 -0
- package/dist/api/compiler/side-state.js +89 -0
- package/dist/api/compiler/sourcemap.d.ts +55 -0
- package/dist/api/compiler/sourcemap.js +340 -0
- package/dist/api/compiler/spelling.d.ts +14 -0
- package/dist/api/compiler/spelling.js +128 -0
- package/dist/api/compiler/symbol-accessibility.d.ts +57 -0
- package/dist/api/compiler/symbol-accessibility.js +991 -0
- package/dist/api/compiler/symbol.d.ts +282 -0
- package/dist/api/compiler/symbol.js +339 -0
- package/dist/api/compiler/symlinks.d.ts +32 -0
- package/dist/api/compiler/symlinks.js +114 -0
- package/dist/api/compiler/syntax-kind.d.ts +389 -0
- package/dist/api/compiler/syntax-kind.js +2 -0
- package/dist/api/compiler/timeline.d.ts +9 -0
- package/dist/api/compiler/timeline.js +54 -0
- package/dist/api/compiler/transformers/alias-references.d.ts +39 -0
- package/dist/api/compiler/transformers/alias-references.js +677 -0
- package/dist/api/compiler/transformers/async-utilities.d.ts +51 -0
- package/dist/api/compiler/transformers/async-utilities.js +260 -0
- package/dist/api/compiler/transformers/async.d.ts +53 -0
- package/dist/api/compiler/transformers/async.js +645 -0
- package/dist/api/compiler/transformers/class-fields.d.ts +206 -0
- package/dist/api/compiler/transformers/class-fields.js +2418 -0
- package/dist/api/compiler/transformers/class-utilities.d.ts +46 -0
- package/dist/api/compiler/transformers/class-utilities.js +261 -0
- package/dist/api/compiler/transformers/commonjs-module.d.ts +103 -0
- package/dist/api/compiler/transformers/commonjs-module.js +1180 -0
- package/dist/api/compiler/transformers/const-enum-inliner.d.ts +11 -0
- package/dist/api/compiler/transformers/const-enum-inliner.js +36 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.d.ts +52 -0
- package/dist/api/compiler/transformers/declarations-diagnostics.js +539 -0
- package/dist/api/compiler/transformers/declarations-pseudo.d.ts +160 -0
- package/dist/api/compiler/transformers/declarations-pseudo.js +799 -0
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +152 -0
- package/dist/api/compiler/transformers/declarations-resolver.js +35 -0
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +119 -0
- package/dist/api/compiler/transformers/declarations-syntactic.js +1582 -0
- package/dist/api/compiler/transformers/declarations-tracker.d.ts +46 -0
- package/dist/api/compiler/transformers/declarations-tracker.js +198 -0
- package/dist/api/compiler/transformers/declarations.d.ts +175 -0
- package/dist/api/compiler/transformers/declarations.js +2381 -0
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +54 -0
- package/dist/api/compiler/transformers/decorator-metadata.js +554 -0
- package/dist/api/compiler/transformers/decorator-utilities.d.ts +38 -0
- package/dist/api/compiler/transformers/decorator-utilities.js +238 -0
- package/dist/api/compiler/transformers/destructuring.d.ts +25 -0
- package/dist/api/compiler/transformers/destructuring.js +626 -0
- package/dist/api/compiler/transformers/downlevel.d.ts +6 -0
- package/dist/api/compiler/transformers/downlevel.js +45 -0
- package/dist/api/compiler/transformers/emit-resolver.d.ts +61 -0
- package/dist/api/compiler/transformers/emit-resolver.js +197 -0
- package/dist/api/compiler/transformers/es-decorators.d.ts +118 -0
- package/dist/api/compiler/transformers/es-decorators.js +1901 -0
- package/dist/api/compiler/transformers/exponentiation.d.ts +11 -0
- package/dist/api/compiler/transformers/exponentiation.js +76 -0
- package/dist/api/compiler/transformers/external-module-info.d.ts +35 -0
- package/dist/api/compiler/transformers/external-module-info.js +351 -0
- package/dist/api/compiler/transformers/for-await.d.ts +43 -0
- package/dist/api/compiler/transformers/for-await.js +469 -0
- package/dist/api/compiler/transformers/import-elision.d.ts +16 -0
- package/dist/api/compiler/transformers/import-elision.js +124 -0
- package/dist/api/compiler/transformers/jsx-entities.d.ts +1 -0
- package/dist/api/compiler/transformers/jsx-entities.js +256 -0
- package/dist/api/compiler/transformers/jsx.d.ts +71 -0
- package/dist/api/compiler/transformers/jsx.js +700 -0
- package/dist/api/compiler/transformers/legacy-decorators.d.ts +56 -0
- package/dist/api/compiler/transformers/legacy-decorators.js +564 -0
- package/dist/api/compiler/transformers/logical-assignment.d.ts +14 -0
- package/dist/api/compiler/transformers/logical-assignment.js +62 -0
- package/dist/api/compiler/transformers/module-utilities.d.ts +9 -0
- package/dist/api/compiler/transformers/module-utilities.js +36 -0
- package/dist/api/compiler/transformers/module.d.ts +49 -0
- package/dist/api/compiler/transformers/module.js +296 -0
- package/dist/api/compiler/transformers/named-evaluation.d.ts +26 -0
- package/dist/api/compiler/transformers/named-evaluation.js +266 -0
- package/dist/api/compiler/transformers/nullish-coalescing.d.ts +9 -0
- package/dist/api/compiler/transformers/nullish-coalescing.js +26 -0
- package/dist/api/compiler/transformers/object-rest-spread.d.ts +34 -0
- package/dist/api/compiler/transformers/object-rest-spread.js +411 -0
- package/dist/api/compiler/transformers/optional-catch.d.ts +9 -0
- package/dist/api/compiler/transformers/optional-catch.js +20 -0
- package/dist/api/compiler/transformers/optional-chain.d.ts +14 -0
- package/dist/api/compiler/transformers/optional-chain.js +188 -0
- package/dist/api/compiler/transformers/reference-resolver.d.ts +129 -0
- package/dist/api/compiler/transformers/reference-resolver.js +1157 -0
- package/dist/api/compiler/transformers/runtime-syntax.d.ts +71 -0
- package/dist/api/compiler/transformers/runtime-syntax.js +753 -0
- package/dist/api/compiler/transformers/subtree-facts.d.ts +10 -0
- package/dist/api/compiler/transformers/subtree-facts.js +205 -0
- package/dist/api/compiler/transformers/syntax-facts.d.ts +52 -0
- package/dist/api/compiler/transformers/syntax-facts.js +258 -0
- package/dist/api/compiler/transformers/tagged-template.d.ts +17 -0
- package/dist/api/compiler/transformers/tagged-template.js +148 -0
- package/dist/api/compiler/transformers/transformer.d.ts +17 -0
- package/dist/api/compiler/transformers/transformer.js +54 -0
- package/dist/api/compiler/transformers/type-eraser.d.ts +21 -0
- package/dist/api/compiler/transformers/type-eraser.js +346 -0
- package/dist/api/compiler/transformers/type-serialization.d.ts +20 -0
- package/dist/api/compiler/transformers/type-serialization.js +347 -0
- package/dist/api/compiler/transformers/using.d.ts +56 -0
- package/dist/api/compiler/transformers/using.js +453 -0
- package/dist/api/compiler/transformers/utilities.d.ts +50 -0
- package/dist/api/compiler/transformers/utilities.js +347 -0
- package/dist/api/compiler/transformers/visitor-base.d.ts +6 -0
- package/dist/api/compiler/transformers/visitor-base.js +817 -0
- package/dist/api/compiler/transformers/visitor-hooks.d.ts +29 -0
- package/dist/api/compiler/transformers/visitor-hooks.js +189 -0
- package/dist/api/compiler/tsconfig.d.ts +177 -0
- package/dist/api/compiler/tsconfig.js +1311 -0
- package/dist/api/compiler/type-printer.d.ts +15 -0
- package/dist/api/compiler/type-printer.js +74 -0
- package/dist/api/compiler/types.d.ts +87 -0
- package/dist/api/compiler/types.js +23 -0
- package/dist/api/compiler/unicode-identifiers.d.ts +2 -0
- package/dist/api/compiler/unicode-identifiers.js +209 -0
- package/dist/api/compiler/unicode-properties.d.ts +8 -0
- package/dist/api/compiler/unicode-properties.js +531 -0
- package/dist/api/compiler/vfs-match.d.ts +24 -0
- package/dist/api/compiler/vfs-match.js +587 -0
- package/dist/api/library/ast.d.ts +3 -2
- package/dist/api/library/ast.generated.d.ts +127 -139
- package/dist/api/library/checker.d.ts +51 -0
- package/dist/api/library/checker.js +318 -0
- package/dist/api/library/diagnostics.d.ts +13 -0
- package/dist/api/library/diagnostics.js +50 -0
- package/dist/api/library/disk.d.ts +13 -0
- package/dist/api/library/disk.js +66 -0
- package/dist/api/library/errors.d.ts +13 -0
- package/dist/api/library/errors.js +24 -0
- package/dist/api/library/host.d.ts +24 -0
- package/dist/api/library/host.js +52 -0
- package/dist/api/library/index.d.ts +5 -1
- package/dist/api/library/index.js +4 -0
- package/dist/api/library/nodes.d.ts +51 -0
- package/dist/api/library/nodes.js +196 -0
- package/dist/api/library/options.d.ts +144 -0
- package/dist/api/library/options.js +308 -0
- package/dist/api/library/parse.d.ts +19 -0
- package/dist/api/library/parse.js +41 -0
- package/dist/api/library/program.d.ts +21 -0
- package/dist/api/library/program.js +234 -0
- package/dist/api/library/types.d.ts +14 -1
- package/package.json +12 -8
- package/src/compiler/ast-utilities.ts +548 -0
- package/src/compiler/ast.ts +12870 -0
- package/src/compiler/astnav.ts +799 -0
- package/src/compiler/binder-utilities.ts +1392 -0
- package/src/compiler/binder.ts +2707 -0
- package/src/compiler/build-info.ts +1197 -0
- package/src/compiler/character-codes.ts +323 -0
- package/src/compiler/checker-calls.ts +2155 -0
- package/src/compiler/checker-classes.ts +706 -0
- package/src/compiler/checker-contextual.ts +1457 -0
- package/src/compiler/checker-declaration-order.ts +438 -0
- package/src/compiler/checker-declarations.ts +1201 -0
- package/src/compiler/checker-declared-types.ts +919 -0
- package/src/compiler/checker-decorators.ts +694 -0
- package/src/compiler/checker-deprecation.ts +355 -0
- package/src/compiler/checker-destructuring.ts +805 -0
- package/src/compiler/checker-elaboration.ts +477 -0
- package/src/compiler/checker-emit-helpers.ts +224 -0
- package/src/compiler/checker-emit-resolver.ts +769 -0
- package/src/compiler/checker-evaluator.ts +243 -0
- package/src/compiler/checker-expressions.ts +1831 -0
- package/src/compiler/checker-features.ts +361 -0
- package/src/compiler/checker-flow.ts +394 -0
- package/src/compiler/checker-functions.ts +1296 -0
- package/src/compiler/checker-generated-code.ts +227 -0
- package/src/compiler/checker-globals.ts +52 -0
- package/src/compiler/checker-grammar.ts +3596 -0
- package/src/compiler/checker-heritage.ts +1240 -0
- package/src/compiler/checker-inference.ts +2584 -0
- package/src/compiler/checker-iteration.ts +1206 -0
- package/src/compiler/checker-javascript.ts +502 -0
- package/src/compiler/checker-jsdoc.ts +360 -0
- package/src/compiler/checker-jsx.ts +1928 -0
- package/src/compiler/checker-literals.ts +61 -0
- package/src/compiler/checker-members.ts +2480 -0
- package/src/compiler/checker-modules.ts +2896 -0
- package/src/compiler/checker-narrowing.ts +3230 -0
- package/src/compiler/checker-object-literals.ts +591 -0
- package/src/compiler/checker-operators.ts +1422 -0
- package/src/compiler/checker-overloads.ts +328 -0
- package/src/compiler/checker-property-access.ts +906 -0
- package/src/compiler/checker-services.ts +1149 -0
- package/src/compiler/checker-signatures.ts +1032 -0
- package/src/compiler/checker-source-file.ts +732 -0
- package/src/compiler/checker-statements.ts +292 -0
- package/src/compiler/checker-super.ts +261 -0
- package/src/compiler/checker-symbol-types.ts +1187 -0
- package/src/compiler/checker-symbols.ts +2157 -0
- package/src/compiler/checker-type-factory.ts +2616 -0
- package/src/compiler/checker-type-nodes.ts +1033 -0
- package/src/compiler/checker-type-operators.ts +2510 -0
- package/src/compiler/checker-types.ts +2520 -0
- package/src/compiler/checker-unused.ts +642 -0
- package/src/compiler/checker-utilities.ts +161 -0
- package/src/compiler/checker.ts +1138 -0
- package/src/compiler/command-line.ts +436 -0
- package/src/compiler/compile-program.ts +439 -0
- package/src/compiler/decoder.ts +1209 -0
- package/src/compiler/diagnostic-locales.ts +86 -0
- package/src/compiler/diagnostic-messages.ts +2349 -0
- package/src/compiler/diagnostics.ts +858 -0
- package/src/compiler/emitter.ts +434 -0
- package/src/compiler/encoder.ts +1945 -0
- package/src/compiler/file-include.ts +741 -0
- package/src/compiler/file-loader.ts +1597 -0
- package/src/compiler/file-system.ts +143 -0
- package/src/compiler/flow.ts +89 -0
- package/src/compiler/help.ts +473 -0
- package/src/compiler/incremental.ts +2818 -0
- package/src/compiler/init.ts +141 -0
- package/src/compiler/instantiation.ts +938 -0
- package/src/compiler/jsdoc.ts +1386 -0
- package/src/compiler/link-tables.ts +343 -0
- package/src/compiler/locale-data.ts +203 -0
- package/src/compiler/locale.ts +307 -0
- package/src/compiler/locales/cs-CZ.ts +5 -0
- package/src/compiler/locales/de-DE.ts +5 -0
- package/src/compiler/locales/es-ES.ts +5 -0
- package/src/compiler/locales/fr-FR.ts +5 -0
- package/src/compiler/locales/it-IT.ts +5 -0
- package/src/compiler/locales/ja-JP.ts +5 -0
- package/src/compiler/locales/ko-KR.ts +5 -0
- package/src/compiler/locales/pl-PL.ts +5 -0
- package/src/compiler/locales/pt-BR.ts +5 -0
- package/src/compiler/locales/ru-RU.ts +5 -0
- package/src/compiler/locales/tr-TR.ts +5 -0
- package/src/compiler/locales/zh-CN.ts +5 -0
- package/src/compiler/locales/zh-TW.ts +5 -0
- package/src/compiler/module-resolution-types.ts +243 -0
- package/src/compiler/module-resolution.ts +2072 -0
- package/src/compiler/module-specifiers.ts +1491 -0
- package/src/compiler/name-resolver.ts +646 -0
- package/src/compiler/node-builder-names.ts +1071 -0
- package/src/compiler/node-builder-pseudo.ts +892 -0
- package/src/compiler/node-builder-reuse.ts +764 -0
- package/src/compiler/node-builder.ts +3433 -0
- package/src/compiler/option-declarations.ts +1560 -0
- package/src/compiler/options.ts +1576 -0
- package/src/compiler/output-paths.ts +334 -0
- package/src/compiler/package-json.ts +1083 -0
- package/src/compiler/parallel-check.ts +1954 -0
- package/src/compiler/parallel-parse.ts +595 -0
- package/src/compiler/parse-thread.ts +136 -0
- package/src/compiler/parser.ts +7766 -0
- package/src/compiler/path.ts +717 -0
- package/src/compiler/printer/async-helpers.ts +183 -0
- package/src/compiler/printer/auto-generate.ts +27 -0
- package/src/compiler/printer/decorator-helpers.ts +218 -0
- package/src/compiler/printer/emit-context.ts +684 -0
- package/src/compiler/printer/emit-flags.ts +64 -0
- package/src/compiler/printer/factory-base.ts +2577 -0
- package/src/compiler/printer/factory.ts +764 -0
- package/src/compiler/printer/helpers.ts +291 -0
- package/src/compiler/printer/name-generator.ts +372 -0
- package/src/compiler/printer/printer.ts +5072 -0
- package/src/compiler/printer/text-writer.ts +183 -0
- package/src/compiler/printer/utilities.ts +884 -0
- package/src/compiler/program-checker.ts +594 -0
- package/src/compiler/program-utilities.ts +435 -0
- package/src/compiler/program.ts +1426 -0
- package/src/compiler/pseudo-bigint.ts +62 -0
- package/src/compiler/regexp-checker.ts +1142 -0
- package/src/compiler/relations.ts +5149 -0
- package/src/compiler/reparser.ts +1566 -0
- package/src/compiler/scanner.ts +2951 -0
- package/src/compiler/show-config.ts +239 -0
- package/src/compiler/side-state.ts +125 -0
- package/src/compiler/sourcemap.ts +366 -0
- package/src/compiler/spelling.ts +122 -0
- package/src/compiler/symbol-accessibility.ts +1166 -0
- package/src/compiler/symbol.ts +557 -0
- package/src/compiler/symlinks.ts +137 -0
- package/src/compiler/syntax-kind.ts +391 -0
- package/src/compiler/thread-entry.ts +191 -0
- package/src/compiler/timeline.ts +53 -0
- package/src/compiler/transformers/alias-references.ts +757 -0
- package/src/compiler/transformers/async-utilities.ts +335 -0
- package/src/compiler/transformers/async.ts +838 -0
- package/src/compiler/transformers/class-fields.ts +2967 -0
- package/src/compiler/transformers/class-utilities.ts +324 -0
- package/src/compiler/transformers/commonjs-module.ts +1621 -0
- package/src/compiler/transformers/const-enum-inliner.ts +50 -0
- package/src/compiler/transformers/declarations-diagnostics.ts +833 -0
- package/src/compiler/transformers/declarations-pseudo.ts +969 -0
- package/src/compiler/transformers/declarations-resolver.ts +249 -0
- package/src/compiler/transformers/declarations-syntactic.ts +1867 -0
- package/src/compiler/transformers/declarations-tracker.ts +269 -0
- package/src/compiler/transformers/declarations.ts +3120 -0
- package/src/compiler/transformers/decorator-metadata.ts +697 -0
- package/src/compiler/transformers/decorator-utilities.ts +283 -0
- package/src/compiler/transformers/destructuring.ts +708 -0
- package/src/compiler/transformers/downlevel.ts +50 -0
- package/src/compiler/transformers/emit-resolver.ts +258 -0
- package/src/compiler/transformers/es-decorators.ts +2682 -0
- package/src/compiler/transformers/exponentiation.ts +80 -0
- package/src/compiler/transformers/external-module-info.ts +412 -0
- package/src/compiler/transformers/for-await.ts +687 -0
- package/src/compiler/transformers/import-elision.ts +152 -0
- package/src/compiler/transformers/jsx-entities.ts +256 -0
- package/src/compiler/transformers/jsx.ts +824 -0
- package/src/compiler/transformers/legacy-decorators.ts +726 -0
- package/src/compiler/transformers/logical-assignment.ts +75 -0
- package/src/compiler/transformers/module-utilities.ts +42 -0
- package/src/compiler/transformers/module.ts +474 -0
- package/src/compiler/transformers/named-evaluation.ts +389 -0
- package/src/compiler/transformers/nullish-coalescing.ts +35 -0
- package/src/compiler/transformers/object-rest-spread.ts +577 -0
- package/src/compiler/transformers/optional-catch.ts +29 -0
- package/src/compiler/transformers/optional-chain.ts +246 -0
- package/src/compiler/transformers/reference-resolver.ts +1213 -0
- package/src/compiler/transformers/runtime-syntax.ts +942 -0
- package/src/compiler/transformers/subtree-facts.ts +253 -0
- package/src/compiler/transformers/syntax-facts.ts +358 -0
- package/src/compiler/transformers/tagged-template.ts +167 -0
- package/src/compiler/transformers/transformer.ts +56 -0
- package/src/compiler/transformers/type-eraser.ts +520 -0
- package/src/compiler/transformers/type-serialization.ts +374 -0
- package/src/compiler/transformers/using.ts +613 -0
- package/src/compiler/transformers/utilities.ts +419 -0
- package/src/compiler/transformers/visitor-base.ts +1601 -0
- package/src/compiler/transformers/visitor-hooks.ts +252 -0
- package/src/compiler/tsc-build.ts +1422 -0
- package/src/compiler/tsc-cli.ts +669 -0
- package/src/compiler/tsc-compile.ts +446 -0
- package/src/compiler/tsc-watch.ts +922 -0
- package/src/compiler/tsconfig.ts +1574 -0
- package/src/compiler/type-printer.ts +110 -0
- package/src/compiler/types.ts +115 -0
- package/src/compiler/unicode-identifiers.ts +212 -0
- package/src/compiler/unicode-properties.ts +537 -0
- package/src/compiler/vfs-match.ts +597 -0
- package/src/compiler/xxh3.ts +650 -0
- package/src/library/ast.generated.ts +141 -167
- package/src/library/ast.ts +4 -1
- package/src/library/checker.ts +384 -0
- package/src/library/diagnostics.ts +72 -0
- package/src/library/disk.ts +73 -0
- package/src/library/errors.ts +26 -0
- package/src/library/host.ts +63 -0
- package/src/library/index.ts +21 -0
- package/src/library/nodes.ts +232 -0
- package/src/library/options.ts +449 -0
- package/src/library/parse.ts +63 -0
- package/src/library/program.ts +293 -0
- package/src/library/types.ts +14 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Node } from './ast.js';
|
|
2
|
+
import { type DiagnosticMessage } from './diagnostics.js';
|
|
3
|
+
import type { Checker } from './checker.js';
|
|
4
|
+
import { type Signature, type Type } from './checker-types.js';
|
|
5
|
+
import { type Symbol } from './symbol.js';
|
|
6
|
+
export declare function checkClassDeclaration(c: Checker, node: Node): void;
|
|
7
|
+
/** Checks a class expression each time it is checked; its members are checked deferred. */
|
|
8
|
+
export declare function checkClassExpression(c: Checker, node: Node): Type;
|
|
9
|
+
export declare function checkClassLikeDeferred(c: Checker, node: Node): void;
|
|
10
|
+
/** Reports a class, interface, enum or type alias named after a predefined type. */
|
|
11
|
+
export declare function checkTypeNameIsReserved(c: Checker, name: Node, message: DiagnosticMessage): void;
|
|
12
|
+
/** Accessor checks beyond the body: returns, `constructor` names and getter/setter agreement. */
|
|
13
|
+
export declare function checkAccessorDeclaration(c: Checker, node: Node): void;
|
|
14
|
+
/** Whether `this.name` is definitely assigned at the end of the constructor, by control flow. */
|
|
15
|
+
export declare function isPropertyInitializedInConstructor(c: Checker, propName: Node, propType: Type, constructor: Node): boolean;
|
|
16
|
+
/** Whether a static block between `startPos` and `endPos` definitely assigns `this.name`. */
|
|
17
|
+
export declare function isPropertyInitializedInStaticBlocks(c: Checker, propName: Node, propType: Type, staticBlocks: readonly Node[], startPos: number, endPos: number): boolean;
|
|
18
|
+
/** The type of an unannotated, uninitialized property from its `this` assignments in the constructor. */
|
|
19
|
+
export declare function getFlowTypeInConstructor(c: Checker, symbol: Symbol, constructor: Node): Type | undefined;
|
|
20
|
+
/** The type of an unannotated, uninitialized static property from its `this` assignments in static blocks. */
|
|
21
|
+
export declare function getFlowTypeInStaticBlocks(c: Checker, symbol: Symbol, staticBlocks: Node[]): Type | undefined;
|
|
22
|
+
/** The control flow type of `this.x` at `reference`, from `undefined` or the base class property type. */
|
|
23
|
+
export declare function getFlowTypeOfProperty(c: Checker, reference: Node, prop: Symbol): Type;
|
|
24
|
+
/** Whether a property's type comes from its assignments: it has no annotation or initializer. */
|
|
25
|
+
export declare function isAutoTypedProperty(c: Checker, symbol: Symbol): boolean;
|
|
26
|
+
/** The type of the property in the first base class, if it has one. */
|
|
27
|
+
export declare function getTypeOfPropertyInBaseClass(c: Checker, property: Symbol): Type | undefined;
|
|
28
|
+
/** Whether `new` at `node` may call a constructor, reporting private and protected ones out of reach. */
|
|
29
|
+
export declare function isConstructorAccessible(c: Checker, node: Node, signature: Signature | undefined): boolean;
|
|
30
|
+
export declare function checkInterfaceDeclaration(c: Checker, node: Node): void;
|
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
// Classes and interfaces.
|
|
2
|
+
import { checkCollisionsForDeclarationName, markPrivateIdentifierScope } from './checker-generated-code.js';
|
|
3
|
+
import { isNamedEvaluationSource } from './transformers/named-evaluation.js';
|
|
4
|
+
import { classOrConstructorParameterIsDecorated } from './transformers/decorator-utilities.js';
|
|
5
|
+
import { isOuterExpression } from './transformers/utilities.js';
|
|
6
|
+
import { checkExternalEmitHelpers } from './checker-emit-helpers.js';
|
|
7
|
+
import { Identifier, PrivateIdentifier, getType, getSymbol, ElementAccessExpression, KeywordExpression, NodeVisitor, PropertyAccessExpression, getBody, getName, getStatements, getExpression, getTypeArguments, getHeritageClauses, getMembers, getText, getTypeParameters, getInitializer, getParameters, getModifiers, } from './ast.js';
|
|
8
|
+
import { declarationNameToString, findConstructorDeclaration, getContainingClass, getDeclarationOfKind, getModifierFlags, getSourceFileOfNode, hasSyntacticModifier, isClassLike, isPrivateIdentifierClassElementDeclaration, isStatic, } from './binder-utilities.js';
|
|
9
|
+
import { isFunctionLike, nodeIsMissing, nodeIsPresent } from './ast-utilities.js';
|
|
10
|
+
import { ScriptTarget, getEmitScriptTarget, getUseDefineForClassFields } from './options.js';
|
|
11
|
+
import { hasDynamicName, hasLateBindableName } from './checker-utilities.js';
|
|
12
|
+
import { everyType, getTargetType, typesOf } from './checker-type-factory.js';
|
|
13
|
+
import { symbolToString, typeToString } from './type-printer.js';
|
|
14
|
+
import { getDeclaringClass } from './checker-property-access.js';
|
|
15
|
+
import { getBaseConstructorTypeOfClass, getBaseTypes, getDeclaredTypeOfSymbol, getClassLikeDeclarationOfSymbol, getExtendsHeritageClauseElement, isMixinConstructorType, } from './checker-declared-types.js';
|
|
16
|
+
import { getSymbolOfDeclaration } from './checker-symbols.js';
|
|
17
|
+
import { getOptionalType, getTypeOfSymbol } from './checker-symbol-types.js';
|
|
18
|
+
import { convertAutoToAny, getFlowTypeOfReference } from './checker-narrowing.js';
|
|
19
|
+
import { hasTypeFacts } from './checker-flow.js';
|
|
20
|
+
import { getIndexInfosOfType, getSignaturesOfType, getTypeOfPropertyOfType } from './checker-members.js';
|
|
21
|
+
import { checkJSDocLinksOfNode, checkNodeDeferred, checkSourceElement, checkTypeNodeIfPresent, } from './checker-source-file.js';
|
|
22
|
+
import { checkVariableLikeDeclaration, checkTypeParameters, checkExportsOnMergedDeclarations, } from './checker-declarations.js';
|
|
23
|
+
import { checkFunctionLikeBody } from './checker-functions.js';
|
|
24
|
+
import { checkJSDocFullSignature } from './checker-jsdoc.js';
|
|
25
|
+
import { checkComputedPropertyName } from './checker-expressions.js';
|
|
26
|
+
import { checkFunctionOrConstructorSymbol, checkFunctionOrMethodSymbols } from './checker-overloads.js';
|
|
27
|
+
import { checkClassHeritage, checkClassOrInterfaceForDuplicateIndexSignatures, checkInterfaceHeritage, } from './checker-heritage.js';
|
|
28
|
+
import { checkDecorators, getFirstTransformableStaticClassElement } from './checker-decorators.js';
|
|
29
|
+
export function checkClassDeclaration(c, node) {
|
|
30
|
+
checkClassLikeDeclaration(c, node);
|
|
31
|
+
checkClassMembers(c, node);
|
|
32
|
+
}
|
|
33
|
+
/** Checks a class expression each time it is checked; its members are checked deferred. */
|
|
34
|
+
export function checkClassExpression(c, node) {
|
|
35
|
+
checkClassLikeDeclaration(c, node);
|
|
36
|
+
checkNodeDeferred(c, node);
|
|
37
|
+
checkClassExpressionExternalHelpers(c, node);
|
|
38
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
39
|
+
return symbol !== undefined ? getTypeOfSymbol(c, symbol) : c.anyType;
|
|
40
|
+
}
|
|
41
|
+
/** An anonymous class expression whose emit sets its name (__setFunctionName), and computes the key (__propKey). */
|
|
42
|
+
function checkClassExpressionExternalHelpers(c, node) {
|
|
43
|
+
if (getName(node) !== undefined)
|
|
44
|
+
return;
|
|
45
|
+
let parent = node.parent;
|
|
46
|
+
while (parent !== undefined && isOuterExpression(parent, 63 /* OuterExpressionKinds.All */))
|
|
47
|
+
parent = parent.parent;
|
|
48
|
+
if (parent === undefined || !isNamedEvaluationSource(parent))
|
|
49
|
+
return;
|
|
50
|
+
const willTransformESDecorators = !c.legacyDecorators && c.languageVersion < ScriptTarget.ESNext;
|
|
51
|
+
let location;
|
|
52
|
+
if (willTransformESDecorators && classOrConstructorParameterIsDecorated(false, node)) {
|
|
53
|
+
location = node;
|
|
54
|
+
for (const modifier of getModifiers(node)?.nodes ?? [])
|
|
55
|
+
if (modifier.kind === 171 /* SyntaxKind.Decorator */) {
|
|
56
|
+
location = modifier;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
location = getFirstTransformableStaticClassElement(c, node);
|
|
62
|
+
if (location === undefined)
|
|
63
|
+
return;
|
|
64
|
+
checkExternalEmitHelpers(c, location, 65536 /* ExternalEmitHelpers.SetFunctionName */);
|
|
65
|
+
if ((parent.kind === 303 /* SyntaxKind.PropertyAssignment */ ||
|
|
66
|
+
parent.kind === 173 /* SyntaxKind.PropertyDeclaration */ ||
|
|
67
|
+
parent.kind === 209 /* SyntaxKind.BindingElement */) &&
|
|
68
|
+
getName(parent).kind === 168 /* SyntaxKind.ComputedPropertyName */)
|
|
69
|
+
checkExternalEmitHelpers(c, location, 131072 /* ExternalEmitHelpers.PropKey */);
|
|
70
|
+
}
|
|
71
|
+
export function checkClassLikeDeferred(c, node) {
|
|
72
|
+
checkClassMembers(c, node);
|
|
73
|
+
}
|
|
74
|
+
function checkClassMembers(c, node) {
|
|
75
|
+
for (const member of getMembers(node).nodes)
|
|
76
|
+
checkClassMember(c, member);
|
|
77
|
+
}
|
|
78
|
+
function checkClassLikeDeclaration(c, node) {
|
|
79
|
+
checkDecorators(c, node);
|
|
80
|
+
checkCollisionsForDeclarationName(c, node, getName(node));
|
|
81
|
+
if (node.kind === 264 /* SyntaxKind.ClassDeclaration */)
|
|
82
|
+
checkExportsOnMergedDeclarations(c, node);
|
|
83
|
+
const typeParameters = getTypeParameters(node);
|
|
84
|
+
checkTypeParameters(c, typeParameters);
|
|
85
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
86
|
+
if (symbol !== undefined) {
|
|
87
|
+
const t = getDeclaredTypeOfSymbol(c, symbol);
|
|
88
|
+
getTypeOfSymbol(c, symbol);
|
|
89
|
+
if ((t.flags & 1048576 /* TypeFlags.Object */) !== 0) {
|
|
90
|
+
getBaseConstructorTypeOfClass(c, t);
|
|
91
|
+
getBaseTypes(c, t);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const name = getName(node);
|
|
95
|
+
if (name !== undefined)
|
|
96
|
+
checkTypeNameIsReserved(c, name, 585 /* Diagnostics.Class_name_cannot_be_0 */);
|
|
97
|
+
const heritageClauses = getHeritageClauses(node);
|
|
98
|
+
if (heritageClauses !== undefined)
|
|
99
|
+
checkHeritageClauses(c, heritageClauses.nodes, true);
|
|
100
|
+
checkClassHeritage(c, node);
|
|
101
|
+
checkPropertyInitialization(c, node);
|
|
102
|
+
}
|
|
103
|
+
/** Reports a class, interface, enum or type alias named after a predefined type. */
|
|
104
|
+
export function checkTypeNameIsReserved(c, name, message) {
|
|
105
|
+
switch (getText(name)) {
|
|
106
|
+
case 'any':
|
|
107
|
+
case 'unknown':
|
|
108
|
+
case 'never':
|
|
109
|
+
case 'number':
|
|
110
|
+
case 'bigint':
|
|
111
|
+
case 'boolean':
|
|
112
|
+
case 'string':
|
|
113
|
+
case 'symbol':
|
|
114
|
+
case 'void':
|
|
115
|
+
case 'object':
|
|
116
|
+
case 'undefined':
|
|
117
|
+
c.error(name, message, getText(name));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function checkHeritageClauses(c, clauses, isClass) {
|
|
121
|
+
// Only the first clause of each kind counts; others are syntax errors.
|
|
122
|
+
let seenExtends = false;
|
|
123
|
+
let seenImplements = false;
|
|
124
|
+
for (const clause of clauses) {
|
|
125
|
+
if (clause.token === 118 /* SyntaxKind.ImplementsKeyword */) {
|
|
126
|
+
if (seenImplements)
|
|
127
|
+
continue;
|
|
128
|
+
seenImplements = true;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (seenExtends)
|
|
132
|
+
continue;
|
|
133
|
+
seenExtends = true;
|
|
134
|
+
}
|
|
135
|
+
for (const t of clause.types.nodes) {
|
|
136
|
+
const args = getTypeArguments(t);
|
|
137
|
+
if (args !== undefined)
|
|
138
|
+
for (const a of args.nodes)
|
|
139
|
+
checkSourceElement(c, a);
|
|
140
|
+
if (!isClass || clause.token === 118 /* SyntaxKind.ImplementsKeyword */)
|
|
141
|
+
checkSourceElement(c, t);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function checkClassMember(c, member) {
|
|
146
|
+
checkJSDocLinksOfNode(c, member);
|
|
147
|
+
if (member.kind === 173 /* SyntaxKind.PropertyDeclaration */ ||
|
|
148
|
+
member.kind === 175 /* SyntaxKind.MethodDeclaration */ ||
|
|
149
|
+
member.kind === 178 /* SyntaxKind.GetAccessor */ ||
|
|
150
|
+
member.kind === 179 /* SyntaxKind.SetAccessor */)
|
|
151
|
+
markPrivateIdentifierScope(c, member);
|
|
152
|
+
switch (member.kind) {
|
|
153
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
154
|
+
checkVariableLikeDeclaration(c, member);
|
|
155
|
+
if (hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */) && getInitializer(member) !== undefined)
|
|
156
|
+
c.error(member, 216 /* Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract */, declarationNameToString(getSourceFileOfNode(member), getName(member)));
|
|
157
|
+
return;
|
|
158
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
159
|
+
case 177 /* SyntaxKind.Constructor */:
|
|
160
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
161
|
+
case 179 /* SyntaxKind.SetAccessor */: {
|
|
162
|
+
checkDecorators(c, member);
|
|
163
|
+
const name = getName(member);
|
|
164
|
+
if (name !== undefined && name.kind === 168 /* SyntaxKind.ComputedPropertyName */)
|
|
165
|
+
checkComputedPropertyName(c, name);
|
|
166
|
+
const symbol = getSymbolOfDeclaration(c, member);
|
|
167
|
+
if (symbol !== undefined && member.kind !== 177 /* SyntaxKind.Constructor */)
|
|
168
|
+
getTypeOfSymbol(c, symbol);
|
|
169
|
+
checkFunctionLikeBody(c, member);
|
|
170
|
+
if (member.kind === 175 /* SyntaxKind.MethodDeclaration */) {
|
|
171
|
+
checkJSDocFullSignature(c, member);
|
|
172
|
+
checkFunctionOrMethodSymbols(c, member);
|
|
173
|
+
if (hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */) && getBody(member) !== undefined)
|
|
174
|
+
c.error(member, 195 /* Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract */, declarationNameToString(getSourceFileOfNode(member), name));
|
|
175
|
+
}
|
|
176
|
+
else if (member.kind === 177 /* SyntaxKind.Constructor */) {
|
|
177
|
+
if (symbol !== undefined)
|
|
178
|
+
checkFunctionOrConstructorSymbol(c, symbol);
|
|
179
|
+
checkConstructorSuperCall(c, member);
|
|
180
|
+
}
|
|
181
|
+
else
|
|
182
|
+
checkAccessorDeclaration(c, member);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
case 182 /* SyntaxKind.IndexSignature */:
|
|
186
|
+
checkSignatureDeclarationTypes(c, member);
|
|
187
|
+
return;
|
|
188
|
+
case 176 /* SyntaxKind.ClassStaticBlockDeclaration */: {
|
|
189
|
+
const body = getBody(member);
|
|
190
|
+
if (body !== undefined)
|
|
191
|
+
for (const s of getStatements(body).nodes)
|
|
192
|
+
checkSourceElement(c, s);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Accessor checks beyond the body: returns, `constructor` names and getter/setter agreement. */
|
|
198
|
+
export function checkAccessorDeclaration(c, node) {
|
|
199
|
+
const name = getName(node);
|
|
200
|
+
if (name.kind === 79 /* SyntaxKind.Identifier */ && getText(name) === 'constructor' && isClassLike(node.parent))
|
|
201
|
+
c.error(name, 276 /* Diagnostics.Class_constructor_may_not_be_an_accessor */);
|
|
202
|
+
if (node.kind === 178 /* SyntaxKind.GetAccessor */ &&
|
|
203
|
+
(node.flags & 8388608 /* NodeFlags.Ambient */) === 0 &&
|
|
204
|
+
nodeIsPresent(getBody(node)) &&
|
|
205
|
+
(node.flags & 256 /* NodeFlags.HasImplicitReturn */) !== 0 &&
|
|
206
|
+
(node.flags & 512 /* NodeFlags.HasExplicitReturn */) === 0)
|
|
207
|
+
c.error(name, 552 /* Diagnostics.A_get_accessor_must_return_a_value */);
|
|
208
|
+
if (hasDynamicName(node) && !hasLateBindableName(c, node))
|
|
209
|
+
return;
|
|
210
|
+
// Accessors of one member must agree on accessibility and abstractness; checked once, at the getter.
|
|
211
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
212
|
+
if (symbol === undefined)
|
|
213
|
+
return;
|
|
214
|
+
const getter = getDeclarationOfKind(symbol, 178 /* SyntaxKind.GetAccessor */);
|
|
215
|
+
const setter = getDeclarationOfKind(symbol, 179 /* SyntaxKind.SetAccessor */);
|
|
216
|
+
if (getter === undefined || setter === undefined)
|
|
217
|
+
return;
|
|
218
|
+
const links = c.nodeLinks(getter);
|
|
219
|
+
if ((links.flags & 1 /* NodeCheckFlags.TypeChecked */) !== 0)
|
|
220
|
+
return;
|
|
221
|
+
links.flags |= 1 /* NodeCheckFlags.TypeChecked */;
|
|
222
|
+
const getterFlags = getModifierFlags(getter);
|
|
223
|
+
const setterFlags = getModifierFlags(setter);
|
|
224
|
+
if ((getterFlags & 64 /* ModifierFlags.Abstract */) !== (setterFlags & 64 /* ModifierFlags.Abstract */)) {
|
|
225
|
+
c.error(getName(getter), 810 /* Diagnostics.Accessors_must_both_be_abstract_or_non_abstract */);
|
|
226
|
+
c.error(getName(setter), 810 /* Diagnostics.Accessors_must_both_be_abstract_or_non_abstract */);
|
|
227
|
+
}
|
|
228
|
+
if (((getterFlags & 4 /* ModifierFlags.Protected */) !== 0 &&
|
|
229
|
+
(setterFlags & (4 /* ModifierFlags.Protected */ | 2 /* ModifierFlags.Private */)) === 0) ||
|
|
230
|
+
((getterFlags & 2 /* ModifierFlags.Private */) !== 0 && (setterFlags & 2 /* ModifierFlags.Private */) === 0)) {
|
|
231
|
+
c.error(getName(getter), 939 /* Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter */);
|
|
232
|
+
c.error(getName(setter), 939 /* Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter */);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/** Derived class constructors must call `super`, at the root when properties are initialized. */
|
|
236
|
+
function checkConstructorSuperCall(c, node) {
|
|
237
|
+
const body = getBody(node);
|
|
238
|
+
if (nodeIsMissing(body))
|
|
239
|
+
return;
|
|
240
|
+
const classDecl = node.parent;
|
|
241
|
+
if (getExtendsHeritageClauseElement(classDecl) === undefined)
|
|
242
|
+
return;
|
|
243
|
+
const classSymbol = getSymbolOfDeclaration(c, classDecl);
|
|
244
|
+
const classType = classSymbol !== undefined ? getDeclaredTypeOfSymbol(c, classSymbol) : undefined;
|
|
245
|
+
const classExtendsNull = classType !== undefined &&
|
|
246
|
+
(classType.flags & 1048576 /* TypeFlags.Object */) !== 0 &&
|
|
247
|
+
getBaseConstructorTypeOfClass(c, classType) === c.nullWideningType;
|
|
248
|
+
const finder = new SuperCallFinder();
|
|
249
|
+
body.forEachChild(finder);
|
|
250
|
+
const superCall = finder.superCall;
|
|
251
|
+
if (superCall === undefined) {
|
|
252
|
+
if (!classExtendsNull)
|
|
253
|
+
c.error(node, 551 /* Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call */);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (classExtendsNull)
|
|
257
|
+
c.error(superCall, 1808 /* Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null */);
|
|
258
|
+
const emitStandardClassFields = getUseDefineForClassFields(c.compilerOptions) && getEmitScriptTarget(c.compilerOptions) >= ScriptTarget.ES2022;
|
|
259
|
+
if (emitStandardClassFields)
|
|
260
|
+
return;
|
|
261
|
+
// Until there's better flow analysis, the super call must be a root statement when properties are initialized.
|
|
262
|
+
if (!needsRootLevelSuperCall(classDecl, node))
|
|
263
|
+
return;
|
|
264
|
+
let parent = superCall.parent;
|
|
265
|
+
while (parent.kind === 218 /* SyntaxKind.ParenthesizedExpression */)
|
|
266
|
+
parent = parent.parent;
|
|
267
|
+
if (parent.kind !== 245 /* SyntaxKind.ExpressionStatement */ || parent.parent !== body) {
|
|
268
|
+
c.error(superCall, 572 /* Diagnostics.A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers */);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
for (const statement of getStatements(body).nodes) {
|
|
272
|
+
if (statement.kind === 245 /* SyntaxKind.ExpressionStatement */ &&
|
|
273
|
+
isSuperCall(skipOuterExpressions(getExpression(statement))))
|
|
274
|
+
return;
|
|
275
|
+
if (nodeImmediatelyReferencesSuperOrThis(statement))
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
c.error(node, 550 /* Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers */);
|
|
279
|
+
}
|
|
280
|
+
function isSuperCall(node) {
|
|
281
|
+
return node.kind === 214 /* SyntaxKind.CallExpression */ && getExpression(node).kind === 107 /* SyntaxKind.SuperKeyword */;
|
|
282
|
+
}
|
|
283
|
+
function skipOuterExpressions(node) {
|
|
284
|
+
let n = node;
|
|
285
|
+
while (n.kind === 218 /* SyntaxKind.ParenthesizedExpression */ ||
|
|
286
|
+
n.kind === 235 /* SyntaxKind.AsExpression */ ||
|
|
287
|
+
n.kind === 239 /* SyntaxKind.SatisfiesExpression */ ||
|
|
288
|
+
n.kind === 217 /* SyntaxKind.TypeAssertionExpression */ ||
|
|
289
|
+
n.kind === 236 /* SyntaxKind.NonNullExpression */)
|
|
290
|
+
n = getExpression(n);
|
|
291
|
+
return n;
|
|
292
|
+
}
|
|
293
|
+
function needsRootLevelSuperCall(classDecl, constructor) {
|
|
294
|
+
for (const m of getMembers(classDecl).nodes)
|
|
295
|
+
if (isInstancePropertyWithInitializerOrPrivateIdentifierProperty(m))
|
|
296
|
+
return true;
|
|
297
|
+
for (const p of getParameters(constructor).nodes)
|
|
298
|
+
if (hasSyntacticModifier(p, 31 /* ModifierFlags.ParameterPropertyModifier */))
|
|
299
|
+
return true;
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
function isInstancePropertyWithInitializerOrPrivateIdentifierProperty(n) {
|
|
303
|
+
return (isPrivateIdentifierClassElementDeclaration(n) ||
|
|
304
|
+
(n.kind === 173 /* SyntaxKind.PropertyDeclaration */ && !isStatic(n) && getInitializer(n) !== undefined));
|
|
305
|
+
}
|
|
306
|
+
/** Finds the first `super(...)` call outside nested functions. */
|
|
307
|
+
class SuperCallFinder extends NodeVisitor {
|
|
308
|
+
superCall = undefined;
|
|
309
|
+
visitNode(node) {
|
|
310
|
+
if (isSuperCall(node)) {
|
|
311
|
+
this.superCall = node;
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
if (isFunctionLike(node))
|
|
315
|
+
return false;
|
|
316
|
+
return node.forEachChild(this);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/** Finds `super` or `this` outside nested functions, properties and member bodies. */
|
|
320
|
+
class SuperOrThisReferenceFinder extends NodeVisitor {
|
|
321
|
+
visitNode(node) {
|
|
322
|
+
switch (node.kind) {
|
|
323
|
+
case 107 /* SyntaxKind.SuperKeyword */:
|
|
324
|
+
case 109 /* SyntaxKind.ThisKeyword */:
|
|
325
|
+
return true;
|
|
326
|
+
case 220 /* SyntaxKind.ArrowFunction */:
|
|
327
|
+
case 263 /* SyntaxKind.FunctionDeclaration */:
|
|
328
|
+
case 219 /* SyntaxKind.FunctionExpression */:
|
|
329
|
+
case 173 /* SyntaxKind.PropertyDeclaration */:
|
|
330
|
+
return false;
|
|
331
|
+
case 242 /* SyntaxKind.Block */:
|
|
332
|
+
switch (node.parent.kind) {
|
|
333
|
+
case 177 /* SyntaxKind.Constructor */:
|
|
334
|
+
case 175 /* SyntaxKind.MethodDeclaration */:
|
|
335
|
+
case 178 /* SyntaxKind.GetAccessor */:
|
|
336
|
+
case 179 /* SyntaxKind.SetAccessor */:
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return node.forEachChild(this);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function nodeImmediatelyReferencesSuperOrThis(node) {
|
|
344
|
+
return new SuperOrThisReferenceFinder().visitNode(node);
|
|
345
|
+
}
|
|
346
|
+
function checkSignatureDeclarationTypes(c, node) {
|
|
347
|
+
checkTypeNodeIfPresent(c, node);
|
|
348
|
+
}
|
|
349
|
+
// ---- Strict property initialization
|
|
350
|
+
function checkPropertyInitialization(c, node) {
|
|
351
|
+
if (!c.strictNullChecks || !c.strictPropertyInitialization || (node.flags & 8388608 /* NodeFlags.Ambient */) !== 0)
|
|
352
|
+
return;
|
|
353
|
+
const constructor = findConstructorDeclaration(node);
|
|
354
|
+
for (const member of getMembers(node).nodes) {
|
|
355
|
+
if (member.kind !== 173 /* SyntaxKind.PropertyDeclaration */)
|
|
356
|
+
continue;
|
|
357
|
+
if (hasSyntacticModifier(member, 128 /* ModifierFlags.Ambient */) ||
|
|
358
|
+
hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */) ||
|
|
359
|
+
isStatic(member))
|
|
360
|
+
continue;
|
|
361
|
+
const prop = member;
|
|
362
|
+
if (prop.initializer !== undefined || prop.postfixToken !== undefined)
|
|
363
|
+
continue;
|
|
364
|
+
const propName = prop.name;
|
|
365
|
+
if (propName.kind !== 79 /* SyntaxKind.Identifier */ &&
|
|
366
|
+
propName.kind !== 80 /* SyntaxKind.PrivateIdentifier */ &&
|
|
367
|
+
propName.kind !== 168 /* SyntaxKind.ComputedPropertyName */)
|
|
368
|
+
continue;
|
|
369
|
+
const symbol = getSymbolOfDeclaration(c, member);
|
|
370
|
+
if (symbol === undefined)
|
|
371
|
+
continue;
|
|
372
|
+
const t = getTypeOfSymbol(c, symbol);
|
|
373
|
+
if ((t.flags & 3 /* TypeFlags.AnyOrUnknown */) !== 0 || containsUndefinedType(t))
|
|
374
|
+
continue;
|
|
375
|
+
if (constructor !== undefined && isPropertyInitializedInConstructor(c, propName, t, constructor))
|
|
376
|
+
continue;
|
|
377
|
+
c.error(propName, 718 /* Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor */, declarationNameToString(getSourceFileOfNode(propName), propName));
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/** Whether `this.name` is definitely assigned at the end of the constructor, by control flow. */
|
|
381
|
+
export function isPropertyInitializedInConstructor(c, propName, propType, constructor) {
|
|
382
|
+
const thisExpression = new KeywordExpression(109 /* SyntaxKind.ThisKeyword */);
|
|
383
|
+
const returnFlowNode = constructor.returnFlowNode;
|
|
384
|
+
let reference;
|
|
385
|
+
if (propName.kind === 168 /* SyntaxKind.ComputedPropertyName */) {
|
|
386
|
+
const access = new ElementAccessExpression(thisExpression, undefined, getExpression(propName), 0 /* NodeFlags.None */);
|
|
387
|
+
access.flowNode = returnFlowNode;
|
|
388
|
+
reference = access;
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
const access = new PropertyAccessExpression(thisExpression, undefined, propName, 0 /* NodeFlags.None */);
|
|
392
|
+
access.flowNode = returnFlowNode;
|
|
393
|
+
reference = access;
|
|
394
|
+
}
|
|
395
|
+
thisExpression.parent = reference;
|
|
396
|
+
reference.parent = constructor;
|
|
397
|
+
const flowType = getFlowTypeOfReference(c, reference, propType, getOptionalType(c, propType, false), undefined);
|
|
398
|
+
return !containsUndefinedType(flowType);
|
|
399
|
+
}
|
|
400
|
+
/** Whether a static block between `startPos` and `endPos` definitely assigns `this.name`. */
|
|
401
|
+
export function isPropertyInitializedInStaticBlocks(c, propName, propType, staticBlocks, startPos, endPos) {
|
|
402
|
+
// Static blocks run in document order, unlike constructors.
|
|
403
|
+
for (const staticBlock of staticBlocks) {
|
|
404
|
+
if (staticBlock.pos < startPos || staticBlock.pos > endPos)
|
|
405
|
+
continue;
|
|
406
|
+
const thisExpression = new KeywordExpression(109 /* SyntaxKind.ThisKeyword */);
|
|
407
|
+
const reference = new PropertyAccessExpression(thisExpression, undefined, propName, 0 /* NodeFlags.None */);
|
|
408
|
+
reference.flowNode = staticBlock.returnFlowNode;
|
|
409
|
+
thisExpression.parent = reference;
|
|
410
|
+
reference.parent = staticBlock;
|
|
411
|
+
const flowType = getFlowTypeOfReference(c, reference, propType, getOptionalType(c, propType, false), undefined);
|
|
412
|
+
if (!containsUndefinedType(flowType))
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
/** The type of an unannotated, uninitialized property from its `this` assignments in the constructor. */
|
|
418
|
+
export function getFlowTypeInConstructor(c, symbol, constructor) {
|
|
419
|
+
const reference = newThisPropertyReference(symbol, constructor, constructor.returnFlowNode);
|
|
420
|
+
const flowType = getFlowTypeOfProperty(c, reference, symbol);
|
|
421
|
+
if (c.noImplicitAny && (flowType === c.autoType || flowType === c.autoArrayType))
|
|
422
|
+
c.error(symbol.valueDeclaration, 1680 /* Diagnostics.Member_0_implicitly_has_an_1_type */, symbolToString(c, symbol), typeToString(c, flowType));
|
|
423
|
+
// Assignments of only null or undefined infer nothing.
|
|
424
|
+
if (everyType(flowType, (t) => hasTypeFacts(c, t, 50331648 /* TypeFacts.IsUndefinedOrNull */)))
|
|
425
|
+
return undefined;
|
|
426
|
+
return convertAutoToAny(c, flowType);
|
|
427
|
+
}
|
|
428
|
+
/** The type of an unannotated, uninitialized static property from its `this` assignments in static blocks. */
|
|
429
|
+
export function getFlowTypeInStaticBlocks(c, symbol, staticBlocks) {
|
|
430
|
+
for (const staticBlock of staticBlocks) {
|
|
431
|
+
const reference = newThisPropertyReference(symbol, staticBlock, staticBlock.returnFlowNode);
|
|
432
|
+
const flowType = getFlowTypeOfProperty(c, reference, symbol);
|
|
433
|
+
if (c.noImplicitAny && (flowType === c.autoType || flowType === c.autoArrayType))
|
|
434
|
+
c.error(symbol.valueDeclaration, 1680 /* Diagnostics.Member_0_implicitly_has_an_1_type */, symbolToString(c, symbol), typeToString(c, flowType));
|
|
435
|
+
if (everyType(flowType, (t) => hasTypeFacts(c, t, 50331648 /* TypeFacts.IsUndefinedOrNull */)))
|
|
436
|
+
continue;
|
|
437
|
+
return convertAutoToAny(c, flowType);
|
|
438
|
+
}
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
/** A synthetic `this.name` at the end of `container`. */
|
|
442
|
+
function newThisPropertyReference(symbol, container, flowNode) {
|
|
443
|
+
const name = symbol.name;
|
|
444
|
+
let accessName;
|
|
445
|
+
if (name.startsWith('\ufffe#'))
|
|
446
|
+
accessName = new PrivateIdentifier(name.substring(name.indexOf('@') + 1));
|
|
447
|
+
else
|
|
448
|
+
accessName = new Identifier(name);
|
|
449
|
+
const thisExpression = new KeywordExpression(109 /* SyntaxKind.ThisKeyword */);
|
|
450
|
+
const reference = new PropertyAccessExpression(thisExpression, undefined, accessName, 0 /* NodeFlags.None */);
|
|
451
|
+
thisExpression.parent = reference;
|
|
452
|
+
accessName.parent = reference;
|
|
453
|
+
reference.parent = container;
|
|
454
|
+
reference.flowNode = flowNode;
|
|
455
|
+
return reference;
|
|
456
|
+
}
|
|
457
|
+
/** The control flow type of `this.x` at `reference`, from `undefined` or the base class property type. */
|
|
458
|
+
export function getFlowTypeOfProperty(c, reference, prop) {
|
|
459
|
+
let initialType = c.undefinedType;
|
|
460
|
+
const declaration = prop.valueDeclaration;
|
|
461
|
+
if (declaration !== undefined &&
|
|
462
|
+
(!isAutoTypedProperty(c, prop) || hasSyntacticModifier(declaration, 128 /* ModifierFlags.Ambient */))) {
|
|
463
|
+
const baseType = getTypeOfPropertyInBaseClass(c, prop);
|
|
464
|
+
if (baseType !== undefined)
|
|
465
|
+
initialType = baseType;
|
|
466
|
+
}
|
|
467
|
+
return getFlowTypeOfReference(c, reference, c.autoType, initialType, undefined);
|
|
468
|
+
}
|
|
469
|
+
/** Whether a property's type comes from its assignments: it has no annotation or initializer. */
|
|
470
|
+
export function isAutoTypedProperty(c, symbol) {
|
|
471
|
+
const declaration = symbol.valueDeclaration;
|
|
472
|
+
return (declaration !== undefined &&
|
|
473
|
+
declaration.kind === 173 /* SyntaxKind.PropertyDeclaration */ &&
|
|
474
|
+
getType(declaration) === undefined &&
|
|
475
|
+
getInitializer(declaration) === undefined &&
|
|
476
|
+
c.noImplicitAny);
|
|
477
|
+
}
|
|
478
|
+
/** The type of the property in the first base class, if it has one. */
|
|
479
|
+
export function getTypeOfPropertyInBaseClass(c, property) {
|
|
480
|
+
const classType = getDeclaringClass(c, property);
|
|
481
|
+
if (classType === undefined)
|
|
482
|
+
return undefined;
|
|
483
|
+
const baseClassTypes = getBaseTypes(c, classType);
|
|
484
|
+
return baseClassTypes.length > 0 ? getTypeOfPropertyOfType(c, baseClassTypes[0], property.name) : undefined;
|
|
485
|
+
}
|
|
486
|
+
function containsUndefinedType(t) {
|
|
487
|
+
const first = (t.flags & 134217728 /* TypeFlags.Union */) !== 0 ? typesOf(t)[0] : t;
|
|
488
|
+
return (first.flags & 4 /* TypeFlags.Undefined */) !== 0;
|
|
489
|
+
}
|
|
490
|
+
/** Whether `new` at `node` may call a constructor, reporting private and protected ones out of reach. */
|
|
491
|
+
export function isConstructorAccessible(c, node, signature) {
|
|
492
|
+
if (signature === undefined || signature.declaration === undefined)
|
|
493
|
+
return true;
|
|
494
|
+
const declaration = signature.declaration;
|
|
495
|
+
const modifiers = getModifierFlags(declaration) & 6 /* ModifierFlags.NonPublicAccessibilityModifier */;
|
|
496
|
+
// Public constructors and constructor functions are always accessible.
|
|
497
|
+
if (modifiers === 0 || declaration.kind !== 177 /* SyntaxKind.Constructor */)
|
|
498
|
+
return true;
|
|
499
|
+
const classSymbol = getSymbol(declaration.parent);
|
|
500
|
+
const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(classSymbol);
|
|
501
|
+
const declaringClass = getDeclaredTypeOfSymbol(c, classSymbol);
|
|
502
|
+
// Private and protected constructors are only callable within their class, or subclasses if protected.
|
|
503
|
+
for (let container = getContainingClass(node); container !== undefined; container = getContainingClass(container))
|
|
504
|
+
if (container === declaringClassDeclaration)
|
|
505
|
+
return true;
|
|
506
|
+
const containingClass = getContainingClass(node);
|
|
507
|
+
if (containingClass !== undefined && (modifiers & 4 /* ModifierFlags.Protected */) !== 0) {
|
|
508
|
+
const containingType = getDeclaredTypeOfSymbol(c, getSymbol(containingClass));
|
|
509
|
+
if (typeHasProtectedAccessibleBase(c, classSymbol, containingType))
|
|
510
|
+
return true;
|
|
511
|
+
}
|
|
512
|
+
if ((modifiers & 2 /* ModifierFlags.Private */) !== 0)
|
|
513
|
+
c.error(node, 807 /* Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration */, typeToString(c, declaringClass));
|
|
514
|
+
if ((modifiers & 4 /* ModifierFlags.Protected */) !== 0)
|
|
515
|
+
c.error(node, 808 /* Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration */, typeToString(c, declaringClass));
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
/** Whether `target` is a base class of `t`, through bases that aren't mixins. */
|
|
519
|
+
function typeHasProtectedAccessibleBase(c, target, t) {
|
|
520
|
+
const baseTypes = getBaseTypes(c, getTargetType(t));
|
|
521
|
+
if (baseTypes.length === 0)
|
|
522
|
+
return false;
|
|
523
|
+
const firstBase = baseTypes[0];
|
|
524
|
+
if ((firstBase.flags & 268435456 /* TypeFlags.Intersection */) !== 0) {
|
|
525
|
+
const types = typesOf(firstBase);
|
|
526
|
+
const mixinFlags = findMixins(c, types);
|
|
527
|
+
for (let i = 0; i < types.length; i++) {
|
|
528
|
+
const member = types[i];
|
|
529
|
+
if (mixinFlags[i] || (member.objectFlags & (1 /* ObjectFlags.Class */ | 2 /* ObjectFlags.Interface */)) === 0)
|
|
530
|
+
continue;
|
|
531
|
+
if (member.symbol === target || typeHasProtectedAccessibleBase(c, target, member))
|
|
532
|
+
return true;
|
|
533
|
+
}
|
|
534
|
+
return false;
|
|
535
|
+
}
|
|
536
|
+
return firstBase.symbol === target || typeHasProtectedAccessibleBase(c, target, firstBase);
|
|
537
|
+
}
|
|
538
|
+
/** Which of an intersection's constituents are mixin constructors; one stays if all constructors are. */
|
|
539
|
+
function findMixins(c, types) {
|
|
540
|
+
const mixinFlags = [];
|
|
541
|
+
let constructorTypeCount = 0;
|
|
542
|
+
let mixinCount = 0;
|
|
543
|
+
let firstMixinIndex = -1;
|
|
544
|
+
for (let i = 0; i < types.length; i++) {
|
|
545
|
+
const isMixin = isMixinConstructorType(c, types[i]);
|
|
546
|
+
mixinFlags.push(isMixin);
|
|
547
|
+
if (getSignaturesOfType(c, types[i], 1 /* SignatureKind.Construct */).length > 0)
|
|
548
|
+
constructorTypeCount++;
|
|
549
|
+
if (isMixin) {
|
|
550
|
+
if (firstMixinIndex < 0)
|
|
551
|
+
firstMixinIndex = i;
|
|
552
|
+
mixinCount++;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
if (constructorTypeCount > 0 && constructorTypeCount === mixinCount)
|
|
556
|
+
mixinFlags[firstMixinIndex] = false;
|
|
557
|
+
return mixinFlags;
|
|
558
|
+
}
|
|
559
|
+
// ---- Interfaces
|
|
560
|
+
export function checkInterfaceDeclaration(c, node) {
|
|
561
|
+
const decl = node;
|
|
562
|
+
checkTypeParameters(c, decl.typeParameters);
|
|
563
|
+
checkTypeNameIsReserved(c, decl.name, 596 /* Diagnostics.Interface_name_cannot_be_0 */);
|
|
564
|
+
checkExportsOnMergedDeclarations(c, node);
|
|
565
|
+
const symbol = getSymbolOfDeclaration(c, node);
|
|
566
|
+
if (symbol !== undefined) {
|
|
567
|
+
const t = getDeclaredTypeOfSymbol(c, symbol);
|
|
568
|
+
getBaseTypes(c, t);
|
|
569
|
+
getIndexInfosOfType(c, t);
|
|
570
|
+
}
|
|
571
|
+
checkInterfaceHeritage(c, node);
|
|
572
|
+
if (decl.heritageClauses !== undefined)
|
|
573
|
+
checkHeritageClauses(c, decl.heritageClauses.nodes, false);
|
|
574
|
+
for (const member of decl.members.nodes) {
|
|
575
|
+
checkJSDocLinksOfNode(c, member);
|
|
576
|
+
if (member.kind === 172 /* SyntaxKind.PropertySignature */)
|
|
577
|
+
checkVariableLikeDeclaration(c, member);
|
|
578
|
+
else
|
|
579
|
+
checkTypeNodeIfPresent(c, member);
|
|
580
|
+
}
|
|
581
|
+
checkClassOrInterfaceForDuplicateIndexSignatures(c, node);
|
|
582
|
+
}
|