@tsonic/cli 0.0.14 → 0.0.16

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 (56) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/constants.d.ts +1 -1
  3. package/dist/cli/constants.d.ts.map +1 -1
  4. package/dist/cli/constants.js +4 -1
  5. package/dist/cli/constants.js.map +1 -1
  6. package/dist/cli/dispatcher.d.ts.map +1 -1
  7. package/dist/cli/dispatcher.js +63 -24
  8. package/dist/cli/dispatcher.js.map +1 -1
  9. package/dist/cli/help.d.ts.map +1 -1
  10. package/dist/cli/help.js +10 -7
  11. package/dist/cli/help.js.map +1 -1
  12. package/dist/cli/parser.d.ts +1 -2
  13. package/dist/cli/parser.d.ts.map +1 -1
  14. package/dist/cli/parser.js +29 -19
  15. package/dist/cli/parser.js.map +1 -1
  16. package/dist/cli/parser.test.js +49 -29
  17. package/dist/cli/parser.test.js.map +1 -1
  18. package/dist/commands/add-common.d.ts +61 -0
  19. package/dist/commands/add-common.d.ts.map +1 -0
  20. package/dist/commands/add-common.js +226 -0
  21. package/dist/commands/add-common.js.map +1 -0
  22. package/dist/commands/add-framework.d.ts +17 -0
  23. package/dist/commands/add-framework.d.ts.map +1 -0
  24. package/dist/commands/add-framework.js +125 -0
  25. package/dist/commands/add-framework.js.map +1 -0
  26. package/dist/commands/add-nuget.d.ts +18 -0
  27. package/dist/commands/add-nuget.d.ts.map +1 -0
  28. package/dist/commands/add-nuget.js +256 -0
  29. package/dist/commands/add-nuget.js.map +1 -0
  30. package/dist/commands/add-package.d.ts +12 -19
  31. package/dist/commands/add-package.d.ts.map +1 -1
  32. package/dist/commands/add-package.js +175 -86
  33. package/dist/commands/add-package.js.map +1 -1
  34. package/dist/commands/build.d.ts.map +1 -1
  35. package/dist/commands/build.js +12 -2
  36. package/dist/commands/build.js.map +1 -1
  37. package/dist/commands/generate.d.ts.map +1 -1
  38. package/dist/commands/generate.js +74 -53
  39. package/dist/commands/generate.js.map +1 -1
  40. package/dist/commands/init.d.ts +2 -3
  41. package/dist/commands/init.d.ts.map +1 -1
  42. package/dist/commands/init.js +21 -63
  43. package/dist/commands/init.js.map +1 -1
  44. package/dist/commands/init.test.js +19 -59
  45. package/dist/commands/init.test.js.map +1 -1
  46. package/dist/config.d.ts.map +1 -1
  47. package/dist/config.js +63 -6
  48. package/dist/config.js.map +1 -1
  49. package/dist/config.test.js +36 -6
  50. package/dist/config.test.js.map +1 -1
  51. package/dist/types.d.ts +33 -3
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +5 -5
  54. package/runtime/Tsonic.JSRuntime.dll +0 -0
  55. package/runtime/Tsonic.Runtime.dll +0 -0
  56. package/runtime/nodejs.dll +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * tsonic add framework - add a FrameworkReference to the project, plus bindings.
