@typespec/compiler 0.41.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/LICENSE +21 -0
- package/README.md +9 -0
- package/cmd/tsp-server.js +3 -0
- package/cmd/tsp.js +3 -0
- package/dist/cmd/runner.d.ts +9 -0
- package/dist/cmd/runner.d.ts.map +1 -0
- package/dist/cmd/runner.js +62 -0
- package/dist/cmd/runner.js.map +1 -0
- package/dist/config/config-interpolation.d.ts +11 -0
- package/dist/config/config-interpolation.d.ts.map +1 -0
- package/dist/config/config-interpolation.js +109 -0
- package/dist/config/config-interpolation.js.map +1 -0
- package/dist/config/config-loader.d.ts +25 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +182 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-schema.d.ts +4 -0
- package/dist/config/config-schema.d.ts.map +1 -0
- package/dist/config/config-schema.js +84 -0
- package/dist/config/config-schema.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +79 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/binder.d.ts +29 -0
- package/dist/core/binder.d.ts.map +1 -0
- package/dist/core/binder.js +455 -0
- package/dist/core/binder.js.map +1 -0
- package/dist/core/charcode.d.ts +130 -0
- package/dist/core/charcode.d.ts.map +1 -0
- package/dist/core/charcode.js +115 -0
- package/dist/core/charcode.js.map +1 -0
- package/dist/core/checker.d.ts +138 -0
- package/dist/core/checker.d.ts.map +1 -0
- package/dist/core/checker.js +4070 -0
- package/dist/core/checker.js.map +1 -0
- package/dist/core/cli/args.d.ts +18 -0
- package/dist/core/cli/args.d.ts.map +1 -0
- package/dist/core/cli/args.js +108 -0
- package/dist/core/cli/args.js.map +1 -0
- package/dist/core/cli/cli.d.ts +2 -0
- package/dist/core/cli/cli.d.ts.map +1 -0
- package/dist/core/cli/cli.js +477 -0
- package/dist/core/cli/cli.js.map +1 -0
- package/dist/core/cli/index.d.ts +2 -0
- package/dist/core/cli/index.d.ts.map +1 -0
- package/dist/core/cli/index.js +2 -0
- package/dist/core/cli/index.js.map +1 -0
- package/dist/core/decorator-utils.d.ts +108 -0
- package/dist/core/decorator-utils.d.ts.map +1 -0
- package/dist/core/decorator-utils.js +326 -0
- package/dist/core/decorator-utils.js.map +1 -0
- package/dist/core/diagnostics.d.ts +93 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +315 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/emitter-utils.d.ts +14 -0
- package/dist/core/emitter-utils.d.ts.map +1 -0
- package/dist/core/emitter-utils.js +16 -0
- package/dist/core/emitter-utils.js.map +1 -0
- package/dist/core/formatter-fs.d.ts +21 -0
- package/dist/core/formatter-fs.d.ts.map +1 -0
- package/dist/core/formatter-fs.js +79 -0
- package/dist/core/formatter-fs.js.map +1 -0
- package/dist/core/formatter.d.ts +10 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +24 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/helpers/discriminator-utils.d.ts +14 -0
- package/dist/core/helpers/discriminator-utils.d.ts.map +1 -0
- package/dist/core/helpers/discriminator-utils.js +169 -0
- package/dist/core/helpers/discriminator-utils.js.map +1 -0
- package/dist/core/helpers/index.d.ts +6 -0
- package/dist/core/helpers/index.d.ts.map +1 -0
- package/dist/core/helpers/index.js +6 -0
- package/dist/core/helpers/index.js.map +1 -0
- package/dist/core/helpers/operation-utils.d.ts +15 -0
- package/dist/core/helpers/operation-utils.d.ts.map +1 -0
- package/dist/core/helpers/operation-utils.js +35 -0
- package/dist/core/helpers/operation-utils.js.map +1 -0
- package/dist/core/helpers/projected-names-utils.d.ts +20 -0
- package/dist/core/helpers/projected-names-utils.d.ts.map +1 -0
- package/dist/core/helpers/projected-names-utils.js +40 -0
- package/dist/core/helpers/projected-names-utils.js.map +1 -0
- package/dist/core/helpers/type-name-utils.d.ts +14 -0
- package/dist/core/helpers/type-name-utils.d.ts.map +1 -0
- package/dist/core/helpers/type-name-utils.js +122 -0
- package/dist/core/helpers/type-name-utils.js.map +1 -0
- package/dist/core/helpers/usage-resolver.d.ts +20 -0
- package/dist/core/helpers/usage-resolver.d.ts.map +1 -0
- package/dist/core/helpers/usage-resolver.js +108 -0
- package/dist/core/helpers/usage-resolver.js.map +1 -0
- package/dist/core/index.d.ts +26 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/install.d.ts +2 -0
- package/dist/core/install.d.ts.map +1 -0
- package/dist/core/install.js +26 -0
- package/dist/core/install.js.map +1 -0
- package/dist/core/library.d.ts +34 -0
- package/dist/core/library.d.ts.map +1 -0
- package/dist/core/library.js +100 -0
- package/dist/core/library.js.map +1 -0
- package/dist/core/logger/console-sink.browser.d.ts +4 -0
- package/dist/core/logger/console-sink.browser.d.ts.map +1 -0
- package/dist/core/logger/console-sink.browser.js +14 -0
- package/dist/core/logger/console-sink.browser.js.map +1 -0
- package/dist/core/logger/console-sink.d.ts +9 -0
- package/dist/core/logger/console-sink.d.ts.map +1 -0
- package/dist/core/logger/console-sink.js +81 -0
- package/dist/core/logger/console-sink.js.map +1 -0
- package/dist/core/logger/index.d.ts +3 -0
- package/dist/core/logger/index.d.ts.map +1 -0
- package/dist/core/logger/index.js +3 -0
- package/dist/core/logger/index.js.map +1 -0
- package/dist/core/logger/logger.d.ts +7 -0
- package/dist/core/logger/logger.d.ts.map +1 -0
- package/dist/core/logger/logger.js +32 -0
- package/dist/core/logger/logger.js.map +1 -0
- package/dist/core/logger/tracer.d.ts +3 -0
- package/dist/core/logger/tracer.d.ts.map +1 -0
- package/dist/core/logger/tracer.js +91 -0
- package/dist/core/logger/tracer.js.map +1 -0
- package/dist/core/manifest.d.ts +21 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +8 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/messages.d.ts +2253 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +749 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/module-resolver.d.ts +84 -0
- package/dist/core/module-resolver.d.ts.map +1 -0
- package/dist/core/module-resolver.js +170 -0
- package/dist/core/module-resolver.js.map +1 -0
- package/dist/core/node-host.browser.d.ts +2 -0
- package/dist/core/node-host.browser.d.ts.map +1 -0
- package/dist/core/node-host.browser.js +2 -0
- package/dist/core/node-host.browser.js.map +1 -0
- package/dist/core/node-host.d.ts +7 -0
- package/dist/core/node-host.d.ts.map +1 -0
- package/dist/core/node-host.js +43 -0
- package/dist/core/node-host.js.map +1 -0
- package/dist/core/nonascii.d.ts +2 -0
- package/dist/core/nonascii.d.ts.map +1 -0
- package/dist/core/nonascii.js +712 -0
- package/dist/core/nonascii.js.map +1 -0
- package/dist/core/options.d.ts +46 -0
- package/dist/core/options.d.ts.map +1 -0
- package/dist/core/options.js +2 -0
- package/dist/core/options.js.map +1 -0
- package/dist/core/parser.d.ts +17 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +2561 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/path-utils.d.ts +193 -0
- package/dist/core/path-utils.d.ts.map +1 -0
- package/dist/core/path-utils.js +427 -0
- package/dist/core/path-utils.js.map +1 -0
- package/dist/core/program.d.ts +104 -0
- package/dist/core/program.d.ts.map +1 -0
- package/dist/core/program.js +898 -0
- package/dist/core/program.js.map +1 -0
- package/dist/core/projection-members.d.ts +8 -0
- package/dist/core/projection-members.d.ts.map +1 -0
- package/dist/core/projection-members.js +387 -0
- package/dist/core/projection-members.js.map +1 -0
- package/dist/core/projector.d.ts +26 -0
- package/dist/core/projector.d.ts.map +1 -0
- package/dist/core/projector.js +523 -0
- package/dist/core/projector.js.map +1 -0
- package/dist/core/scanner.d.ts +125 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +1012 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/schema-validator.d.ts +6 -0
- package/dist/core/schema-validator.d.ts.map +1 -0
- package/dist/core/schema-validator.js +38 -0
- package/dist/core/schema-validator.js.map +1 -0
- package/dist/core/semantic-walker.d.ts +53 -0
- package/dist/core/semantic-walker.d.ts.map +1 -0
- package/dist/core/semantic-walker.js +355 -0
- package/dist/core/semantic-walker.js.map +1 -0
- package/dist/core/type-utils.d.ts +49 -0
- package/dist/core/type-utils.d.ts.map +1 -0
- package/dist/core/type-utils.js +95 -0
- package/dist/core/type-utils.js.map +1 -0
- package/dist/core/types.d.ts +1345 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +105 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/util.d.ts +150 -0
- package/dist/core/util.d.ts.map +1 -0
- package/dist/core/util.js +417 -0
- package/dist/core/util.js.map +1 -0
- package/dist/emitter-framework/asset-emitter.d.ts +5 -0
- package/dist/emitter-framework/asset-emitter.d.ts.map +1 -0
- package/dist/emitter-framework/asset-emitter.js +610 -0
- package/dist/emitter-framework/asset-emitter.js.map +1 -0
- package/dist/emitter-framework/builders/array-builder.d.ts +7 -0
- package/dist/emitter-framework/builders/array-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/array-builder.js +45 -0
- package/dist/emitter-framework/builders/array-builder.js.map +1 -0
- package/dist/emitter-framework/builders/object-builder.d.ts +9 -0
- package/dist/emitter-framework/builders/object-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/object-builder.js +30 -0
- package/dist/emitter-framework/builders/object-builder.js.map +1 -0
- package/dist/emitter-framework/builders/string-builder.d.ts +13 -0
- package/dist/emitter-framework/builders/string-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/string-builder.js +98 -0
- package/dist/emitter-framework/builders/string-builder.js.map +1 -0
- package/dist/emitter-framework/custom-key-map.d.ts +29 -0
- package/dist/emitter-framework/custom-key-map.d.ts.map +1 -0
- package/dist/emitter-framework/custom-key-map.js +62 -0
- package/dist/emitter-framework/custom-key-map.js.map +1 -0
- package/dist/emitter-framework/index.d.ts +8 -0
- package/dist/emitter-framework/index.d.ts.map +1 -0
- package/dist/emitter-framework/index.js +8 -0
- package/dist/emitter-framework/index.js.map +1 -0
- package/dist/emitter-framework/placeholder.d.ts +12 -0
- package/dist/emitter-framework/placeholder.d.ts.map +1 -0
- package/dist/emitter-framework/placeholder.js +27 -0
- package/dist/emitter-framework/placeholder.js.map +1 -0
- package/dist/emitter-framework/type-emitter.d.ts +314 -0
- package/dist/emitter-framework/type-emitter.d.ts.map +1 -0
- package/dist/emitter-framework/type-emitter.js +612 -0
- package/dist/emitter-framework/type-emitter.js.map +1 -0
- package/dist/emitter-framework/types.d.ts +124 -0
- package/dist/emitter-framework/types.d.ts.map +1 -0
- package/dist/emitter-framework/types.js +39 -0
- package/dist/emitter-framework/types.js.map +1 -0
- package/dist/formatter/index.d.ts +11 -0
- package/dist/formatter/index.d.ts.map +1 -0
- package/dist/formatter/index.js +28 -0
- package/dist/formatter/index.js.map +1 -0
- package/dist/formatter/parser.d.ts +16 -0
- package/dist/formatter/parser.d.ts.map +1 -0
- package/dist/formatter/parser.js +23 -0
- package/dist/formatter/parser.js.map +1 -0
- package/dist/formatter/print/comment-handler.d.ts +7 -0
- package/dist/formatter/print/comment-handler.d.ts.map +1 -0
- package/dist/formatter/print/comment-handler.js +81 -0
- package/dist/formatter/print/comment-handler.js.map +1 -0
- package/dist/formatter/print/index.d.ts +3 -0
- package/dist/formatter/print/index.d.ts.map +1 -0
- package/dist/formatter/print/index.js +3 -0
- package/dist/formatter/print/index.js.map +1 -0
- package/dist/formatter/print/needs-parens.d.ts +10 -0
- package/dist/formatter/print/needs-parens.d.ts.map +1 -0
- package/dist/formatter/print/needs-parens.js +27 -0
- package/dist/formatter/print/needs-parens.js.map +1 -0
- package/dist/formatter/print/printer.d.ts +62 -0
- package/dist/formatter/print/printer.d.ts.map +1 -0
- package/dist/formatter/print/printer.js +1025 -0
- package/dist/formatter/print/printer.js.map +1 -0
- package/dist/formatter/print/types.d.ts +9 -0
- package/dist/formatter/print/types.d.ts.map +1 -0
- package/dist/formatter/print/types.js +2 -0
- package/dist/formatter/print/types.js.map +1 -0
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +2 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/init-template.d.ts +45 -0
- package/dist/init/init-template.d.ts.map +1 -0
- package/dist/init/init-template.js +45 -0
- package/dist/init/init-template.js.map +1 -0
- package/dist/init/init.d.ts +49 -0
- package/dist/init/init.d.ts.map +1 -0
- package/dist/init/init.js +224 -0
- package/dist/init/init.js.map +1 -0
- package/dist/lib/decorators.d.ts +222 -0
- package/dist/lib/decorators.d.ts.map +1 -0
- package/dist/lib/decorators.js +745 -0
- package/dist/lib/decorators.js.map +1 -0
- package/dist/lib/service.d.ts +38 -0
- package/dist/lib/service.d.ts.map +1 -0
- package/dist/lib/service.js +78 -0
- package/dist/lib/service.js.map +1 -0
- package/dist/manifest.js +4 -0
- package/dist/server/completion.d.ts +10 -0
- package/dist/server/completion.d.ts.map +1 -0
- package/dist/server/completion.js +207 -0
- package/dist/server/completion.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/language-config.d.ts +195 -0
- package/dist/server/language-config.d.ts.map +1 -0
- package/dist/server/language-config.js +102 -0
- package/dist/server/language-config.js.map +1 -0
- package/dist/server/server.d.ts +2 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +131 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/serverlib.d.ts +72 -0
- package/dist/server/serverlib.d.ts.map +1 -0
- package/dist/server/serverlib.js +1034 -0
- package/dist/server/serverlib.js.map +1 -0
- package/dist/server/symbol-structure.d.ts +4 -0
- package/dist/server/symbol-structure.d.ts.map +1 -0
- package/dist/server/symbol-structure.js +121 -0
- package/dist/server/symbol-structure.js.map +1 -0
- package/dist/server/tmlanguage.d.ts +3 -0
- package/dist/server/tmlanguage.d.ts.map +1 -0
- package/dist/server/tmlanguage.js +713 -0
- package/dist/server/tmlanguage.js.map +1 -0
- package/dist/server/type-details.d.ts +11 -0
- package/dist/server/type-details.d.ts.map +1 -0
- package/dist/server/type-details.js +72 -0
- package/dist/server/type-details.js.map +1 -0
- package/dist/server/type-signature.d.ts +2 -0
- package/dist/server/type-signature.d.ts.map +1 -0
- package/dist/server/type-signature.js +108 -0
- package/dist/server/type-signature.js.map +1 -0
- package/dist/testing/expect.d.ts +49 -0
- package/dist/testing/expect.d.ts.map +1 -0
- package/dist/testing/expect.js +83 -0
- package/dist/testing/expect.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +6 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-host.d.ts +14 -0
- package/dist/testing/test-host.d.ts.map +1 -0
- package/dist/testing/test-host.js +271 -0
- package/dist/testing/test-host.js.map +1 -0
- package/dist/testing/test-server-host.d.ts +39 -0
- package/dist/testing/test-server-host.d.ts.map +1 -0
- package/dist/testing/test-server-host.js +112 -0
- package/dist/testing/test-server-host.js.map +1 -0
- package/dist/testing/test-utils.d.ts +22 -0
- package/dist/testing/test-utils.d.ts.map +1 -0
- package/dist/testing/test-utils.js +60 -0
- package/dist/testing/test-utils.js.map +1 -0
- package/dist/testing/types.d.ts +69 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +7 -0
- package/dist/testing/types.js.map +1 -0
- package/dist/typespec.tmLanguage +1760 -0
- package/lib/decorators.tsp +420 -0
- package/lib/lib.tsp +158 -0
- package/lib/main.tsp +4 -0
- package/lib/projected-names.tsp +94 -0
- package/lib/reflection.tsp +10 -0
- package/package.json +119 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Diagnostic } from "../core/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Represent the normalized user configuration.
|
|
4
|
+
*/
|
|
5
|
+
export interface TypeSpecConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Project root.
|
|
8
|
+
*/
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
/**
|
|
11
|
+
* Path to the config file used to create this configuration.
|
|
12
|
+
*/
|
|
13
|
+
filename?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Diagnostics reported while loading the configuration
|
|
16
|
+
*/
|
|
17
|
+
diagnostics: Diagnostic[];
|
|
18
|
+
/**
|
|
19
|
+
* Path to another typespec config to extend.
|
|
20
|
+
*/
|
|
21
|
+
extends?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Environment variables configuration
|
|
24
|
+
*/
|
|
25
|
+
environmentVariables?: Record<string, ConfigEnvironmentVariable>;
|
|
26
|
+
/**
|
|
27
|
+
* Parameters that can be used
|
|
28
|
+
*/
|
|
29
|
+
parameters?: Record<string, ConfigParameter>;
|
|
30
|
+
/**
|
|
31
|
+
* Treat warning as error.
|
|
32
|
+
*/
|
|
33
|
+
warnAsError?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Output directory
|
|
36
|
+
*/
|
|
37
|
+
outputDir: string;
|
|
38
|
+
/**
|
|
39
|
+
* Trace options.
|
|
40
|
+
*/
|
|
41
|
+
trace?: string[];
|
|
42
|
+
/**
|
|
43
|
+
* Additional imports.
|
|
44
|
+
*/
|
|
45
|
+
imports?: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Name of emitters or path to emitters that should be used.
|
|
48
|
+
*/
|
|
49
|
+
emit?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Name of emitters or path to emitters that should be used.
|
|
52
|
+
*/
|
|
53
|
+
options?: Record<string, EmitterOptions>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Represent the configuration that can be provided in a config file.
|
|
57
|
+
*/
|
|
58
|
+
export interface TypeSpecRawConfig {
|
|
59
|
+
extends?: string;
|
|
60
|
+
"environment-variables"?: Record<string, ConfigEnvironmentVariable>;
|
|
61
|
+
parameters?: Record<string, ConfigParameter>;
|
|
62
|
+
"warn-as-error"?: boolean;
|
|
63
|
+
"output-dir"?: string;
|
|
64
|
+
trace?: string | string[];
|
|
65
|
+
imports?: string[];
|
|
66
|
+
emit?: string[];
|
|
67
|
+
options?: Record<string, EmitterOptions>;
|
|
68
|
+
emitters?: Record<string, boolean | EmitterOptions>;
|
|
69
|
+
}
|
|
70
|
+
export interface ConfigEnvironmentVariable {
|
|
71
|
+
default: string;
|
|
72
|
+
}
|
|
73
|
+
export interface ConfigParameter {
|
|
74
|
+
default: string;
|
|
75
|
+
}
|
|
76
|
+
export type EmitterOptions = Record<string, unknown> & {
|
|
77
|
+
"emitter-output-dir"?: string;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAEjE;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE7C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../config/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Program } from "./program.js";
|
|
2
|
+
import { JsSourceFileNode, Node, Sym, SymbolFlags, SymbolTable, TypeSpecScriptNode } from "./types.js";
|
|
3
|
+
declare const SymbolTable: {
|
|
4
|
+
new (source?: SymbolTable): {
|
|
5
|
+
duplicates: Map<Sym, Set<Sym>>;
|
|
6
|
+
set(key: string, value: Sym): any;
|
|
7
|
+
clear(): void;
|
|
8
|
+
delete(key: string): boolean;
|
|
9
|
+
forEach(callbackfn: (value: Sym, key: string, map: Map<string, Sym>) => void, thisArg?: any): void;
|
|
10
|
+
get(key: string): Sym | undefined;
|
|
11
|
+
has(key: string): boolean;
|
|
12
|
+
readonly size: number;
|
|
13
|
+
entries(): IterableIterator<[string, Sym]>;
|
|
14
|
+
keys(): IterableIterator<string>;
|
|
15
|
+
values(): IterableIterator<Sym>;
|
|
16
|
+
[Symbol.iterator](): IterableIterator<[string, Sym]>;
|
|
17
|
+
readonly [Symbol.toStringTag]: string;
|
|
18
|
+
};
|
|
19
|
+
readonly [Symbol.species]: MapConstructor;
|
|
20
|
+
};
|
|
21
|
+
export interface Binder {
|
|
22
|
+
bindSourceFile(script: TypeSpecScriptNode): void;
|
|
23
|
+
bindJsSourceFile(sourceFile: JsSourceFileNode): void;
|
|
24
|
+
}
|
|
25
|
+
export declare function createSymbolTable(source?: SymbolTable): SymbolTable;
|
|
26
|
+
export declare function createBinder(program: Program): Binder;
|
|
27
|
+
export declare function createSymbol(node: Node | undefined, name: string, flags: SymbolFlags, parent?: Sym, value?: any): Sym;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=binder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binder.d.ts","sourceRoot":"","sources":["../../core/binder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAQL,gBAAgB,EAGhB,IAAI,EASJ,GAAG,EACH,WAAW,EACX,WAAW,EAGX,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAMpB,QAAA,MAAM,WAAW;kBAGM,WAAW;;iBAcvB,MAAM,SAAS,GAAG;;;;;;;;;;;;;;CAkB5B,CAAC;AAEF,MAAM,WAAW,MAAM;IACrB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjD,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAKtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAEnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAwbrD;AAoBD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,GAAG,GACV,GAAG,CAmBL"}
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { visitChildren } from "./parser.js";
|
|
2
|
+
import { SyntaxKind, } from "./types.js";
|
|
3
|
+
import { mutate } from "./util.js";
|
|
4
|
+
// Use a regular expression to define the prefix for TypeSpec-exposed functions
|
|
5
|
+
// defined in JavaScript modules
|
|
6
|
+
const DecoratorFunctionPattern = /^\$/;
|
|
7
|
+
const SymbolTable = class extends Map {
|
|
8
|
+
constructor(source) {
|
|
9
|
+
super();
|
|
10
|
+
this.duplicates = new Map();
|
|
11
|
+
if (source) {
|
|
12
|
+
for (const [key, value] of source) {
|
|
13
|
+
// Note: shallow copy of value here so we can mutate flags on set.
|
|
14
|
+
super.set(key, { ...value });
|
|
15
|
+
}
|
|
16
|
+
for (const [key, value] of source.duplicates) {
|
|
17
|
+
this.duplicates.set(key, new Set(value));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// First set for a given key wins, but record all duplicates for diagnostics.
|
|
22
|
+
set(key, value) {
|
|
23
|
+
const existing = super.get(key);
|
|
24
|
+
if (existing === undefined) {
|
|
25
|
+
super.set(key, value);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
if (existing.flags & 524288 /* SymbolFlags.Using */) {
|
|
29
|
+
mutate(existing).flags |= 1048576 /* SymbolFlags.DuplicateUsing */;
|
|
30
|
+
}
|
|
31
|
+
const duplicateArray = this.duplicates.get(existing);
|
|
32
|
+
if (duplicateArray) {
|
|
33
|
+
duplicateArray.add(value);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.duplicates.set(existing, new Set([existing, value]));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export function createSymbolTable(source) {
|
|
43
|
+
return new SymbolTable(source);
|
|
44
|
+
}
|
|
45
|
+
export function createBinder(program) {
|
|
46
|
+
let currentFile;
|
|
47
|
+
let parentNode;
|
|
48
|
+
let fileNamespace;
|
|
49
|
+
let scope;
|
|
50
|
+
// tracks which selectors were used with which projection symbols
|
|
51
|
+
// for reporting duplicates
|
|
52
|
+
const projectionSymbolSelectors = new Map();
|
|
53
|
+
return {
|
|
54
|
+
bindSourceFile,
|
|
55
|
+
bindJsSourceFile,
|
|
56
|
+
bindNode,
|
|
57
|
+
};
|
|
58
|
+
function isFunctionName(name) {
|
|
59
|
+
return DecoratorFunctionPattern.test(name);
|
|
60
|
+
}
|
|
61
|
+
function getFunctionName(name) {
|
|
62
|
+
return name.replace(DecoratorFunctionPattern, "");
|
|
63
|
+
}
|
|
64
|
+
function bindJsSourceFile(sourceFile) {
|
|
65
|
+
// cast because it causes TS to make the type of .symbol never other
|
|
66
|
+
if (sourceFile.symbol !== undefined) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const tracer = program.tracer.sub("bind.js");
|
|
70
|
+
fileNamespace = undefined;
|
|
71
|
+
mutate(sourceFile).symbol = createSymbol(sourceFile, sourceFile.file.path, 2097152 /* SymbolFlags.SourceFile */);
|
|
72
|
+
const rootNs = sourceFile.esmExports["namespace"];
|
|
73
|
+
for (const [key, member] of Object.entries(sourceFile.esmExports)) {
|
|
74
|
+
let name;
|
|
75
|
+
let kind;
|
|
76
|
+
let containerSymbol = sourceFile.symbol;
|
|
77
|
+
if (typeof member === "function") {
|
|
78
|
+
// lots of 'any' casts here because control flow narrowing `member` to Function
|
|
79
|
+
// isn't particularly useful it turns out.
|
|
80
|
+
if (isFunctionName(key)) {
|
|
81
|
+
name = getFunctionName(key);
|
|
82
|
+
kind = "decorator";
|
|
83
|
+
if (name === "onValidate") {
|
|
84
|
+
program.onValidate(member);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
else if (name === "onEmit") {
|
|
88
|
+
// nothing to do here this is loaded as emitter.
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
name = key;
|
|
94
|
+
kind = "function";
|
|
95
|
+
}
|
|
96
|
+
const memberNs = member.namespace;
|
|
97
|
+
const nsParts = [];
|
|
98
|
+
if (rootNs) {
|
|
99
|
+
nsParts.push(...rootNs.split("."));
|
|
100
|
+
}
|
|
101
|
+
if (memberNs) {
|
|
102
|
+
nsParts.push(...memberNs.split("."));
|
|
103
|
+
}
|
|
104
|
+
for (const part of nsParts) {
|
|
105
|
+
const existingBinding = containerSymbol.exports.get(part);
|
|
106
|
+
if (existingBinding) {
|
|
107
|
+
if (existingBinding.flags & 4096 /* SymbolFlags.Namespace */) {
|
|
108
|
+
// since the namespace was "declared" as part of this source file,
|
|
109
|
+
// we can simply re-use it.
|
|
110
|
+
containerSymbol = existingBinding;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// we have some conflict, lets report a duplicate binding error.
|
|
114
|
+
mutate(containerSymbol.exports).set(part, createSymbol(sourceFile, part, 4096 /* SymbolFlags.Namespace */, containerSymbol));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const sym = createSymbol(sourceFile, part, 4096 /* SymbolFlags.Namespace */, containerSymbol);
|
|
119
|
+
mutate(sym).exports = createSymbolTable();
|
|
120
|
+
mutate(containerSymbol.exports).set(part, sym);
|
|
121
|
+
containerSymbol = sym;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let sym;
|
|
125
|
+
if (kind === "decorator") {
|
|
126
|
+
tracer.trace("decorator", `Bound decorator "@${name}" in namespace "${nsParts.join(".")}".`);
|
|
127
|
+
sym = createSymbol(sourceFile, "@" + name, 16384 /* SymbolFlags.Decorator */ | 8388608 /* SymbolFlags.Implementation */, containerSymbol);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
tracer.trace("function", `Bound function "${name}" in namespace "${nsParts.join(".")}".`);
|
|
131
|
+
sym = createSymbol(sourceFile, name, 131072 /* SymbolFlags.Function */ | 8388608 /* SymbolFlags.Implementation */, containerSymbol);
|
|
132
|
+
}
|
|
133
|
+
mutate(sym).value = member;
|
|
134
|
+
mutate(containerSymbol.exports).set(sym.name, sym);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function bindSourceFile(script) {
|
|
139
|
+
if (script.locals !== undefined) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
mutate(script).locals = createSymbolTable();
|
|
143
|
+
mutate(script).symbol = createSymbol(script, script.file.path, 2097152 /* SymbolFlags.SourceFile */);
|
|
144
|
+
mutate(script.symbol).exports = createSymbolTable();
|
|
145
|
+
fileNamespace = undefined;
|
|
146
|
+
currentFile = script;
|
|
147
|
+
scope = script;
|
|
148
|
+
bindNode(script);
|
|
149
|
+
}
|
|
150
|
+
function bindNode(node) {
|
|
151
|
+
if (!node)
|
|
152
|
+
return;
|
|
153
|
+
// set the node's parent since we're going for a walk anyway
|
|
154
|
+
mutate(node).parent = parentNode;
|
|
155
|
+
switch (node.kind) {
|
|
156
|
+
case SyntaxKind.ModelStatement:
|
|
157
|
+
bindModelStatement(node);
|
|
158
|
+
break;
|
|
159
|
+
case SyntaxKind.ScalarStatement:
|
|
160
|
+
bindScalarStatement(node);
|
|
161
|
+
break;
|
|
162
|
+
case SyntaxKind.InterfaceStatement:
|
|
163
|
+
bindInterfaceStatement(node);
|
|
164
|
+
break;
|
|
165
|
+
case SyntaxKind.UnionStatement:
|
|
166
|
+
bindUnionStatement(node);
|
|
167
|
+
break;
|
|
168
|
+
case SyntaxKind.AliasStatement:
|
|
169
|
+
bindAliasStatement(node);
|
|
170
|
+
break;
|
|
171
|
+
case SyntaxKind.EnumStatement:
|
|
172
|
+
bindEnumStatement(node);
|
|
173
|
+
break;
|
|
174
|
+
case SyntaxKind.NamespaceStatement:
|
|
175
|
+
bindNamespaceStatement(node);
|
|
176
|
+
break;
|
|
177
|
+
case SyntaxKind.OperationStatement:
|
|
178
|
+
bindOperationStatement(node);
|
|
179
|
+
break;
|
|
180
|
+
case SyntaxKind.TemplateParameterDeclaration:
|
|
181
|
+
bindTemplateParameterDeclaration(node);
|
|
182
|
+
break;
|
|
183
|
+
case SyntaxKind.UsingStatement:
|
|
184
|
+
bindUsingStatement(node);
|
|
185
|
+
break;
|
|
186
|
+
case SyntaxKind.DecoratorDeclarationStatement:
|
|
187
|
+
bindDecoratorDeclarationStatement(node);
|
|
188
|
+
break;
|
|
189
|
+
case SyntaxKind.FunctionDeclarationStatement:
|
|
190
|
+
bindFunctionDeclarationStatement(node);
|
|
191
|
+
break;
|
|
192
|
+
case SyntaxKind.FunctionParameter:
|
|
193
|
+
bindFunctionParameter(node);
|
|
194
|
+
break;
|
|
195
|
+
case SyntaxKind.Projection:
|
|
196
|
+
bindProjection(node);
|
|
197
|
+
break;
|
|
198
|
+
case SyntaxKind.ProjectionStatement:
|
|
199
|
+
bindProjectionStatement(node);
|
|
200
|
+
break;
|
|
201
|
+
case SyntaxKind.ProjectionParameterDeclaration:
|
|
202
|
+
bindProjectionParameterDeclaration(node);
|
|
203
|
+
break;
|
|
204
|
+
case SyntaxKind.ProjectionLambdaParameterDeclaration:
|
|
205
|
+
bindProjectionLambdaParameterDeclaration(node);
|
|
206
|
+
break;
|
|
207
|
+
case SyntaxKind.ProjectionLambdaExpression:
|
|
208
|
+
bindProjectionLambdaExpression(node);
|
|
209
|
+
}
|
|
210
|
+
const prevParent = parentNode;
|
|
211
|
+
// set parent node when we walk into children
|
|
212
|
+
parentNode = node;
|
|
213
|
+
if (hasScope(node)) {
|
|
214
|
+
const prevScope = scope;
|
|
215
|
+
scope = node;
|
|
216
|
+
visitChildren(node, bindNode);
|
|
217
|
+
if ("locals" in node) {
|
|
218
|
+
program.reportDuplicateSymbols(node.locals);
|
|
219
|
+
}
|
|
220
|
+
scope = prevScope;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
visitChildren(node, bindNode);
|
|
224
|
+
}
|
|
225
|
+
// restore parent node
|
|
226
|
+
parentNode = prevParent;
|
|
227
|
+
}
|
|
228
|
+
function bindProjection(node) {
|
|
229
|
+
mutate(node).locals = createSymbolTable();
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Binding projection statements is interesting because there may be
|
|
233
|
+
* multiple declarations spread across various source files that all
|
|
234
|
+
* contribute to the same symbol because they declare the same
|
|
235
|
+
* projection on different selectors.
|
|
236
|
+
*
|
|
237
|
+
* There is presently an issue where we do not check for duplicate
|
|
238
|
+
* projections when they're applied to a specific type. This could
|
|
239
|
+
* be done with ease in the checker during evaluation, but could
|
|
240
|
+
* probably instead be done in a post-bind phase - we just need
|
|
241
|
+
* all the symbols in place so we know if a projection was declared
|
|
242
|
+
* multiple times for the same symbol.
|
|
243
|
+
*
|
|
244
|
+
*/
|
|
245
|
+
function bindProjectionStatement(node) {
|
|
246
|
+
const name = node.id.sv;
|
|
247
|
+
const table = scope.symbol
|
|
248
|
+
.exports;
|
|
249
|
+
let sym;
|
|
250
|
+
if (table.has(name)) {
|
|
251
|
+
sym = table.get(name);
|
|
252
|
+
if (!(sym.flags & 8192 /* SymbolFlags.Projection */)) {
|
|
253
|
+
// clashing with some other decl, report duplicate symbol
|
|
254
|
+
declareSymbol(node, 8192 /* SymbolFlags.Projection */);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
mutate(sym.declarations).push(node);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
sym = createSymbol(node, name, 8192 /* SymbolFlags.Projection */, scope.symbol);
|
|
261
|
+
mutate(table).set(name, sym);
|
|
262
|
+
}
|
|
263
|
+
mutate(node).symbol = sym;
|
|
264
|
+
if (node.selector.kind !== SyntaxKind.Identifier &&
|
|
265
|
+
node.selector.kind !== SyntaxKind.MemberExpression) {
|
|
266
|
+
const selectorString = node.selector.kind === SyntaxKind.ProjectionModelSelector
|
|
267
|
+
? "model"
|
|
268
|
+
: node.selector.kind === SyntaxKind.ProjectionOperationSelector
|
|
269
|
+
? "op"
|
|
270
|
+
: node.selector.kind === SyntaxKind.ProjectionUnionSelector
|
|
271
|
+
? "union"
|
|
272
|
+
: node.selector.kind === SyntaxKind.ProjectionEnumSelector
|
|
273
|
+
? "enum"
|
|
274
|
+
: "interface";
|
|
275
|
+
let existingSelectors = projectionSymbolSelectors.get(sym);
|
|
276
|
+
if (!existingSelectors) {
|
|
277
|
+
existingSelectors = new Set();
|
|
278
|
+
projectionSymbolSelectors.set(sym, existingSelectors);
|
|
279
|
+
}
|
|
280
|
+
if (existingSelectors.has(selectorString)) {
|
|
281
|
+
// clashing with a like-named decl with this selector, so throw.
|
|
282
|
+
declareSymbol(node, 8192 /* SymbolFlags.Projection */);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
existingSelectors.add(selectorString);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function bindProjectionParameterDeclaration(node) {
|
|
289
|
+
declareSymbol(node, 65536 /* SymbolFlags.ProjectionParameter */);
|
|
290
|
+
}
|
|
291
|
+
function bindProjectionLambdaParameterDeclaration(node) {
|
|
292
|
+
declareSymbol(node, 262144 /* SymbolFlags.FunctionParameter */);
|
|
293
|
+
}
|
|
294
|
+
function bindProjectionLambdaExpression(node) {
|
|
295
|
+
mutate(node).locals = new SymbolTable();
|
|
296
|
+
}
|
|
297
|
+
function bindTemplateParameterDeclaration(node) {
|
|
298
|
+
declareSymbol(node, 32768 /* SymbolFlags.TemplateParameter */);
|
|
299
|
+
}
|
|
300
|
+
function bindModelStatement(node) {
|
|
301
|
+
declareSymbol(node, 2 /* SymbolFlags.Model */);
|
|
302
|
+
// Initialize locals for type parameters
|
|
303
|
+
mutate(node).locals = new SymbolTable();
|
|
304
|
+
}
|
|
305
|
+
function bindScalarStatement(node) {
|
|
306
|
+
declareSymbol(node, 8 /* SymbolFlags.Scalar */);
|
|
307
|
+
// Initialize locals for type parameters
|
|
308
|
+
mutate(node).locals = new SymbolTable();
|
|
309
|
+
}
|
|
310
|
+
function bindInterfaceStatement(node) {
|
|
311
|
+
declareSymbol(node, 128 /* SymbolFlags.Interface */);
|
|
312
|
+
mutate(node).locals = new SymbolTable();
|
|
313
|
+
}
|
|
314
|
+
function bindUnionStatement(node) {
|
|
315
|
+
declareSymbol(node, 512 /* SymbolFlags.Union */);
|
|
316
|
+
mutate(node).locals = new SymbolTable();
|
|
317
|
+
}
|
|
318
|
+
function bindAliasStatement(node) {
|
|
319
|
+
declareSymbol(node, 2048 /* SymbolFlags.Alias */);
|
|
320
|
+
// Initialize locals for type parameters
|
|
321
|
+
mutate(node).locals = new SymbolTable();
|
|
322
|
+
}
|
|
323
|
+
function bindEnumStatement(node) {
|
|
324
|
+
declareSymbol(node, 32 /* SymbolFlags.Enum */);
|
|
325
|
+
}
|
|
326
|
+
function bindNamespaceStatement(statement) {
|
|
327
|
+
// check if there's an existing symbol for this namespace
|
|
328
|
+
const existingBinding = scope.symbol.exports.get(statement.id.sv);
|
|
329
|
+
if (existingBinding && existingBinding.flags & 4096 /* SymbolFlags.Namespace */) {
|
|
330
|
+
mutate(statement).symbol = existingBinding;
|
|
331
|
+
// locals are never shared.
|
|
332
|
+
mutate(statement).locals = createSymbolTable();
|
|
333
|
+
mutate(existingBinding.declarations).push(statement);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// Initialize locals for non-exported symbols
|
|
337
|
+
mutate(statement).locals = createSymbolTable();
|
|
338
|
+
declareSymbol(statement, 4096 /* SymbolFlags.Namespace */);
|
|
339
|
+
}
|
|
340
|
+
currentFile.namespaces.push(statement);
|
|
341
|
+
if (statement.statements === undefined) {
|
|
342
|
+
fileNamespace = statement;
|
|
343
|
+
let current = statement;
|
|
344
|
+
while (current.kind !== SyntaxKind.TypeSpecScript) {
|
|
345
|
+
currentFile.inScopeNamespaces.push(current);
|
|
346
|
+
current = current.parent;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
function bindUsingStatement(statement) {
|
|
351
|
+
mutate(currentFile.usings).push(statement);
|
|
352
|
+
}
|
|
353
|
+
function bindOperationStatement(statement) {
|
|
354
|
+
if (scope.kind !== SyntaxKind.InterfaceStatement) {
|
|
355
|
+
declareSymbol(statement, 16 /* SymbolFlags.Operation */);
|
|
356
|
+
}
|
|
357
|
+
mutate(statement).locals = createSymbolTable();
|
|
358
|
+
}
|
|
359
|
+
function bindDecoratorDeclarationStatement(node) {
|
|
360
|
+
declareSymbol(node, 16384 /* SymbolFlags.Decorator */ | 4194304 /* SymbolFlags.Declaration */, `@${node.id.sv}`);
|
|
361
|
+
}
|
|
362
|
+
function bindFunctionDeclarationStatement(node) {
|
|
363
|
+
declareSymbol(node, 131072 /* SymbolFlags.Function */ | 4194304 /* SymbolFlags.Declaration */);
|
|
364
|
+
}
|
|
365
|
+
function bindFunctionParameter(node) {
|
|
366
|
+
const symbol = createSymbol(node, node.id.sv, 262144 /* SymbolFlags.FunctionParameter */, scope.symbol);
|
|
367
|
+
mutate(node).symbol = symbol;
|
|
368
|
+
}
|
|
369
|
+
function declareSymbol(node, flags, name) {
|
|
370
|
+
switch (scope.kind) {
|
|
371
|
+
case SyntaxKind.NamespaceStatement:
|
|
372
|
+
return declareNamespaceMember(node, flags, name);
|
|
373
|
+
case SyntaxKind.TypeSpecScript:
|
|
374
|
+
case SyntaxKind.JsSourceFile:
|
|
375
|
+
return declareScriptMember(node, flags, name);
|
|
376
|
+
default:
|
|
377
|
+
const key = name !== null && name !== void 0 ? name : node.id.sv;
|
|
378
|
+
const symbol = createSymbol(node, key, flags, scope.symbol);
|
|
379
|
+
mutate(node).symbol = symbol;
|
|
380
|
+
mutate(scope.locals).set(key, symbol);
|
|
381
|
+
return symbol;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function declareNamespaceMember(node, flags, name) {
|
|
385
|
+
if (flags & 4096 /* SymbolFlags.Namespace */ &&
|
|
386
|
+
mergeNamespaceDeclarations(node, scope)) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const key = name !== null && name !== void 0 ? name : node.id.sv;
|
|
390
|
+
const symbol = createSymbol(node, key, flags, scope.symbol);
|
|
391
|
+
mutate(node).symbol = symbol;
|
|
392
|
+
mutate(scope.symbol.exports).set(key, symbol);
|
|
393
|
+
return symbol;
|
|
394
|
+
}
|
|
395
|
+
function declareScriptMember(node, flags, name) {
|
|
396
|
+
const effectiveScope = fileNamespace !== null && fileNamespace !== void 0 ? fileNamespace : scope;
|
|
397
|
+
if (flags & 4096 /* SymbolFlags.Namespace */ &&
|
|
398
|
+
mergeNamespaceDeclarations(node, effectiveScope)) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const key = name !== null && name !== void 0 ? name : node.id.sv;
|
|
402
|
+
const symbol = createSymbol(node, key, flags, fileNamespace === null || fileNamespace === void 0 ? void 0 : fileNamespace.symbol);
|
|
403
|
+
mutate(node).symbol = symbol;
|
|
404
|
+
mutate(effectiveScope.symbol.exports).set(key, symbol);
|
|
405
|
+
return symbol;
|
|
406
|
+
}
|
|
407
|
+
function mergeNamespaceDeclarations(node, scope) {
|
|
408
|
+
// we are declaring a namespace in either global scope, or a blockless namespace.
|
|
409
|
+
const existingBinding = scope.symbol.exports.get(node.id.sv);
|
|
410
|
+
if (existingBinding && existingBinding.flags & 4096 /* SymbolFlags.Namespace */) {
|
|
411
|
+
// we have an existing binding, so just push this node to its declarations
|
|
412
|
+
mutate(existingBinding.declarations).push(node);
|
|
413
|
+
mutate(node).symbol = existingBinding;
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
function hasScope(node) {
|
|
420
|
+
switch (node.kind) {
|
|
421
|
+
case SyntaxKind.ModelStatement:
|
|
422
|
+
case SyntaxKind.AliasStatement:
|
|
423
|
+
case SyntaxKind.TypeSpecScript:
|
|
424
|
+
case SyntaxKind.InterfaceStatement:
|
|
425
|
+
case SyntaxKind.OperationStatement:
|
|
426
|
+
case SyntaxKind.UnionStatement:
|
|
427
|
+
case SyntaxKind.Projection:
|
|
428
|
+
case SyntaxKind.ProjectionLambdaExpression:
|
|
429
|
+
return true;
|
|
430
|
+
case SyntaxKind.NamespaceStatement:
|
|
431
|
+
return node.statements !== undefined;
|
|
432
|
+
default:
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
export function createSymbol(node, name, flags, parent, value) {
|
|
437
|
+
let exports;
|
|
438
|
+
if (flags & 2101248 /* SymbolFlags.ExportContainer */) {
|
|
439
|
+
exports = createSymbolTable();
|
|
440
|
+
}
|
|
441
|
+
let members;
|
|
442
|
+
if (flags & 674 /* SymbolFlags.MemberContainer */) {
|
|
443
|
+
members = createSymbolTable();
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
declarations: node ? [node] : [],
|
|
447
|
+
name,
|
|
448
|
+
exports,
|
|
449
|
+
members,
|
|
450
|
+
flags,
|
|
451
|
+
value,
|
|
452
|
+
parent,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=binder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binder.js","sourceRoot":"","sources":["../../core/binder.ts"],"names":[],"mappings":"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"}
|