@ts-for-gir/cli 4.0.0-beta.32 → 4.0.0-beta.34
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/bin/ts-for-gir +27 -25
- package/package.json +10 -10
- package/src/commands/copy.ts +1 -1
- package/src/commands/doc.ts +1 -1
- package/src/commands/generate.ts +2 -2
- package/src/commands/json.ts +1 -1
- package/src/commands/list.ts +11 -21
- package/src/module-loader/file-finder.ts +8 -1
- package/src/module-loader.ts +9 -2
package/bin/ts-for-gir
CHANGED
|
@@ -17252,7 +17252,12 @@ var FileFinder = class {
|
|
|
17252
17252
|
}
|
|
17253
17253
|
const filename = `${globPackageNames[i]}.gir`;
|
|
17254
17254
|
const pattern = this.girDirectories.map((girDirectory) => join7(girDirectory, filename));
|
|
17255
|
-
const ignoreGirs =
|
|
17255
|
+
const ignoreGirs = this.girDirectories.flatMap(
|
|
17256
|
+
(girDirectory) => ignore.map((ignored) => {
|
|
17257
|
+
const cleanIgnored = ignored.startsWith("*/") ? ignored.slice(2) : ignored;
|
|
17258
|
+
return join7(girDirectory, `${cleanIgnored}.gir`);
|
|
17259
|
+
})
|
|
17260
|
+
);
|
|
17256
17261
|
const files = await glob2(pattern, { ignore: ignoreGirs });
|
|
17257
17262
|
for (const file of files) {
|
|
17258
17263
|
foundFiles.add(file);
|
|
@@ -17525,7 +17530,13 @@ var ModuleLoader = class {
|
|
|
17525
17530
|
*/
|
|
17526
17531
|
async loadGirModules(dependencies, ignoreDependencies = [], girModules = [], resolvedBy = 1 /* BY_HAND */, failedGirModules = /* @__PURE__ */ new Set()) {
|
|
17527
17532
|
let newModuleFound = false;
|
|
17528
|
-
dependencies = [...dependencies]
|
|
17533
|
+
dependencies = [...dependencies].filter((dep) => {
|
|
17534
|
+
const packageName = dep.packageName;
|
|
17535
|
+
return !ignoreDependencies.some((ignored) => {
|
|
17536
|
+
const cleanIgnored = ignored.startsWith("*/") ? ignored.slice(2) : ignored;
|
|
17537
|
+
return packageName === cleanIgnored;
|
|
17538
|
+
});
|
|
17539
|
+
});
|
|
17529
17540
|
while (dependencies.length > 0) {
|
|
17530
17541
|
const dependency = dependencies.shift();
|
|
17531
17542
|
if (!dependency?.packageName) continue;
|
|
@@ -17635,7 +17646,7 @@ var ModuleLoader = class {
|
|
|
17635
17646
|
// src/commands/copy.ts
|
|
17636
17647
|
var command2 = "copy [modules..]";
|
|
17637
17648
|
var description2 = "Scan for *.gir files and copy them to a new directory";
|
|
17638
|
-
var logger3 = new Logger(
|
|
17649
|
+
var logger3 = new Logger(true, "CopyCommand");
|
|
17639
17650
|
var examples2 = [
|
|
17640
17651
|
[`${APP_NAME} copy -o ./gir`, "Copy found *.gir files to ./gir"],
|
|
17641
17652
|
[
|
|
@@ -19198,9 +19209,10 @@ ${girClass.__ts__indexSignature}
|
|
|
19198
19209
|
if (Type) {
|
|
19199
19210
|
return ` extends ${Type}`;
|
|
19200
19211
|
}
|
|
19201
|
-
|
|
19212
|
+
this.log.warn(
|
|
19202
19213
|
`Unable to resolve type: ${node.superType.name} from ${node.superType.namespace} in ${node.namespace.namespace} ${node.namespace.version}, falling back to GObject.Object`
|
|
19203
19214
|
);
|
|
19215
|
+
return ` extends GObject.Object`;
|
|
19204
19216
|
}
|
|
19205
19217
|
return "";
|
|
19206
19218
|
}
|
|
@@ -19773,7 +19785,7 @@ var GenerationHandler = class {
|
|
|
19773
19785
|
// src/commands/doc.ts
|
|
19774
19786
|
var command3 = "doc [modules..]";
|
|
19775
19787
|
var description3 = "The HTML documentation generator is not yet implemented, but feel free to implement it \u{1F917}";
|
|
19776
|
-
var logger4 = new Logger(
|
|
19788
|
+
var logger4 = new Logger(true, "DocCommand");
|
|
19777
19789
|
var builder3 = (yargs2) => {
|
|
19778
19790
|
const optionNames = Object.keys(docOptions);
|
|
19779
19791
|
for (const optionName of optionNames) {
|
|
@@ -19833,7 +19845,7 @@ var TypeScriptFormatter = class extends Formatter {
|
|
|
19833
19845
|
// src/commands/generate.ts
|
|
19834
19846
|
var command4 = "generate [modules..]";
|
|
19835
19847
|
var description4 = "Generates Typescript type definition .d.ts files from GIR for GJS";
|
|
19836
|
-
var logger6 = new Logger(
|
|
19848
|
+
var logger6 = new Logger(true, "GenerateCommand");
|
|
19837
19849
|
var examples4 = [
|
|
19838
19850
|
[
|
|
19839
19851
|
`${APP_NAME} generate`,
|
|
@@ -19880,7 +19892,7 @@ var handler4 = async (args) => {
|
|
|
19880
19892
|
"Generation failed"
|
|
19881
19893
|
);
|
|
19882
19894
|
}
|
|
19883
|
-
|
|
19895
|
+
service.printComprehensiveSummary();
|
|
19884
19896
|
await service.saveComprehensiveReport();
|
|
19885
19897
|
}
|
|
19886
19898
|
throw error;
|
|
@@ -19897,7 +19909,7 @@ var generate = {
|
|
|
19897
19909
|
// src/commands/json.ts
|
|
19898
19910
|
var command5 = "json [modules..]";
|
|
19899
19911
|
var description5 = "Generates JSON representation from GIR files for analysis and tooling";
|
|
19900
|
-
var logger7 = new Logger(
|
|
19912
|
+
var logger7 = new Logger(true, "JsonCommand");
|
|
19901
19913
|
var examples5 = [
|
|
19902
19914
|
[`${APP_NAME} json`, `Run '${APP_NAME} json' in your gjs project to generate JSON files for your project`],
|
|
19903
19915
|
[`${APP_NAME} json Gtk*`, "You can also use wild cards"],
|
|
@@ -19957,7 +19969,7 @@ var json = {
|
|
|
19957
19969
|
// src/commands/list.ts
|
|
19958
19970
|
var command6 = "list [modules..]";
|
|
19959
19971
|
var description6 = "Lists all available GIR modules";
|
|
19960
|
-
var logger8 = new Logger(
|
|
19972
|
+
var logger8 = new Logger(true, "ListCommand");
|
|
19961
19973
|
var examples6 = [
|
|
19962
19974
|
[`${APP_NAME} list -g ./vala-girs/gir-1.0`, "Lists all available GIR modules in ./vala-girs/gir-1.0"],
|
|
19963
19975
|
[
|
|
@@ -19977,26 +19989,16 @@ var handler6 = async (args) => {
|
|
|
19977
19989
|
return logger8.error(ERROR_NO_MODULES_FOUND(config.girDirectories));
|
|
19978
19990
|
}
|
|
19979
19991
|
const conflictModules = moduleGroups.filter((moduleGroup) => moduleGroup.hasConflict);
|
|
19980
|
-
const
|
|
19981
|
-
const depModules = moduleGroups.filter((moduleGroup) => moduleGroup.modules[0].resolvedBy === 0 /* DEPENDENCE */);
|
|
19992
|
+
const allModules = moduleGroups.filter((moduleGroup) => !moduleGroup.hasConflict);
|
|
19982
19993
|
logger8.info("\nSearch for gir files in:");
|
|
19983
19994
|
for (const dir of config.girDirectories) {
|
|
19984
19995
|
logger8.white(`- ${dir}`);
|
|
19985
19996
|
}
|
|
19986
|
-
logger8.info("\
|
|
19987
|
-
for (const moduleGroup of
|
|
19988
|
-
for (const
|
|
19989
|
-
logger8.white(`- ${
|
|
19990
|
-
logger8.gray(` - ${
|
|
19991
|
-
}
|
|
19992
|
-
}
|
|
19993
|
-
if (depModules.length > 0) {
|
|
19994
|
-
logger8.yellow("\nDependencies:");
|
|
19995
|
-
for (const moduleGroup of depModules) {
|
|
19996
|
-
for (const depModule of moduleGroup.modules) {
|
|
19997
|
-
logger8.white(`- ${depModule.packageName}`);
|
|
19998
|
-
logger8.gray(`- ${depModule.path}`);
|
|
19999
|
-
}
|
|
19997
|
+
logger8.info("\nAvailable Modules:");
|
|
19998
|
+
for (const moduleGroup of allModules) {
|
|
19999
|
+
for (const module of moduleGroup.modules) {
|
|
20000
|
+
logger8.white(`- ${module.packageName}`);
|
|
20001
|
+
logger8.gray(` - ${module.path}`);
|
|
20000
20002
|
}
|
|
20001
20003
|
}
|
|
20002
20004
|
if (conflictModules.length > 0) {
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ts-for-gir/cli",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.34",
|
|
4
4
|
"description": "TypeScript type definition generator for GObject introspection GIR files",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"module": "src/index.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
9
|
-
"ts-for-gir": "bin/ts-for-gir",
|
|
10
9
|
"cli": "bin/ts-for-gir",
|
|
10
|
+
"ts-for-gir": "bin/ts-for-gir",
|
|
11
11
|
"ts-for-gir-dev": "bin/ts-for-gir-dev"
|
|
12
12
|
},
|
|
13
13
|
"engines": {
|
|
@@ -53,13 +53,13 @@
|
|
|
53
53
|
".": "./src/index.ts"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@gi.ts/parser": "^4.0.0-beta.
|
|
57
|
-
"@ts-for-gir/generator-base": "^4.0.0-beta.
|
|
58
|
-
"@ts-for-gir/generator-html-doc": "^4.0.0-beta.
|
|
59
|
-
"@ts-for-gir/generator-json": "^4.0.0-beta.
|
|
60
|
-
"@ts-for-gir/generator-typescript": "^4.0.0-beta.
|
|
61
|
-
"@ts-for-gir/lib": "^4.0.0-beta.
|
|
62
|
-
"@ts-for-gir/reporter": "^4.0.0-beta.
|
|
56
|
+
"@gi.ts/parser": "^4.0.0-beta.34",
|
|
57
|
+
"@ts-for-gir/generator-base": "^4.0.0-beta.34",
|
|
58
|
+
"@ts-for-gir/generator-html-doc": "^4.0.0-beta.34",
|
|
59
|
+
"@ts-for-gir/generator-json": "^4.0.0-beta.34",
|
|
60
|
+
"@ts-for-gir/generator-typescript": "^4.0.0-beta.34",
|
|
61
|
+
"@ts-for-gir/lib": "^4.0.0-beta.34",
|
|
62
|
+
"@ts-for-gir/reporter": "^4.0.0-beta.34",
|
|
63
63
|
"@types/ejs": "^3.1.5",
|
|
64
64
|
"@types/inquirer": "^9.0.9",
|
|
65
65
|
"@types/node": "^24.2.1",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@inquirer/prompts": "^7.8.2",
|
|
73
|
-
"@ts-for-gir/templates": "^4.0.0-beta.
|
|
73
|
+
"@ts-for-gir/templates": "^4.0.0-beta.34",
|
|
74
74
|
"colorette": "^2.0.20",
|
|
75
75
|
"cosmiconfig": "^9.0.0",
|
|
76
76
|
"ejs": "^3.1.10",
|
package/src/commands/copy.ts
CHANGED
|
@@ -15,7 +15,7 @@ const command = "copy [modules..]";
|
|
|
15
15
|
|
|
16
16
|
const description = "Scan for *.gir files and copy them to a new directory";
|
|
17
17
|
|
|
18
|
-
const logger = new Logger(
|
|
18
|
+
const logger = new Logger(true, "CopyCommand");
|
|
19
19
|
|
|
20
20
|
const examples: ReadonlyArray<[string, string?]> = [
|
|
21
21
|
[`${APP_NAME} copy -o ./gir`, "Copy found *.gir files to ./gir"],
|
package/src/commands/doc.ts
CHANGED
|
@@ -22,7 +22,7 @@ const command = "doc [modules..]";
|
|
|
22
22
|
|
|
23
23
|
const description = "The HTML documentation generator is not yet implemented, but feel free to implement it 🤗";
|
|
24
24
|
|
|
25
|
-
const logger = new Logger(
|
|
25
|
+
const logger = new Logger(true, "DocCommand");
|
|
26
26
|
|
|
27
27
|
const builder: BuilderCallback<DocCommandArgs, ConfigFlags> = (yargs: Argv<DocCommandArgs>) => {
|
|
28
28
|
const optionNames = Object.keys(docOptions);
|
package/src/commands/generate.ts
CHANGED
|
@@ -25,7 +25,7 @@ const command = "generate [modules..]";
|
|
|
25
25
|
|
|
26
26
|
const description = "Generates Typescript type definition .d.ts files from GIR for GJS";
|
|
27
27
|
|
|
28
|
-
const logger = new Logger(
|
|
28
|
+
const logger = new Logger(true, "GenerateCommand");
|
|
29
29
|
|
|
30
30
|
const examples: ReadonlyArray<[string, string?]> = [
|
|
31
31
|
[
|
|
@@ -93,7 +93,7 @@ const handler = async (args: ConfigFlags) => {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
// Generate and save the report
|
|
96
|
-
|
|
96
|
+
service.printComprehensiveSummary();
|
|
97
97
|
await service.saveComprehensiveReport();
|
|
98
98
|
}
|
|
99
99
|
|
package/src/commands/json.ts
CHANGED
|
@@ -24,7 +24,7 @@ const command = "json [modules..]";
|
|
|
24
24
|
|
|
25
25
|
const description = "Generates JSON representation from GIR files for analysis and tooling";
|
|
26
26
|
|
|
27
|
-
const logger = new Logger(
|
|
27
|
+
const logger = new Logger(true, "JsonCommand");
|
|
28
28
|
|
|
29
29
|
const examples: ReadonlyArray<[string, string?]> = [
|
|
30
30
|
[`${APP_NAME} json`, `Run '${APP_NAME} json' in your gjs project to generate JSON files for your project`],
|
package/src/commands/list.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import type { ConfigFlags } from "@ts-for-gir/lib";
|
|
6
|
-
import { APP_NAME, ERROR_NO_MODULES_FOUND, Logger, NSRegistry
|
|
6
|
+
import { APP_NAME, ERROR_NO_MODULES_FOUND, Logger, NSRegistry } from "@ts-for-gir/lib";
|
|
7
7
|
import { getOptionsGeneration, listOptions, load } from "../config.ts";
|
|
8
8
|
import { ModuleLoader } from "../module-loader.ts";
|
|
9
9
|
import type { ListCommandArgs } from "../types/index.ts";
|
|
@@ -13,7 +13,7 @@ const command = "list [modules..]";
|
|
|
13
13
|
|
|
14
14
|
const description = "Lists all available GIR modules";
|
|
15
15
|
|
|
16
|
-
const logger = new Logger(
|
|
16
|
+
const logger = new Logger(true, "ListCommand");
|
|
17
17
|
|
|
18
18
|
const examples: ReadonlyArray<[string, string?]> = [
|
|
19
19
|
[`${APP_NAME} list -g ./vala-girs/gir-1.0`, "Lists all available GIR modules in ./vala-girs/gir-1.0"],
|
|
@@ -32,39 +32,29 @@ const handler = async (args: ConfigFlags) => {
|
|
|
32
32
|
const moduleLoader = new ModuleLoader(generateConfig, registry);
|
|
33
33
|
const { grouped, failed } = await moduleLoader.getModules(config.modules, config.ignore);
|
|
34
34
|
const moduleGroups = Object.values(grouped);
|
|
35
|
+
|
|
35
36
|
if (Object.keys(grouped).length === 0) {
|
|
36
37
|
return logger.error(ERROR_NO_MODULES_FOUND(config.girDirectories));
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
const conflictModules = moduleGroups.filter((moduleGroup) => moduleGroup.hasConflict);
|
|
40
|
-
|
|
41
|
-
const byHandModules = moduleGroups.filter((moduleGroup) => moduleGroup.modules[0].resolvedBy === ResolveType.BY_HAND);
|
|
42
|
-
|
|
43
|
-
const depModules = moduleGroups.filter((moduleGroup) => moduleGroup.modules[0].resolvedBy === ResolveType.DEPENDENCE);
|
|
41
|
+
const allModules = moduleGroups.filter((moduleGroup) => !moduleGroup.hasConflict);
|
|
44
42
|
|
|
45
43
|
logger.info("\nSearch for gir files in:");
|
|
46
44
|
for (const dir of config.girDirectories) {
|
|
47
45
|
logger.white(`- ${dir}`);
|
|
48
46
|
}
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
logger.
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (depModules.length > 0) {
|
|
59
|
-
logger.yellow("\nDependencies:");
|
|
60
|
-
for (const moduleGroup of depModules) {
|
|
61
|
-
for (const depModule of moduleGroup.modules) {
|
|
62
|
-
logger.white(`- ${depModule.packageName}`);
|
|
63
|
-
logger.gray(`- ${depModule.path}`);
|
|
64
|
-
}
|
|
48
|
+
// Show all available modules
|
|
49
|
+
logger.info("\nAvailable Modules:");
|
|
50
|
+
for (const moduleGroup of allModules) {
|
|
51
|
+
for (const module of moduleGroup.modules) {
|
|
52
|
+
logger.white(`- ${module.packageName}`);
|
|
53
|
+
logger.gray(` - ${module.path}`);
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
56
|
|
|
57
|
+
// Only show sections if there is actual content
|
|
68
58
|
if (conflictModules.length > 0) {
|
|
69
59
|
logger.danger("\nConflicts:");
|
|
70
60
|
for (const moduleGroup of conflictModules) {
|
|
@@ -26,9 +26,16 @@ export class FileFinder {
|
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
// Handle all patterns uniformly (including wildcards like "*" and "Gtk*")
|
|
29
30
|
const filename = `${globPackageNames[i]}.gir`;
|
|
30
31
|
const pattern = this.girDirectories.map((girDirectory) => join(girDirectory, filename));
|
|
31
|
-
const ignoreGirs =
|
|
32
|
+
const ignoreGirs = this.girDirectories.flatMap((girDirectory) =>
|
|
33
|
+
ignore.map((ignored) => {
|
|
34
|
+
// Remove */ prefix if present (e.g., "*/Gtk-4.0" -> "Gtk-4.0")
|
|
35
|
+
const cleanIgnored = ignored.startsWith("*/") ? ignored.slice(2) : ignored;
|
|
36
|
+
return join(girDirectory, `${cleanIgnored}.gir`);
|
|
37
|
+
}),
|
|
38
|
+
);
|
|
32
39
|
const files = await glob(pattern, { ignore: ignoreGirs });
|
|
33
40
|
|
|
34
41
|
for (const file of files) {
|
package/src/module-loader.ts
CHANGED
|
@@ -150,8 +150,15 @@ export class ModuleLoader {
|
|
|
150
150
|
): Promise<{ loaded: GirModuleResolvedBy[]; failed: Set<string> }> {
|
|
151
151
|
let newModuleFound = false;
|
|
152
152
|
|
|
153
|
-
// Clone array
|
|
154
|
-
dependencies = [...dependencies]
|
|
153
|
+
// Clone array and filter out ignored dependencies
|
|
154
|
+
dependencies = [...dependencies].filter((dep) => {
|
|
155
|
+
const packageName = dep.packageName;
|
|
156
|
+
return !ignoreDependencies.some((ignored) => {
|
|
157
|
+
// Remove */ prefix if present (e.g., "*/Gtk-4.0" -> "Gtk-4.0")
|
|
158
|
+
const cleanIgnored = ignored.startsWith("*/") ? ignored.slice(2) : ignored;
|
|
159
|
+
return packageName === cleanIgnored;
|
|
160
|
+
});
|
|
161
|
+
});
|
|
155
162
|
|
|
156
163
|
while (dependencies.length > 0) {
|
|
157
164
|
const dependency = dependencies.shift();
|