@venizia/ignis-boot 0.2.0-3 → 0.2.0-30

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.
Files changed (245) hide show
  1. package/README.md +127 -151
  2. package/dist/cjs/build-info/common/constants.d.ts +20 -0
  3. package/dist/cjs/build-info/common/constants.d.ts.map +1 -0
  4. package/dist/cjs/build-info/common/constants.js +41 -0
  5. package/dist/cjs/build-info/common/constants.js.map +1 -0
  6. package/dist/{esm → cjs/build-info}/common/index.d.ts +1 -1
  7. package/dist/cjs/build-info/common/index.d.ts.map +1 -0
  8. package/dist/cjs/{common → build-info/common}/index.js +1 -1
  9. package/dist/cjs/build-info/common/index.js.map +1 -0
  10. package/dist/cjs/build-info/common/types.d.ts +16 -0
  11. package/dist/cjs/build-info/common/types.d.ts.map +1 -0
  12. package/dist/cjs/build-info/common/types.js +3 -0
  13. package/dist/cjs/build-info/common/types.js.map +1 -0
  14. package/dist/cjs/build-info/emitter.d.ts +12 -0
  15. package/dist/cjs/build-info/emitter.d.ts.map +1 -0
  16. package/dist/cjs/build-info/emitter.js +26 -0
  17. package/dist/cjs/build-info/emitter.js.map +1 -0
  18. package/dist/cjs/build-info/index.d.ts +10 -0
  19. package/dist/cjs/build-info/index.d.ts.map +1 -0
  20. package/dist/cjs/build-info/index.js +43 -0
  21. package/dist/cjs/build-info/index.js.map +1 -0
  22. package/dist/cjs/build-info/resolver.d.ts +25 -0
  23. package/dist/cjs/build-info/resolver.d.ts.map +1 -0
  24. package/dist/cjs/build-info/resolver.js +105 -0
  25. package/dist/cjs/build-info/resolver.js.map +1 -0
  26. package/dist/cjs/clis/artifacts.d.ts +3 -0
  27. package/dist/cjs/clis/artifacts.d.ts.map +1 -0
  28. package/dist/cjs/clis/artifacts.js +60 -0
  29. package/dist/cjs/clis/artifacts.js.map +1 -0
  30. package/dist/cjs/clis/build-info.d.ts +3 -0
  31. package/dist/cjs/clis/build-info.d.ts.map +1 -0
  32. package/dist/cjs/clis/build-info.js +48 -0
  33. package/dist/cjs/clis/build-info.js.map +1 -0
  34. package/dist/cjs/common/install-quiet-logger.d.ts +2 -0
  35. package/dist/cjs/common/install-quiet-logger.d.ts.map +1 -0
  36. package/dist/cjs/common/install-quiet-logger.js +7 -0
  37. package/dist/cjs/common/install-quiet-logger.js.map +1 -0
  38. package/dist/cjs/common/quiet-logger.d.ts +18 -0
  39. package/dist/cjs/common/quiet-logger.d.ts.map +1 -0
  40. package/dist/cjs/common/quiet-logger.js +46 -0
  41. package/dist/cjs/common/quiet-logger.js.map +1 -0
  42. package/dist/cjs/generator/common/constants.d.ts +46 -0
  43. package/dist/cjs/generator/common/constants.d.ts.map +1 -0
  44. package/dist/cjs/generator/common/constants.js +87 -0
  45. package/dist/cjs/generator/common/constants.js.map +1 -0
  46. package/dist/cjs/{common → generator/common}/index.d.ts +1 -1
  47. package/dist/cjs/generator/common/index.d.ts.map +1 -0
  48. package/dist/cjs/{base → generator/common}/index.js +2 -1
  49. package/dist/cjs/generator/common/index.js.map +1 -0
  50. package/dist/cjs/generator/common/types.d.ts +18 -0
  51. package/dist/cjs/generator/common/types.d.ts.map +1 -0
  52. package/dist/cjs/generator/common/types.js +3 -0
  53. package/dist/cjs/generator/common/types.js.map +1 -0
  54. package/dist/cjs/generator/emitter.d.ts +29 -0
  55. package/dist/cjs/generator/emitter.d.ts.map +1 -0
  56. package/dist/cjs/generator/emitter.js +65 -0
  57. package/dist/cjs/generator/emitter.js.map +1 -0
  58. package/dist/cjs/generator/index.d.ts +24 -0
  59. package/dist/cjs/generator/index.d.ts.map +1 -0
  60. package/dist/cjs/generator/index.js +62 -0
  61. package/dist/cjs/generator/index.js.map +1 -0
  62. package/dist/cjs/generator/scanner.d.ts +24 -0
  63. package/dist/cjs/generator/scanner.d.ts.map +1 -0
  64. package/dist/cjs/generator/scanner.js +199 -0
  65. package/dist/cjs/generator/scanner.js.map +1 -0
  66. package/dist/cjs/index.d.ts +2 -6
  67. package/dist/cjs/index.d.ts.map +1 -1
  68. package/dist/cjs/index.js +2 -6
  69. package/dist/cjs/index.js.map +1 -1
  70. package/dist/esm/build-info/common/constants.d.ts +20 -0
  71. package/dist/esm/build-info/common/constants.d.ts.map +1 -0
  72. package/dist/esm/build-info/common/constants.js +36 -0
  73. package/dist/esm/build-info/common/constants.js.map +1 -0
  74. package/dist/esm/build-info/common/index.d.ts +3 -0
  75. package/dist/esm/build-info/common/index.d.ts.map +1 -0
  76. package/dist/esm/{common → build-info/common}/index.js +1 -1
  77. package/dist/esm/build-info/common/index.js.map +1 -0
  78. package/dist/esm/build-info/common/types.d.ts +16 -0
  79. package/dist/esm/build-info/common/types.d.ts.map +1 -0
  80. package/dist/esm/build-info/common/types.js +2 -0
  81. package/dist/esm/build-info/common/types.js.map +1 -0
  82. package/dist/esm/build-info/emitter.d.ts +12 -0
  83. package/dist/esm/build-info/emitter.d.ts.map +1 -0
  84. package/dist/esm/build-info/emitter.js +22 -0
  85. package/dist/esm/build-info/emitter.js.map +1 -0
  86. package/dist/esm/build-info/index.d.ts +10 -0
  87. package/dist/esm/build-info/index.d.ts.map +1 -0
  88. package/dist/esm/build-info/index.js +25 -0
  89. package/dist/esm/build-info/index.js.map +1 -0
  90. package/dist/esm/build-info/resolver.d.ts +25 -0
  91. package/dist/esm/build-info/resolver.d.ts.map +1 -0
  92. package/dist/esm/build-info/resolver.js +101 -0
  93. package/dist/esm/build-info/resolver.js.map +1 -0
  94. package/dist/esm/clis/artifacts.d.ts +3 -0
  95. package/dist/esm/clis/artifacts.d.ts.map +1 -0
  96. package/dist/esm/clis/artifacts.js +58 -0
  97. package/dist/esm/clis/artifacts.js.map +1 -0
  98. package/dist/esm/clis/build-info.d.ts +3 -0
  99. package/dist/esm/clis/build-info.d.ts.map +1 -0
  100. package/dist/esm/clis/build-info.js +46 -0
  101. package/dist/esm/clis/build-info.js.map +1 -0
  102. package/dist/esm/common/install-quiet-logger.d.ts +2 -0
  103. package/dist/esm/common/install-quiet-logger.d.ts.map +1 -0
  104. package/dist/esm/common/install-quiet-logger.js +5 -0
  105. package/dist/esm/common/install-quiet-logger.js.map +1 -0
  106. package/dist/esm/common/quiet-logger.d.ts +18 -0
  107. package/dist/esm/common/quiet-logger.d.ts.map +1 -0
  108. package/dist/esm/common/quiet-logger.js +42 -0
  109. package/dist/esm/common/quiet-logger.js.map +1 -0
  110. package/dist/esm/generator/common/constants.d.ts +46 -0
  111. package/dist/esm/generator/common/constants.d.ts.map +1 -0
  112. package/dist/esm/generator/common/constants.js +81 -0
  113. package/dist/esm/generator/common/constants.js.map +1 -0
  114. package/dist/esm/generator/common/index.d.ts +3 -0
  115. package/dist/esm/generator/common/index.d.ts.map +1 -0
  116. package/dist/esm/generator/common/index.js +3 -0
  117. package/dist/esm/generator/common/index.js.map +1 -0
  118. package/dist/esm/generator/common/types.d.ts +18 -0
  119. package/dist/esm/generator/common/types.d.ts.map +1 -0
  120. package/dist/esm/generator/common/types.js +2 -0
  121. package/dist/esm/generator/common/types.js.map +1 -0
  122. package/dist/esm/generator/emitter.d.ts +29 -0
  123. package/dist/esm/generator/emitter.d.ts.map +1 -0
  124. package/dist/esm/generator/emitter.js +61 -0
  125. package/dist/esm/generator/emitter.js.map +1 -0
  126. package/dist/esm/generator/index.d.ts +24 -0
  127. package/dist/esm/generator/index.d.ts.map +1 -0
  128. package/dist/esm/generator/index.js +43 -0
  129. package/dist/esm/generator/index.js.map +1 -0
  130. package/dist/esm/generator/scanner.d.ts +24 -0
  131. package/dist/esm/generator/scanner.d.ts.map +1 -0
  132. package/dist/esm/generator/scanner.js +192 -0
  133. package/dist/esm/generator/scanner.js.map +1 -0
  134. package/dist/esm/index.d.ts +2 -6
  135. package/dist/esm/index.d.ts.map +1 -1
  136. package/dist/esm/index.js +2 -6
  137. package/dist/esm/index.js.map +1 -1
  138. package/package.json +34 -46
  139. package/dist/cjs/base/base-artifact-booter.d.ts +0 -18
  140. package/dist/cjs/base/base-artifact-booter.d.ts.map +0 -1
  141. package/dist/cjs/base/base-artifact-booter.js +0 -85
  142. package/dist/cjs/base/base-artifact-booter.js.map +0 -1
  143. package/dist/cjs/base/index.d.ts +0 -2
  144. package/dist/cjs/base/index.d.ts.map +0 -1
  145. package/dist/cjs/base/index.js.map +0 -1
  146. package/dist/cjs/boot.mixin.d.ts +0 -65
  147. package/dist/cjs/boot.mixin.d.ts.map +0 -1
  148. package/dist/cjs/boot.mixin.js +0 -29
  149. package/dist/cjs/boot.mixin.js.map +0 -1
  150. package/dist/cjs/booters/controller.booter.d.ts +0 -10
  151. package/dist/cjs/booters/controller.booter.d.ts.map +0 -1
  152. package/dist/cjs/booters/controller.booter.js +0 -45
  153. package/dist/cjs/booters/controller.booter.js.map +0 -1
  154. package/dist/cjs/booters/datasource.booter.d.ts +0 -10
  155. package/dist/cjs/booters/datasource.booter.d.ts.map +0 -1
  156. package/dist/cjs/booters/datasource.booter.js +0 -45
  157. package/dist/cjs/booters/datasource.booter.js.map +0 -1
  158. package/dist/cjs/booters/index.d.ts +0 -5
  159. package/dist/cjs/booters/index.d.ts.map +0 -1
  160. package/dist/cjs/booters/index.js +0 -21
  161. package/dist/cjs/booters/index.js.map +0 -1
  162. package/dist/cjs/booters/repository.booter.d.ts +0 -10
  163. package/dist/cjs/booters/repository.booter.d.ts.map +0 -1
  164. package/dist/cjs/booters/repository.booter.js +0 -45
  165. package/dist/cjs/booters/repository.booter.js.map +0 -1
  166. package/dist/cjs/booters/service.booter.d.ts +0 -10
  167. package/dist/cjs/booters/service.booter.d.ts.map +0 -1
  168. package/dist/cjs/booters/service.booter.js +0 -45
  169. package/dist/cjs/booters/service.booter.js.map +0 -1
  170. package/dist/cjs/bootstrapper.d.ts +0 -14
  171. package/dist/cjs/bootstrapper.d.ts.map +0 -1
  172. package/dist/cjs/bootstrapper.js +0 -121
  173. package/dist/cjs/bootstrapper.js.map +0 -1
  174. package/dist/cjs/common/constants.d.ts +0 -6
  175. package/dist/cjs/common/constants.d.ts.map +0 -1
  176. package/dist/cjs/common/constants.js +0 -10
  177. package/dist/cjs/common/constants.js.map +0 -1
  178. package/dist/cjs/common/index.d.ts.map +0 -1
  179. package/dist/cjs/common/index.js.map +0 -1
  180. package/dist/cjs/common/types.d.ts +0 -52
  181. package/dist/cjs/common/types.d.ts.map +0 -1
  182. package/dist/cjs/common/types.js +0 -5
  183. package/dist/cjs/common/types.js.map +0 -1
  184. package/dist/cjs/utilities/boot.utility.d.ts +0 -9
  185. package/dist/cjs/utilities/boot.utility.d.ts.map +0 -1
  186. package/dist/cjs/utilities/boot.utility.js +0 -51
  187. package/dist/cjs/utilities/boot.utility.js.map +0 -1
  188. package/dist/cjs/utilities/index.d.ts +0 -2
  189. package/dist/cjs/utilities/index.d.ts.map +0 -1
  190. package/dist/cjs/utilities/index.js +0 -18
  191. package/dist/cjs/utilities/index.js.map +0 -1
  192. package/dist/esm/base/base-artifact-booter.d.ts +0 -18
  193. package/dist/esm/base/base-artifact-booter.d.ts.map +0 -1
  194. package/dist/esm/base/base-artifact-booter.js +0 -81
  195. package/dist/esm/base/base-artifact-booter.js.map +0 -1
  196. package/dist/esm/base/index.d.ts +0 -2
  197. package/dist/esm/base/index.d.ts.map +0 -1
  198. package/dist/esm/base/index.js +0 -2
  199. package/dist/esm/base/index.js.map +0 -1
  200. package/dist/esm/boot.mixin.d.ts +0 -65
  201. package/dist/esm/boot.mixin.d.ts.map +0 -1
  202. package/dist/esm/boot.mixin.js +0 -25
  203. package/dist/esm/boot.mixin.js.map +0 -1
  204. package/dist/esm/booters/controller.booter.d.ts +0 -10
  205. package/dist/esm/booters/controller.booter.d.ts.map +0 -1
  206. package/dist/esm/booters/controller.booter.js +0 -42
  207. package/dist/esm/booters/controller.booter.js.map +0 -1
  208. package/dist/esm/booters/datasource.booter.d.ts +0 -10
  209. package/dist/esm/booters/datasource.booter.d.ts.map +0 -1
  210. package/dist/esm/booters/datasource.booter.js +0 -42
  211. package/dist/esm/booters/datasource.booter.js.map +0 -1
  212. package/dist/esm/booters/index.d.ts +0 -5
  213. package/dist/esm/booters/index.d.ts.map +0 -1
  214. package/dist/esm/booters/index.js +0 -5
  215. package/dist/esm/booters/index.js.map +0 -1
  216. package/dist/esm/booters/repository.booter.d.ts +0 -10
  217. package/dist/esm/booters/repository.booter.d.ts.map +0 -1
  218. package/dist/esm/booters/repository.booter.js +0 -42
  219. package/dist/esm/booters/repository.booter.js.map +0 -1
  220. package/dist/esm/booters/service.booter.d.ts +0 -10
  221. package/dist/esm/booters/service.booter.d.ts.map +0 -1
  222. package/dist/esm/booters/service.booter.js +0 -42
  223. package/dist/esm/booters/service.booter.js.map +0 -1
  224. package/dist/esm/bootstrapper.d.ts +0 -14
  225. package/dist/esm/bootstrapper.d.ts.map +0 -1
  226. package/dist/esm/bootstrapper.js +0 -118
  227. package/dist/esm/bootstrapper.js.map +0 -1
  228. package/dist/esm/common/constants.d.ts +0 -6
  229. package/dist/esm/common/constants.d.ts.map +0 -1
  230. package/dist/esm/common/constants.js +0 -6
  231. package/dist/esm/common/constants.js.map +0 -1
  232. package/dist/esm/common/index.d.ts.map +0 -1
  233. package/dist/esm/common/index.js.map +0 -1
  234. package/dist/esm/common/types.d.ts +0 -52
  235. package/dist/esm/common/types.d.ts.map +0 -1
  236. package/dist/esm/common/types.js +0 -2
  237. package/dist/esm/common/types.js.map +0 -1
  238. package/dist/esm/utilities/boot.utility.d.ts +0 -9
  239. package/dist/esm/utilities/boot.utility.d.ts.map +0 -1
  240. package/dist/esm/utilities/boot.utility.js +0 -46
  241. package/dist/esm/utilities/boot.utility.js.map +0 -1
  242. package/dist/esm/utilities/index.d.ts +0 -2
  243. package/dist/esm/utilities/index.d.ts.map +0 -1
  244. package/dist/esm/utilities/index.js +0 -2
  245. package/dist/esm/utilities/index.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArtifactIndexEmitter = void 0;
