@bytecodealliance/jco 1.28.1 → 1.30.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.
Files changed (42) hide show
  1. package/README.md +48 -0
  2. package/dist/api.js.map +1 -1
  3. package/dist/bundle.js.map +1 -1
  4. package/dist/cmd/new/declarations.d.ts +5 -0
  5. package/dist/cmd/new/declarations.d.ts.map +1 -0
  6. package/dist/cmd/new/declarations.js +221 -0
  7. package/dist/cmd/new/declarations.js.map +1 -0
  8. package/dist/cmd/new/model.d.ts +23 -0
  9. package/dist/cmd/new/model.d.ts.map +1 -0
  10. package/dist/cmd/new/model.js +2 -0
  11. package/dist/cmd/new/model.js.map +1 -0
  12. package/dist/cmd/new/package-manager.d.ts +14 -0
  13. package/dist/cmd/new/package-manager.d.ts.map +1 -0
  14. package/dist/cmd/new/package-manager.js +33 -0
  15. package/dist/cmd/new/package-manager.js.map +1 -0
  16. package/dist/cmd/new/render.d.ts +9 -0
  17. package/dist/cmd/new/render.d.ts.map +1 -0
  18. package/dist/cmd/new/render.js +254 -0
  19. package/dist/cmd/new/render.js.map +1 -0
  20. package/dist/cmd/new.d.ts +14 -0
  21. package/dist/cmd/new.d.ts.map +1 -0
  22. package/dist/cmd/new.js +260 -0
  23. package/dist/cmd/new.js.map +1 -0
  24. package/dist/cmd/opt.js.map +1 -1
  25. package/dist/cmd/run.d.ts +23 -2
  26. package/dist/cmd/run.d.ts.map +1 -1
  27. package/dist/cmd/run.js +51 -1
  28. package/dist/cmd/run.js.map +1 -1
  29. package/dist/cmd/transpile.d.ts +2 -0
  30. package/dist/cmd/transpile.d.ts.map +1 -1
  31. package/dist/cmd/transpile.js +3 -0
  32. package/dist/cmd/transpile.js.map +1 -1
  33. package/dist/cmd/types.d.ts +1 -0
  34. package/dist/cmd/types.d.ts.map +1 -1
  35. package/dist/cmd/types.js +1 -0
  36. package/dist/cmd/types.js.map +1 -1
  37. package/dist/cmd/wasm-tools.js.map +1 -1
  38. package/dist/common.js.map +1 -1
  39. package/dist/jco.js +46 -1
  40. package/dist/jco.js.map +1 -1
  41. package/dist/ora-shim.d.ts.map +1 -1
  42. package/package.json +7 -6
package/README.md CHANGED
@@ -57,6 +57,7 @@ Options:
57
57
  -h, --help display help for command
58
58
 
59
59
  Commands:
60
+ scaffold [options] <project-directory> Create a JavaScript or TypeScript WebAssembly component or host-plugin project
60
61
  componentize [options] <source> Create a component from a JavaScript or TypeScript module
61
62
  transpile [options] <component-path> Transpile a WebAssembly Component to JS + core Wasm for JavaScript execution
62
63
  types [options] <wit-path> Generate types for the given WIT
@@ -70,12 +71,43 @@ Commands:
70
71
  metadata-add [options] [module] add producer metadata for a Wasm binary [wasm-tools metadata add]
71
72
  parse [options] <input> parses the Wasm text format into a binary file [wasm-tools parse]
72
73
  new [options] <core-module> create a WebAssembly component adapted from a component core Wasm [wasm-tools component new]
74
+ tool Low-level WebAssembly conversion utilities
73
75
  embed [options] [core-module] embed the component typing section into a core Wasm module [wasm-tools component embed]
74
76
  help [command] display help for command
