@venizia/ignis-boot 0.2.0-14 → 0.2.0-15
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/dist/cjs/cli.js +9 -0
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/generator/common/types.d.ts +5 -0
- package/dist/cjs/generator/common/types.d.ts.map +1 -1
- package/dist/cjs/generator/index.d.ts +3 -3
- package/dist/cjs/generator/index.d.ts.map +1 -1
- package/dist/cjs/generator/index.js +10 -7
- package/dist/cjs/generator/index.js.map +1 -1
- package/dist/cjs/generator/scanner.d.ts +8 -2
- package/dist/cjs/generator/scanner.d.ts.map +1 -1
- package/dist/cjs/generator/scanner.js +38 -12
- package/dist/cjs/generator/scanner.js.map +1 -1
- package/dist/esm/cli.js +9 -0
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/generator/common/types.d.ts +5 -0
- package/dist/esm/generator/common/types.d.ts.map +1 -1
- package/dist/esm/generator/index.d.ts +3 -3
- package/dist/esm/generator/index.d.ts.map +1 -1
- package/dist/esm/generator/index.js +10 -7
- package/dist/esm/generator/index.js.map +1 -1
- package/dist/esm/generator/scanner.d.ts +8 -2
- package/dist/esm/generator/scanner.d.ts.map +1 -1
- package/dist/esm/generator/scanner.js +38 -12
- package/dist/esm/generator/scanner.js.map +1 -1
- package/package.json +2 -2
package/dist/cjs/cli.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
require("./common/install-quiet-logger");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
5
6
|
const node_util_1 = require("node:util");
|
|
6
7
|
const generator_1 = require("./generator");
|
|
7
8
|
const USAGE = 'ignis-artifacts <generate|check> [--root src] [--out src/generated/artifacts.ts] [--ignore a,b] [--export GeneratedArtifacts]';
|
|
@@ -24,16 +25,24 @@ const options = {
|
|
|
24
25
|
.filter(Boolean),
|
|
25
26
|
exportName: values.export,
|
|
26
27
|
};
|
|
28
|
+
/** One stderr line per decorated class a user `--ignore` pattern hid; silence when nothing is hidden. */
|
|
29
|
+
const warnIgnored = (opts) => {
|
|
30
|
+
for (const artifact of opts.ignored) {
|
|
31
|
+
console.error(`warning: ${artifact.className} (${artifact.type}) in ${(0, node_path_1.relative)(opts.root, artifact.filePath)} matches --ignore and is left out of the index`);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
27
34
|
/** Exit code of the command, so the process exits in exactly one place. */
|
|
28
35
|
const run = () => {
|
|
29
36
|
switch (positionals[0]) {
|
|
30
37
|
case 'generate': {
|
|
31
38
|
const result = (0, generator_1.generateArtifactIndex)(options);
|
|
32
39
|
console.log(`${result.written ? 'wrote' : 'up to date'} ${options.out} | ${result.artifacts.length} artifact(s)`);
|
|
40
|
+
warnIgnored({ ignored: result.ignored, root: options.root });
|
|
33
41
|
return 0;
|
|
34
42
|
}
|
|
35
43
|
case 'check': {
|
|
36
44
|
const result = (0, generator_1.checkArtifactIndex)(options);
|
|
45
|
+
warnIgnored({ ignored: result.ignored, root: options.root });
|
|
37
46
|
if (result.isFresh) {
|
|
38
47
|
console.log(`fresh ${options.out}`);
|
|
39
48
|
return 0;
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAuC;AACvC,yCAAsC;AACtC,2CAAwE;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,9 @@ export interface IScanOptions {
|
|
|
10
10
|
/** Glob patterns relative to `root`; defaults to `ArtifactStereotypes.DEFAULT_IGNORE`. */
|
|
11
11
|
ignore?: string[];
|
|
12
12
|
}
|
|
13
|
+
/** The index content plus what a caller's `ignore` silently left out: decorated classes under a user pattern, never under a default one. */
|
|
14
|
+
export interface IScanReport {
|
|
15
|
+
artifacts: IScannedArtifact[];
|
|
16
|
+
ignored: IScannedArtifact[];
|
|
17
|
+
}
|
|
13
18
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,4IAA4I;AAC5I,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IScannedArtifact } from './common';
|
|
1
|
+
import type { IScanReport, IScannedArtifact } from './common';
|
|
2
2
|
export interface IGenerateOptions {
|
|
3
3
|
root: string;
|
|
4
4
|
out: string;
|
|
@@ -9,14 +9,14 @@ export interface IGenerateOptions {
|
|
|
9
9
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
10
10
|
export declare const generateArtifactIndex: (opts: IGenerateOptions) => {
|
|
11
11
|
content: string;
|
|
12
|
-
artifacts: IScannedArtifact[];
|
|
13
12
|
written: boolean;
|
|
14
|
-
};
|
|
13
|
+
} & IScanReport;
|
|
15
14
|
/** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
|
|
16
15
|
export declare const checkArtifactIndex: (opts: IGenerateOptions) => {
|
|
17
16
|
isFresh: boolean;
|
|
18
17
|
expected: string;
|
|
19
18
|
actual: string | undefined;
|
|
19
|
+
ignored: IScannedArtifact[];
|
|
20
20
|
};
|
|
21
21
|
export * from './common';
|
|
22
22
|
export * from './emitter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiBD,0GAA0G;AAC1G,eAAO,MAAM,qBAAqB,GAChC,MAAM,gBAAgB,KACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,WAa1C,CAAC;AAKF,4GAA4G;AAC5G,eAAO,MAAM,kBAAkB,GAC7B,MAAM,gBAAgB,KACrB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAQ7B,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
@@ -20,37 +20,40 @@ const node_path_1 = require("node:path");
|
|
|
20
20
|
const emitter_1 = require("./emitter");
|
|
21
21
|
const scanner_1 = require("./scanner");
|
|
22
22
|
const render = (opts) => {
|
|
23
|
-
const artifacts = scanner_1.ArtifactScanner.getInstance().
|
|
23
|
+
const { artifacts, ignored } = scanner_1.ArtifactScanner.getInstance().scanWithReport({
|
|
24
|
+
root: opts.root,
|
|
25
|
+
ignore: opts.ignore,
|
|
26
|
+
});
|
|
24
27
|
const content = emitter_1.ArtifactIndexEmitter.render({
|
|
25
28
|
artifacts,
|
|
26
29
|
outFile: (0, node_path_1.resolve)(opts.out),
|
|
27
30
|
exportName: opts.exportName ?? emitter_1.ArtifactIndexEmitter.DEFAULT_EXPORT_NAME,
|
|
28
31
|
command: { root: opts.root, out: opts.out, ignore: opts.ignore },
|
|
29
32
|
});
|
|
30
|
-
return { content, artifacts };
|
|
33
|
+
return { content, artifacts, ignored };
|
|
31
34
|
};
|
|
32
35
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
33
36
|
const generateArtifactIndex = (opts) => {
|
|
34
|
-
const { content, artifacts } = render(opts);
|
|
37
|
+
const { content, artifacts, ignored } = render(opts);
|
|
35
38
|
const out = (0, node_path_1.resolve)(opts.out);
|
|
36
39
|
const current = (0, node_fs_1.existsSync)(out) ? (0, node_fs_1.readFileSync)(out, 'utf8') : undefined;
|
|
37
40
|
if (current === content) {
|
|
38
|
-
return { content, artifacts, written: false };
|
|
41
|
+
return { content, artifacts, ignored, written: false };
|
|
39
42
|
}
|
|
40
43
|
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(out), { recursive: true });
|
|
41
44
|
(0, node_fs_1.writeFileSync)(out, content);
|
|
42
|
-
return { content, artifacts, written: true };
|
|
45
|
+
return { content, artifacts, ignored, written: true };
|
|
43
46
|
};
|
|
44
47
|
exports.generateArtifactIndex = generateArtifactIndex;
|
|
45
48
|
/** Everything below the first line: the header only records the command, so a flag change alone must not read as drift. */
|
|
46
49
|
const bodyOf = (content) => content.slice(content.indexOf('\n') + 1);
|
|
47
50
|
/** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
|
|
48
51
|
const checkArtifactIndex = (opts) => {
|
|
49
|
-
const { content: expected } = render(opts);
|
|
52
|
+
const { content: expected, ignored } = render(opts);
|
|
50
53
|
const out = (0, node_path_1.resolve)(opts.out);
|
|
51
54
|
const actual = (0, node_fs_1.existsSync)(out) ? (0, node_fs_1.readFileSync)(out, 'utf8') : undefined;
|
|
52
55
|
const isFresh = actual !== undefined && bodyOf(actual) === bodyOf(expected);
|
|
53
|
-
return { isFresh, expected, actual };
|
|
56
|
+
return { isFresh, expected, actual, ignored };
|
|
54
57
|
};
|
|
55
58
|
exports.checkArtifactIndex = checkArtifactIndex;
|
|
56
59
|
__exportStar(require("./common"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAA6E;AAC7E,yCAA6C;AAE7C,uCAAiD;AACjD,uCAA4C;AAU5C,MAAM,MAAM,GAAG,CAAC,IAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAA6E;AAC7E,yCAA6C;AAE7C,uCAAiD;AACjD,uCAA4C;AAU5C,MAAM,MAAM,GAAG,CAAC,IAAsB,EAAqC,EAAE;IAC3E,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,yBAAe,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC;QAC1E,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,8BAAoB,CAAC,MAAM,CAAC;QAC1C,SAAS;QACT,OAAO,EAAE,IAAA,mBAAO,EAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,8BAAoB,CAAC,mBAAmB;QACvE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;KACjE,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF,0GAA0G;AACnG,MAAM,qBAAqB,GAAG,CACnC,IAAsB,EAC+B,EAAE;IACvD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC;IAED,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAA,uBAAa,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC,CAAC;AAfW,QAAA,qBAAqB,yBAehC;AAEF,2HAA2H;AAC3H,MAAM,MAAM,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErF,4GAA4G;AACrG,MAAM,kBAAkB,GAAG,CAChC,IAAsB,EAMtB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC,CAAC;AAdW,QAAA,kBAAkB,sBAc7B;AAEF,2CAAyB;AACzB,4CAA0B;AAC1B,4CAA0B"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { BaseHelper } from '@venizia/ignis-helpers';
|
|
2
|
-
import { type IScanOptions, type IScannedArtifact } from './common';
|
|
2
|
+
import { type IScanOptions, type IScanReport, type IScannedArtifact } from './common';
|
|
3
3
|
/** Finds exported classes carrying a stereotype decorator by reading the source, never by running it. */
|
|
4
4
|
export declare class ArtifactScanner extends BaseHelper {
|
|
5
5
|
private static instance?;
|
|
6
6
|
private constructor();
|
|
7
7
|
static getInstance(): ArtifactScanner;
|
|
8
8
|
scan(opts: IScanOptions): IScannedArtifact[];
|
|
9
|
-
|
|
9
|
+
/** `scan` plus the decorated classes a caller's own `ignore` pattern hid - the generator prints them so a stale pattern cannot drop an artifact in silence. */
|
|
10
|
+
scanWithReport(opts: IScanOptions): IScanReport;
|
|
11
|
+
/** A hidden file is only reported on, never a reason to fail: a scan error becomes one warning and the file contributes nothing. */
|
|
12
|
+
private scanHiddenFile;
|
|
13
|
+
private sortArtifacts;
|
|
14
|
+
/** `kept` feeds the index; `hidden` is what only a user pattern excluded (a default pattern wins, so tests and generated files are never reported). */
|
|
15
|
+
private partitionSourceFiles;
|
|
10
16
|
private scanFile;
|
|
11
17
|
/** local identifier -> stereotype name, for named imports from an IGNIS module (aliases resolved). */
|
|
12
18
|
private collectStereotypeImports;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAC;AAElB,yGAAyG;AACzG,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAkB;IAE1C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,eAAe;IAIrC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAC;AAElB,yGAAyG;AACzG,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAkB;IAE1C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,eAAe;IAIrC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAI5C,+JAA+J;IAC/J,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;IAY/C,oIAAoI;IACpI,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAMrB,uJAAuJ;IACvJ,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,QAAQ;IAiEhB,sGAAsG;IACtG,OAAO,CAAC,wBAAwB;IA8BhC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -18,24 +18,48 @@ class ArtifactScanner extends ignis_helpers_1.BaseHelper {
|
|
|
18
18
|
return (this.instance ??= new ArtifactScanner());
|
|
19
19
|
}
|
|
20
20
|
scan(opts) {
|
|
21
|
+
return this.scanWithReport(opts).artifacts;
|
|
22
|
+
}
|
|
23
|
+
/** `scan` plus the decorated classes a caller's own `ignore` pattern hid - the generator prints them so a stale pattern cannot drop an artifact in silence. */
|
|
24
|
+
scanWithReport(opts) {
|
|
21
25
|
const root = (0, node_path_1.resolve)(opts.root);
|
|
22
|
-
const
|
|
23
|
-
const
|
|
26
|
+
const defaultGlobs = common_1.ArtifactStereotypes.DEFAULT_IGNORE.map(pattern => new Bun.Glob(pattern));
|
|
27
|
+
const userGlobs = (opts.ignore ?? []).map(pattern => new Bun.Glob(pattern));
|
|
28
|
+
const { kept, hidden } = this.partitionSourceFiles({ root, defaultGlobs, userGlobs });
|
|
29
|
+
return {
|
|
30
|
+
artifacts: this.sortArtifacts(kept.flatMap(filePath => this.scanFile({ filePath }))),
|
|
31
|
+
ignored: this.sortArtifacts(hidden.flatMap(filePath => this.scanHiddenFile({ filePath }))),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** A hidden file is only reported on, never a reason to fail: a scan error becomes one warning and the file contributes nothing. */
|
|
35
|
+
scanHiddenFile(opts) {
|
|
36
|
+
try {
|
|
37
|
+
return this.scanFile({ filePath: opts.filePath, isHidden: true });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
41
|
+
this.logger.for('scanHiddenFile').warn('Skipped hidden file %s | %s', opts.filePath, reason);
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
sortArtifacts(artifacts) {
|
|
24
46
|
return artifacts.sort((a, b) => a.type.localeCompare(b.type) || a.className.localeCompare(b.className));
|
|
25
47
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
48
|
+
/** `kept` feeds the index; `hidden` is what only a user pattern excluded (a default pattern wins, so tests and generated files are never reported). */
|
|
49
|
+
partitionSourceFiles(opts) {
|
|
50
|
+
const kept = [];
|
|
51
|
+
const hidden = [];
|
|
29
52
|
for (const relative of new Bun.Glob('**/*.ts').scanSync({ cwd: opts.root })) {
|
|
30
|
-
if (relative.endsWith('.d.ts') ||
|
|
53
|
+
if (relative.endsWith('.d.ts') || opts.defaultGlobs.some(glob => glob.match(relative))) {
|
|
31
54
|
continue;
|
|
32
55
|
}
|
|
33
|
-
|
|
56
|
+
const target = opts.userGlobs.some(glob => glob.match(relative)) ? hidden : kept;
|
|
57
|
+
target.push((0, node_path_1.join)(opts.root, relative));
|
|
34
58
|
}
|
|
35
|
-
return
|
|
59
|
+
return { kept: kept.sort(), hidden: hidden.sort() };
|
|
36
60
|
}
|
|
37
61
|
scanFile(opts) {
|
|
38
|
-
const { filePath } = opts;
|
|
62
|
+
const { filePath, isHidden = false } = opts;
|
|
39
63
|
const source = typescript_1.default.createSourceFile(filePath, (0, node_fs_1.readFileSync)(filePath, 'utf8'), typescript_1.default.ScriptTarget.Latest, true);
|
|
40
64
|
const stereotypeByLocalName = this.collectStereotypeImports({ source });
|
|
41
65
|
if (stereotypeByLocalName.size === 0) {
|
|
@@ -68,9 +92,11 @@ class ArtifactScanner extends ignis_helpers_1.BaseHelper {
|
|
|
68
92
|
exportedNames.has(className);
|
|
69
93
|
const isAbstract = has(typescript_1.default.SyntaxKind.AbstractKeyword);
|
|
70
94
|
if (!isNamedExport || isAbstract) {
|
|
71
|
-
|
|
72
|
-
.
|
|
73
|
-
|
|
95
|
+
if (!isHidden) {
|
|
96
|
+
this.logger
|
|
97
|
+
.for('scanFile')
|
|
98
|
+
.warn('Skipped %s in %s | %s', className, filePath, isAbstract ? 'abstract' : 'not a named export');
|
|
99
|
+
}
|
|
74
100
|
return;
|
|
75
101
|
}
|
|
76
102
|
found.push({ className, filePath, type: types[0] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA8D;AAC9D,qCAAuC;AACvC,yCAA0C;AAC1C,4DAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import './common/install-quiet-logger';
|
|
3
|
+
import { relative } from 'node:path';
|
|
3
4
|
import { parseArgs } from 'node:util';
|
|
4
5
|
import { checkArtifactIndex, generateArtifactIndex } from './generator';
|
|
5
6
|
const USAGE = 'ignis-artifacts <generate|check> [--root src] [--out src/generated/artifacts.ts] [--ignore a,b] [--export GeneratedArtifacts]';
|
|
@@ -22,16 +23,24 @@ const options = {
|
|
|
22
23
|
.filter(Boolean),
|
|
23
24
|
exportName: values.export,
|
|
24
25
|
};
|
|
26
|
+
/** One stderr line per decorated class a user `--ignore` pattern hid; silence when nothing is hidden. */
|
|
27
|
+
const warnIgnored = (opts) => {
|
|
28
|
+
for (const artifact of opts.ignored) {
|
|
29
|
+
console.error(`warning: ${artifact.className} (${artifact.type}) in ${relative(opts.root, artifact.filePath)} matches --ignore and is left out of the index`);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
25
32
|
/** Exit code of the command, so the process exits in exactly one place. */
|
|
26
33
|
const run = () => {
|
|
27
34
|
switch (positionals[0]) {
|
|
28
35
|
case 'generate': {
|
|
29
36
|
const result = generateArtifactIndex(options);
|
|
30
37
|
console.log(`${result.written ? 'wrote' : 'up to date'} ${options.out} | ${result.artifacts.length} artifact(s)`);
|
|
38
|
+
warnIgnored({ ignored: result.ignored, root: options.root });
|
|
31
39
|
return 0;
|
|
32
40
|
}
|
|
33
41
|
case 'check': {
|
|
34
42
|
const result = checkArtifactIndex(options);
|
|
43
|
+
warnIgnored({ ignored: result.ignored, root: options.root });
|
|
35
44
|
if (result.isFresh) {
|
|
36
45
|
console.log(`fresh ${options.out}`);
|
|
37
46
|
return 0;
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,9 @@ export interface IScanOptions {
|
|
|
10
10
|
/** Glob patterns relative to `root`; defaults to `ArtifactStereotypes.DEFAULT_IGNORE`. */
|
|
11
11
|
ignore?: string[];
|
|
12
12
|
}
|
|
13
|
+
/** The index content plus what a caller's `ignore` silently left out: decorated classes under a user pattern, never under a default one. */
|
|
14
|
+
export interface IScanReport {
|
|
15
|
+
artifacts: IScannedArtifact[];
|
|
16
|
+
ignored: IScannedArtifact[];
|
|
17
|
+
}
|
|
13
18
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,4IAA4I;AAC5I,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IScannedArtifact } from './common';
|
|
1
|
+
import type { IScanReport, IScannedArtifact } from './common';
|
|
2
2
|
export interface IGenerateOptions {
|
|
3
3
|
root: string;
|
|
4
4
|
out: string;
|
|
@@ -9,14 +9,14 @@ export interface IGenerateOptions {
|
|
|
9
9
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
10
10
|
export declare const generateArtifactIndex: (opts: IGenerateOptions) => {
|
|
11
11
|
content: string;
|
|
12
|
-
artifacts: IScannedArtifact[];
|
|
13
12
|
written: boolean;
|
|
14
|
-
};
|
|
13
|
+
} & IScanReport;
|
|
15
14
|
/** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
|
|
16
15
|
export declare const checkArtifactIndex: (opts: IGenerateOptions) => {
|
|
17
16
|
isFresh: boolean;
|
|
18
17
|
expected: string;
|
|
19
18
|
actual: string | undefined;
|
|
19
|
+
ignored: IScannedArtifact[];
|
|
20
20
|
};
|
|
21
21
|
export * from './common';
|
|
22
22
|
export * from './emitter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiBD,0GAA0G;AAC1G,eAAO,MAAM,qBAAqB,GAChC,MAAM,gBAAgB,KACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,WAa1C,CAAC;AAKF,4GAA4G;AAC5G,eAAO,MAAM,kBAAkB,GAC7B,MAAM,gBAAgB,KACrB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAQ7B,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
@@ -3,36 +3,39 @@ import { dirname, resolve } from 'node:path';
|
|
|
3
3
|
import { ArtifactIndexEmitter } from './emitter';
|
|
4
4
|
import { ArtifactScanner } from './scanner';
|
|
5
5
|
const render = (opts) => {
|
|
6
|
-
const artifacts = ArtifactScanner.getInstance().
|
|
6
|
+
const { artifacts, ignored } = ArtifactScanner.getInstance().scanWithReport({
|
|
7
|
+
root: opts.root,
|
|
8
|
+
ignore: opts.ignore,
|
|
9
|
+
});
|
|
7
10
|
const content = ArtifactIndexEmitter.render({
|
|
8
11
|
artifacts,
|
|
9
12
|
outFile: resolve(opts.out),
|
|
10
13
|
exportName: opts.exportName ?? ArtifactIndexEmitter.DEFAULT_EXPORT_NAME,
|
|
11
14
|
command: { root: opts.root, out: opts.out, ignore: opts.ignore },
|
|
12
15
|
});
|
|
13
|
-
return { content, artifacts };
|
|
16
|
+
return { content, artifacts, ignored };
|
|
14
17
|
};
|
|
15
18
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
16
19
|
export const generateArtifactIndex = (opts) => {
|
|
17
|
-
const { content, artifacts } = render(opts);
|
|
20
|
+
const { content, artifacts, ignored } = render(opts);
|
|
18
21
|
const out = resolve(opts.out);
|
|
19
22
|
const current = existsSync(out) ? readFileSync(out, 'utf8') : undefined;
|
|
20
23
|
if (current === content) {
|
|
21
|
-
return { content, artifacts, written: false };
|
|
24
|
+
return { content, artifacts, ignored, written: false };
|
|
22
25
|
}
|
|
23
26
|
mkdirSync(dirname(out), { recursive: true });
|
|
24
27
|
writeFileSync(out, content);
|
|
25
|
-
return { content, artifacts, written: true };
|
|
28
|
+
return { content, artifacts, ignored, written: true };
|
|
26
29
|
};
|
|
27
30
|
/** Everything below the first line: the header only records the command, so a flag change alone must not read as drift. */
|
|
28
31
|
const bodyOf = (content) => content.slice(content.indexOf('\n') + 1);
|
|
29
32
|
/** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
|
|
30
33
|
export const checkArtifactIndex = (opts) => {
|
|
31
|
-
const { content: expected } = render(opts);
|
|
34
|
+
const { content: expected, ignored } = render(opts);
|
|
32
35
|
const out = resolve(opts.out);
|
|
33
36
|
const actual = existsSync(out) ? readFileSync(out, 'utf8') : undefined;
|
|
34
37
|
const isFresh = actual !== undefined && bodyOf(actual) === bodyOf(expected);
|
|
35
|
-
return { isFresh, expected, actual };
|
|
38
|
+
return { isFresh, expected, actual, ignored };
|
|
36
39
|
};
|
|
37
40
|
export * from './common';
|
|
38
41
|
export * from './emitter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAU5C,MAAM,MAAM,GAAG,CAAC,IAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { BaseHelper } from '@venizia/ignis-helpers';
|
|
2
|
-
import { type IScanOptions, type IScannedArtifact } from './common';
|
|
2
|
+
import { type IScanOptions, type IScanReport, type IScannedArtifact } from './common';
|
|
3
3
|
/** Finds exported classes carrying a stereotype decorator by reading the source, never by running it. */
|
|
4
4
|
export declare class ArtifactScanner extends BaseHelper {
|
|
5
5
|
private static instance?;
|
|
6
6
|
private constructor();
|
|
7
7
|
static getInstance(): ArtifactScanner;
|
|
8
8
|
scan(opts: IScanOptions): IScannedArtifact[];
|
|
9
|
-
|
|
9
|
+
/** `scan` plus the decorated classes a caller's own `ignore` pattern hid - the generator prints them so a stale pattern cannot drop an artifact in silence. */
|
|
10
|
+
scanWithReport(opts: IScanOptions): IScanReport;
|
|
11
|
+
/** A hidden file is only reported on, never a reason to fail: a scan error becomes one warning and the file contributes nothing. */
|
|
12
|
+
private scanHiddenFile;
|
|
13
|
+
private sortArtifacts;
|
|
14
|
+
/** `kept` feeds the index; `hidden` is what only a user pattern excluded (a default pattern wins, so tests and generated files are never reported). */
|
|
15
|
+
private partitionSourceFiles;
|
|
10
16
|
private scanFile;
|
|
11
17
|
/** local identifier -> stereotype name, for named imports from an IGNIS module (aliases resolved). */
|
|
12
18
|
private collectStereotypeImports;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAC;AAElB,yGAAyG;AACzG,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAkB;IAE1C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,eAAe;IAIrC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAC;AAElB,yGAAyG;AACzG,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAkB;IAE1C,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,eAAe;IAIrC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAI5C,+JAA+J;IAC/J,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;IAY/C,oIAAoI;IACpI,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAMrB,uJAAuJ;IACvJ,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,QAAQ;IAiEhB,sGAAsG;IACtG,OAAO,CAAC,wBAAwB;IA8BhC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -12,24 +12,48 @@ export class ArtifactScanner extends BaseHelper {
|
|
|
12
12
|
return (this.instance ??= new ArtifactScanner());
|
|
13
13
|
}
|
|
14
14
|
scan(opts) {
|
|
15
|
+
return this.scanWithReport(opts).artifacts;
|
|
16
|
+
}
|
|
17
|
+
/** `scan` plus the decorated classes a caller's own `ignore` pattern hid - the generator prints them so a stale pattern cannot drop an artifact in silence. */
|
|
18
|
+
scanWithReport(opts) {
|
|
15
19
|
const root = resolve(opts.root);
|
|
16
|
-
const
|
|
17
|
-
const
|
|
20
|
+
const defaultGlobs = ArtifactStereotypes.DEFAULT_IGNORE.map(pattern => new Bun.Glob(pattern));
|
|
21
|
+
const userGlobs = (opts.ignore ?? []).map(pattern => new Bun.Glob(pattern));
|
|
22
|
+
const { kept, hidden } = this.partitionSourceFiles({ root, defaultGlobs, userGlobs });
|
|
23
|
+
return {
|
|
24
|
+
artifacts: this.sortArtifacts(kept.flatMap(filePath => this.scanFile({ filePath }))),
|
|
25
|
+
ignored: this.sortArtifacts(hidden.flatMap(filePath => this.scanHiddenFile({ filePath }))),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** A hidden file is only reported on, never a reason to fail: a scan error becomes one warning and the file contributes nothing. */
|
|
29
|
+
scanHiddenFile(opts) {
|
|
30
|
+
try {
|
|
31
|
+
return this.scanFile({ filePath: opts.filePath, isHidden: true });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
35
|
+
this.logger.for('scanHiddenFile').warn('Skipped hidden file %s | %s', opts.filePath, reason);
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
sortArtifacts(artifacts) {
|
|
18
40
|
return artifacts.sort((a, b) => a.type.localeCompare(b.type) || a.className.localeCompare(b.className));
|
|
19
41
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
42
|
+
/** `kept` feeds the index; `hidden` is what only a user pattern excluded (a default pattern wins, so tests and generated files are never reported). */
|
|
43
|
+
partitionSourceFiles(opts) {
|
|
44
|
+
const kept = [];
|
|
45
|
+
const hidden = [];
|
|
23
46
|
for (const relative of new Bun.Glob('**/*.ts').scanSync({ cwd: opts.root })) {
|
|
24
|
-
if (relative.endsWith('.d.ts') ||
|
|
47
|
+
if (relative.endsWith('.d.ts') || opts.defaultGlobs.some(glob => glob.match(relative))) {
|
|
25
48
|
continue;
|
|
26
49
|
}
|
|
27
|
-
|
|
50
|
+
const target = opts.userGlobs.some(glob => glob.match(relative)) ? hidden : kept;
|
|
51
|
+
target.push(join(opts.root, relative));
|
|
28
52
|
}
|
|
29
|
-
return
|
|
53
|
+
return { kept: kept.sort(), hidden: hidden.sort() };
|
|
30
54
|
}
|
|
31
55
|
scanFile(opts) {
|
|
32
|
-
const { filePath } = opts;
|
|
56
|
+
const { filePath, isHidden = false } = opts;
|
|
33
57
|
const source = ts.createSourceFile(filePath, readFileSync(filePath, 'utf8'), ts.ScriptTarget.Latest, true);
|
|
34
58
|
const stereotypeByLocalName = this.collectStereotypeImports({ source });
|
|
35
59
|
if (stereotypeByLocalName.size === 0) {
|
|
@@ -62,9 +86,11 @@ export class ArtifactScanner extends BaseHelper {
|
|
|
62
86
|
exportedNames.has(className);
|
|
63
87
|
const isAbstract = has(ts.SyntaxKind.AbstractKeyword);
|
|
64
88
|
if (!isNamedExport || isAbstract) {
|
|
65
|
-
|
|
66
|
-
.
|
|
67
|
-
|
|
89
|
+
if (!isHidden) {
|
|
90
|
+
this.logger
|
|
91
|
+
.for('scanFile')
|
|
92
|
+
.warn('Skipped %s in %s | %s', className, filePath, isAbstract ? 'abstract' : 'not a named export');
|
|
93
|
+
}
|
|
68
94
|
return;
|
|
69
95
|
}
|
|
70
96
|
found.push({ className, filePath, type: types[0] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,aAAa,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-boot",
|
|
3
|
-
"version": "0.2.0-
|
|
3
|
+
"version": "0.2.0-15",
|
|
4
4
|
"description": "Build-time artifact index generator for IGNIS applications: scans decorated classes with the TypeScript AST and emits one static registration file per package, so bun build --compile sees plain imports.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"artifact-index",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"test:watch": "NODE_ENV=test bun test --watch --env-file=.env.test"
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"@venizia/ignis-helpers": "^0.2.0-
|
|
81
|
+
"@venizia/ignis-helpers": "^0.2.0-15"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@types/bun": "^1.4.1",
|