4
+ const node_path_1 = require("node:path");
5
+ const common_1 = require("./common");
6
+ /** Renders the generated index: deterministic text, plain static imports, no IGNIS import - the object is type-checked where `registerArtifacts` receives it. */
7
+ class ArtifactIndexEmitter {
8
+ /** Mirrors `printWidth` in @venizia/dev-configs prettier settings. */
9
+ static { this.PRINT_WIDTH = 100; }
10
+ static { this.DEFAULT_EXPORT_NAME = 'GeneratedArtifacts'; }
11
+ /** The exact command that regenerates the file, so the header never points at another path than the one the build used. */
12
+ static renderHeader(opts) {
13
+ const { root, out, ignore = [], exportName } = opts;
14
+ const flags = [`--root ${root}`, `--out ${out}`];
15
+ if (ignore.length > 0) {
16
+ flags.push(`--ignore ${ignore.join(',')}`);
17
+ }
18
+ if (exportName && exportName !== ArtifactIndexEmitter.DEFAULT_EXPORT_NAME) {
19
+ flags.push(`--export ${exportName}`);
20
+ }
21
+ return `// AUTO-GENERATED by @venizia/ignis-boot - do not edit. Regenerate: ignis-artifacts generate ${flags.join(' ')}`;
22
+ }
23
+ static render(opts) {
24
+ const { artifacts, outFile, exportName, command } = opts;
25
+ const emitted = artifacts.filter(artifact => artifact.type !== common_1.ArtifactTypes.MODEL);
26
+ const imports = emitted
27
+ .map(artifact => ({
28
+ name: artifact.className,
29
+ path: ArtifactIndexEmitter.importPath({ from: outFile, to: artifact.filePath }),
30
+ }))
31
+ .sort((a, b) => a.path.localeCompare(b.path) || a.name.localeCompare(b.name))
32
+ .map(entry => `import { ${entry.name} } from '${entry.path}';`);
33
+ const fields = common_1.ArtifactStereotypes.EMIT_ORDER.flatMap(({ type, field }) => {
34
+ const names = emitted
35
+ .filter(artifact => artifact.type === type)
36
+ .map(artifact => artifact.className)
37
+ .sort((a, b) => a.localeCompare(b));
38
+ return ArtifactIndexEmitter.renderField({ field, names });
39
+ });
40
+ return [
41
+ ArtifactIndexEmitter.renderHeader({ ...command, exportName }),
42
+ ...imports,
43
+ '',
44
+ `export const ${exportName} = {`,
45
+ ...fields,
46
+ '};',
47
+ '',
48
+ ].join('\n');
49
+ }
50
+ /** One line while it fits the repo's prettier width, else one name per line - so `prettier -l` on the generated file stays quiet. */
51
+ static renderField(opts) {
52
+ const { field, names } = opts;
53
+ const singleLine = ` ${field}: [${names.join(', ')}],`;
54
+ if (singleLine.length <= ArtifactIndexEmitter.PRINT_WIDTH) {
55
+ return [singleLine];
56
+ }
57
+ return [` ${field}: [`, ...names.map(name => ` ${name},`), ' ],'];
58
+ }
59
+ static importPath(opts) {
60
+ const raw = (0, node_path_1.relative)((0, node_path_1.dirname)(opts.from), opts.to).split(node_path_1.sep).join('/').replace(/\.ts$/, '');
61
+ return raw.startsWith('.') ? raw : `./${raw}`;
62
+ }
63
+ }
64
+ exports.ArtifactIndexEmitter = ArtifactIndexEmitter;
65
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/generator/emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { IScanReport, IScannedArtifact } from './common';
2
+ export interface IGenerateOptions {
3
+ root: string;
4
+ out: string;
5
+ ignore?: string[];
6
+ /** Name of the exported constant; default `GeneratedArtifacts`. */
7
+ exportName?: string;
8
+ }
9
+ /** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
10
+ export declare const generateArtifactIndex: (opts: IGenerateOptions) => {
11
+ content: string;
12
+ written: boolean;
13
+ } & IScanReport;
14
+ /** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
15
+ export declare const checkArtifactIndex: (opts: IGenerateOptions) => {
16
+ isFresh: boolean;
17
+ expected: string;
18
+ actual: string | undefined;
19
+ ignored: IScannedArtifact[];
20
+ };
21
+ export * from './common';
22
+ export * from './emitter';
23
+ export * from './scanner';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.checkArtifactIndex = exports.generateArtifactIndex = void 0;
18
+ const node_fs_1 = require("node:fs");
19
+ const node_path_1 = require("node:path");
20
+ const emitter_1 = require("./emitter");
21
+ const scanner_1 = require("./scanner");
22
+ const render = (opts) => {
23
+ const { artifacts, ignored } = scanner_1.ArtifactScanner.getInstance().scanWithReport({
24
+ root: opts.root,
25
+ ignore: opts.ignore,
26
+ });
27
+ const content = emitter_1.ArtifactIndexEmitter.render({
28
+ artifacts,
29
+ outFile: (0, node_path_1.resolve)(opts.out),
30
+ exportName: opts.exportName ?? emitter_1.ArtifactIndexEmitter.DEFAULT_EXPORT_NAME,
31
+ command: { root: opts.root, out: opts.out, ignore: opts.ignore },
32
+ });
33
+ return { content, artifacts, ignored };
34
+ };
35
+ /** Writes the index only when its content changed, so an unchanged tree leaves the file's mtime alone. */
36
+ const generateArtifactIndex = (opts) => {
37
+ const { content, artifacts, ignored } = render(opts);
38
+ const out = (0, node_path_1.resolve)(opts.out);
39
+ const current = (0, node_fs_1.existsSync)(out) ? (0, node_fs_1.readFileSync)(out, 'utf8') : undefined;
40
+ if (current === content) {
41
+ return { content, artifacts, ignored, written: false };
42
+ }
43
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(out), { recursive: true });
44
+ (0, node_fs_1.writeFileSync)(out, content);
45
+ return { content, artifacts, ignored, written: true };
46
+ };
47
+ exports.generateArtifactIndex = generateArtifactIndex;
48
+ /** Everything below the first line: the header only records the command, so a flag change alone must not read as drift. */
49
+ const bodyOf = (content) => content.slice(content.indexOf('\n') + 1);
50
+ /** Renders in memory and compares the body with the committed file - the staleness gate for lint and CI. */
51
+ const checkArtifactIndex = (opts) => {
52
+ const { content: expected, ignored } = render(opts);
53
+ const out = (0, node_path_1.resolve)(opts.out);
54
+ const actual = (0, node_fs_1.existsSync)(out) ? (0, node_fs_1.readFileSync)(out, 'utf8') : undefined;
55
+ const isFresh = actual !== undefined && bodyOf(actual) === bodyOf(expected);
56
+ return { isFresh, expected, actual, ignored };
57
+ };
58
+ exports.checkArtifactIndex = checkArtifactIndex;
59
+ __exportStar(require("./common"), exports);
60
+ __exportStar(require("./emitter"), exports);
61
+ __exportStar(require("./scanner"), exports);
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,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"}
@@ -0,0 +1,24 @@
1
+ import { BaseHelper } from '@venizia/ignis-helpers';
2
+ import { type IScanOptions, type IScanReport, type IScannedArtifact } from './common';
3
+ /** Finds exported classes carrying a stereotype decorator by reading the source, never by running it. */
4
+ export declare class ArtifactScanner extends BaseHelper {
5
+ private static instance?;
6
+ private constructor();
7
+ static getInstance(): ArtifactScanner;
8
+ scan(opts: IScanOptions): IScannedArtifact[];
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;
16
+ private scanFile;
17
+ /** local identifier -> stereotype name, for named imports from an IGNIS module (aliases resolved). */
18
+ private collectStereotypeImports;
19
+ private collectExportClauseNames;
20
+ private artifactTypesOf;
21
+ private typeOfInjectableCall;
22
+ private asArtifactType;
23
+ }
24
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +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,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"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArtifactScanner = void 0;
7
+ const ignis_helpers_1 = require("@venizia/ignis-helpers");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const typescript_1 = __importDefault(require("typescript"));
11
+ const common_1 = require("./common");
12
+ /** Finds exported classes carrying a stereotype decorator by reading the source, never by running it. */
13
+ class ArtifactScanner extends ignis_helpers_1.BaseHelper {
14
+ constructor() {
15
+ super({ scope: ArtifactScanner.name });
16
+ }
17
+ static getInstance() {
18
+ return (this.instance ??= new ArtifactScanner());
19
+ }
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) {
25
+ const root = (0, node_path_1.resolve)(opts.root);
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) {
46
+ return artifacts.sort((a, b) => a.type.localeCompare(b.type) || a.className.localeCompare(b.className));
47
+ }
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 = [];
52
+ for (const relative of new Bun.Glob('**/*.ts').scanSync({ cwd: opts.root })) {
53
+ if (relative.endsWith('.d.ts') || opts.defaultGlobs.some(glob => glob.match(relative))) {
54
+ continue;
55
+ }
56
+ const target = opts.userGlobs.some(glob => glob.match(relative)) ? hidden : kept;
57
+ target.push((0, node_path_1.join)(opts.root, relative));
58
+ }
59
+ return { kept: kept.sort(), hidden: hidden.sort() };
60
+ }
61
+ scanFile(opts) {
62
+ const { filePath, isHidden = false } = opts;
63
+ const source = typescript_1.default.createSourceFile(filePath, (0, node_fs_1.readFileSync)(filePath, 'utf8'), typescript_1.default.ScriptTarget.Latest, true);
64
+ const stereotypeByLocalName = this.collectStereotypeImports({ source });
65
+ if (stereotypeByLocalName.size === 0) {
66
+ return [];
67
+ }
68
+ const exportedNames = this.collectExportClauseNames({ source });
69
+ const found = [];
70
+ typescript_1.default.forEachChild(source, node => {
71
+ if (!typescript_1.default.isClassDeclaration(node) || !node.name) {
72
+ return;
73
+ }
74
+ const className = node.name.text;
75
+ const types = this.artifactTypesOf({
76
+ node,
77
+ stereotypeByLocalName,
78
+ filePath,
79
+ className,
80
+ });
81
+ if (types.length === 0) {
82
+ return;
83
+ }
84
+ if (types.length > 1) {
85
+ throw (0, ignis_helpers_1.getError)({
86
+ message: `[ArtifactScanner] ${filePath} | class ${className} carries ${types.length} stereotypes (${types.join(', ')}) - one class is one artifact`,
87
+ });
88
+ }
89
+ const modifiers = typescript_1.default.getModifiers(node) ?? [];
90
+ const has = (kind) => modifiers.some(m => m.kind === kind);
91
+ const isNamedExport = (has(typescript_1.default.SyntaxKind.ExportKeyword) && !has(typescript_1.default.SyntaxKind.DefaultKeyword)) ||
92
+ exportedNames.has(className);
93
+ const isAbstract = has(typescript_1.default.SyntaxKind.AbstractKeyword);
94
+ if (!isNamedExport || isAbstract) {
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
+ }
100
+ return;
101
+ }
102
+ found.push({ className, filePath, type: types[0] });
103
+ });
104
+ return found;
105
+ }
106
+ /** local identifier -> stereotype name, for named imports from an IGNIS module (aliases resolved). */
107
+ collectStereotypeImports(opts) {
108
+ const result = new Map();
109
+ for (const statement of opts.source.statements) {
110
+ if (!typescript_1.default.isImportDeclaration(statement) || !typescript_1.default.isStringLiteral(statement.moduleSpecifier)) {
111
+ continue;
112
+ }
113
+ if (!common_1.ArtifactStereotypes.SOURCE_MODULES.test(statement.moduleSpecifier.text)) {
114
+ continue;
115
+ }
116
+ const bindings = statement.importClause?.namedBindings;
117
+ if (!bindings || !typescript_1.default.isNamedImports(bindings)) {
118
+ continue;
119
+ }
120
+ for (const element of bindings.elements) {
121
+ const imported = (element.propertyName ?? element.name).text;
122
+ const isStereotype = imported in common_1.ArtifactStereotypes.BY_DECORATOR ||
123
+ imported === common_1.ArtifactStereotypes.ROOT_DECORATOR;
124
+ if (isStereotype) {
125
+ result.set(element.name.text, imported);
126
+ }
127
+ }
128
+ }
129
+ return result;
130
+ }
131
+ collectExportClauseNames(opts) {
132
+ const names = new Set();
133
+ for (const statement of opts.source.statements) {
134
+ if (typescript_1.default.isExportDeclaration(statement) &&
135
+ statement.exportClause &&
136
+ typescript_1.default.isNamedExports(statement.exportClause)) {
137
+ for (const element of statement.exportClause.elements) {
138
+ names.add((element.propertyName ?? element.name).text);
139
+ }
140
+ }
141
+ }
142
+ return names;
143
+ }
144
+ artifactTypesOf(opts) {
145
+ const { node, stereotypeByLocalName, filePath, className } = opts;
146
+ const types = [];
147
+ for (const decorator of typescript_1.default.getDecorators(node) ?? []) {
148
+ const expression = decorator.expression;
149
+ if (!typescript_1.default.isCallExpression(expression) || !typescript_1.default.isIdentifier(expression.expression)) {
150
+ continue;
151
+ }
152
+ const stereotype = stereotypeByLocalName.get(expression.expression.text);
153
+ if (!stereotype) {
154
+ continue;
155
+ }
156
+ if (stereotype !== common_1.ArtifactStereotypes.ROOT_DECORATOR) {
157
+ types.push(common_1.ArtifactStereotypes.BY_DECORATOR[stereotype]);
158
+ continue;
159
+ }
160
+ const type = this.typeOfInjectableCall({ call: expression });
161
+ if (!type) {
162
+ this.logger
163
+ .for('artifactTypesOf')
164
+ .warn('Skipped %s in %s | @injectable type is not a literal or ArtifactTypes.<NAME>', className, filePath);
165
+ continue;
166
+ }
167
+ types.push(type);
168
+ }
169
+ return types;
170
+ }
171
+ typeOfInjectableCall(opts) {
172
+ const [argument] = opts.call.arguments;
173
+ if (!argument || !typescript_1.default.isObjectLiteralExpression(argument)) {
174
+ return undefined;
175
+ }
176
+ const property = argument.properties.find((entry) => typescript_1.default.isPropertyAssignment(entry) && typescript_1.default.isIdentifier(entry.name) && entry.name.text === 'type');
177
+ if (!property) {
178
+ return undefined;
179
+ }
180
+ const value = property.initializer;
181
+ if (typescript_1.default.isStringLiteral(value)) {
182
+ return this.asArtifactType({ raw: value.text });
183
+ }
184
+ if (typescript_1.default.isPropertyAccessExpression(value) &&
185
+ typescript_1.default.isIdentifier(value.expression) &&
186
+ value.expression.text === 'ArtifactTypes') {
187
+ return this.asArtifactType({ raw: value.name.text.toLowerCase() });
188
+ }
189
+ return undefined;
190
+ }
191
+ asArtifactType(opts) {
192
+ const { raw } = opts;
193
+ return common_1.ArtifactStereotypes.EMIT_ORDER.map(entry => entry.type)
194
+ .concat(common_1.ArtifactTypes.MODEL)
195
+ .find(type => type === raw);
196
+ }
197
+ }
198
+ exports.ArtifactScanner = ArtifactScanner;
199
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/generator/scanner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA8D;AAC9D,qCAAuC;AACvC,yCAA0C;AAC1C,4DAA4B;AAC5B,qCAOkB;AAElB,yGAAyG;AACzG,MAAa,eAAgB,SAAQ,0BAAU;IAG7C;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,IAAkB;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;IAED,+JAA+J;IAC/J,cAAc,CAAC,IAAkB;QAC/B,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,YAAY,GAAG,4BAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9F,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAEtF,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SAC3F,CAAC;IACJ,CAAC;IAED,oIAAoI;IAC5H,cAAc,CAAC,IAA0B;QAC/C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7F,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,SAA6B;QACjD,OAAO,SAAS,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CACjF,CAAC;IACJ,CAAC;IAED,uJAAuJ;IAC/I,oBAAoB,CAAC,IAI5B;QACC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACvF,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjF,MAAM,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IACtD,CAAC;IAEO,QAAQ,CAAC,IAA8C;QAC7D,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,oBAAE,CAAC,gBAAgB,CAChC,QAAQ,EACR,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,EAC9B,oBAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,CACL,CAAC;QAEF,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,IAAI,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAAuB,EAAE,CAAC;QAErC,oBAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,oBAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;gBACjC,IAAI;gBACJ,qBAAqB;gBACrB,QAAQ;gBACR,SAAS;aACV,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAA,wBAAQ,EAAC;oBACb,OAAO,EAAE,qBAAqB,QAAQ,YAAY,SAAS,YAAY,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B;iBACpJ,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,oBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,CAAC,IAAmB,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACnF,MAAM,aAAa,GACjB,CAAC,GAAG,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBACxE,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,oBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAEtD,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM;yBACR,GAAG,CAAC,UAAU,CAAC;yBACf,IAAI,CACH,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAC/C,CAAC;gBACN,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sGAAsG;IAC9F,wBAAwB,CAAC,IAA+B;QAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,CAAC,oBAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAE,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,4BAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7E,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;YACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC7D,MAAM,YAAY,GAChB,QAAQ,IAAI,4BAAmB,CAAC,YAAY;oBAC5C,QAAQ,KAAK,4BAAmB,CAAC,cAAc,CAAC;gBAClD,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,wBAAwB,CAAC,IAA+B;QAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,IACE,oBAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBACjC,SAAS,CAAC,YAAY;gBACtB,oBAAE,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,EACzC,CAAC;gBACD,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACtD,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,IAKvB;QACC,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAClE,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,KAAK,MAAM,SAAS,IAAI,oBAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,oBAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAE,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChF,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,UAAU,KAAK,4BAAmB,CAAC,cAAc,EAAE,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,4BAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;gBACzD,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM;qBACR,GAAG,CAAC,iBAAiB,CAAC;qBACtB,IAAI,CACH,8EAA8E,EAC9E,SAAS,EACT,QAAQ,CACT,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,IAAiC;QAC5D,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CACvC,CAAC,KAAK,EAAkC,EAAE,CACxC,oBAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,oBAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAC9F,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;QACnC,IAAI,oBAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IACE,oBAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC;YACpC,oBAAE,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,eAAe,EACzC,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,IAAqB;QAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,OAAO,4BAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC3D,MAAM,CAAC,sBAAa,CAAC,KAAK,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AA/PD,0CA+PC"}
@@ -1,7 +1,3 @@
1
- export * from './base';
2
- export * from './boot.mixin';
3
- export * from './booters';
4
- export * from './bootstrapper';
5
- export * from './common';
6
- export * from './utilities';
1
+ export * from './build-info';
2
+ export * from './generator';
7
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -14,10 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./base"), exports);
18
- __exportStar(require("./boot.mixin"), exports);
19
- __exportStar(require("./booters"), exports);
20
- __exportStar(require("./bootstrapper"), exports);
21
- __exportStar(require("./common"), exports);
22
- __exportStar(require("./utilities"), exports);
17
+ __exportStar(require("./build-info"), exports);
18
+ __exportStar(require("./generator"), exports);
23
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,4CAA0B;AAC1B,iDAA+B;AAC/B,2CAAyB;AACzB,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B"}
@@ -0,0 +1,20 @@
1
+ import type { TConstValue } from '@venizia/ignis-helpers';
2
+ export declare class BuildInfoFormats {
3
+ static readonly TS = "ts";
4
+ static readonly JSON = "json";
5
+ static readonly SCHEME_SET: Set<string>;
6
+ static isValid(value: string): boolean;
7
+ }
8
+ export type TBuildInfoFormat = TConstValue<typeof BuildInfoFormats>;
9
+ /**
10
+ * Each field is spelled differently by every CI provider, and `APP_ENV_*` is what this
11
+ * organisation's pipelines export - so it is read before the generic `APP_BUILD_*` pair and before
12
+ * anything provider-specific. The first key carrying a non-blank value wins.
13
+ */
14
+ export declare class BuildInfoEnvironmentKeys {
15
+ static readonly VERSION: readonly string[];
16
+ static readonly COMMIT: readonly string[];
17
+ static readonly BRANCH: readonly string[];
18
+ static readonly BUILT_AT: readonly string[];
19
+ }
20
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/build-info/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAE9B,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAyC;IAEnE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAKxC;IAEF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAMvC;IAEF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAKvC;IAEF,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA4C;CACxF"}
@@ -0,0 +1,36 @@
1
+ export class BuildInfoFormats {
2
+ static { this.TS = 'ts'; }
3
+ static { this.JSON = 'json'; }
4
+ static { this.SCHEME_SET = new Set([this.TS, this.JSON]); }
5
+ static isValid(value) {
6
+ return this.SCHEME_SET.has(value);
7
+ }
8
+ }
9
+ /**
10
+ * Each field is spelled differently by every CI provider, and `APP_ENV_*` is what this
11
+ * organisation's pipelines export - so it is read before the generic `APP_BUILD_*` pair and before
12
+ * anything provider-specific. The first key carrying a non-blank value wins.
13
+ */
14
+ export class BuildInfoEnvironmentKeys {
15
+ static { this.VERSION = [
16
+ 'APP_ENV_BUILD_VERSION',
17
+ 'APP_BUILD_VERSION',
18
+ 'CI_COMMIT_TAG',
19
+ 'GITHUB_REF_NAME',
20
+ ]; }
21
+ static { this.COMMIT = [
22
+ 'APP_ENV_BUILD_COMMIT_TAG',
23
+ 'APP_BUILD_COMMIT',
24
+ 'CI_COMMIT_SHA',
25
+ 'GITHUB_SHA',
26
+ 'COMMIT_SHA',
27
+ ]; }
28
+ static { this.BRANCH = [
29
+ 'APP_BUILD_BRANCH',
30
+ 'CI_COMMIT_REF_NAME',
31
+ 'GITHUB_REF_NAME',
32
+ 'BRANCH_NAME',
33
+ ]; }
34
+ static { this.BUILT_AT = ['APP_ENV_BUILD_DATE', 'APP_BUILD_DATE']; }
35
+ }
36
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/build-info/common/constants.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;aACX,OAAE,GAAG,IAAI,CAAC;aACV,SAAI,GAAG,MAAM,CAAC;aAEd,eAAU,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAKH;;;;GAIG;AACH,MAAM,OAAO,wBAAwB;aACnB,YAAO,GAAsB;QAC3C,uBAAuB;QACvB,mBAAmB;QACnB,eAAe;QACf,iBAAiB;KAClB,CAAC;aAEc,WAAM,GAAsB;QAC1C,0BAA0B;QAC1B,kBAAkB;QAClB,eAAe;QACf,YAAY;QACZ,YAAY;KACb,CAAC;aAEc,WAAM,GAAsB;QAC1C,kBAAkB;QAClB,oBAAoB;QACpB,iBAAiB;QACjB,aAAa;KACd,CAAC;aAEc,aAAQ,GAAsB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './constants';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/build-info/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -1,3 +1,3 @@
1
- export * from './types';
2
1
  export * from './constants';
