@ts-for-gir/cli 4.0.0-beta.2 → 4.0.0-beta.4
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/lib/commands/copy.d.ts +12 -0
- package/lib/commands/copy.js +80 -0
- package/lib/commands/copy.js.map +1 -0
- package/lib/commands/doc.js +1 -1
- package/lib/commands/doc.js.map +1 -1
- package/lib/commands/generate.js +2 -5
- package/lib/commands/generate.js.map +1 -1
- package/lib/commands/index.d.ts +1 -0
- package/lib/commands/index.js +1 -0
- package/lib/commands/index.js.map +1 -1
- package/lib/commands/list.js +8 -1
- package/lib/commands/list.js.map +1 -1
- package/lib/config.d.ts +13 -2
- package/lib/config.js +18 -8
- package/lib/config.js.map +1 -1
- package/lib/generation-handler.d.ts +2 -2
- package/lib/generation-handler.js +0 -1
- package/lib/generation-handler.js.map +1 -1
- package/lib/module-loader.d.ts +13 -10
- package/lib/module-loader.js +47 -58
- package/lib/module-loader.js.map +1 -1
- package/lib/start.js +2 -1
- package/lib/start.js.map +1 -1
- package/package.json +11 -11
- package/src/commands/copy.ts +94 -0
- package/src/commands/doc.ts +1 -1
- package/src/commands/generate.ts +3 -5
- package/src/commands/index.ts +1 -0
- package/src/commands/list.ts +9 -1
- package/src/config.ts +21 -10
- package/src/generation-handler.ts +2 -4
- package/src/module-loader.ts +54 -67
- package/src/start.ts +2 -1
package/src/module-loader.ts
CHANGED
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import inquirer, { ListQuestion, Answers } from 'inquirer'
|
|
6
|
-
import glob from '
|
|
7
|
-
import { basename } from 'path'
|
|
8
|
-
import { readFile } from 'fs/promises'
|
|
6
|
+
import { glob } from 'glob'
|
|
7
|
+
import { basename, join } from 'path'
|
|
9
8
|
import { bold } from 'colorette'
|
|
10
|
-
import { parser } from '@gi.ts/parser'
|
|
11
9
|
import {
|
|
12
10
|
DependencyManager,
|
|
13
11
|
ResolveType,
|
|
@@ -22,7 +20,7 @@ import { Config } from './config.js'
|
|
|
22
20
|
|
|
23
21
|
import type {
|
|
24
22
|
GirModulesGroupedMap,
|
|
25
|
-
|
|
23
|
+
OptionsGeneration,
|
|
26
24
|
GirModuleResolvedBy,
|
|
27
25
|
GirModulesGrouped,
|
|
28
26
|
DependencyMap,
|
|
@@ -35,7 +33,7 @@ export class ModuleLoader {
|
|
|
35
33
|
dependencyManager: DependencyManager
|
|
36
34
|
/** Transitive module dependencies */
|
|
37
35
|
modDependencyMap: DependencyMap = {}
|
|
38
|
-
constructor(protected readonly config:
|
|
36
|
+
constructor(protected readonly config: OptionsGeneration) {
|
|
39
37
|
this.log = new Logger(config.verbose, 'ModuleLoader')
|
|
40
38
|
this.dependencyManager = DependencyManager.getInstance(config)
|
|
41
39
|
}
|
|
@@ -176,7 +174,7 @@ export class ModuleLoader {
|
|
|
176
174
|
* @param girModulesGroupedMap
|
|
177
175
|
* @param packageName
|
|
178
176
|
*/
|
|
179
|
-
protected
|
|
177
|
+
protected findGirFilesDependOnPackage(
|
|
180
178
|
girModulesGroupedMap: GirModulesGroupedMap,
|
|
181
179
|
packageName: string,
|
|
182
180
|
): GirModuleResolvedBy[] {
|
|
@@ -201,13 +199,13 @@ export class ModuleLoader {
|
|
|
201
199
|
* @param girModulesGroupedMap
|
|
202
200
|
* @param packageName
|
|
203
201
|
*/
|
|
204
|
-
protected
|
|
202
|
+
protected findGirFilesDependOnPackages(
|
|
205
203
|
girModulesGroupedMap: GirModulesGroupedMap,
|
|
206
204
|
packageNames: string[],
|
|
207
205
|
): GirModuleResolvedBy[] {
|
|
208
206
|
let girModules: GirModuleResolvedBy[] = []
|
|
209
207
|
for (const packageName of packageNames) {
|
|
210
|
-
girModules = girModules
|
|
208
|
+
girModules = [...girModules, ...this.findGirFilesDependOnPackage(girModulesGroupedMap, packageName)]
|
|
211
209
|
}
|
|
212
210
|
return girModules
|
|
213
211
|
}
|
|
@@ -270,10 +268,7 @@ export class ModuleLoader {
|
|
|
270
268
|
while (goBack) {
|
|
271
269
|
versionAnswer = await this.askForVersionsPrompt(girModulesGrouped)
|
|
272
270
|
// Check modules that depend on the unchosen modules
|
|
273
|
-
wouldIgnoreDeps = this.
|
|
274
|
-
girModulesGroupedMap,
|
|
275
|
-
versionAnswer.unselected,
|
|
276
|
-
)
|
|
271
|
+
wouldIgnoreDeps = this.findGirFilesDependOnPackages(girModulesGroupedMap, versionAnswer.unselected)
|
|
277
272
|
// Do not check dependencies that have already been ignored
|
|
278
273
|
wouldIgnoreDeps = wouldIgnoreDeps.filter((dep) => !ignore.includes(dep.packageName))
|
|
279
274
|
ignoreDepsAnswer = await this.askIgnoreDepsPrompt(wouldIgnoreDeps)
|
|
@@ -356,7 +351,7 @@ export class ModuleLoader {
|
|
|
356
351
|
* @param girModule
|
|
357
352
|
*/
|
|
358
353
|
protected extendDependencyMapByGirModule(girModule: GirModule): void {
|
|
359
|
-
this.modDependencyMap[girModule.packageName] = girModule.dependencies
|
|
354
|
+
this.modDependencyMap[girModule.packageName] = girModule.dependencies!
|
|
360
355
|
}
|
|
361
356
|
|
|
362
357
|
/**
|
|
@@ -364,11 +359,11 @@ export class ModuleLoader {
|
|
|
364
359
|
* is required so that all dependencies can be found internally when generating the dependency imports for the module .d.ts file
|
|
365
360
|
* @param girModules
|
|
366
361
|
*/
|
|
367
|
-
protected
|
|
362
|
+
protected async initGirModules(girModules: GirModuleResolvedBy[]): Promise<void> {
|
|
368
363
|
for (const girModule of girModules) {
|
|
369
364
|
const result: { [name: string]: Dependency } = {}
|
|
370
365
|
this.traverseDependencies(girModule.packageName, result)
|
|
371
|
-
girModule.module.
|
|
366
|
+
await girModule.module.initTransitiveDependencies(Object.values(result))
|
|
372
367
|
}
|
|
373
368
|
}
|
|
374
369
|
|
|
@@ -383,10 +378,8 @@ export class ModuleLoader {
|
|
|
383
378
|
return null
|
|
384
379
|
}
|
|
385
380
|
|
|
386
|
-
this.log.log(`
|
|
387
|
-
const
|
|
388
|
-
const result = parser.parseGir(fileContents)
|
|
389
|
-
const girModule = GirModule.load(result, this.config, this.dependencyManager)
|
|
381
|
+
this.log.log(`Loading ${dependency.packageName}...`)
|
|
382
|
+
const girModule = await GirModule.load(dependency, this.config, this.dependencyManager)
|
|
390
383
|
// Figure out transitive module dependencies
|
|
391
384
|
this.extendDependencyMapByGirModule(girModule)
|
|
392
385
|
return girModule
|
|
@@ -451,6 +444,7 @@ export class ModuleLoader {
|
|
|
451
444
|
packageName: girModule.packageName,
|
|
452
445
|
module: girModule,
|
|
453
446
|
resolvedBy,
|
|
447
|
+
path: dependency.path,
|
|
454
448
|
}
|
|
455
449
|
girModules.push(addModule)
|
|
456
450
|
newModuleFound = true
|
|
@@ -466,21 +460,13 @@ export class ModuleLoader {
|
|
|
466
460
|
}
|
|
467
461
|
|
|
468
462
|
// Figure out transitive module dependencies
|
|
469
|
-
this.
|
|
463
|
+
await this.initGirModules(girModules)
|
|
470
464
|
|
|
471
465
|
// Load girModules for dependencies
|
|
472
466
|
for (const girModule of girModules) {
|
|
473
467
|
// Load dependencies
|
|
474
468
|
const transitiveDependencies = girModule.module.transitiveDependencies
|
|
475
469
|
if (transitiveDependencies.length > 0) {
|
|
476
|
-
for (const transitiveDependency of transitiveDependencies) {
|
|
477
|
-
if (ignoreDependencies.includes(transitiveDependency.packageName)) {
|
|
478
|
-
this.log.warn(
|
|
479
|
-
`Load dependency "${transitiveDependency.packageName}" which is in the ignore list, if this should really be ignored also ignore "${girModule.packageName}"`,
|
|
480
|
-
)
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
|
|
484
470
|
await this.loadGirModules(
|
|
485
471
|
transitiveDependencies,
|
|
486
472
|
ignoreDependencies,
|
|
@@ -490,6 +476,7 @@ export class ModuleLoader {
|
|
|
490
476
|
)
|
|
491
477
|
}
|
|
492
478
|
}
|
|
479
|
+
|
|
493
480
|
return {
|
|
494
481
|
loaded: girModules,
|
|
495
482
|
failed: failedGirModules,
|
|
@@ -501,60 +488,53 @@ export class ModuleLoader {
|
|
|
501
488
|
* @param modules
|
|
502
489
|
* @param ignore
|
|
503
490
|
*/
|
|
504
|
-
protected async
|
|
505
|
-
const
|
|
506
|
-
|
|
507
|
-
for (let i = 0; i < modules.length; i++) {
|
|
508
|
-
if (modules[i]) {
|
|
509
|
-
const filename = `${modules[i]}.gir`
|
|
510
|
-
let files: string[] = []
|
|
511
|
-
for (const girDirectory of this.config.girDirectories) {
|
|
512
|
-
try {
|
|
513
|
-
files = files.concat(await glob(filename, { cwd: girDirectory }))
|
|
514
|
-
} catch (error) {
|
|
515
|
-
this.log.warn(`Error on finding "${filename}" in "${girDirectory}"`, error)
|
|
516
|
-
}
|
|
517
|
-
}
|
|
491
|
+
protected async findGirFiles(globPackageNames: string[], ignore: string[] = []): Promise<Set<string>> {
|
|
492
|
+
const foundFiles = new Set<string>()
|
|
518
493
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
const isIgnored = ignore.includes(mod)
|
|
523
|
-
if (isIgnored) {
|
|
524
|
-
this.log.warn(`Ignore ${mod}`)
|
|
525
|
-
}
|
|
526
|
-
return !isIgnored
|
|
527
|
-
})
|
|
528
|
-
globModules.forEach((mod) => foundModules.add(mod))
|
|
494
|
+
for (let i = 0; i < globPackageNames.length; i++) {
|
|
495
|
+
if (!globPackageNames[i]) {
|
|
496
|
+
continue
|
|
529
497
|
}
|
|
498
|
+
const filename = `${globPackageNames[i]}.gir`
|
|
499
|
+
const pattern = this.config.girDirectories.map((girDirectory) => join(girDirectory, filename))
|
|
500
|
+
const ignoreGirs = ignore.map((girDirectory) => girDirectory + '.gir')
|
|
501
|
+
const files = await glob(pattern, { ignore: ignoreGirs })
|
|
502
|
+
files.forEach((file) => foundFiles.add(file))
|
|
530
503
|
}
|
|
531
|
-
|
|
504
|
+
|
|
505
|
+
return foundFiles
|
|
532
506
|
}
|
|
533
507
|
|
|
534
|
-
protected
|
|
535
|
-
|
|
508
|
+
protected async girFilePathToDependencies(girFiles: Set<string>): Promise<Dependency[]> {
|
|
509
|
+
const dependencies: Dependency[] = []
|
|
510
|
+
for (const girFile of girFiles) {
|
|
511
|
+
const packageName = basename(girFile, '.gir')
|
|
536
512
|
const { namespace, version } = splitModuleName(packageName)
|
|
537
|
-
|
|
538
|
-
|
|
513
|
+
const dep = await this.dependencyManager.get(namespace, version)
|
|
514
|
+
dependencies.push(dep)
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
return dependencies
|
|
539
518
|
}
|
|
540
519
|
|
|
541
520
|
/**
|
|
542
|
-
* Loads all found `packageNames`
|
|
521
|
+
* Loads all found `packageNames`
|
|
543
522
|
* @param girDirectories
|
|
544
523
|
* @param packageNames
|
|
524
|
+
* @param doNotAskForVersionOnConflict Set this to false if you want to get a prompt for each version conflict
|
|
545
525
|
*/
|
|
546
526
|
public async getModulesResolved(
|
|
547
527
|
packageNames: string[],
|
|
548
528
|
ignore: string[] = [],
|
|
549
529
|
doNotAskForVersionOnConflict = true,
|
|
550
530
|
): Promise<{ keep: GirModuleResolvedBy[]; grouped: GirModulesGroupedMap; ignore: string[]; failed: Set<string> }> {
|
|
551
|
-
const
|
|
531
|
+
const girFiles = await this.findGirFiles([...packageNames], ignore)
|
|
552
532
|
// Always require these because GJS does...
|
|
553
|
-
const GLib = this.dependencyManager.get('GLib', '2.0')
|
|
554
|
-
const Gio = this.dependencyManager.get('Gio', '2.0')
|
|
555
|
-
const GObject = this.dependencyManager.get('GObject', '2.0')
|
|
533
|
+
const GLib = await this.dependencyManager.get('GLib', '2.0')
|
|
534
|
+
const Gio = await this.dependencyManager.get('Gio', '2.0')
|
|
535
|
+
const GObject = await this.dependencyManager.get('GObject', '2.0')
|
|
556
536
|
|
|
557
|
-
const dependencies = this.
|
|
537
|
+
const dependencies = await this.girFilePathToDependencies(girFiles)
|
|
558
538
|
|
|
559
539
|
const { loaded, failed } = await this.loadGirModules(
|
|
560
540
|
[
|
|
@@ -582,7 +562,7 @@ export class ModuleLoader {
|
|
|
582
562
|
}
|
|
583
563
|
|
|
584
564
|
/**
|
|
585
|
-
* Find modules
|
|
565
|
+
* Find modules
|
|
586
566
|
* @param girDirectories
|
|
587
567
|
* @param modules
|
|
588
568
|
*/
|
|
@@ -590,10 +570,17 @@ export class ModuleLoader {
|
|
|
590
570
|
modules: string[],
|
|
591
571
|
ignore: string[] = [],
|
|
592
572
|
): Promise<{ grouped: GirModulesGroupedMap; loaded: GirModuleResolvedBy[]; failed: string[] }> {
|
|
593
|
-
const
|
|
594
|
-
const dependencies = this.
|
|
573
|
+
const girFiles = await this.findGirFiles(modules, ignore)
|
|
574
|
+
const dependencies = await this.girFilePathToDependencies(girFiles)
|
|
595
575
|
const { loaded, failed } = await this.loadGirModules(dependencies, ignore)
|
|
596
576
|
const grouped = this.groupGirFiles(loaded)
|
|
597
577
|
return { grouped, loaded, failed: Array.from(failed) }
|
|
598
578
|
}
|
|
579
|
+
|
|
580
|
+
/** Start parsing the gir modules */
|
|
581
|
+
public parse(girModules: GirModuleResolvedBy[]): void {
|
|
582
|
+
for (const girModule of girModules) {
|
|
583
|
+
girModule.module.parse()
|
|
584
|
+
}
|
|
585
|
+
}
|
|
599
586
|
}
|
package/src/start.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import yargs from 'yargs'
|
|
3
3
|
import { hideBin } from 'yargs/helpers'
|
|
4
4
|
|
|
5
|
-
import { generate, list, doc } from './commands/index.js'
|
|
5
|
+
import { generate, list, doc, copy } from './commands/index.js'
|
|
6
6
|
import { Config } from './config.js'
|
|
7
7
|
|
|
8
8
|
void yargs(hideBin(process.argv))
|
|
@@ -11,6 +11,7 @@ void yargs(hideBin(process.argv))
|
|
|
11
11
|
.usage(Config.usage)
|
|
12
12
|
.command(generate.command, generate.description, generate.builder, generate.handler)
|
|
13
13
|
.command(list.command, list.description, list.builder, list.handler)
|
|
14
|
+
.command(copy.command, copy.description, copy.builder, copy.handler)
|
|
14
15
|
.command(doc.command, doc.description, doc.builder, doc.handler)
|
|
15
16
|
.demandCommand(1)
|
|
16
17
|
.help().argv
|