xbintsc 0.3.11 → 0.3.13
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 +21 -3
- package/README.zh-CN.md +18 -3
- package/dist/src/cli/main.js +8 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +27 -0
- package/dist/src/codegen/generator/context.js +103 -10
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/expressions/primary.js +4 -0
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/state.d.ts +7 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/driver/compiler.d.ts +7 -0
- package/dist/src/driver/compiler.js +29 -2
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/extensions/catalog.d.ts +14 -0
- package/dist/src/extensions/catalog.js +17 -0
- package/dist/src/extensions/catalog.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +15 -0
- package/dist/src/extensions/registry.js +27 -0
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/tests/cli/main.test.js +24 -0
- package/dist/tests/cli/main.test.js.map +1 -1
- package/dist/tests/driver/compiler.test.js +81 -1
- package/dist/tests/driver/compiler.test.js.map +1 -1
- package/dist/tests/extensions/registry.test.js +11 -0
- package/dist/tests/extensions/registry.test.js.map +1 -1
- package/package.json +3 -2
- package/scripts/coverage-runtime.ts +338 -0
- package/src/cli/main.ts +7 -0
- package/src/codegen/generator/context.ts +113 -8
- package/src/codegen/generator/expressions/primary.ts +3 -0
- package/src/codegen/generator/state.ts +7 -0
- package/src/driver/compiler.ts +29 -2
- package/src/extensions/catalog.ts +19 -0
- package/src/extensions/registry.ts +28 -0
- package/src/index.ts +1 -0
|
@@ -79,6 +79,13 @@ export interface Extension {
|
|
|
79
79
|
|
|
80
80
|
export class ExtensionRegistry {
|
|
81
81
|
private readonly extensions = new Map<string, Extension>();
|
|
82
|
+
/**
|
|
83
|
+
* Module specifier -> extension name for extensions that are known to the
|
|
84
|
+
* caller but not registered. Lets the compiler turn a missing `import`
|
|
85
|
+
* (`import { createServer } from "node:http"`) into an actionable hint
|
|
86
|
+
* (`pass --ext node`) instead of a confusing downstream error.
|
|
87
|
+
*/
|
|
88
|
+
private readonly hints = new Map<string, string>();
|
|
82
89
|
|
|
83
90
|
register(extension: Extension): this {
|
|
84
91
|
if (this.extensions.has(extension.name)) {
|
|
@@ -88,6 +95,27 @@ export class ExtensionRegistry {
|
|
|
88
95
|
return this;
|
|
89
96
|
}
|
|
90
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Record every module an extension would provide if it were registered. The
|
|
100
|
+
* extension itself is *not* enabled: this only feeds diagnostics, so a user
|
|
101
|
+
* who forgot `--ext node` is told which flag to pass.
|
|
102
|
+
*/
|
|
103
|
+
hintExtension(extension: Extension): this {
|
|
104
|
+
for (const specifier of Object.keys(extension.modules?.() ?? {})) {
|
|
105
|
+
this.hints.set(specifier, extension.name);
|
|
106
|
+
}
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Module specifier -> extension name hints for unregistered extensions. */
|
|
111
|
+
moduleHints(): Readonly<Record<string, string>> {
|
|
112
|
+
const hints: Record<string, string> = {};
|
|
113
|
+
for (const [specifier, name] of this.hints) {
|
|
114
|
+
if (!this.extensions.has(name)) hints[specifier] = name;
|
|
115
|
+
}
|
|
116
|
+
return hints;
|
|
117
|
+
}
|
|
118
|
+
|
|
91
119
|
unregister(name: string): boolean {
|
|
92
120
|
return this.extensions.delete(name);
|
|
93
121
|
}
|
package/src/index.ts
CHANGED
|
@@ -30,6 +30,7 @@ export {
|
|
|
30
30
|
booleanLiteral,
|
|
31
31
|
} from "./codegen/values.js";
|
|
32
32
|
export { ExtensionRegistry, createDefaultRegistry, coreExtension, type Extension, type ExtensionModule, type ModuleExport, type ModuleExports } from "./extensions/registry.js";
|
|
33
|
+
export { bundledExtensions } from "./extensions/catalog.js";
|
|
33
34
|
export { nodeExtension } from "./extensions/node/index.js";
|
|
34
35
|
export type { NodeModule } from "./extensions/node/module.js";
|
|
35
36
|
export {
|