75
77
  ```
76
78
 
77
79
  For help with individual command options, use `jco <cmd> --help`.
78
80
 
81
+ ### Scaffold a new component project
82
+
83
+ `jco scaffold` creates a regular Node.js project whose source skeleton matches an existing WIT world. By default,
84
+ Typescript, `pnpm`, and both NodeJS and Web targets are used:
85
+
86
+ ```console
87
+ jco scaffold my-component --wit path/to/wit
88
+ ```
89
+
90
+ `--wit` accepts a self-contained `.wit` file or WIT package directory and copies it into the project. If dealing with a
91
+ WIT file that contains multiple worlds, supply the `--world` option as well.
92
+
93
+ Immediately, you should be able to install and build the component:
94
+
95
+ ```console
96
+ cd my-component
97
+ pnpm install
98
+ pnpm check
99
+ pnpm test
100
+ pnpm build
101
+ ```
102
+
103
+ You can configure scaffolding in various ways:
104
+
105
+ - `--host` to generate a plugin that provides the selected world's imports for use with `instantiate` (the default
106
+ generates a guest that implements its exports)
107
+ - `--language javascript` to generate a Javscript scaffold (the default is Typescript)
108
+ - `--package-manager npm`/`--package-manager yarn` to use a separate package manager (`pnpm` is the default)
109
+ - `--target nodejs`/`--target web` (can be repeated) to explicitly enable targets (by default both targets are supported)
110
+
79
111
  ### Transpile
80
112
 
81
113
  See the [Transpiling Docs](https://bytecodealliance.github.io/jco/transpiling.html) for more background and info.
@@ -92,6 +124,22 @@ For Wasm components that implement the WASI Command world, a `jco run` utility i
92
124
  jco run cowasy.component.wasm hello
93
125
  ```
94
126
 
127
+ By default, `jco run` retains its historical behavior and gives the component access to the host
128
+ filesystem, environment, and network. Pass `--sandbox` to deny those capabilities, then grant
129
+ only those the component needs:
130
+
131
+ ```console
132
+ jco run command.wasm --sandbox \
133
+ --sandbox-env-set HOME=/guest \
134
+ --sandbox-fs-preopen ./data::/data \
135
+ --sandbox-net-inherit
136
+ ```
137
+
138
+ `--sandbox-env-set NAME` inherits one variable from the host, while `--sandbox-env-inherit` inherits
139
+ them all. `--sandbox-fs-preopen HOST[::GUEST]` exposes a directory (using the host path as the guest
140
+ path when it is omitted). The environment and preopen options may be repeated; values are applied
141
+ in command-line order.
142
+
95
143
  Using the preview2-shim WASI implementation, full access to the underlying system primitives is provided, including filesystem and environment variable permissions.
96
144
 