3
+ *
4
+ * Usage:
5
+ * tsonic add framework Microsoft.AspNetCore.App [typesPackage]
6
+ *
7
+ * If typesPackage is omitted, bindings are auto-generated via tsbindgen from the
8
+ * installed shared framework assemblies.
9
+ */
10
+ import { existsSync, mkdirSync } from "node:fs";
11
+ import { join } from "node:path";
12
+ import { defaultBindingsPackageNameForFramework, detectTsbindgenNaming, ensurePackageJson, listDotnetRuntimes, npmInstallDevDependency, readTsonicJson, resolveFromProjectRoot, resolveTsbindgenDllPath, tsbindgenGenerate, writeTsonicJson, } from "./add-common.js";
13
+ const addUnique = (arr, value) => {
14
+ if (!arr.includes(value))
15
+ arr.push(value);
16
+ };
17
+ const isValidTypesPackageName = (name) => {
18
+ if (!name.startsWith("@") && !name.includes("/"))
19
+ return true;
20
+ return /^@[a-z0-9-]+\/[a-z0-9-]+$/i.test(name);
21
+ };
22
+ export const addFrameworkCommand = (frameworkReference, typesPackage, projectRoot, options = {}) => {
23
+ if (!frameworkReference.trim()) {
24
+ return { ok: false, error: "Framework reference must be non-empty" };
25
+ }
26
+ if (typesPackage !== undefined && !isValidTypesPackageName(typesPackage)) {
27
+ return { ok: false, error: `Invalid types package name: ${typesPackage}` };
28
+ }
29
+ const tsonicConfigResult = readTsonicJson(projectRoot);
30
+ if (!tsonicConfigResult.ok)
31
+ return tsonicConfigResult;
32
+ const { path: configPath, config } = tsonicConfigResult.value;
33
+ const dotnet = config.dotnet ?? {};
34
+ const frameworkRefs = [...(dotnet.frameworkReferences ?? [])];
35
+ addUnique(frameworkRefs, frameworkReference);
36
+ const nextConfig = {
37
+ ...config,
38
+ dotnet: {
39
+ ...dotnet,
40
+ frameworkReferences: frameworkRefs,
41
+ },
42
+ };
43
+ const writeResult = writeTsonicJson(configPath, nextConfig);
44
+ if (!writeResult.ok)
45
+ return writeResult;
46
+ if (typesPackage) {
47
+ const installResult = npmInstallDevDependency(projectRoot, typesPackage, options);
48
+ if (!installResult.ok)
49
+ return installResult;
50
+ return {
51
+ ok: true,
52
+ value: { frameworkReference, bindings: typesPackage },
53
+ };
54
+ }
55
+ const tsbindgenDllResult = resolveTsbindgenDllPath(projectRoot);
56
+ if (!tsbindgenDllResult.ok)
57
+ return tsbindgenDllResult;
58
+ const tsbindgenDll = tsbindgenDllResult.value;
59
+ const runtimesResult = listDotnetRuntimes(projectRoot);
60
+ if (!runtimesResult.ok)
61
+ return runtimesResult;
62
+ const runtimes = runtimesResult.value;
63
+ const runtime = runtimes.find((r) => r.name === frameworkReference);
64
+ if (!runtime) {
65
+ const available = runtimes.map((r) => `${r.name} ${r.version}`).join("\n");
66
+ return {
67
+ ok: false,
68
+ error: `Framework runtime not found: ${frameworkReference}\n` +
69
+ `Installed runtimes:\n${available}`,
70
+ };
71
+ }
72
+ const dotnetLib = join(projectRoot, "node_modules/@tsonic/dotnet");
73
+ const coreLib = join(projectRoot, "node_modules/@tsonic/core");
74
+ if (!existsSync(join(dotnetLib, "package.json"))) {
75
+ return {
76
+ ok: false,
77
+ error: "Missing @tsonic/dotnet in node_modules. Run 'tsonic project init' (recommended) or install it manually.",
78
+ };
79
+ }
80
+ if (!existsSync(join(coreLib, "package.json"))) {
81
+ return {
82
+ ok: false,
83
+ error: "Missing @tsonic/core in node_modules. Run 'tsonic project init' (recommended) or install it manually.",
84
+ };
85
+ }
86
+ const naming = detectTsbindgenNaming(nextConfig);
87
+ const generatedPackage = defaultBindingsPackageNameForFramework(frameworkReference);
88
+ const bindingsDir = join(projectRoot, "bindings", generatedPackage);
89
+ mkdirSync(bindingsDir, { recursive: true });
90
+ const packageJsonResult = ensurePackageJson(bindingsDir, generatedPackage);
91
+ if (!packageJsonResult.ok)
92
+ return packageJsonResult;
93
+ const generateArgs = [
94
+ "-d",
95
+ runtime.dir,
96
+ "-o",
97
+ bindingsDir,
98
+ "--naming",
99
+ naming,
100
+ "--lib",
101
+ dotnetLib,
102
+ "--lib",
103
+ coreLib,
104
+ ];
105
+ for (const rt of runtimes) {
106
+ generateArgs.push("--ref-dir", rt.dir);
107
+ }
108
+ for (const dep of options.deps ?? []) {
109
+ generateArgs.push("--ref-dir", resolveFromProjectRoot(projectRoot, dep));
110
+ }
111
+ const genResult = tsbindgenGenerate(projectRoot, tsbindgenDll, generateArgs, options);
112
+ if (!genResult.ok)
113
+ return genResult;
114
+ const ensurePkg = ensurePackageJson(bindingsDir, generatedPackage);
115
+ if (!ensurePkg.ok)
116
+ return ensurePkg;
117
+ const installLocal = npmInstallDevDependency(projectRoot, `file:bindings/${generatedPackage}`, options);
118
+ if (!installLocal.ok)
119
+ return installLocal;
120
+ return {
121
+ ok: true,
122
+ value: { frameworkReference, bindings: generatedPackage },
123
+ };
124
+ };
125
+ //# sourceMappingURL=add-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-framework.js","sourceRoot":"","sources":["../../src/commands/add-framework.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * tsonic add nuget - add a NuGet PackageReference to the project, plus bindings.
3
+ *
4
+ * Usage:
5
+ * tsonic add nuget <PackageId> <Version> [typesPackage]
6
+ *
7
+ * If typesPackage is omitted, bindings are auto-generated via tsbindgen from the
8
+ * restored compile-time assemblies (including transitive dependencies).
9
+ */
10
+ import type { Result } from "../types.js";
11
+ import { type AddCommandOptions } from "./add-common.js";
12
+ export type AddNugetOptions = AddCommandOptions;
13
+ export declare const addNugetCommand: (packageId: string, version: string, typesPackage: string | undefined, projectRoot: string, options?: AddNugetOptions) => Result<{
14
+ packageId: string;
15
+ version: string;
16
+ bindings: string;
17
+ }, string>;
18
+ //# sourceMappingURL=add-nuget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-nuget.d.ts","sourceRoot":"","sources":["../../src/commands/add-nuget.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EAUL,KAAK,iBAAiB,EAIvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAoHhD,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,SAAS,EAChC,aAAa,MAAM,EACnB,UAAS,eAAoB,KAC5B,MAAM,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CAoLzE,CAAC"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * tsonic add nuget - add a NuGet PackageReference to the project, plus bindings.
3
+ *
4
+ * Usage:
5
+ * tsonic add nuget <PackageId> <Version> [typesPackage]
6
+ *
7
+ * If typesPackage is omitted, bindings are auto-generated via tsbindgen from the
8
+ * restored compile-time assemblies (including transitive dependencies).
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+ import { defaultBindingsPackageNameForNuget, detectTsbindgenNaming, ensurePackageJson, listDotnetRuntimes, npmInstallDevDependency, readTsonicJson, resolveFromProjectRoot, resolveTsbindgenDllPath, tsbindgenGenerate, defaultExec, writeTsonicJson, } from "./add-common.js";
13
+ const isValidTypesPackageName = (name) => {
14
+ if (!name.startsWith("@") && !name.includes("/"))
15
+ return true;
16
+ return /^@[a-z0-9-]+\/[a-z0-9-]+$/i.test(name);
17
+ };
18
+ const normalizePkgId = (id) => id.trim().toLowerCase();
19
+ const writeRestoreProject = (restoreDir, targetFramework, packageReferences) => {
20
+ try {
21
+ mkdirSync(restoreDir, { recursive: true });
22
+ const csprojPath = join(restoreDir, "tsonic.nuget.restore.csproj");
23
+ const itemGroup = packageReferences
24
+ .map((p) => ` <PackageReference Include="${p.id}" Version="${p.version}" />`)
25
+ .join("\n");
26
+ const csproj = `<Project Sdk="Microsoft.NET.Sdk">
27
+ <PropertyGroup>
28
+ <TargetFramework>${targetFramework}</TargetFramework>
29
+ <ImplicitUsings>false</ImplicitUsings>
30
+ <Nullable>enable</Nullable>
31
+ </PropertyGroup>
32
+ <ItemGroup>
33
+ ${itemGroup}
34
+ </ItemGroup>
35
+ </Project>
36
+ `;
37
+ writeFileSync(csprojPath, csproj, "utf-8");
38
+ return { ok: true, value: csprojPath };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ ok: false,
43
+ error: `Failed to write restore project: ${error instanceof Error ? error.message : String(error)}`,
44
+ };
45
+ }
46
+ };
47
+ const dotnetRestore = (restoreProjectPath, options, exec = defaultExec) => {
48
+ const restoreDir = dirname(restoreProjectPath);
49
+ const result = exec("dotnet", ["restore", restoreProjectPath], restoreDir, options.verbose ? "inherit" : "pipe");
50
+ if (result.status !== 0) {
51
+ const msg = result.stderr || result.stdout || "Unknown error";
52
+ return { ok: false, error: `dotnet restore failed:\n${msg}` };
53
+ }
54
+ const assetsPath = join(restoreDir, "obj", "project.assets.json");
55
+ if (!existsSync(assetsPath)) {
56
+ return { ok: false, error: `Restore succeeded but assets file missing: ${assetsPath}` };
57
+ }
58
+ return { ok: true, value: assetsPath };
59
+ };
60
+ const pickPackageFolder = (assets) => {
61
+ const folders = assets.packageFolders ? Object.keys(assets.packageFolders) : [];
62
+ if (folders.length === 0)
63
+ return undefined;
64
+ // Use the first package folder entry (dotnet restore writes an ordered map).
65
+ return folders[0];
66
+ };
67
+ const findTargetKey = (assets, tfm) => {
68
+ const targets = assets.targets ? Object.keys(assets.targets) : [];
69
+ if (targets.includes(tfm))
70
+ return tfm;
71
+ return targets.find((k) => k.startsWith(`${tfm}/`));
72
+ };
73
+ const collectCompileDlls = (assets, targetKey, packageFolder) => {
74
+ const targets = assets.targets?.[targetKey];
75
+ const libraries = assets.libraries ?? {};
76
+ const byLibrary = new Map();
77
+ if (!targets || typeof targets !== "object")
78
+ return byLibrary;
79
+ for (const [libKey, libValue] of Object.entries(targets)) {
80
+ if (!libKey || !libValue || typeof libValue !== "object")
81
+ continue;
82
+ const libInfo = libraries[libKey];
83
+ if (!libInfo || libInfo.type !== "package" || !libInfo.path)
84
+ continue;
85
+ const compile = libValue.compile;
86
+ if (!compile || typeof compile !== "object")
87
+ continue;
88
+ const dlls = Object.keys(compile)
89
+ .filter((p) => p.toLowerCase().endsWith(".dll"))
90
+ .map((p) => join(packageFolder, libInfo.path, p));
91
+ if (dlls.length > 0)
92
+ byLibrary.set(libKey, dlls);
93
+ }
94
+ return byLibrary;
95
+ };
96
+ export const addNugetCommand = (packageId, version, typesPackage, projectRoot, options = {}) => {
97
+ const id = packageId.trim();
98
+ const ver = version.trim();
99
+ if (!id)
100
+ return { ok: false, error: "PackageId must be non-empty" };
101
+ if (!ver)
102
+ return { ok: false, error: "Version must be non-empty" };
103
+ if (typesPackage !== undefined && !isValidTypesPackageName(typesPackage)) {
104
+ return { ok: false, error: `Invalid types package name: ${typesPackage}` };
105
+ }
106
+ const tsonicConfigResult = readTsonicJson(projectRoot);
107
+ if (!tsonicConfigResult.ok)
108
+ return tsonicConfigResult;
109
+ const { path: configPath, config } = tsonicConfigResult.value;
110
+ const dotnet = config.dotnet ?? {};
111
+ const existing = [...(dotnet.packageReferences ?? [])];
112
+ const existingIdx = existing.findIndex((p) => normalizePkgId(p.id) === normalizePkgId(id));
113
+ if (existingIdx >= 0) {
114
+ if (existing[existingIdx]?.version !== ver) {
115
+ return {
116
+ ok: false,
117
+ error: `NuGet package already present with a different version: ${existing[existingIdx]?.id} ${existing[existingIdx]?.version}\n` +
118
+ `Refusing to change versions automatically (airplane-grade). Update tsonic.json manually if intended.`,
119
+ };
120
+ }
121
+ }
122
+ else {
123
+ existing.push({ id, version: ver });
124
+ }
125
+ const nextConfig = {
126
+ ...config,
127
+ dotnet: {
128
+ ...dotnet,
129
+ packageReferences: existing,
130
+ },
131
+ };
132
+ const writeResult = writeTsonicJson(configPath, nextConfig);
133
+ if (!writeResult.ok)
134
+ return writeResult;
135
+ if (typesPackage) {
136
+ const installResult = npmInstallDevDependency(projectRoot, typesPackage, options);
137
+ if (!installResult.ok)
138
+ return installResult;
139
+ return {
140
+ ok: true,
141
+ value: { packageId: id, version: ver, bindings: typesPackage },
142
+ };
143
+ }
144
+ const tsbindgenDllResult = resolveTsbindgenDllPath(projectRoot);
145
+ if (!tsbindgenDllResult.ok)
146
+ return tsbindgenDllResult;
147
+ const tsbindgenDll = tsbindgenDllResult.value;
148
+ const dotnetLib = join(projectRoot, "node_modules/@tsonic/dotnet");
149
+ const coreLib = join(projectRoot, "node_modules/@tsonic/core");
150
+ if (!existsSync(join(dotnetLib, "package.json"))) {
151
+ return {
152
+ ok: false,
153
+ error: "Missing @tsonic/dotnet in node_modules. Run 'tsonic project init' (recommended) or install it manually.",
154
+ };
155
+ }
156
+ if (!existsSync(join(coreLib, "package.json"))) {
157
+ return {
158
+ ok: false,
159
+ error: "Missing @tsonic/core in node_modules. Run 'tsonic project init' (recommended) or install it manually.",
160
+ };
161
+ }
162
+ const targetFramework = nextConfig.dotnetVersion ?? "net10.0";
163
+ const restoreDir = join(projectRoot, ".tsonic", "nuget");
164
+ const restoreProject = writeRestoreProject(restoreDir, targetFramework, existing);
165
+ if (!restoreProject.ok)
166
+ return restoreProject;
167
+ const assetsPathResult = dotnetRestore(restoreProject.value, options);
168
+ if (!assetsPathResult.ok)
169
+ return assetsPathResult;
170
+ let assets;
171
+ try {
172
+ assets = JSON.parse(readFileSync(assetsPathResult.value, "utf-8"));
173
+ }
174
+ catch (error) {
175
+ return {
176
+ ok: false,
177
+ error: `Failed to parse project.assets.json: ${error instanceof Error ? error.message : String(error)}`,
178
+ };
179
+ }
180
+ const packageFolder = pickPackageFolder(assets);
181
+ if (!packageFolder) {
182
+ return { ok: false, error: "project.assets.json missing packageFolders (unexpected)" };
183
+ }
184
+ const targetKey = findTargetKey(assets, targetFramework);
185
+ if (!targetKey) {
186
+ const available = assets.targets ? Object.keys(assets.targets).join("\n") : "(none)";
187
+ return {
188
+ ok: false,
189
+ error: `No restore target found for ${targetFramework}. Available targets:\n${available}`,
190
+ };
191
+ }
192
+ const dllsByLibrary = collectCompileDlls(assets, targetKey, packageFolder);
193
+ const rootLibKey = Array.from(dllsByLibrary.keys()).find((k) => k.toLowerCase().startsWith(`${normalizePkgId(id)}/`));
194
+ if (!rootLibKey) {
195
+ return {
196
+ ok: false,
197
+ error: `No compile-time assemblies found for ${id} ${ver}.\n` +
198
+ `This may be a meta-package or incompatible target framework (${targetFramework}).`,
199
+ };
200
+ }
201
+ const seedDlls = dllsByLibrary.get(rootLibKey) ?? [];
202
+ if (seedDlls.length === 0) {
203
+ return {
204
+ ok: false,
205
+ error: `No .dll compile assets found for ${id} ${ver} under ${targetFramework}.`,
206
+ };
207
+ }
208
+ const compileDirs = new Set();
209
+ for (const dlls of dllsByLibrary.values()) {
210
+ for (const dll of dlls)
211
+ compileDirs.add(dirname(dll));
212
+ }
213
+ const runtimesResult = listDotnetRuntimes(projectRoot);
214
+ if (!runtimesResult.ok)
215
+ return runtimesResult;
216
+ const runtimes = runtimesResult.value;
217
+ const naming = detectTsbindgenNaming(nextConfig);
218
+ const generatedPackage = defaultBindingsPackageNameForNuget(id);
219
+ const bindingsDir = join(projectRoot, "bindings", generatedPackage);
220
+ mkdirSync(bindingsDir, { recursive: true });
221
+ const packageJsonResult = ensurePackageJson(bindingsDir, generatedPackage);
222
+ if (!packageJsonResult.ok)
223
+ return packageJsonResult;
224
+ const generateArgs = [
225
+ ...seedDlls.flatMap((p) => ["-a", p]),
226
+ "-o",
227
+ bindingsDir,
228
+ "--naming",
229
+ naming,
230
+ "--lib",
231
+ dotnetLib,
232
+ "--lib",
233
+ coreLib,
234
+ ];
235
+ for (const rt of runtimes)
236
+ generateArgs.push("--ref-dir", rt.dir);
237
+ for (const d of compileDirs)
238
+ generateArgs.push("--ref-dir", d);
239
+ for (const dep of options.deps ?? []) {
240
+ generateArgs.push("--ref-dir", resolveFromProjectRoot(projectRoot, dep));
241
+ }
242
+ const genResult = tsbindgenGenerate(projectRoot, tsbindgenDll, generateArgs, options);
243
+ if (!genResult.ok)
244
+ return genResult;
245
+ const ensurePkg = ensurePackageJson(bindingsDir, generatedPackage);
246
+ if (!ensurePkg.ok)
247
+ return ensurePkg;
248
+ const installLocal = npmInstallDevDependency(projectRoot, `file:bindings/${generatedPackage}`, options);
249
+ if (!installLocal.ok)
250
+ return installLocal;
251
+ return {
252
+ ok: true,
253
+ value: { packageId: id, version: ver, bindings: generatedPackage },
254
+ };
255
+ };
256
+ //# sourceMappingURL=add-nuget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-nuget.js","sourceRoot":"","sources":["../../src/commands/add-nuget.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,19 @@
1
1
  /**
2
- * tsonic add package command - Add a CLR package (DLL + types) to the project
2
+ * tsonic add package - add a local DLL to the project, plus bindings.
3
3
  *
4
- * Usage: tsonic add package /path/to/library.dll @scope/types
4
+ * Usage:
5
+ * tsonic add package ./path/to/MyLib.dll [typesPackage]
5
6
  *
6
- * This command:
7
- * 1. Copies the DLL to project's lib/ directory
8
- * 2. Installs the npm types package
9
- * 3. Updates tsonic.json to register the library
7
+ * Airplane-grade rules:
8
+ * - DLL dependencies are copied by transitive closure (no "copy everything" modes)
9
+ * - If typesPackage is omitted, bindings are auto-generated via tsbindgen
10
+ * - Any unresolved dependency is a hard failure with actionable diagnostics
10
11
  */
