@goodie-ts/cli 0.4.0 → 0.6.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.
package/bin/goodie.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/bin.js');
package/dist/bin.js CHANGED
File without changes
@@ -9,6 +9,28 @@ export declare const generate: import("citty").CommandDef<{
9
9
  description: string;
10
10
  default: string;
11
11
  };
12
+ mode: {
13
+ type: "string";
14
+ description: string;
15
+ default: string;
16
+ };
17
+ 'package-name': {
18
+ type: "string";
19
+ description: string;
20
+ };
21
+ 'beans-output': {
22
+ type: "string";
23
+ description: string;
24
+ default: string;
25
+ };
26
+ 'code-output': {
27
+ type: "string";
28
+ description: string;
29
+ };
30
+ scan: {
31
+ type: "string";
32
+ description: string;
33
+ };
12
34
  watch: {
13
35
  type: "boolean";
14
36
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;EAsDnB,CAAC"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiHnB,CAAC"}
@@ -1,6 +1,7 @@
1
+ import fs from 'node:fs';
1
2
  import path from 'node:path';
2
3
  import { defineCommand } from 'citty';
3
- import { logOutcome, runTransform } from '../run-transform.js';
4
+ import { logLibraryOutcome, logOutcome, runTransform, runTransformLibrary, } from '../run-transform.js';
4
5
  import { watchAndRebuild } from '../watch.js';