97
145
  For HTTP Proxy components, `jco serve` provides a JS server implementation:
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,IAAI,SAAS,EAAE,cAAc,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EACH,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,GACf,MAAM,4CAA4C,CAAC;AAEpD,MAAM,UAAU,0BAA0B;IACtC,OAAO,IAAI,GAAG,CAAC,4CAA4C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC;AACD,MAAM,UAAU,0BAA0B;IACtC,OAAO,IAAI,GAAG,CAAC,4CAA4C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,IAAI,SAAS,EAAE,cAAc,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EACH,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,GACf,MAAM,4CAA4C,CAAC;AAEpD,MAAM,UAAU,0BAA0B;IACtC,OAAO,IAAI,GAAG,CAAC,4CAA4C,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC;AACD,MAAM,UAAU,0BAA0B;IACtC,OAAO,IAAI,GAAG,CAAC,4CAA4C,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type ts from "typescript-compiler-api";
2
+ import type { ComponentImplementationModel } from "./model.js";
3
+ export declare function declarationModel(typescript: typeof ts, files: Record<string, Uint8Array>, hostMode?: boolean): ComponentImplementationModel;
4
+ export declare function validateComponentSource(typescript: typeof ts, files: Record<string, Uint8Array>, source: string, language: "typescript" | "javascript"): void;
5
+ //# sourceMappingURL=declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../src/cmd/new/declarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAE9C,OAAO,KAAK,EAAE,4BAA4B,EAAgD,MAAM,YAAY,CAAC;AAE7G,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,UAAQ,GACjB,4BAA4B,CA+E9B;AAqDD,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,GAAG,YAAY,GACtC,IAAI,CA8DN"}
@@ -0,0 +1,221 @@
1
+ export function declarationModel(typescript, files, hostMode = false) {
2
+ const decoder = new TextDecoder();
3
+ const virtualFiles = Object.fromEntries(Object.entries(files).map(([name, bytes]) => [`/${name.replaceAll("\\", "/")}`, decoder.decode(bytes)]));
4
+ const options = {
5
+ module: typescript.ModuleKind.ESNext,
6
+ moduleResolution: typescript.ModuleResolutionKind.Bundler,
7
+ noLib: true,
8
+ skipLibCheck: true,
9
+ };
10
+ const baseHost = typescript.createCompilerHost(options);
11
+ const host = {
12
+ ...baseHost,
13
+ fileExists: (name) => virtualFiles[name] !== undefined,
14
+ readFile: (name) => virtualFiles[name],
15
+ getCurrentDirectory: () => "/",
16
+ getDefaultLibFileName: () => "/lib.d.ts",
17
+ getSourceFile: (name, languageVersion) => {
18
+ const source = virtualFiles[name];
19
+ return source === undefined
20
+ ? undefined
21
+ : typescript.createSourceFile(name, source, languageVersion, true, typescript.ScriptKind.TS);
22
+ },
23
+ };
24
+ const program = typescript.createProgram(Object.keys(virtualFiles), options, host);
25
+ const checker = program.getTypeChecker();
26
+ if (hostMode) {
27
+ return hostDeclarationModel(typescript, program, checker);
28
+ }
29
+ const modules = new Map();
30
+ const rootModules = [];
31
+ // Build graph for typechecking
32
+ for (const sourceFile of program.getSourceFiles()) {
33
+ for (const statement of sourceFile.statements) {
34
+ if (typescript.isModuleDeclaration(statement) && typescript.isStringLiteral(statement.name)) {
35
+ const symbol = checker.getSymbolAtLocation(statement.name);
36
+ if (symbol) {
37
+ modules.set(statement.name.text, symbol);
38
+ if (!sourceFile.fileName.includes("/interfaces/")) {
39
+ rootModules.push(statement.name.text);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ if (rootModules.length !== 1) {
46
+ throw new Error(`Expected one generated world declaration, found ${rootModules.length}`);
47
+ }
48
+ const world = rootModules[0];
49
+ const worldSymbol = modules.get(world);
50
+ const functions = [];
51
+ const interfaces = [];
52
+ // Gather interfaces and functions
53
+ for (const exported of checker.getExportsOfModule(worldSymbol)) {
54
+ const declaration = exported.declarations?.[0];
55
+ if (declaration &&
56
+ typescript.isNamespaceExport(declaration) &&
57
+ typescript.isExportDeclaration(declaration.parent) &&
58
+ declaration.parent.isTypeOnly) {
59
+ continue;
60
+ }
61
+ const target = exported.flags & typescript.SymbolFlags.Alias ? checker.getAliasedSymbol(exported) : exported;
62
+ if (target.flags & typescript.SymbolFlags.Function) {
63
+ functions.push(functionFromSymbol(typescript, checker, target));
64
+ }
65
+ else if (target.flags & typescript.SymbolFlags.ValueModule) {
66
+ interfaces.push(interfaceFromSymbol(typescript, checker, exported.name, target));
67
+ }
68
+ }
69
+ return { world, functions, interfaces };
70
+ }
71
+ function hostDeclarationModel(typescript, program, checker) {
72
+ const root = program.getSourceFiles().find((source) => !source.fileName.includes("/interfaces/"));
73
+ if (!root) {
74
+ throw new Error("Expected one generated host world declaration");
75
+ }
76
+ const world = root.getFullText().match(/\/\/ world ([^\s]+)/)?.[1];
77
+ if (!world) {
78
+ throw new Error("Could not determine the generated host world");
79
+ }
80
+ const interfaces = [];
81
+ for (const statement of root.statements) {
82
+ if (!typescript.isExportDeclaration(statement) ||
83
+ !statement.isTypeOnly ||
84
+ !statement.exportClause ||
85
+ !typescript.isNamespaceExport(statement.exportClause)) {
86
+ continue;
87
+ }
88
+ const exported = checker.getSymbolAtLocation(statement.exportClause.name);
89
+ if (!exported) {
90
+ continue;
91
+ }
92
+ const moduleSpecifier = typescript.isStringLiteral(statement.moduleSpecifier)
93
+ ? statement.moduleSpecifier.text
94
+ : undefined;
95
+ const interfaceFile = moduleSpecifier
96
+ ? program.getSourceFile(`/${moduleSpecifier.replace(/^\.\//, "").replace(/\.js$/, ".d.ts")}`)
97
+ : undefined;
98
+ const importName = interfaceFile?.getFullText().match(/@module Interface ([^\s*]+)/)?.[1];
99
+ const target = interfaceFile && checker.getSymbolAtLocation(interfaceFile);
100
+ if (!importName || !target) {
101
+ throw new Error(`Could not determine the WIT import for ${exported.name}`);
102
+ }
103
+ interfaces.push({ ...interfaceFromSymbol(typescript, checker, exported.name, target), importName });
104
+ }
105
+ return {
106
+ world,
107
+ typeModule: `../types/generated/${root.fileName
108
+ .split("/")
109
+ .pop()
110
+ .replace(/\.d\.ts$/, ".js")}`,
111
+ functions: [],
112
+ interfaces,
113
+ };
114
+ }
115
+ export function validateComponentSource(typescript, files, source, language) {
116
+ const decoder = new TextDecoder();
117
+ const sourceName = language === "typescript" ? "/src/component.ts" : "/src/component.js";
118
+ const virtualFiles = {
119
+ [sourceName]: source,
120
+ ...Object.fromEntries(Object.entries(files).map(([name, bytes]) => [
121
+ `/types/generated/${name.replaceAll("\\", "/")}`,
122
+ decoder.decode(bytes),
123
+ ])),
124
+ };
125
+ const options = {
126
+ allowJs: language === "javascript",
127
+ checkJs: language === "javascript",
128
+ module: typescript.ModuleKind.ESNext,
129
+ moduleResolution: typescript.ModuleResolutionKind.Bundler,
130
+ noEmit: true,
131
+ skipLibCheck: true,
132
+ strict: true,
133
+ noImplicitAny: language === "typescript",
134
+ target: typescript.ScriptTarget.ES2022,
135
+ };
136
+ const baseHost = typescript.createCompilerHost(options);
137
+ const host = {
138
+ ...baseHost,
139
+ fileExists: (name) => virtualFiles[name] !== undefined || baseHost.fileExists(name),
140
+ directoryExists: (name) => Object.keys(virtualFiles).some((file) => file.startsWith(`${name}/`)) ||
141
+ (baseHost.directoryExists?.(name) ?? false),
142
+ readFile: (name) => virtualFiles[name] ?? baseHost.readFile(name),
143
+ getCurrentDirectory: () => "/",
144
+ getSourceFile: (name, languageVersion) => {
145
+ const contents = virtualFiles[name];
146
+ return contents === undefined
147
+ ? baseHost.getSourceFile(name, languageVersion)
148
+ : typescript.createSourceFile(name, contents, languageVersion, true, name.endsWith(".js") ? typescript.ScriptKind.JS : typescript.ScriptKind.TS);
149
+ },
150
+ };
151
+ const program = typescript.createProgram(Object.keys(virtualFiles), options, host);
152
+ // Perform type checking
153
+ const diagnostics = typescript
154
+ .getPreEmitDiagnostics(program)
155
+ .filter((diagnostic) => diagnostic.file === undefined || diagnostic.file.fileName === sourceName);
156
+ if (diagnostics.length > 0) {
157
+ const message = typescript.formatDiagnostics(diagnostics, {
158
+ getCanonicalFileName: (name) => name,
159
+ getCurrentDirectory: () => "/",
160
+ getNewLine: () => "\n",
161
+ });
162
+ throw new Error(`Generated component failed type checking:\n${message}`);
163
+ }
164
+ }
165
+ function interfaceFromSymbol(typescript, checker, name, symbol) {
166
+ const functions = [];
167
+ const resources = [];
168
+ for (const exported of checker.getExportsOfModule(symbol)) {
169
+ if (exported.flags & typescript.SymbolFlags.Function) {
170
+ functions.push(functionFromSymbol(typescript, checker, exported));
171
+ }
172
+ else if (exported.flags & typescript.SymbolFlags.Class) {
173
+ resources.push(resourceFromSymbol(typescript, exported));
174
+ }
175
+ }
176
+ return { name, functions, resources };
177
+ }
178
+ function functionFromSymbol(typescript, checker, symbol) {
179
+ const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];
180
+ if (!declaration) {
181
+ throw new Error(`Missing declaration for ${symbol.name}`);
182
+ }
183
+ const signature = checker.getSignatureFromDeclaration(declaration);
184
+ return {
185
+ name: symbol.name,
186
+ parameters: signature?.parameters.map((parameter, index) => safeParameterName(typescript, parameter.name, index)) ?? [],
187
+ };
188
+ }
189
+ function resourceFromSymbol(typescript, symbol) {
190
+ const declaration = symbol.declarations?.find(typescript.isClassDeclaration);
191
+ if (!declaration) {
192
+ throw new Error(`Missing class declaration for ${symbol.name}`);
193
+ }
194
+ let constructorParameters;
195
+ const methods = [];
196
+ const staticMethods = [];
197
+ for (const member of declaration.members) {
198
+ if (typescript.isConstructorDeclaration(member)) {
199
+ if (!member.modifiers?.some((modifier) => modifier.kind === typescript.SyntaxKind.PrivateKeyword)) {
200
+ constructorParameters = member.parameters.map((parameter, index) => safeParameterName(typescript, parameter.name.getText(), index));
201
+ }
202
+ }
203
+ else if (typescript.isMethodDeclaration(member) && typescript.isIdentifier(member.name)) {
204
+ const method = {
205
+ name: member.name.text,
206
+ parameters: member.parameters.map((parameter, index) => safeParameterName(typescript, parameter.name.getText(), index)),
207
+ };
208
+ if (member.modifiers?.some((modifier) => modifier.kind === typescript.SyntaxKind.StaticKeyword)) {
209
+ staticMethods.push(method);
210
+ }
211
+ else {
212
+ methods.push(method);
213
+ }
214
+ }
215
+ }
216
+ return { name: symbol.name, constructorParameters, methods, staticMethods };
217
+ }
218
+ function safeParameterName(_typescript, name, index) {
219
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : `arg${index}`;
220
+ }
221
+ //# sourceMappingURL=declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/cmd/new/declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface FunctionModel {
2
+ name: string;
3
+ parameters: string[];
4
+ }
5
+ export interface ResourceModel {
6
+ name: string;
7
+ constructorParameters?: string[];
8
+ methods: FunctionModel[];
9
+ staticMethods: FunctionModel[];
10
+ }
11
+ export interface InterfaceModel {
12
+ name: string;
13
+ importName?: string;
14
+ functions: FunctionModel[];
15
+ resources: ResourceModel[];
16
+ }
17
+ export interface ComponentImplementationModel {
18
+ world: string;
19
+ typeModule?: string;
20
+ functions: FunctionModel[];
21
+ interfaces: InterfaceModel[];
22
+ }
23
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cmd/new/model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cmd/new/model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { NewPackageManager } from "../new.js";
2
+ export interface PackageManagerAdapter {
3
+ name: NewPackageManager;
4
+ executable: string;
5
+ packageManager: string;
6
+ lockfile: string;
7
+ install: string;
8
+ run(script: string): string;
9
+ }
10
+ export declare const DEFAULT_PNPM_VERSION = "11.0.0";
11
+ export declare const DEFAULT_NPM_VERSION = "12.0.2";
12
+ export declare const DEFAULT_YARN_VERSION = "4.18.0";
13
+ export declare function packageManagerAdapter(name: NewPackageManager): PackageManagerAdapter;
14
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/cmd/new/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,WAAW,CAAC;AA6B7C,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,CAEpF"}
@@ -0,0 +1,33 @@
1
+ export const DEFAULT_PNPM_VERSION = "11.0.0";
2
+ export const DEFAULT_NPM_VERSION = "12.0.2";
3
+ export const DEFAULT_YARN_VERSION = "4.18.0";
4
+ const PACKAGE_MANAGERS = {
5
+ pnpm: {
6
+ name: "pnpm",
7
+ executable: "pnpm",
8
+ packageManager: `pnpm@${DEFAULT_PNPM_VERSION}`,
9
+ lockfile: "pnpm-lock.yaml",
10
+ install: "pnpm install",
11
+ run: (script) => `pnpm run ${script}`,
12
+ },
13
+ npm: {
14
+ name: "npm",
15
+ executable: "npm",
16
+ packageManager: `npm@${DEFAULT_NPM_VERSION}`,
17
+ lockfile: "package-lock.json",
18
+ install: "npm install",
19
+ run: (script) => `npm run ${script}`,
20
+ },
21
+ yarn: {
22
+ name: "yarn",
23
+ executable: "yarn",
24
+ packageManager: `yarn@${DEFAULT_YARN_VERSION}`,
25
+ lockfile: "yarn.lock",
26
+ install: "yarn install",
27
+ run: (script) => `yarn run ${script}`,
28
+ },
29
+ };
30
+ export function packageManagerAdapter(name) {
31
+ return PACKAGE_MANAGERS[name];
32
+ }
33
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/cmd/new/package-manager.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,MAAM,gBAAgB,GAAqD;IACvE,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,QAAQ,oBAAoB,EAAE;QAC9C,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,MAAM,EAAE;KACxC;IACD,GAAG,EAAE;QACD,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,OAAO,mBAAmB,EAAE;QAC5C,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,aAAa;QACtB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,MAAM,EAAE;KACvC;IACD,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,QAAQ,oBAAoB,EAAE;QAC9C,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,MAAM,EAAE;KACxC;CACJ,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IACzD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type ts from "typescript-compiler-api";
2
+ import type { ComponentImplementationModel } from "./model.js";
3
+ /** Render the javascript code for a component */
4
+ export declare function renderComponent(typescript: typeof ts, model: ComponentImplementationModel, language: "typescript" | "javascript"): string;
5
+ /** Render an imports plugin suitable for passing to a component's instantiate function. */
6
+ export declare function renderHostPlugin(typescript: typeof ts, model: ComponentImplementationModel, language: "typescript" | "javascript"): string;
7
+ export declare function renderComponentTest(typescript: typeof ts, model: ComponentImplementationModel, language: "typescript" | "javascript"): string;
8
+ export declare function renderHostPluginTest(typescript: typeof ts, model: ComponentImplementationModel, language: "typescript" | "javascript"): string;
9
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cmd/new/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAE9C,OAAO,KAAK,EAAE,4BAA4B,EAAgC,MAAM,YAAY,CAAC;AA6C7F,iDAAiD;AACjD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,4BAA4B,EACnC,QAAQ,EAAE,YAAY,GAAG,YAAY,GACtC,MAAM,CAwER;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,4BAA4B,EACnC,QAAQ,EAAE,YAAY,GAAG,YAAY,GACtC,MAAM,CAsER;AAED,wBAAgB,mBAAmB,CAC/B,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,4BAA4B,EACnC,QAAQ,EAAE,YAAY,GAAG,YAAY,GACtC,MAAM,CAqFR;AAED,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,OAAO,EAAE,EACrB,KAAK,EAAE,4BAA4B,EACnC,QAAQ,EAAE,YAAY,GAAG,YAAY,GACtC,MAAM,CAaR"}