11
12
  import type { Result } from "../types.js";
12
- /**
13
- * Options for add package command
14
- */
15
- export type AddPackageOptions = {
16
- readonly verbose?: boolean;
17
- readonly quiet?: boolean;
18
- };
19
- /**
20
- * Add a CLR package to the project
21
- */
22
- export declare const addPackageCommand: (dllPath: string, typesPackage: string, projectRoot: string, options?: AddPackageOptions) => Result<{
23
- dllName: string;
24
- libPath: string;
13
+ import { type AddCommandOptions } from "./add-common.js";
14
+ export type AddPackageOptions = AddCommandOptions;
15
+ export declare const addPackageCommand: (dllPath: string, typesPackage: string | undefined, projectRoot: string, options?: AddPackageOptions) => Result<{
16
+ dllsCopied: number;
17
+ bindings: string;
25
18
  }, string>;
26
19
  //# sourceMappingURL=add-package.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-package.d.ts","sourceRoot":"","sources":["../../src/commands/add-package.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,cAAc,MAAM,EACpB,aAAa,MAAM,EACnB,UAAS,iBAAsB,KAC9B,MAAM,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CA2HrD,CAAC"}
1
+ {"version":3,"file":"add-package.d.ts","sourceRoot":"","sources":["../../src/commands/add-package.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EAWL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAyBlD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,SAAS,EAChC,aAAa,MAAM,EACnB,UAAS,iBAAsB,KAC9B,MAAM,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CA0MzD,CAAC"}