@venizia/ignis-boot 0.2.1-0 → 0.2.1-10
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/README.md +1 -1
- package/dist/cjs/bun/auto-group.d.ts +22 -0
- package/dist/cjs/bun/auto-group.d.ts.map +1 -0
- package/dist/cjs/bun/auto-group.js +51 -0
- package/dist/cjs/bun/auto-group.js.map +1 -0
- package/dist/cjs/bun/auto-loader.d.ts +13 -0
- package/dist/cjs/bun/auto-loader.d.ts.map +1 -0
- package/dist/cjs/bun/auto-loader.js +63 -0
- package/dist/cjs/bun/auto-loader.js.map +1 -0
- package/dist/cjs/bun/auto.d.ts +5 -0
- package/dist/cjs/bun/auto.d.ts.map +1 -0
- package/dist/cjs/bun/auto.js +11 -0
- package/dist/cjs/bun/auto.js.map +1 -0
- package/dist/cjs/bun/group-resolver.d.ts +16 -0
- package/dist/cjs/bun/group-resolver.d.ts.map +1 -0
- package/dist/cjs/bun/group-resolver.js +44 -0
- package/dist/cjs/bun/group-resolver.js.map +1 -0
- package/dist/cjs/bun/index.d.ts +7 -0
- package/dist/cjs/bun/index.d.ts.map +1 -0
- package/dist/cjs/bun/index.js +23 -0
- package/dist/cjs/bun/index.js.map +1 -0
- package/dist/cjs/bun/plugin.d.ts +44 -0
- package/dist/cjs/bun/plugin.d.ts.map +1 -0
- package/dist/cjs/bun/plugin.js +299 -0
- package/dist/cjs/bun/plugin.js.map +1 -0
- package/dist/cjs/bun/scan-cache.d.ts +22 -0
- package/dist/cjs/bun/scan-cache.d.ts.map +1 -0
- package/dist/cjs/bun/scan-cache.js +89 -0
- package/dist/cjs/bun/scan-cache.js.map +1 -0
- package/dist/cjs/bun/sources.d.ts +49 -0
- package/dist/cjs/bun/sources.d.ts.map +1 -0
- package/dist/cjs/bun/sources.js +115 -0
- package/dist/cjs/bun/sources.js.map +1 -0
- package/dist/cjs/clis/artifacts.js +4 -2
- package/dist/cjs/clis/artifacts.js.map +1 -1
- package/dist/cjs/generator/common/constants.d.ts +13 -0
- package/dist/cjs/generator/common/constants.d.ts.map +1 -1
- package/dist/cjs/generator/common/constants.js +19 -4
- package/dist/cjs/generator/common/constants.js.map +1 -1
- package/dist/cjs/generator/common/types.d.ts +16 -1
- package/dist/cjs/generator/common/types.d.ts.map +1 -1
- package/dist/cjs/generator/emitter.d.ts +12 -0
- package/dist/cjs/generator/emitter.d.ts.map +1 -1
- package/dist/cjs/generator/emitter.js +23 -6
- package/dist/cjs/generator/emitter.js.map +1 -1
- package/dist/cjs/generator/index.d.ts +2 -0
- package/dist/cjs/generator/index.d.ts.map +1 -1
- package/dist/cjs/generator/index.js +12 -6
- package/dist/cjs/generator/index.js.map +1 -1
- package/dist/cjs/generator/reexport.d.ts +28 -0
- package/dist/cjs/generator/reexport.d.ts.map +1 -0
- package/dist/cjs/generator/reexport.js +131 -0
- package/dist/cjs/generator/reexport.js.map +1 -0
- package/dist/cjs/generator/scanner.d.ts +3 -1
- package/dist/cjs/generator/scanner.d.ts.map +1 -1
- package/dist/cjs/generator/scanner.js +72 -17
- package/dist/cjs/generator/scanner.js.map +1 -1
- package/dist/cjs/vite/index.d.ts +2 -0
- package/dist/cjs/vite/index.d.ts.map +1 -0
- package/dist/cjs/vite/index.js +18 -0
- package/dist/cjs/vite/index.js.map +1 -0
- package/dist/cjs/vite/plugin.d.ts +33 -0
- package/dist/cjs/vite/plugin.d.ts.map +1 -0
- package/dist/cjs/vite/plugin.js +51 -0
- package/dist/cjs/vite/plugin.js.map +1 -0
- package/dist/esm/bun/auto-group.d.ts +22 -0
- package/dist/esm/bun/auto-group.d.ts.map +1 -0
- package/dist/esm/bun/auto-group.js +47 -0
- package/dist/esm/bun/auto-group.js.map +1 -0
- package/dist/esm/bun/auto-loader.d.ts +13 -0
- package/dist/esm/bun/auto-loader.d.ts.map +1 -0
- package/dist/esm/bun/auto-loader.js +59 -0
- package/dist/esm/bun/auto-loader.js.map +1 -0
- package/dist/esm/bun/auto.d.ts +5 -0
- package/dist/esm/bun/auto.d.ts.map +1 -0
- package/dist/esm/bun/auto.js +9 -0
- package/dist/esm/bun/auto.js.map +1 -0
- package/dist/esm/bun/group-resolver.d.ts +16 -0
- package/dist/esm/bun/group-resolver.d.ts.map +1 -0
- package/dist/esm/bun/group-resolver.js +40 -0
- package/dist/esm/bun/group-resolver.js.map +1 -0
- package/dist/esm/bun/index.d.ts +7 -0
- package/dist/esm/bun/index.d.ts.map +1 -0
- package/dist/esm/bun/index.js +7 -0
- package/dist/esm/bun/index.js.map +1 -0
- package/dist/esm/bun/plugin.d.ts +44 -0
- package/dist/esm/bun/plugin.d.ts.map +1 -0
- package/dist/esm/bun/plugin.js +292 -0
- package/dist/esm/bun/plugin.js.map +1 -0
- package/dist/esm/bun/scan-cache.d.ts +22 -0
- package/dist/esm/bun/scan-cache.d.ts.map +1 -0
- package/dist/esm/bun/scan-cache.js +85 -0
- package/dist/esm/bun/scan-cache.js.map +1 -0
- package/dist/esm/bun/sources.d.ts +49 -0
- package/dist/esm/bun/sources.d.ts.map +1 -0
- package/dist/esm/bun/sources.js +111 -0
- package/dist/esm/bun/sources.js.map +1 -0
- package/dist/esm/clis/artifacts.js +5 -3
- package/dist/esm/clis/artifacts.js.map +1 -1
- package/dist/esm/generator/common/constants.d.ts +13 -0
- package/dist/esm/generator/common/constants.d.ts.map +1 -1
- package/dist/esm/generator/common/constants.js +17 -3
- package/dist/esm/generator/common/constants.js.map +1 -1
- package/dist/esm/generator/common/types.d.ts +16 -1
- package/dist/esm/generator/common/types.d.ts.map +1 -1
- package/dist/esm/generator/emitter.d.ts +12 -0
- package/dist/esm/generator/emitter.d.ts.map +1 -1
- package/dist/esm/generator/emitter.js +23 -6
- package/dist/esm/generator/emitter.js.map +1 -1
- package/dist/esm/generator/index.d.ts +2 -0
- package/dist/esm/generator/index.d.ts.map +1 -1
- package/dist/esm/generator/index.js +12 -6
- package/dist/esm/generator/index.js.map +1 -1
- package/dist/esm/generator/reexport.d.ts +28 -0
- package/dist/esm/generator/reexport.d.ts.map +1 -0
- package/dist/esm/generator/reexport.js +124 -0
- package/dist/esm/generator/reexport.js.map +1 -0
- package/dist/esm/generator/scanner.d.ts +3 -1
- package/dist/esm/generator/scanner.d.ts.map +1 -1
- package/dist/esm/generator/scanner.js +75 -20
- package/dist/esm/generator/scanner.js.map +1 -1
- package/dist/esm/package.json +3 -1
- package/dist/esm/vite/index.d.ts +2 -0
- package/dist/esm/vite/index.d.ts.map +1 -0
- package/dist/esm/vite/index.js +2 -0
- package/dist/esm/vite/index.js.map +1 -0
- package/dist/esm/vite/plugin.d.ts +33 -0
- package/dist/esm/vite/plugin.d.ts.map +1 -0
- package/dist/esm/vite/plugin.js +47 -0
- package/dist/esm/vite/plugin.js.map +1 -0
- package/package.json +26 -4
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { getError } from '@venizia/ignis-helpers';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { dirname, join, matchesGlob, relative, resolve, sep } from 'node:path';
|
|
4
|
+
import { ArtifactStereotypes } from '../generator/common/index.js';
|
|
5
|
+
import { ArtifactScanCache } from './scan-cache.js';
|
|
6
|
+
/** Where a package's artifacts live: the `src` beside its nearest `package.json`, and the classes under one of its directories. One scan per package per process, served from `ArtifactScanCache` when no source file changed - so this module never loads the scanner (and TypeScript) itself. */
|
|
7
|
+
export class ArtifactSources {
|
|
8
|
+
static { this.scans = new Map(); }
|
|
9
|
+
/** Called by the modules that already hold the scanner (the build plugin). */
|
|
10
|
+
static useScanner(opts) {
|
|
11
|
+
ArtifactSources.scanner = opts.scanner;
|
|
12
|
+
}
|
|
13
|
+
/** Loads the scanner - only on a cache miss. A non-static specifier, so a bundle never pulls TypeScript in. */
|
|
14
|
+
static async loadScanner() {
|
|
15
|
+
if (ArtifactSources.scanner) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const generatorModule = '../generator';
|
|
19
|
+
const { ArtifactScanner } = await import(generatorModule);
|
|
20
|
+
ArtifactSources.scanner = ArtifactScanner.getInstance();
|
|
21
|
+
}
|
|
22
|
+
/** Whether `packageSource` can be listed without the scanner: scanned in this process, or a valid disk cache. */
|
|
23
|
+
static isCached(opts) {
|
|
24
|
+
if (ArtifactSources.scans.has(opts.packageSource)) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
const cached = ArtifactScanCache.read({ root: opts.packageSource });
|
|
28
|
+
if (cached) {
|
|
29
|
+
ArtifactSources.scans.set(opts.packageSource, cached);
|
|
30
|
+
}
|
|
31
|
+
return cached !== undefined;
|
|
32
|
+
}
|
|
33
|
+
/** Every decorated class under `packageSource`: this process's scan, else the disk cache, else the scanner (which must be loaded), written back to the cache. */
|
|
34
|
+
static scan(opts) {
|
|
35
|
+
const { packageSource } = opts;
|
|
36
|
+
if (ArtifactSources.isCached({ packageSource })) {
|
|
37
|
+
return ArtifactSources.scans.get(packageSource) ?? [];
|
|
38
|
+
}
|
|
39
|
+
if (!ArtifactSources.scanner) {
|
|
40
|
+
throw getError({
|
|
41
|
+
message: `[ArtifactSources] ${packageSource} is not cached and the scanner is not loaded | Call ArtifactSources.loadScanner() first`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const { artifacts } = ArtifactSources.scanner.scanWithReport({
|
|
45
|
+
root: packageSource,
|
|
46
|
+
followReexports: true,
|
|
47
|
+
});
|
|
48
|
+
ArtifactSources.scans.set(packageSource, artifacts);
|
|
49
|
+
ArtifactScanCache.write({ root: packageSource, artifacts });
|
|
50
|
+
return artifacts;
|
|
51
|
+
}
|
|
52
|
+
/** The entry module (`Bun.main`), or `undefined` when there is no entry file (`bun -e`, a REPL). */
|
|
53
|
+
static entry() {
|
|
54
|
+
return typeof Bun !== 'undefined' && existsSync(Bun.main) ? Bun.main : undefined;
|
|
55
|
+
}
|
|
56
|
+
/** The `src` beside the nearest `package.json` at or above `from` (default: the working directory). */
|
|
57
|
+
static packageSource(opts = {}) {
|
|
58
|
+
const start = resolve(opts.from ?? process.cwd());
|
|
59
|
+
let directory = start;
|
|
60
|
+
while (!existsSync(join(directory, 'package.json'))) {
|
|
61
|
+
const parent = dirname(directory);
|
|
62
|
+
if (parent === directory) {
|
|
63
|
+
return join(start, 'src');
|
|
64
|
+
}
|
|
65
|
+
directory = parent;
|
|
66
|
+
}
|
|
67
|
+
return join(directory, 'src');
|
|
68
|
+
}
|
|
69
|
+
/** The decorated classes under a directory named `folder` in the package whose source holds `site`, less those under an `ignore` glob (relative to `src`), each pointing at the copy that runs beside `site` (see `runningArtifacts`). */
|
|
70
|
+
static folderArtifacts(opts) {
|
|
71
|
+
const packageSource = ArtifactSources.packageSource({ from: dirname(opts.site) });
|
|
72
|
+
const artifacts = ArtifactSources.scan({ packageSource });
|
|
73
|
+
const { folder } = opts;
|
|
74
|
+
const ignored = opts.ignore ?? [];
|
|
75
|
+
const picked = artifacts.filter(artifact => {
|
|
76
|
+
const path = relative(packageSource, artifact.filePath);
|
|
77
|
+
return ((folder === undefined || path.split(sep).slice(0, -1).includes(folder)) &&
|
|
78
|
+
!ignored.some(pattern => matchesGlob(path, pattern)));
|
|
79
|
+
});
|
|
80
|
+
return ArtifactSources.runningArtifacts({ artifacts: picked, from: opts.site });
|
|
81
|
+
}
|
|
82
|
+
/** The scanned classes as the code at `from` runs them: unchanged when `from` is in `src`; otherwise each `src/<path>.ts` becomes `<tree>/<path>.js` in the compiled tree `from` sits in (`dist`, `dist/esm`), so an application registers the very class its code uses, never a second copy loaded from `src`. */
|
|
83
|
+
static runningArtifacts(opts) {
|
|
84
|
+
const from = resolve(opts.from);
|
|
85
|
+
const packageSource = ArtifactSources.packageSource({ from: dirname(from) });
|
|
86
|
+
const [probe] = opts.artifacts;
|
|
87
|
+
if (!probe || from.startsWith(`${packageSource}${sep}`)) {
|
|
88
|
+
return opts.artifacts;
|
|
89
|
+
}
|
|
90
|
+
const packageRoot = dirname(packageSource);
|
|
91
|
+
const compiledPath = (target) => join(target.tree, relative(packageSource, target.artifact.filePath).replace(ArtifactStereotypes.SOURCE_EXTENSION, '.js'));
|
|
92
|
+
const segments = relative(packageRoot, dirname(from)).split(sep);
|
|
93
|
+
const tree = segments
|
|
94
|
+
.map((_segment, index) => join(packageRoot, ...segments.slice(0, index + 1)))
|
|
95
|
+
.find(candidate => existsSync(compiledPath({ tree: candidate, artifact: probe })));
|
|
96
|
+
return opts.artifacts.map(artifact => {
|
|
97
|
+
const compiled = tree ? compiledPath({ tree, artifact }) : undefined;
|
|
98
|
+
if (!compiled || !existsSync(compiled)) {
|
|
99
|
+
throw getError({
|
|
100
|
+
message: `[ArtifactSources] ${artifact.filePath} has no compiled copy beside ${from} | The package runs from a compiled tree that is older than its src - rebuild it (or run it from src)`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return { ...artifact, filePath: compiled };
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/** Forgets every cached scan - for a long-lived process that rebuilds (a watch mode). */
|
|
107
|
+
static clear() {
|
|
108
|
+
ArtifactSources.scans.clear();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/bun/sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import '../common/install-quiet-logger.js';
|
|
3
3
|
import { relative } from 'node:path';
|
|
4
4
|
import { parseArgs } from 'node:util';
|
|
5
|
-
import { checkArtifactIndex, generateArtifactIndex } from '../generator/index.js';
|
|
6
|
-
const USAGE = 'ignis-artifacts <generate|check> [--root src] [--out src/generated/artifacts.ts] [--ignore a,b] [--export GeneratedArtifacts]';
|
|
5
|
+
import { ArtifactIndexEmitter, checkArtifactIndex, generateArtifactIndex } from '../generator/index.js';
|
|
6
|
+
const USAGE = 'ignis-artifacts <generate|check> [--root src] [--out src/generated/artifacts.ts] [--ignore a,b] [--export GeneratedArtifacts] [--source-module <specifier>]...';
|
|
7
7
|
const { positionals, values } = parseArgs({
|
|
8
8
|
args: process.argv.slice(2),
|
|
9
9
|
allowPositionals: true,
|
|
@@ -12,6 +12,7 @@ const { positionals, values } = parseArgs({
|
|
|
12
12
|
out: { type: 'string', default: 'src/generated/artifacts.ts' },
|
|
13
13
|
ignore: { type: 'string' },
|
|
14
14
|
export: { type: 'string', default: 'GeneratedArtifacts' },
|
|
15
|
+
'source-module': { type: 'string', multiple: true },
|
|
15
16
|
},
|
|
16
17
|
});
|
|
17
18
|
const options = {
|
|
@@ -22,6 +23,7 @@ const options = {
|
|
|
22
23
|
.map(pattern => pattern.trim())
|
|
23
24
|
.filter(Boolean),
|
|
24
25
|
exportName: values.export,
|
|
26
|
+
sourceModules: values['source-module'],
|
|
25
27
|
};
|
|
26
28
|
/** One stderr line per decorated class a user `--ignore` pattern hid; silence when nothing is hidden. */
|
|
27
29
|
const warnIgnored = (opts) => {
|
|
@@ -45,7 +47,7 @@ const run = () => {
|
|
|
45
47
|
console.log(`fresh ${options.out}`);
|
|
46
48
|
return 0;
|
|
47
49
|
}
|
|
48
|
-
console.error(`stale ${options.out} - run:
|
|
50
|
+
console.error(`stale ${options.out} - run: ${ArtifactIndexEmitter.renderCommand(options)}`);
|
|
49
51
|
return 1;
|
|
50
52
|
}
|
|
51
53
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/clis/artifacts.ts"],"names":[],"mappings":";AACA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/clis/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,10 @@ export declare class ArtifactIndexFields {
|
|
|
25
25
|
}
|
|
26
26
|
export type TArtifactIndexField = TConstValue<typeof ArtifactIndexFields>;
|
|
27
27
|
export declare class ArtifactStereotypes {
|
|
28
|
+
/** The source files the scanner reads: TypeScript, with or without JSX. */
|
|
29
|
+
static readonly SOURCE_GLOB = "**/*.{ts,tsx}";
|
|
30
|
+
/** The extension of a source file - stripped for an import specifier, replaced by `.js` for its compiled copy. */
|
|
31
|
+
static readonly SOURCE_EXTENSION: RegExp;
|
|
28
32
|
/** Decorator name as imported from `@venizia/ignis` or `@venizia/ignis-kernel` -> artifact type. */
|
|
29
33
|
static readonly BY_DECORATOR: Readonly<Record<string, TArtifactType>>;
|
|
30
34
|
static readonly ROOT_DECORATOR = "injectable";
|
|
@@ -43,4 +47,13 @@ export declare class ArtifactStereotypes {
|
|
|
43
47
|
field: TArtifactIndexField;
|
|
44
48
|
}>;
|
|
45
49
|
}
|
|
50
|
+
/** Why a decorated class was left out of the index - reported, never silent. */
|
|
51
|
+
export declare class ScanSkipReasons {
|
|
52
|
+
static readonly ABSTRACT = "abstract";
|
|
53
|
+
static readonly NOT_EXPORTED = "not-exported";
|
|
54
|
+
static readonly IGNORED = "ignored";
|
|
55
|
+
static readonly SCHEME_SET: Set<string>;
|
|
56
|
+
static isValid(value: string): boolean;
|
|
57
|
+
}
|
|
58
|
+
export type TScanSkipReason = TConstValue<typeof ScanSkipReasons>;
|
|
46
59
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,iIAAiI;AACjI,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,aAAa,mBAAmB;IAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAEhC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAQvB;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,aAAa,CAAC,CAAC;AAE9D,4HAA4H;AAC5H,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAiB;IAE5C,MAAM,CAAC,QAAQ,CAAC,UAAU,cAOvB;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE1E,qBAAa,mBAAmB;IAC9B,oGAAoG;IACpG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAQnE;IAEF,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAAgB;IAE9C,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoE;IAE9F,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAItC,MAAM,CAAC,QAAQ,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,iIAAiI;AACjI,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,aAAa,mBAAmB;IAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAEhC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAQvB;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,aAAa,CAAC,CAAC;AAE9D,4HAA4H;AAC5H,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC1C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAiB;IAE5C,MAAM,CAAC,QAAQ,CAAC,UAAU,cAOvB;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE1E,qBAAa,mBAAmB;IAC9B,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,CAAC,WAAW,mBAAmB;IAC9C,kHAAkH;IAClH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,SAAa;IAC7C,oGAAoG;IACpG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAQnE;IAEF,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAAgB;IAE9C,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoE;IAE9F,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAItC,MAAM,CAAC,QAAQ,CAAC,cAAc,SAA4C;IAE1E,MAAM,CAAC,QAAQ,CAAC,cAAc,WAK5B;IAEF;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,CAAC,CAO5F;CACH;AAED,gFAAgF;AAChF,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IAEpC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAqE;IAE/F,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -41,6 +41,10 @@ export class ArtifactIndexFields {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
export class ArtifactStereotypes {
|
|
44
|
+
/** The source files the scanner reads: TypeScript, with or without JSX. */
|
|
45
|
+
static { this.SOURCE_GLOB = '**/*.{ts,tsx}'; }
|
|
46
|
+
/** The extension of a source file - stripped for an import specifier, replaced by `.js` for its compiled copy. */
|
|
47
|
+
static { this.SOURCE_EXTENSION = /\.tsx?$/; }
|
|
44
48
|
/** Decorator name as imported from `@venizia/ignis` or `@venizia/ignis-kernel` -> artifact type. */
|
|
45
49
|
static { this.BY_DECORATOR = {
|
|
46
50
|
configuration: ArtifactTypes.CONFIGURATION,
|
|
@@ -56,11 +60,11 @@ export class ArtifactStereotypes {
|
|
|
56
60
|
static isValid(value) {
|
|
57
61
|
return this.SCHEME_SET.has(value);
|
|
58
62
|
}
|
|
59
|
-
static { this.SOURCE_MODULES = /^@venizia\/ignis(
|
|
63
|
+
static { this.SOURCE_MODULES = /^@venizia\/ignis(?:-kernel)?(?:\/.+)?$/; }
|
|
60
64
|
static { this.DEFAULT_IGNORE = [
|
|
61
65
|
'**/__tests__/**',
|
|
62
|
-
'**/*.test.ts',
|
|
63
|
-
'**/*.spec.ts',
|
|
66
|
+
'**/*.test.{ts,tsx}',
|
|
67
|
+
'**/*.spec.{ts,tsx}',
|
|
64
68
|
'**/generated/**',
|
|
65
69
|
]; }
|
|
66
70
|
/**
|
|
@@ -78,4 +82,14 @@ export class ArtifactStereotypes {
|
|
|
78
82
|
{ type: ArtifactTypes.CONTROLLER, field: ArtifactIndexFields.CONTROLLERS },
|
|
79
83
|
]; }
|
|
80
84
|
}
|
|
85
|
+
/** Why a decorated class was left out of the index - reported, never silent. */
|
|
86
|
+
export class ScanSkipReasons {
|
|
87
|
+
static { this.ABSTRACT = 'abstract'; }
|
|
88
|
+
static { this.NOT_EXPORTED = 'not-exported'; }
|
|
89
|
+
static { this.IGNORED = 'ignored'; }
|
|
90
|
+
static { this.SCHEME_SET = new Set([this.ABSTRACT, this.NOT_EXPORTED, this.IGNORED]); }
|
|
91
|
+
static isValid(value) {
|
|
92
|
+
return this.SCHEME_SET.has(value);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
81
95
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/generator/common/constants.ts"],"names":[],"mappings":"AAEA,iIAAiI;AACjI,MAAM,OAAO,aAAa;aACR,kBAAa,GAAG,eAAe,CAAC;aAChC,cAAS,GAAG,WAAW,CAAC;aACxB,eAAU,GAAG,YAAY,CAAC;aAC1B,YAAO,GAAG,SAAS,CAAC;aACpB,eAAU,GAAG,YAAY,CAAC;aAC1B,eAAU,GAAG,YAAY,CAAC;aAC1B,UAAK,GAAG,OAAO,CAAC;aAEhB,eAAU,GAAG,IAAI,GAAG,CAAS;QAC3C,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,KAAK;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAKH,4HAA4H;AAC5H,MAAM,OAAO,mBAAmB;aACd,mBAAc,GAAG,gBAAgB,CAAC;aAClC,iBAAY,GAAG,aAAa,CAAC;aAC7B,eAAU,GAAG,YAAY,CAAC;aAC1B,iBAAY,GAAG,cAAc,CAAC;aAC9B,aAAQ,GAAG,UAAU,CAAC;aACtB,gBAAW,GAAG,aAAa,CAAC;aAE5B,eAAU,GAAG,IAAI,GAAG,CAAS;QAC3C,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,WAAW;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAKH,MAAM,OAAO,mBAAmB;IAC9B,oGAAoG;aACpF,iBAAY,GAA4C;QACtE,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,KAAK,EAAE,aAAa,CAAC,KAAK;KAC3B,CAAC;aAEc,mBAAc,GAAG,YAAY,CAAC;aAE9B,eAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9F,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;aAEe,mBAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/generator/common/constants.ts"],"names":[],"mappings":"AAEA,iIAAiI;AACjI,MAAM,OAAO,aAAa;aACR,kBAAa,GAAG,eAAe,CAAC;aAChC,cAAS,GAAG,WAAW,CAAC;aACxB,eAAU,GAAG,YAAY,CAAC;aAC1B,YAAO,GAAG,SAAS,CAAC;aACpB,eAAU,GAAG,YAAY,CAAC;aAC1B,eAAU,GAAG,YAAY,CAAC;aAC1B,UAAK,GAAG,OAAO,CAAC;aAEhB,eAAU,GAAG,IAAI,GAAG,CAAS;QAC3C,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,KAAK;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAKH,4HAA4H;AAC5H,MAAM,OAAO,mBAAmB;aACd,mBAAc,GAAG,gBAAgB,CAAC;aAClC,iBAAY,GAAG,aAAa,CAAC;aAC7B,eAAU,GAAG,YAAY,CAAC;aAC1B,iBAAY,GAAG,cAAc,CAAC;aAC9B,aAAQ,GAAG,UAAU,CAAC;aACtB,gBAAW,GAAG,aAAa,CAAC;aAE5B,eAAU,GAAG,IAAI,GAAG,CAAS;QAC3C,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,WAAW;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAKH,MAAM,OAAO,mBAAmB;IAC9B,2EAA2E;aAC3D,gBAAW,GAAG,eAAe,CAAC;IAC9C,kHAAkH;aAClG,qBAAgB,GAAG,SAAS,CAAC;IAC7C,oGAAoG;aACpF,iBAAY,GAA4C;QACtE,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,KAAK,EAAE,aAAa,CAAC,KAAK;KAC3B,CAAC;aAEc,mBAAc,GAAG,YAAY,CAAC;aAE9B,eAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9F,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;aAEe,mBAAc,GAAG,wCAAwC,CAAC;aAE1D,mBAAc,GAAG;QAC/B,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,iBAAiB;KAClB,CAAC;IAEF;;;;;OAKG;aACa,eAAU,GAAuE;QAC/F,EAAE,IAAI,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,mBAAmB,CAAC,cAAc,EAAE;QAChF,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,CAAC,YAAY,EAAE;QAC3E,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,UAAU,EAAE;QACxE,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,CAAC,YAAY,EAAE;QAC3E,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QACpE,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE;KAC3E,CAAC;;AAGJ,gFAAgF;AAChF,MAAM,OAAO,eAAe;aACV,aAAQ,GAAG,UAAU,CAAC;aACtB,iBAAY,GAAG,cAAc,CAAC;aAC9B,YAAO,GAAG,SAAS,CAAC;aAEpB,eAAU,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AnyType, TClass } from '@venizia/ignis-helpers';
|
|
2
|
+
import type { TArtifactIndexField, TArtifactType, TScanSkipReason } from './constants.js';
|
|
2
3
|
export interface IScannedArtifact {
|
|
3
4
|
className: string;
|
|
4
5
|
/** Absolute path of the declaring file. */
|
|
@@ -9,10 +10,24 @@ export interface IScanOptions {
|
|
|
9
10
|
root: string;
|
|
10
11
|
/** Glob patterns relative to `root`; defaults to `ArtifactStereotypes.DEFAULT_IGNORE`. */
|
|
11
12
|
ignore?: string[];
|
|
13
|
+
/** Module specifiers, matched exactly, whose stereotype imports also count - a package that re-exports the decorators. Adds to `ArtifactStereotypes.SOURCE_MODULES`. */
|
|
14
|
+
sourceModules?: string[];
|
|
15
|
+
/** Recognise a stereotype imported from any module whose exports lead, through `export *` and renaming re-exports, to a source module - a framework that re-exports the kernel's decorators. */
|
|
16
|
+
followReexports?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** A decorated class the index leaves out, and why. */
|
|
19
|
+
export interface IScanSkipped {
|
|
20
|
+
className: string;
|
|
21
|
+
filePath: string;
|
|
22
|
+
reason: TScanSkipReason;
|
|
12
23
|
}
|
|
13
24
|
/** The index content plus what a caller's `ignore` silently left out: decorated classes under a user pattern, never under a default one. */
|
|
14
25
|
export interface IScanReport {
|
|
15
26
|
artifacts: IScannedArtifact[];
|
|
16
27
|
ignored: IScannedArtifact[];
|
|
28
|
+
/** Every decorated class left out - abstract, not a named export, or under a user ignore pattern. */
|
|
29
|
+
skipped: IScanSkipped[];
|
|
17
30
|
}
|
|
31
|
+
/** The object a generated index exports - structurally the kernel's `IArtifactIndex` (boot does not depend on the kernel). */
|
|
32
|
+
export type TGeneratedArtifactIndex = Partial<Record<TArtifactIndexField, ReadonlyArray<TClass<AnyType>>>>;
|
|
18
33
|
//# 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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/generator/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvF,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;IAClB,wKAAwK;IACxK,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gMAAgM;IAChM,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,4IAA4I;AAC5I,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,qGAAqG;IACrG,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,8HAA8H;AAC9H,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAC3C,MAAM,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAC5D,CAAC"}
|
|
@@ -4,22 +4,34 @@ export declare class ArtifactIndexEmitter {
|
|
|
4
4
|
/** Mirrors `printWidth` in @venizia/dev-configs prettier settings. */
|
|
5
5
|
static readonly PRINT_WIDTH = 100;
|
|
6
6
|
static readonly DEFAULT_EXPORT_NAME = "GeneratedArtifacts";
|
|
7
|
+
/** The `ignis-artifacts generate` command for these options - the header and the CLI's stale hint print the same one. */
|
|
8
|
+
static renderCommand(opts: {
|
|
9
|
+
root: string;
|
|
10
|
+
out: string;
|
|
11
|
+
ignore?: string[];
|
|
12
|
+
exportName?: string;
|
|
13
|
+
sourceModules?: string[];
|
|
14
|
+
}): string;
|
|
7
15
|
/** The exact command that regenerates the file, so the header never points at another path than the one the build used. */
|
|
8
16
|
static renderHeader(opts: {
|
|
9
17
|
root: string;
|
|
10
18
|
out: string;
|
|
11
19
|
ignore?: string[];
|
|
12
20
|
exportName?: string;
|
|
21
|
+
sourceModules?: string[];
|
|
13
22
|
}): string;
|
|
14
23
|
static render(opts: {
|
|
15
24
|
artifacts: IScannedArtifact[];
|
|
16
25
|
outFile: string;
|
|
17
26
|
exportName: string;
|
|
27
|
+
/** Absolute import paths - for a virtual module, which has no directory to resolve a relative one from. */
|
|
28
|
+
absoluteImports?: boolean;
|
|
18
29
|
/** The CLI arguments as given, for the header; `outFile` above is the resolved path used for import specifiers. */
|
|
19
30
|
command: {
|
|
20
31
|
root: string;
|
|
21
32
|
out: string;
|
|
22
33
|
ignore?: string[];
|
|
34
|
+
sourceModules?: string[];
|
|
23
35
|
};
|
|
24
36
|
}): string;
|
|
25
37
|
/** One line while it fits the repo's prettier width, else one name per line - so `prettier -l` on the generated file stays quiet. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/generator/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErF,iKAAiK;AACjK,qBAAa,oBAAoB;IAC/B,sEAAsE;IACtE,MAAM,CAAC,QAAQ,CAAC,WAAW,OAAO;IAElC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,wBAAwB;IAE3D,2HAA2H;IAC3H,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/generator/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErF,iKAAiK;AACjK,qBAAa,oBAAoB;IAC/B,sEAAsE;IACtE,MAAM,CAAC,QAAQ,CAAC,WAAW,OAAO;IAElC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,wBAAwB;IAE3D,yHAAyH;IACzH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,GAAG,MAAM;IAeV,2HAA2H;IAC3H,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,GAAG,MAAM;IAIV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,2GAA2G;QAC3G,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,mHAAmH;QACnH,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;KACrF,GAAG,MAAM;IAoCV,qIAAqI;IACrI,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B,OAAO,CAAC,MAAM,CAAC,UAAU;CAU1B"}
|
|
@@ -5,9 +5,9 @@ export class ArtifactIndexEmitter {
|
|
|
5
5
|
/** Mirrors `printWidth` in @venizia/dev-configs prettier settings. */
|
|
6
6
|
static { this.PRINT_WIDTH = 100; }
|
|
7
7
|
static { this.DEFAULT_EXPORT_NAME = 'GeneratedArtifacts'; }
|
|
8
|
-
/** The
|
|
9
|
-
static
|
|
10
|
-
const { root, out, ignore = [], exportName } = opts;
|
|
8
|
+
/** The `ignis-artifacts generate` command for these options - the header and the CLI's stale hint print the same one. */
|
|
9
|
+
static renderCommand(opts) {
|
|
10
|
+
const { root, out, ignore = [], exportName, sourceModules = [] } = opts;
|
|
11
11
|
const flags = [`--root ${root}`, `--out ${out}`];
|
|
12
12
|
if (ignore.length > 0) {
|
|
13
13
|
flags.push(`--ignore ${ignore.join(',')}`);
|
|
@@ -15,7 +15,14 @@ export class ArtifactIndexEmitter {
|
|
|
15
15
|
if (exportName && exportName !== ArtifactIndexEmitter.DEFAULT_EXPORT_NAME) {
|
|
16
16
|
flags.push(`--export ${exportName}`);
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
for (const sourceModule of sourceModules) {
|
|
19
|
+
flags.push(`--source-module ${sourceModule}`);
|
|
20
|
+
}
|
|
21
|
+
return `ignis-artifacts generate ${flags.join(' ')}`;
|
|
22
|
+
}
|
|
23
|
+
/** The exact command that regenerates the file, so the header never points at another path than the one the build used. */
|
|
24
|
+
static renderHeader(opts) {
|
|
25
|
+
return `// AUTO-GENERATED by @venizia/ignis-boot - do not edit. Regenerate: ${ArtifactIndexEmitter.renderCommand(opts)}`;
|
|
19
26
|
}
|
|
20
27
|
static render(opts) {
|
|
21
28
|
const { artifacts, outFile, exportName, command } = opts;
|
|
@@ -23,7 +30,11 @@ export class ArtifactIndexEmitter {
|
|
|
23
30
|
const imports = emitted
|
|
24
31
|
.map(artifact => ({
|
|
25
32
|
name: artifact.className,
|
|
26
|
-
path: ArtifactIndexEmitter.importPath({
|
|
33
|
+
path: ArtifactIndexEmitter.importPath({
|
|
34
|
+
from: outFile,
|
|
35
|
+
to: artifact.filePath,
|
|
36
|
+
isAbsolute: opts.absoluteImports ?? false,
|
|
37
|
+
}),
|
|
27
38
|
}))
|
|
28
39
|
.sort((a, b) => a.path.localeCompare(b.path) || a.name.localeCompare(b.name))
|
|
29
40
|
.map(entry => `import { ${entry.name} } from '${entry.path}';`);
|
|
@@ -54,7 +65,13 @@ export class ArtifactIndexEmitter {
|
|
|
54
65
|
return [` ${field}: [`, ...names.map(name => ` ${name},`), ' ],'];
|
|
55
66
|
}
|
|
56
67
|
static importPath(opts) {
|
|
57
|
-
|
|
68
|
+
if (opts.isAbsolute) {
|
|
69
|
+
return opts.to.split(sep).join('/').replace(ArtifactStereotypes.SOURCE_EXTENSION, '');
|
|
70
|
+
}
|
|
71
|
+
const raw = relative(dirname(opts.from), opts.to)
|
|
72
|
+
.split(sep)
|
|
73
|
+
.join('/')
|
|
74
|
+
.replace(ArtifactStereotypes.SOURCE_EXTENSION, '');
|
|
58
75
|
return raw.startsWith('.') ? raw : `./${raw}`;
|
|
59
76
|
}
|
|
60
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/generator/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAC;AAErF,iKAAiK;AACjK,MAAM,OAAO,oBAAoB;IAC/B,sEAAsE;aACtD,gBAAW,GAAG,GAAG,CAAC;aAElB,wBAAmB,GAAG,oBAAoB,CAAC;IAE3D,
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/generator/emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export interface IGenerateOptions {
|
|
|
5
5
|
ignore?: string[];
|
|
6
6
|
/** Name of the exported constant; default `GeneratedArtifacts`. */
|
|
7
7
|
exportName?: string;
|
|
8
|
+
/** Extra module specifiers whose stereotype imports count; see `IScanOptions.sourceModules`. */
|
|
9
|
+
sourceModules?: string[];
|
|
8
10
|
}
|
|
9
11
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
10
12
|
export declare const generateArtifactIndex: (opts: IGenerateOptions) => {
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;IACpB,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAuBD,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,29 +3,35 @@ import { dirname, resolve } from 'node:path';
|
|
|
3
3
|
import { ArtifactIndexEmitter } from './emitter.js';
|
|
4
4
|
import { ArtifactScanner } from './scanner.js';
|
|
5
5
|
const render = (opts) => {
|
|
6
|
-
const { artifacts, ignored } = ArtifactScanner.getInstance().scanWithReport({
|
|
6
|
+
const { artifacts, ignored, skipped } = ArtifactScanner.getInstance().scanWithReport({
|
|
7
7
|
root: opts.root,
|
|
8
8
|
ignore: opts.ignore,
|
|
9
|
+
sourceModules: opts.sourceModules,
|
|
9
10
|
});
|
|
10
11
|
const content = ArtifactIndexEmitter.render({
|
|
11
12
|
artifacts,
|
|
12
13
|
outFile: resolve(opts.out),
|
|
13
14
|
exportName: opts.exportName ?? ArtifactIndexEmitter.DEFAULT_EXPORT_NAME,
|
|
14
|
-
command: {
|
|
15
|
+
command: {
|
|
16
|
+
root: opts.root,
|
|
17
|
+
out: opts.out,
|
|
18
|
+
ignore: opts.ignore,
|
|
19
|
+
sourceModules: opts.sourceModules,
|
|
20
|
+
},
|
|
15
21
|
});
|
|
16
|
-
return { content, artifacts, ignored };
|
|
22
|
+
return { content, artifacts, ignored, skipped };
|
|
17
23
|
};
|
|
18
24
|
/** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
|
|
19
25
|
export const generateArtifactIndex = (opts) => {
|
|
20
|
-
const { content, artifacts, ignored } = render(opts);
|
|
26
|
+
const { content, artifacts, ignored, skipped } = render(opts);
|
|
21
27
|
const out = resolve(opts.out);
|
|
22
28
|
const current = existsSync(out) ? readFileSync(out, 'utf8') : undefined;
|
|
23
29
|
if (current === content) {
|
|
24
|
-
return { content, artifacts, ignored, written: false };
|
|
30
|
+
return { content, artifacts, ignored, skipped, written: false };
|
|
25
31
|
}
|
|
26
32
|
mkdirSync(dirname(out), { recursive: true });
|
|
27
33
|
writeFileSync(out, content);
|
|
28
|
-
return { content, artifacts, ignored, written: true };
|
|
34
|
+
return { content, artifacts, ignored, skipped, written: true };
|
|
29
35
|
};
|
|
30
36
|
/** Everything below the first line: the header only records the command, so a flag change alone must not read as drift. */
|
|
31
37
|
const bodyOf = (content) => content.slice(content.indexOf('\n') + 1);
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseHelper } from '@venizia/ignis-helpers';
|
|
2
|
+
/** Follows a named import through `export *` and renaming re-exports until it reaches a source module, so a framework that re-exports the kernel's decorators is recognised. Reads declarations only; never builds a type-checked program. */
|
|
3
|
+
export declare class StereotypeReexportResolver extends BaseHelper {
|
|
4
|
+
static readonly MAX_DEPTH = 10;
|
|
5
|
+
private readonly options;
|
|
6
|
+
private readonly sourceModules;
|
|
7
|
+
/** One scan reads the same barrels many times: resolutions, parsed files and answers are memoized per resolver. */
|
|
8
|
+
private readonly resolutions;
|
|
9
|
+
private readonly sources;
|
|
10
|
+
private readonly origins;
|
|
11
|
+
constructor(opts: {
|
|
12
|
+
root: string;
|
|
13
|
+
sourceModules: Set<string>;
|
|
14
|
+
});
|
|
15
|
+
/** The nearest tsconfig's options (for `paths` aliases), with bundler resolution as the fallback. */
|
|
16
|
+
private static compilerOptionsFor;
|
|
17
|
+
/** The kernel name `name` (exported by `specifier`, as seen from `fromFile`) originates as, or `undefined` when the chain never reaches a source module. */
|
|
18
|
+
originOf(opts: {
|
|
19
|
+
fromFile: string;
|
|
20
|
+
specifier: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}): string | undefined;
|
|
23
|
+
private resolveFile;
|
|
24
|
+
private parse;
|
|
25
|
+
private isSourceModule;
|
|
26
|
+
private follow;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=reexport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reexport.d.ts","sourceRoot":"","sources":["../../../src/generator/reexport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMpD,8OAA8O;AAC9O,qBAAa,0BAA2B,SAAQ,UAAU;IACxD,MAAM,CAAC,QAAQ,CAAC,SAAS,MAAM;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,mHAAmH;IACnH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAErD,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE;IAM9D,qGAAqG;IACrG,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAmBjC,4JAA4J;IAC5J,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,SAAS;IAQzF,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM;CA8Ef"}
|