5
6
  export const generate = defineCommand({
6
7
  meta: {
@@ -17,6 +18,28 @@ export const generate = defineCommand({
17
18
  description: 'Output file path',
18
19
  default: 'src/AppContext.generated.ts',
19
20
  },
21
+ mode: {
22
+ type: 'string',
23
+ description: 'Transform mode: "app" (default) or "library"',
24
+ default: 'app',
25
+ },
26
+ 'package-name': {
27
+ type: 'string',
28
+ description: 'Package name for library mode (auto-detected from package.json if omitted)',
29
+ },
30
+ 'beans-output': {
31
+ type: 'string',
32
+ description: 'Output path for beans.json in library mode',
33
+ default: 'dist/beans.json',
34
+ },
35
+ 'code-output': {
36
+ type: 'string',
37
+ description: 'Also emit generated code (e.g. for integration tests). Only used in library mode.',
38
+ },
39
+ scan: {
40
+ type: 'string',
41
+ description: 'Comma-separated npm scopes to scan for library beans (e.g. "@goodie-ts,@acme")',
42
+ },
20
43
  watch: {
21
44
  type: 'boolean',
22
45
  description: 'Watch for changes and rebuild',
@@ -27,28 +50,71 @@ export const generate = defineCommand({
27
50
  description: 'Directory to watch (default: cwd). Requires Node >= 22.13 for recursive watching.',
28
51
  },
29
52
  },
30
- run({ args }) {
53
+ async run({ args }) {
31
54
  const cwd = process.cwd();
32
55
  const tsConfigPath = path.resolve(cwd, args.tsconfig);
33
56
  const outputPath = path.resolve(cwd, args.output);
34
- // Always run an initial transform
35
- const outcome = runTransform({ tsConfigPath, outputPath });
36
- logOutcome(outcome);
37
- if (!outcome.success) {
38
- process.exitCode = 1;
39
- return;
57
+ const scanScopes = args.scan
58
+ ? args.scan.split(',').map((s) => s.trim())
59
+ : undefined;
60
+ if (args.mode === 'library') {
61
+ const packageName = args['package-name'] ?? detectPackageName(cwd);
62
+ const beansOutputPath = path.resolve(cwd, args['beans-output']);
63
+ const codeOutputPath = args['code-output']
64
+ ? path.resolve(cwd, args['code-output'])
65
+ : undefined;
66
+ const outcome = await runTransformLibrary({
67
+ tsConfigPath,
68
+ packageName,
69
+ beansOutputPath,
70
+ codeOutputPath,
71
+ });
72
+ logLibraryOutcome(outcome);
73
+ if (!outcome.success) {
74
+ process.exitCode = 1;
75
+ return;
76
+ }
77
+ if (args.watch) {
78
+ console.warn('[goodie] --watch is not supported in library mode. Run without --watch.');
79
+ process.exitCode = 1;
80
+ }
40
81
  }
41
- if (args.watch) {
42
- const watchDir = args['watch-dir']
43
- ? path.resolve(cwd, args['watch-dir'])
44
- : cwd;
45
- console.log(`[goodie] Watching ${path.relative(cwd, watchDir) || '.'} for changes...`);
46
- watchAndRebuild({
82
+ else {
83
+ const outcome = await runTransform({
47
84
  tsConfigPath,
48
85
  outputPath,
49
- watchDir,
86
+ scanScopes,
50
87
  });
88
+ logOutcome(outcome);
89
+ if (!outcome.success) {
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ if (args.watch) {
94
+ const watchDir = args['watch-dir']
95
+ ? path.resolve(cwd, args['watch-dir'])
96
+ : cwd;
97
+ console.log(`[goodie] Watching ${path.relative(cwd, watchDir) || '.'} for changes...`);
98
+ watchAndRebuild({
99
+ tsConfigPath,
100
+ outputPath,
101
+ watchDir,
102
+ });
103
+ }
51
104
  }
52
105
  },
53
106
  });
107
+ function detectPackageName(cwd) {
108
+ const pkgJsonPath = path.join(cwd, 'package.json');
109
+ try {
110
+ const raw = fs.readFileSync(pkgJsonPath, 'utf-8');
111
+ const pkg = JSON.parse(raw);
112
+ if (pkg.name)
113
+ return pkg.name;
114
+ }
115
+ catch {
116
+ // Fall through to error
117
+ }
118
+ throw new Error('Could not detect package name. Provide --package-name or ensure package.json exists with a "name" field.');
119
+ }
54
120
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE;QACJ,WAAW,EAAE,4CAA4C;KAC1D;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,eAAe;SACzB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,6BAA6B;SACvC;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+BAA+B;YAC5C,OAAO,EAAE,KAAK;SACf;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,mFAAmF;SACtF;KACF;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAElD,kCAAkC;QAClC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtC,CAAC,CAAC,GAAG,CAAC;YACR,OAAO,CAAC,GAAG,CACT,qBAAqB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAC1E,CAAC;YACF,eAAe,CAAC;gBACd,YAAY;gBACZ,UAAU;gBACV,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE;QACJ,WAAW,EAAE,4CAA4C;KAC1D;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,eAAe;SACzB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,6BAA6B;SACvC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8CAA8C;YAC3D,OAAO,EAAE,KAAK;SACf;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,4EAA4E;SAC/E;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,iBAAiB;SAC3B;QACD,aAAa,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,mFAAmF;SACtF;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,gFAAgF;SACnF;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+BAA+B;YAC5C,OAAO,EAAE,KAAK;SACf;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,mFAAmF;SACtF;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI;YAC1B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACnE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAChE,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;gBACxC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;gBACxC,YAAY;gBACZ,WAAW;gBACX,eAAe;gBACf,cAAc;aACf,CAAC,CAAC;YACH,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE3B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,yEAAyE,CAC1E,CAAC;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;gBACjC,YAAY;gBACZ,UAAU;gBACV,UAAU;aACX,CAAC,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,CAAC;YAEpB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;oBAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBACtC,CAAC,CAAC,GAAG,CAAC;gBACR,OAAO,CAAC,GAAG,CACT,qBAAqB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAC1E,CAAC;gBACF,eAAe,CAAC;oBACd,YAAY;oBACZ,UAAU;oBACV,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACjD,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IACD,MAAM,IAAI,KAAK,CACb,0GAA0G,CAC3G,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export type { RunTransformOptions, TransformFailure, TransformOutcome, TransformSuccess, } from './run-transform.js';
2
- export { logOutcome, runTransform } from './run-transform.js';
1
+ export type { LibraryTransformOutcome, LibraryTransformSuccess, RunTransformLibraryOptions, RunTransformOptions, TransformFailure, TransformOutcome, TransformSuccess, } from './run-transform.js';
2
+ export { logLibraryOutcome, logOutcome, runTransform, runTransformLibrary, } from './run-transform.js';
3
3
  export type { WatchHandle, WatchOptions } from './watch.js';
4
4
  export { watchAndRebuild } from './watch.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { logOutcome, runTransform } from './run-transform.js';
1
+ export { logLibraryOutcome, logOutcome, runTransform, runTransformLibrary, } from './run-transform.js';
2
2
  export { watchAndRebuild } from './watch.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -1,7 +1,14 @@
1
- import type { TransformResult } from '@goodie-ts/transformer';
1
+ import type { TransformLibraryResult, TransformResult } from '@goodie-ts/transformer';
2
2
  export interface RunTransformOptions {
3
3
  tsConfigPath: string;
4
4
  outputPath: string;
5
+ scanScopes?: string[];
6
+ }
7
+ export interface RunTransformLibraryOptions {
8
+ tsConfigPath: string;
9
+ packageName: string;
10
+ beansOutputPath: string;
11
+ codeOutputPath?: string;
5
12
  }
6
13
  export interface TransformSuccess {
7
14
  success: true;
@@ -13,6 +20,14 @@ export interface TransformFailure {
13
20
  error: Error;
14
21
  }
15
22
  export type TransformOutcome = TransformSuccess | TransformFailure;
16
- export declare function runTransform(options: RunTransformOptions): TransformOutcome;
23
+ export declare function runTransform(options: RunTransformOptions): Promise<TransformOutcome>;
24
+ export interface LibraryTransformSuccess {
25
+ success: true;
26
+ result: TransformLibraryResult;
27
+ durationMs: number;
28
+ }
29
+ export type LibraryTransformOutcome = LibraryTransformSuccess | TransformFailure;
30
+ export declare function runTransformLibrary(options: RunTransformLibraryOptions): Promise<LibraryTransformOutcome>;
17
31
  export declare function logOutcome(outcome: TransformOutcome): void;
32
+ export declare function logLibraryOutcome(outcome: LibraryTransformOutcome): void;
18
33
  //# sourceMappingURL=run-transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-transform.d.ts","sourceRoot":"","sources":["../src/run-transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnE,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,CAkB3E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAgB1D"}
1
+ {"version":3,"file":"run-transform.d.ts","sourceRoot":"","sources":["../src/run-transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnE,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAC/B,uBAAuB,GACvB,gBAAgB,CAAC;AAErB,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAoBlC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAa1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAqBxE"}
@@ -1,11 +1,34 @@
1
1
  import path from 'node:path';
2
- import { TransformerError, transform } from '@goodie-ts/transformer';
3
- export function runTransform(options) {
2
+ import { TransformerError, transform, transformLibrary, } from '@goodie-ts/transformer';
3
+ export async function runTransform(options) {
4
4
  const start = performance.now();
5
5
  try {
6
- const result = transform({
6
+ const result = await transform({
7
7
  tsConfigFilePath: options.tsConfigPath,
8
8
  outputPath: options.outputPath,
9
+ scanScopes: options.scanScopes,
10
+ });
11
+ const durationMs = performance.now() - start;
12
+ return { success: true, result, durationMs };
13
+ }
14
+ catch (error) {
15
+ if (error instanceof TransformerError) {
16
+ return { success: false, error };
17
+ }
18
+ return {
19
+ success: false,
20
+ error: error instanceof Error ? error : new Error(String(error)),
21
+ };
22
+ }
23
+ }
24
+ export async function runTransformLibrary(options) {
25
+ const start = performance.now();
26
+ try {
27
+ const result = await transformLibrary({
28
+ tsConfigFilePath: options.tsConfigPath,
29
+ packageName: options.packageName,
30
+ beansOutputPath: options.beansOutputPath,
31
+ codeOutputPath: options.codeOutputPath,
9
32
  });
10
33
  const durationMs = performance.now() - start;
11
34
  return { success: true, result, durationMs };
@@ -30,10 +53,32 @@ export function logOutcome(outcome) {
30
53
  }
31
54
  }
32
55
  else {
33
- console.error(`[goodie] Transform failed: ${outcome.error.message}`);
34
- if (outcome.error instanceof TransformerError && outcome.error.hint) {
35
- console.error(`[goodie] Hint: ${outcome.error.hint}`);
56
+ logError(outcome);
57
+ }
58
+ }
59
+ export function logLibraryOutcome(outcome) {
60
+ if (outcome.success) {
61
+ const { result, durationMs } = outcome;
62
+ const ms = Math.round(durationMs);
63
+ const cwd = process.cwd();
64
+ const beansPath = path.relative(cwd, result.outputPath);
65
+ const codePath = result.codeOutputPath
66
+ ? path.relative(cwd, result.codeOutputPath)
67
+ : undefined;
68
+ const outputs = codePath ? `${beansPath} + ${codePath}` : beansPath;
69
+ console.log(`[goodie] Library build: ${result.beans.length} bean(s) → ${outputs} in ${ms}ms`);
70
+ for (const w of result.warnings) {
71
+ console.warn(`[goodie] Warning: ${w}`);
36
72
  }
37
73
  }
74
+ else {
75
+ logError(outcome);
76
+ }
77
+ }
78
+ function logError(outcome) {
79
+ console.error(`[goodie] Transform failed: ${outcome.error.message}`);
80
+ if (outcome.error instanceof TransformerError && outcome.error.hint) {
81
+ console.error(`[goodie] Hint: ${outcome.error.hint}`);
82
+ }
38
83
  }
39
84
  //# sourceMappingURL=run-transform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-transform.js","sourceRoot":"","sources":["../src/run-transform.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAoBrE,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,gBAAgB,EAAE,OAAO,CAAC,YAAY;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAyB;IAClD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CACT,sBAAsB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,EAAE,IAAI,CACpH,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,KAAK,YAAY,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-transform.js","sourceRoot":"","sources":["../src/run-transform.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAsClE"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAyClE"}
package/dist/watch.js CHANGED
@@ -21,8 +21,11 @@ export function watchAndRebuild(options) {
21
21
  }
22
22
  debounceTimer = setTimeout(() => {
23
23
  debounceTimer = undefined;
24
- const outcome = runTransform(options);
25
- logOutcome(outcome);
24
+ runTransform(options)
25
+ .then(logOutcome)
26
+ .catch((err) => {
27
+ console.error('[goodie] Unexpected error:', err);
28
+ });
26
29
  }, debounceMs);
27
30
  });
28
31
  return {
package/dist/watch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAahC,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,aAAwD,CAAC;IAE7D,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CACtB,OAAO,CAAC,QAAQ,EAChB,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnB,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,0BAA0B;QAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAEtC,2DAA2D;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,gBAAgB;YAAE,OAAO;QAE9D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,aAAa,GAAG,SAAS,CAAC;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACtC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CACF,CAAC;IAEF,OAAO;QACL,KAAK;YACH,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAahC,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,aAAwD,CAAC;IAE7D,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CACtB,OAAO,CAAC,QAAQ,EAChB,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnB,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,0BAA0B;QAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAEtC,2DAA2D;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,gBAAgB;YAAE,OAAO;QAE9D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,aAAa,GAAG,SAAS,CAAC;YAC1B,YAAY,CAAC,OAAO,CAAC;iBAClB,IAAI,CAAC,UAAU,CAAC;iBAChB,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CACF,CAAC;IAEF,OAAO;QACL,KAAK;YACH,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodie-ts/cli",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "CLI for goodie-ts compile-time dependency injection",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -18,7 +18,7 @@
18
18
  "main": "dist/index.js",
19
19
  "types": "dist/index.d.ts",
20
20
  "bin": {
21
- "goodie": "dist/bin.js"
21
+ "goodie": "bin/goodie.js"
22
22
  },
23
23
  "exports": {
24
24
  ".": {
@@ -28,12 +28,13 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "citty": "^0.1.6",
31
- "@goodie-ts/transformer": "0.4.0"
31
+ "@goodie-ts/transformer": "^0.6.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^22.0.0"
35
35
  },
36
36
  "files": [
37
+ "bin",
37
38
  "dist"
38
39
  ],
39
40
  "scripts": {