2
+ export * from './types';
3
3
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/build-info/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { TBuildInfoRecord } from '@venizia/ignis-helpers/core';
2
+ import type { TBuildInfoFormat } from './constants';
3
+ export interface IBuildInfoOptions {
4
+ out: string;
5
+ /** Where `package.json` is read from and where `git` is asked; default the cwd. */
6
+ root?: string;
7
+ format?: TBuildInfoFormat;
8
+ /** Name of the exported constant in `ts` format; default `BUILD_INFO`. */
9
+ exportName?: string;
10
+ }
11
+ export interface IBuildInfoResult {
12
+ buildInfo: TBuildInfoRecord;
13
+ content: string;
14
+ out: string;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/build-info/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/build-info/common/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { TBuildInfoRecord } from '@venizia/ignis-helpers/core';
2
+ import { type TBuildInfoFormat } from './common';
3
+ /** Renders the stamp: a static `ts` const a bundler bakes in, or the same record as `json` for a Vite app or a Tauri shell. */
4
+ export declare class BuildInfoEmitter {
5
+ static readonly DEFAULT_EXPORT_NAME = "BUILD_INFO";
6
+ static render(opts: {
7
+ buildInfo: TBuildInfoRecord;
8
+ format: TBuildInfoFormat;
9
+ exportName: string;
10
+ }): string;
11
+ }
12
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/build-info/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnE,+HAA+H;AAC/H,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,mBAAmB,gBAAgB;IAEnD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,gBAAgB,CAAC;QAC5B,MAAM,EAAE,gBAAgB,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,MAAM;CAmBX"}
@@ -0,0 +1,22 @@
1
+ import { BuildInfoFormats } from './common';
2
+ /** Renders the stamp: a static `ts` const a bundler bakes in, or the same record as `json` for a Vite app or a Tauri shell. */
3
+ export class BuildInfoEmitter {
4
+ static { this.DEFAULT_EXPORT_NAME = 'BUILD_INFO'; }
5
+ static render(opts) {
6
+ const { buildInfo, format, exportName } = opts;
7
+ if (format === BuildInfoFormats.JSON) {
8
+ return `${JSON.stringify(buildInfo, null, 2)}\n`;
9
+ }
10
+ const fields = Object.entries(buildInfo)
11
+ .map(([key, value]) => ` ${key}: ${JSON.stringify(value)},`)
12
+ .join('\n');
13
+ return [
14
+ '// AUTO-GENERATED by @venizia/ignis-boot - do not edit. Regenerate: ignis-build-info generate',
15
+ `export const ${exportName} = {`,
16
+ fields,
17
+ '} as const;',
18
+ '',
19
+ ].join('\n');
20
+ }
21
+ }
22
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/build-info/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAyB,MAAM,UAAU,CAAC;AAEnE,+HAA+H;AAC/H,MAAM,OAAO,gBAAgB;aACX,wBAAmB,GAAG,YAAY,CAAC;IAEnD,MAAM,CAAC,MAAM,CAAC,IAIb;QACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAE/C,IAAI,MAAM,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;aAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO;YACL,+FAA+F;YAC/F,gBAAgB,UAAU,MAAM;YAChC,MAAM;YACN,aAAa;YACb,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type IBuildInfoOptions, type IBuildInfoResult } from './common';
2
+ /**
3
+ * Writes the stamp. Unlike the artifact index this ALWAYS writes: `builtAt` changes every run, so
4
+ * an unchanged-content short-circuit would be dead code that hides a stale timestamp.
5
+ */
6
+ export declare const generateBuildInfo: (opts: IBuildInfoOptions) => Promise<IBuildInfoResult>;
7
+ export * from './common';
8
+ export * from './emitter';
9
+ export * from './resolver';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/build-info/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAI3F;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,MAAM,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAazF,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}