@venizia/ignis-boot 0.2.1-0 → 0.2.1-1

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 (107) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/bun/auto-group.d.ts +22 -0
  3. package/dist/cjs/bun/auto-group.d.ts.map +1 -0
  4. package/dist/cjs/bun/auto-group.js +50 -0
  5. package/dist/cjs/bun/auto-group.js.map +1 -0
  6. package/dist/cjs/bun/auto-loader.d.ts +9 -0
  7. package/dist/cjs/bun/auto-loader.d.ts.map +1 -0
  8. package/dist/cjs/bun/auto-loader.js +26 -0
  9. package/dist/cjs/bun/auto-loader.js.map +1 -0
  10. package/dist/cjs/bun/auto.d.ts +5 -0
  11. package/dist/cjs/bun/auto.d.ts.map +1 -0
  12. package/dist/cjs/bun/auto.js +11 -0
  13. package/dist/cjs/bun/auto.js.map +1 -0
  14. package/dist/cjs/bun/group-resolver.d.ts +15 -0
  15. package/dist/cjs/bun/group-resolver.d.ts.map +1 -0
  16. package/dist/cjs/bun/group-resolver.js +38 -0
  17. package/dist/cjs/bun/group-resolver.js.map +1 -0
  18. package/dist/cjs/bun/index.d.ts +6 -0
  19. package/dist/cjs/bun/index.d.ts.map +1 -0
  20. package/dist/cjs/bun/index.js +22 -0
  21. package/dist/cjs/bun/index.js.map +1 -0
  22. package/dist/cjs/bun/plugin.d.ts +39 -0
  23. package/dist/cjs/bun/plugin.d.ts.map +1 -0
  24. package/dist/cjs/bun/plugin.js +224 -0
  25. package/dist/cjs/bun/plugin.js.map +1 -0
  26. package/dist/cjs/bun/sources.d.ts +17 -0
  27. package/dist/cjs/bun/sources.d.ts.map +1 -0
  28. package/dist/cjs/bun/sources.js +48 -0
  29. package/dist/cjs/bun/sources.js.map +1 -0
  30. package/dist/cjs/clis/artifacts.js +4 -2
  31. package/dist/cjs/clis/artifacts.js.map +1 -1
  32. package/dist/cjs/generator/common/constants.d.ts +9 -0
  33. package/dist/cjs/generator/common/constants.d.ts.map +1 -1
  34. package/dist/cjs/generator/common/constants.js +13 -2
  35. package/dist/cjs/generator/common/constants.js.map +1 -1
  36. package/dist/cjs/generator/common/types.d.ts +16 -1
  37. package/dist/cjs/generator/common/types.d.ts.map +1 -1
  38. package/dist/cjs/generator/emitter.d.ts +12 -0
  39. package/dist/cjs/generator/emitter.d.ts.map +1 -1
  40. package/dist/cjs/generator/emitter.js +19 -5
  41. package/dist/cjs/generator/emitter.js.map +1 -1
  42. package/dist/cjs/generator/index.d.ts +2 -0
  43. package/dist/cjs/generator/index.d.ts.map +1 -1
  44. package/dist/cjs/generator/index.js +12 -6
  45. package/dist/cjs/generator/index.js.map +1 -1
  46. package/dist/cjs/generator/reexport.d.ts +28 -0
  47. package/dist/cjs/generator/reexport.d.ts.map +1 -0
  48. package/dist/cjs/generator/reexport.js +131 -0
  49. package/dist/cjs/generator/reexport.js.map +1 -0
  50. package/dist/cjs/generator/scanner.d.ts +3 -1
  51. package/dist/cjs/generator/scanner.d.ts.map +1 -1
  52. package/dist/cjs/generator/scanner.js +62 -10
  53. package/dist/cjs/generator/scanner.js.map +1 -1
  54. package/dist/esm/bun/auto-group.d.ts +22 -0
  55. package/dist/esm/bun/auto-group.d.ts.map +1 -0
  56. package/dist/esm/bun/auto-group.js +46 -0
  57. package/dist/esm/bun/auto-group.js.map +1 -0
  58. package/dist/esm/bun/auto-loader.d.ts +9 -0
  59. package/dist/esm/bun/auto-loader.d.ts.map +1 -0
  60. package/dist/esm/bun/auto-loader.js +22 -0
  61. package/dist/esm/bun/auto-loader.js.map +1 -0
  62. package/dist/esm/bun/auto.d.ts +5 -0
  63. package/dist/esm/bun/auto.d.ts.map +1 -0
  64. package/dist/esm/bun/auto.js +9 -0
  65. package/dist/esm/bun/auto.js.map +1 -0
  66. package/dist/esm/bun/group-resolver.d.ts +15 -0
  67. package/dist/esm/bun/group-resolver.d.ts.map +1 -0
  68. package/dist/esm/bun/group-resolver.js +34 -0
  69. package/dist/esm/bun/group-resolver.js.map +1 -0
  70. package/dist/esm/bun/index.d.ts +6 -0
  71. package/dist/esm/bun/index.d.ts.map +1 -0
  72. package/dist/esm/bun/index.js +6 -0
  73. package/dist/esm/bun/index.js.map +1 -0
  74. package/dist/esm/bun/plugin.d.ts +39 -0
  75. package/dist/esm/bun/plugin.d.ts.map +1 -0
  76. package/dist/esm/bun/plugin.js +217 -0
  77. package/dist/esm/bun/plugin.js.map +1 -0
  78. package/dist/esm/bun/sources.d.ts +17 -0
  79. package/dist/esm/bun/sources.d.ts.map +1 -0
  80. package/dist/esm/bun/sources.js +44 -0
  81. package/dist/esm/bun/sources.js.map +1 -0
  82. package/dist/esm/clis/artifacts.js +5 -3
  83. package/dist/esm/clis/artifacts.js.map +1 -1
  84. package/dist/esm/generator/common/constants.d.ts +9 -0
  85. package/dist/esm/generator/common/constants.d.ts.map +1 -1
  86. package/dist/esm/generator/common/constants.js +11 -1
  87. package/dist/esm/generator/common/constants.js.map +1 -1
  88. package/dist/esm/generator/common/types.d.ts +16 -1
  89. package/dist/esm/generator/common/types.d.ts.map +1 -1
  90. package/dist/esm/generator/emitter.d.ts +12 -0
  91. package/dist/esm/generator/emitter.d.ts.map +1 -1
  92. package/dist/esm/generator/emitter.js +19 -5
  93. package/dist/esm/generator/emitter.js.map +1 -1
  94. package/dist/esm/generator/index.d.ts +2 -0
  95. package/dist/esm/generator/index.d.ts.map +1 -1
  96. package/dist/esm/generator/index.js +12 -6
  97. package/dist/esm/generator/index.js.map +1 -1
  98. package/dist/esm/generator/reexport.d.ts +28 -0
  99. package/dist/esm/generator/reexport.d.ts.map +1 -0
  100. package/dist/esm/generator/reexport.js +124 -0
  101. package/dist/esm/generator/reexport.js.map +1 -0
  102. package/dist/esm/generator/scanner.d.ts +3 -1
  103. package/dist/esm/generator/scanner.d.ts.map +1 -1
  104. package/dist/esm/generator/scanner.js +63 -11
  105. package/dist/esm/generator/scanner.js.map +1 -1
  106. package/dist/esm/package.json +3 -1
  107. package/package.json +19 -4
package/README.md CHANGED
@@ -158,7 +158,7 @@ const { isFresh } = checkArtifactIndex({ root: 'src', out: 'src/generated/artifa
158
158
 
159
159
  ## Where it sits
160
160
 
161
- `dev-configs -> inversion -> {filter, helpers} -> {boot, kernel} -> connectors -> {core-worker, core-server} -> atlas`. Boot depends on `@venizia/ignis-helpers` only; no IGNIS package depends on boot, so the application declares it.
161
+ `dev-configs -> inversion -> {filter, helpers} -> {boot, kernel} -> connectors -> {core-worker, core-server}`. Boot depends on `@venizia/ignis-helpers` only; no IGNIS package depends on boot, so the application declares it.
162
162
 
163
163
  The generated index replaces the runtime booters IGNIS once took from LoopBack 4, which globbed the file system at startup.
164
164
 
@@ -0,0 +1,22 @@
1
+ import type { TGeneratedArtifactIndex } from '../generator';
2
+ /** The application's own artifacts as the kernel's group protocol (`isArtifactGroup`), built without depending on the kernel: inlined `content` in a binary, `resolve()` from source. Reading a kind throws, so a function that walks `configs.artifacts` cannot drop it as an empty index. */
3
+ export declare class AutoArtifactGroup {
4
+ readonly isArtifactGroup: true;
5
+ readonly folder: undefined;
6
+ readonly site: undefined;
7
+ readonly content: TGeneratedArtifactIndex | undefined;
8
+ private readonly resolver;
9
+ constructor(opts: {
10
+ content?: TGeneratedArtifactIndex;
11
+ resolve?: () => Promise<TGeneratedArtifactIndex>;
12
+ });
13
+ resolve(): Promise<TGeneratedArtifactIndex>;
14
+ private static unreadKind;
15
+ get configurations(): never;
16
+ get dataSources(): never;
17
+ get components(): never;
18
+ get repositories(): never;
19
+ get services(): never;
20
+ get controllers(): never;
21
+ }
22
+ //# sourceMappingURL=auto-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-group.d.ts","sourceRoot":"","sources":["../../../src/bun/auto-group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,+RAA+R;AAC/R,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,eAAe,EAAG,IAAI,CAAU;IACzC,QAAQ,CAAC,MAAM,YAAa;IAC5B,QAAQ,CAAC,IAAI,YAAa;IAC1B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;gBAEpE,IAAI,EAAE;QAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;KAClD;IAKK,OAAO,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAYjD,OAAO,CAAC,MAAM,CAAC,UAAU;IAOzB,IAAI,cAAc,IAAI,KAAK,CAE1B;IAED,IAAI,WAAW,IAAI,KAAK,CAEvB;IAED,IAAI,UAAU,IAAI,KAAK,CAEtB;IAED,IAAI,YAAY,IAAI,KAAK,CAExB;IAED,IAAI,QAAQ,IAAI,KAAK,CAEpB;IAED,IAAI,WAAW,IAAI,KAAK,CAEvB;CACF"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoArtifactGroup = void 0;
4
+ const ignis_helpers_1 = require("@venizia/ignis-helpers");
5
+ /** The application's own artifacts as the kernel's group protocol (`isArtifactGroup`), built without depending on the kernel: inlined `content` in a binary, `resolve()` from source. Reading a kind throws, so a function that walks `configs.artifacts` cannot drop it as an empty index. */
6
+ class AutoArtifactGroup {
7
+ constructor(opts) {
8
+ this.isArtifactGroup = true;
9
+ this.folder = undefined;
10
+ this.site = undefined;
11
+ this.content = opts.content;
12
+ this.resolver = opts.resolve;
13
+ }
14
+ async resolve() {
15
+ if (this.content) {
16
+ return this.content;
17
+ }
18
+ if (!this.resolver) {
19
+ throw (0, ignis_helpers_1.getError)({
20
+ message: '[@venizia/ignis-boot/auto] The auto group has neither content nor a resolver',
21
+ });
22
+ }
23
+ return this.resolver();
24
+ }
25
+ static unreadKind() {
26
+ throw (0, ignis_helpers_1.getError)({
27
+ message: '[@venizia/ignis-boot/auto] The application artifacts are resolved when artifacts are registered | A function that walks configs.artifacts must pass a group through untouched (check `isArtifactGroup`) instead of reading its kinds',
28
+ });
29
+ }
30
+ get configurations() {
31
+ return AutoArtifactGroup.unreadKind();
32
+ }
33
+ get dataSources() {
34
+ return AutoArtifactGroup.unreadKind();
35
+ }
36
+ get components() {
37
+ return AutoArtifactGroup.unreadKind();
38
+ }
39
+ get repositories() {
40
+ return AutoArtifactGroup.unreadKind();
41
+ }
42
+ get services() {
43
+ return AutoArtifactGroup.unreadKind();
44
+ }
45
+ get controllers() {
46
+ return AutoArtifactGroup.unreadKind();
47
+ }
48
+ }
49
+ exports.AutoArtifactGroup = AutoArtifactGroup;
50
+ //# sourceMappingURL=auto-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-group.js","sourceRoot":"","sources":["../../../src/bun/auto-group.ts"],"names":[],"mappings":";;;AAAA,0DAAkD;AAGlD,+RAA+R;AAC/R,MAAa,iBAAiB;IAO5B,YAAY,IAGX;QATQ,oBAAe,GAAG,IAAa,CAAC;QAChC,WAAM,GAAG,SAAS,CAAC;QACnB,SAAI,GAAG,SAAS,CAAC;QAQxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EAAE,8EAA8E;aACxF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,UAAU;QACvB,MAAM,IAAA,wBAAQ,EAAC;YACb,OAAO,EACL,sOAAsO;SACzO,CAAC,CAAC;IACL,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;CACF;AAzDD,8CAyDC"}
@@ -0,0 +1,9 @@
1
+ import type { TGeneratedArtifactIndex } from '../generator';
2
+ /** Loads the application's index for `@venizia/ignis-boot/auto` from source: registers the run-time plugin, then imports the virtual module. A binary never runs this - the build replaces the module. */
3
+ export declare class AutoArtifactsLoader {
4
+ static assertRuntime(opts: {
5
+ hasBun: boolean;
6
+ }): void;
7
+ static load(): Promise<TGeneratedArtifactIndex>;
8
+ }
9
+ //# sourceMappingURL=auto-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-loader.d.ts","sourceRoot":"","sources":["../../../src/bun/auto-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,0MAA0M;AAC1M,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;WASxC,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAYtD"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoArtifactsLoader = void 0;
4
+ const ignis_helpers_1 = require("@venizia/ignis-helpers");
5
+ /** Loads the application's index for `@venizia/ignis-boot/auto` from source: registers the run-time plugin, then imports the virtual module. A binary never runs this - the build replaces the module. */
6
+ class AutoArtifactsLoader {
7
+ static assertRuntime(opts) {
8
+ if (!opts.hasBun) {
9
+ throw (0, ignis_helpers_1.getError)({
10
+ message: '[@venizia/ignis-boot/auto] Auto artifacts need Bun (a Bun plugin builds the index) | On Node, generate the index with `ignis-artifacts generate --root src --out src/_artifacts.ts` and pass it to configs.artifacts',
11
+ });
12
+ }
13
+ }
14
+ static async load() {
15
+ AutoArtifactsLoader.assertRuntime({ hasBun: typeof Bun !== 'undefined' });
16
+ // A non-static specifier: a bundler must not pull the scanner (and TypeScript) into a binary.
17
+ const pluginModule = './plugin';
18
+ const { IgnisArtifactsPlugin } = await import(pluginModule);
19
+ await IgnisArtifactsPlugin.registerRuntime();
20
+ // A static specifier on purpose: a build without IgnisArtifactsPlugin then fails to resolve it, instead of shipping a binary with no classes.
21
+ const { GeneratedArtifacts } = await import('ignis:artifacts');
22
+ return GeneratedArtifacts;
23
+ }
24
+ }
25
+ exports.AutoArtifactsLoader = AutoArtifactsLoader;
26
+ //# sourceMappingURL=auto-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-loader.js","sourceRoot":"","sources":["../../../src/bun/auto-loader.ts"],"names":[],"mappings":";;;AAAA,0DAAkD;AAGlD,0MAA0M;AAC1M,MAAa,mBAAmB;IAC9B,MAAM,CAAC,aAAa,CAAC,IAAyB;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EACL,sNAAsN;aACzN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI;QACf,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC,CAAC;QAE1E,8FAA8F;QAC9F,MAAM,YAAY,GAAG,UAAU,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,oBAAoB,CAAC,eAAe,EAAE,CAAC;QAE7C,8IAA8I;QAC9I,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC/D,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CACF;AAtBD,kDAsBC"}
@@ -0,0 +1,5 @@
1
+ import { AutoArtifactGroup } from './auto-group';
2
+ /** The application's own decorated classes, found by the scanner - pass it in `configs.artifacts`. From source the run-time plugin builds the index when artifacts are registered; in a binary built with `IgnisArtifactsPlugin` this module is replaced by one carrying the built index. */
3
+ declare const AutoArtifacts: AutoArtifactGroup;
4
+ export default AutoArtifacts;
5
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../../src/bun/auto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAOjD,6RAA6R;AAC7R,QAAA,MAAM,aAAa,mBAAuE,CAAC;AAE3F,eAAe,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const auto_group_1 = require("./auto-group");
4
+ const auto_loader_1 = require("./auto-loader");
5
+ const group_resolver_1 = require("./group-resolver");
6
+ // Groups a shared package defined without content resolve from source through this resolver.
7
+ group_resolver_1.GroupArtifactsResolver.install();
8
+ /** The application's own decorated classes, found by the scanner - pass it in `configs.artifacts`. From source the run-time plugin builds the index when artifacts are registered; in a binary built with `IgnisArtifactsPlugin` this module is replaced by one carrying the built index. */
9
+ const AutoArtifacts = new auto_group_1.AutoArtifactGroup({ resolve: () => auto_loader_1.AutoArtifactsLoader.load() });
10
+ exports.default = AutoArtifacts;
11
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../../src/bun/auto.ts"],"names":[],"mappings":";;AAAA,6CAAiD;AACjD,+CAAoD;AACpD,qDAA0D;AAE1D,6FAA6F;AAC7F,uCAAsB,CAAC,OAAO,EAAE,CAAC;AAEjC,6RAA6R;AAC7R,MAAM,aAAa,GAAG,IAAI,8BAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,iCAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAE3F,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type TGeneratedArtifactIndex } from '../generator';
2
+ /** Fills an `ArtifactGroup` defined without content, from source: the defining package is the nearest `package.json` above the group's call site, and the group is every decorated class under a directory named `folder` in its `src`. */
3
+ export declare class GroupArtifactsResolver {
4
+ /** The kernel's `SingletonRealm` slot for the group resolver (`ArtifactGroup.SINGLETON_REALM_KEY`). */
5
+ static readonly REALM_SLOT: unique symbol;
6
+ static resolve(opts: {
7
+ group: {
8
+ folder: string | undefined;
9
+ site: string | undefined;
10
+ };
11
+ }): Promise<TGeneratedArtifactIndex>;
12
+ /** Fills the kernel's realm slot; the holder may already exist (the kernel created it empty), so it is mutated, never replaced. */
13
+ static install(): void;
14
+ }
15
+ //# sourceMappingURL=group-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-resolver.d.ts","sourceRoot":"","sources":["../../../src/bun/group-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGjF,2OAA2O;AAC3O,qBAAa,sBAAsB;IACjC,uGAAuG;IACvG,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAA+D;WAE5E,OAAO,CAAC,IAAI,EAAE;QACzB,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,CAAC;KACjE,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAsBpC,mIAAmI;IACnI,MAAM,CAAC,OAAO,IAAI,IAAI;CASvB"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GroupArtifactsResolver = void 0;
4
+ const ignis_helpers_1 = require("@venizia/ignis-helpers");
5
+ const generator_1 = require("../generator");
6
+ const sources_1 = require("./sources");
7
+ /** Fills an `ArtifactGroup` defined without content, from source: the defining package is the nearest `package.json` above the group's call site, and the group is every decorated class under a directory named `folder` in its `src`. */
8
+ class GroupArtifactsResolver {
9
+ /** The kernel's `SingletonRealm` slot for the group resolver (`ArtifactGroup.SINGLETON_REALM_KEY`). */
10
+ static { this.REALM_SLOT = Symbol.for('@venizia/ignis-kernel:artifact-group-resolver'); }
11
+ static async resolve(opts) {
12
+ const { folder, site } = opts.group;
13
+ if (!folder || !site) {
14
+ throw (0, ignis_helpers_1.getError)({
15
+ message: `[ArtifactGroup] '${folder ?? '<application>'}' has no call site to resolve from | Define it with ArtifactGroup.define in the shared package's own source`,
16
+ });
17
+ }
18
+ const index = {};
19
+ for (const artifact of sources_1.ArtifactSources.folderArtifacts({ folder, site })) {
20
+ const field = generator_1.ArtifactStereotypes.EMIT_ORDER.find(entry => entry.type === artifact.type)?.field;
21
+ if (!field) {
22
+ continue;
23
+ }
24
+ const loaded = await import(artifact.filePath);
25
+ index[field] = [...(index[field] ?? []), loaded[artifact.className]];
26
+ }
27
+ return index;
28
+ }
29
+ /** Fills the kernel's realm slot; the holder may already exist (the kernel created it empty), so it is mutated, never replaced. */
30
+ static install() {
31
+ const existing = Reflect.get(globalThis, GroupArtifactsResolver.REALM_SLOT);
32
+ const holder = typeof existing === 'object' && existing !== null ? existing : {};
33
+ holder.resolve = (resolveOpts) => GroupArtifactsResolver.resolve(resolveOpts);
34
+ Reflect.set(globalThis, GroupArtifactsResolver.REALM_SLOT, holder);
35
+ }
36
+ }
37
+ exports.GroupArtifactsResolver = GroupArtifactsResolver;
38
+ //# sourceMappingURL=group-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-resolver.js","sourceRoot":"","sources":["../../../src/bun/group-resolver.ts"],"names":[],"mappings":";;;AAAA,0DAAkD;AAElD,4CAAiF;AACjF,uCAA4C;AAE5C,2OAA2O;AAC3O,MAAa,sBAAsB;IACjC,uGAAuG;aACvF,eAAU,GAAG,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAEzF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAEpB;QACC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EAAE,oBAAoB,MAAM,IAAI,eAAe,6GAA6G;aACpK,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAA2C,EAAE,CAAC;QACzD,KAAK,MAAM,QAAQ,IAAI,yBAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,+BAAmB,CAAC,UAAU,CAAC,IAAI,CAC/C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CACtC,EAAE,KAAK,CAAC;YACT,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mIAAmI;IACnI,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACrF,MAAM,MAAM,GACV,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,OAAO,GAAG,CAAC,WAEjB,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;;AArCH,wDAsCC"}
@@ -0,0 +1,6 @@
1
+ export * from './auto-group';
2
+ export * from './auto-loader';
3
+ export * from './group-resolver';
4
+ export * from './plugin';
5
+ export * from './sources';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bun/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,22 @@
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
+ __exportStar(require("./auto-group"), exports);
18
+ __exportStar(require("./auto-loader"), exports);
19
+ __exportStar(require("./group-resolver"), exports);
20
+ __exportStar(require("./plugin"), exports);
21
+ __exportStar(require("./sources"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bun/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,gDAA8B;AAC9B,mDAAiC;AACjC,2CAAyB;AACzB,4CAA0B"}
@@ -0,0 +1,39 @@
1
+ import type { BunPlugin } from 'bun';
2
+ /** Serves `ignis:artifacts` - the application's generated index, rendered in memory from the scanner. At run time it is a virtual module (`build.module`); in `Bun.build` it is resolved and loaded (`onResolve`/`onLoad`), so a binary carries the list and never scans. */
3
+ export declare class IgnisArtifactsPlugin {
4
+ static readonly NAME = "ignis-artifacts";
5
+ static readonly VIRTUAL = "ignis:artifacts";
6
+ static readonly EXPORT_NAME = "GeneratedArtifacts";
7
+ /** `@venizia/ignis-boot/auto`, from source or from either dist format - replaced at build time by a static re-export of the virtual module. */
8
+ static readonly AUTO_MODULE: RegExp;
9
+ /** A text test for a file worth parsing: `ArtifactGroup.define(`, with any spacing or line break around the dot. */
10
+ static readonly DEFINE_CALL: RegExp;
11
+ private static readonly RUNTIME_KEY;
12
+ /** The `src` beside the nearest `package.json` at or above `from` (default: the working directory). */
13
+ static defaultRoot(opts?: {
14
+ from?: string;
15
+ }): string;
16
+ /** The index as module source: every import absolute, since a virtual module has no directory to resolve from. */
17
+ static render(opts: {
18
+ root: string;
19
+ }): string;
20
+ /** Rewrites every `ArtifactGroup.define({ folder: '<literal>' })` in a source file to carry its classes as `content`, imported by absolute path - a binary then holds each group's list and never scans. A folder with no decorated class, or a define the plugin cannot read (an aliased `ArtifactGroup`, a folder that is not a string literal), fails the build. */
21
+ static rewriteGroups(opts: {
22
+ filePath: string;
23
+ source: string;
24
+ }): string;
25
+ /** The source files that define groups: the application's own `src` and the `src` of each workspace dependency (a dependency whose real path is outside every `node_modules`), found by walking up the `node_modules` chain as Node resolution does. */
26
+ static groupDefinitionFiles(opts: {
27
+ root: string;
28
+ }): string[];
29
+ /** For `Bun.build({ plugins: [IgnisArtifactsPlugin.create()] })`; `isRuntime` is set by `registerRuntime`, which serves a virtual module instead. */
30
+ static create(opts?: {
31
+ root?: string;
32
+ isRuntime?: boolean;
33
+ }): BunPlugin;
34
+ /** Registers the run-time plugin once per process; a second call is a no-op. */
35
+ static registerRuntime(opts?: {
36
+ root?: string;
37
+ }): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/bun/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAQrC,6QAA6Q;AAC7Q,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,qBAAqB;IACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,qBAAqB;IAC5C,MAAM,CAAC,QAAQ,CAAC,WAAW,wBAAwB;IAEnD,+IAA+I;IAC/I,MAAM,CAAC,QAAQ,CAAC,WAAW,SAC0F;IAErH,oHAAoH;IACpH,MAAM,CAAC,QAAQ,CAAC,WAAW,SAAsC;IAEjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA8D;IAEjG,uGAAuG;IACvG,MAAM,CAAC,WAAW,CAAC,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM;IAIxD,kHAAkH;IAClH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAgB7C,uWAAuW;IACvW,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAsGxE,wPAAwP;IACxP,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE;IAiD7D,qJAAqJ;IACrJ,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,SAAS;IAyC3E,gFAAgF;WACnE,eAAe,CAAC,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1E"}
@@ -0,0 +1,224 @@
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.IgnisArtifactsPlugin = 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 generator_1 = require("../generator");
12
+ const sources_1 = require("./sources");
13
+ /** Serves `ignis:artifacts` - the application's generated index, rendered in memory from the scanner. At run time it is a virtual module (`build.module`); in `Bun.build` it is resolved and loaded (`onResolve`/`onLoad`), so a binary carries the list and never scans. */
14
+ class IgnisArtifactsPlugin {
15
+ static { this.NAME = 'ignis-artifacts'; }
16
+ static { this.VIRTUAL = 'ignis:artifacts'; }
17
+ static { this.EXPORT_NAME = 'GeneratedArtifacts'; }
18
+ /** `@venizia/ignis-boot/auto`, from source or from either dist format - replaced at build time by a static re-export of the virtual module. */
19
+ static { this.AUTO_MODULE = /[\\/](?:@venizia[\\/]ignis-boot|packages[\\/]boot)[\\/](?:dist[\\/](?:esm|cjs)|src)[\\/]bun[\\/]auto\.(?:ts|js)$/; }
20
+ /** A text test for a file worth parsing: `ArtifactGroup.define(`, with any spacing or line break around the dot. */
21
+ static { this.DEFINE_CALL = /ArtifactGroup\s*\.\s*define\s*\(/; }
22
+ static { this.RUNTIME_KEY = Symbol.for('@venizia/ignis-boot:artifacts-runtime-plugin'); }
23
+ /** The `src` beside the nearest `package.json` at or above `from` (default: the working directory). */
24
+ static defaultRoot(opts = {}) {
25
+ return sources_1.ArtifactSources.packageSource(opts);
26
+ }
27
+ /** The index as module source: every import absolute, since a virtual module has no directory to resolve from. */
28
+ static render(opts) {
29
+ const root = (0, node_path_1.resolve)(opts.root);
30
+ const outFile = (0, node_path_1.join)(root, '__ignis_artifacts__.ts');
31
+ const { artifacts } = generator_1.ArtifactScanner.getInstance().scanWithReport({
32
+ root,
33
+ followReexports: true,
34
+ });
35
+ return generator_1.ArtifactIndexEmitter.render({
36
+ artifacts,
37
+ outFile,
38
+ exportName: IgnisArtifactsPlugin.EXPORT_NAME,
39
+ command: { root, out: outFile },
40
+ absoluteImports: true,
41
+ });
42
+ }
43
+ /** Rewrites every `ArtifactGroup.define({ folder: '<literal>' })` in a source file to carry its classes as `content`, imported by absolute path - a binary then holds each group's list and never scans. A folder with no decorated class, or a define the plugin cannot read (an aliased `ArtifactGroup`, a folder that is not a string literal), fails the build. */
44
+ static rewriteGroups(opts) {
45
+ const { filePath, source } = opts;
46
+ const sourceFile = typescript_1.default.createSourceFile(filePath, source, typescript_1.default.ScriptTarget.Latest, true);
47
+ const aliases = new Set();
48
+ for (const statement of sourceFile.statements) {
49
+ const bindings = typescript_1.default.isImportDeclaration(statement)
50
+ ? statement.importClause?.namedBindings
51
+ : undefined;
52
+ for (const element of bindings && typescript_1.default.isNamedImports(bindings) ? bindings.elements : []) {
53
+ if ((element.propertyName ?? element.name).text === 'ArtifactGroup' &&
54
+ element.name.text !== 'ArtifactGroup') {
55
+ aliases.add(element.name.text);
56
+ }
57
+ }
58
+ }
59
+ const edits = [];
60
+ const imports = [];
61
+ let counter = 0;
62
+ const refuse = (node, reason) => {
63
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
64
+ throw (0, ignis_helpers_1.getError)({
65
+ message: `[IgnisArtifactsPlugin] An ArtifactGroup.define at ${filePath}:${line + 1} cannot be rewritten | ${reason} - write ArtifactGroup.define({ folder: '<name>' }) with the class imported under its own name`,
66
+ });
67
+ };
68
+ const visit = (node) => {
69
+ if (typescript_1.default.isCallExpression(node) &&
70
+ typescript_1.default.isPropertyAccessExpression(node.expression) &&
71
+ node.expression.name.text === 'define' &&
72
+ typescript_1.default.isIdentifier(node.expression.expression)) {
73
+ const callee = node.expression.expression.text;
74
+ if (aliases.has(callee)) {
75
+ refuse(node, `ArtifactGroup is imported as ${callee}`);
76
+ }
77
+ if (callee === 'ArtifactGroup') {
78
+ const [argument] = node.arguments;
79
+ if (!argument || !typescript_1.default.isObjectLiteralExpression(argument)) {
80
+ refuse(node, 'the argument is not an object literal');
81
+ }
82
+ const literal = argument;
83
+ const named = (name) => literal.properties.find(entry => entry.name && typescript_1.default.isIdentifier(entry.name) && entry.name.text === name);
84
+ const folderProperty = named('folder');
85
+ if (!named('content')) {
86
+ if (!folderProperty ||
87
+ !typescript_1.default.isPropertyAssignment(folderProperty) ||
88
+ !typescript_1.default.isStringLiteral(folderProperty.initializer)) {
89
+ refuse(node, 'folder is not a string literal');
90
+ }
91
+ const folder = folderProperty.initializer.text;
92
+ const artifacts = sources_1.ArtifactSources.folderArtifacts({ folder, site: filePath });
93
+ if (artifacts.length === 0) {
94
+ throw (0, ignis_helpers_1.getError)({
95
+ message: `[IgnisArtifactsPlugin] ArtifactGroup '${folder}' resolved to no class | ${filePath} - check the folder name and that its classes carry a stereotype decorator`,
96
+ });
97
+ }
98
+ const fields = [];
99
+ for (const { type, field } of generator_1.ArtifactStereotypes.EMIT_ORDER) {
100
+ const locals = artifacts
101
+ .filter(artifact => artifact.type === type)
102
+ .map(artifact => {
103
+ counter += 1;
104
+ const local = `__ignis_group_${counter}`;
105
+ const path = artifact.filePath.split(node_path_1.sep).join('/').replace(/\.ts$/, '');
106
+ imports.push(`import { ${artifact.className} as ${local} } from '${path}';`);
107
+ return local;
108
+ });
109
+ if (locals.length > 0) {
110
+ fields.push(`${field}: [${locals.join(', ')}]`);
111
+ }
112
+ }
113
+ const last = literal.properties[literal.properties.length - 1];
114
+ edits.push({
115
+ at: last ? last.getEnd() : literal.getStart() + 1,
116
+ text: `${last ? ', ' : ''}content: { ${fields.join(', ')} }`,
117
+ });
118
+ }
119
+ }
120
+ }
121
+ typescript_1.default.forEachChild(node, visit);
122
+ };
123
+ visit(sourceFile);
124
+ let rewritten = source;
125
+ for (const edit of [...edits].sort((left, right) => right.at - left.at)) {
126
+ rewritten = rewritten.slice(0, edit.at) + edit.text + rewritten.slice(edit.at);
127
+ }
128
+ return imports.length > 0 ? `${imports.join('\n')}\n${rewritten}` : rewritten;
129
+ }
130
+ /** The source files that define groups: the application's own `src` and the `src` of each workspace dependency (a dependency whose real path is outside every `node_modules`), found by walking up the `node_modules` chain as Node resolution does. */
131
+ static groupDefinitionFiles(opts) {
132
+ const root = (0, node_path_1.resolve)(opts.root);
133
+ const packageDirectory = (0, node_path_1.dirname)(root);
134
+ const manifestPath = (0, node_path_1.join)(packageDirectory, 'package.json');
135
+ const manifest = (0, node_fs_1.existsSync)(manifestPath) ? JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8')) : {};
136
+ const names = Object.keys({
137
+ ...manifest.dependencies,
138
+ ...manifest.devDependencies,
139
+ ...manifest.peerDependencies,
140
+ });
141
+ const sources = new Set([root]);
142
+ for (const name of names) {
143
+ let directory = packageDirectory;
144
+ while (true) {
145
+ const linked = (0, node_path_1.join)(directory, 'node_modules', name);
146
+ if ((0, node_fs_1.existsSync)(linked)) {
147
+ const real = (0, node_fs_1.realpathSync)(linked);
148
+ if (!real.split(node_path_1.sep).includes('node_modules') && (0, node_fs_1.existsSync)((0, node_path_1.join)(real, 'src'))) {
149
+ sources.add((0, node_path_1.join)(real, 'src'));
150
+ }
151
+ break;
152
+ }
153
+ const parent = (0, node_path_1.dirname)(directory);
154
+ if (parent === directory) {
155
+ break;
156
+ }
157
+ directory = parent;
158
+ }
159
+ }
160
+ const files = [];
161
+ for (const source of sources) {
162
+ if (!(0, node_fs_1.existsSync)(source)) {
163
+ continue;
164
+ }
165
+ for (const relativePath of new Bun.Glob('**/*.ts').scanSync({ cwd: source })) {
166
+ const file = (0, node_path_1.join)(source, relativePath);
167
+ if (!relativePath.includes('__tests__') &&
168
+ IgnisArtifactsPlugin.DEFINE_CALL.test((0, node_fs_1.readFileSync)(file, 'utf8'))) {
169
+ files.push(file);
170
+ }
171
+ }
172
+ }
173
+ return files;
174
+ }
175
+ /** For `Bun.build({ plugins: [IgnisArtifactsPlugin.create()] })`; `isRuntime` is set by `registerRuntime`, which serves a virtual module instead. */
176
+ static create(opts = {}) {
177
+ const root = opts.root ?? IgnisArtifactsPlugin.defaultRoot();
178
+ const isRuntime = opts.isRuntime ?? false;
179
+ const contents = () => IgnisArtifactsPlugin.render({ root });
180
+ return {
181
+ name: IgnisArtifactsPlugin.NAME,
182
+ setup(build) {
183
+ if (isRuntime) {
184
+ build.module(IgnisArtifactsPlugin.VIRTUAL, () => ({
185
+ contents: contents(),
186
+ loader: 'ts',
187
+ }));
188
+ return;
189
+ }
190
+ const virtualPath = (0, node_path_1.join)((0, node_path_1.resolve)(root), '__ignis_artifacts__.ts');
191
+ build.onResolve({ filter: /^ignis:artifacts$/ }, () => ({ path: virtualPath }));
192
+ build.onLoad({ filter: /__ignis_artifacts__\.ts$/ }, () => ({
193
+ contents: contents(),
194
+ loader: 'ts',
195
+ }));
196
+ const groupFiles = IgnisArtifactsPlugin.groupDefinitionFiles({ root });
197
+ if (groupFiles.length > 0) {
198
+ const escaped = groupFiles.map(file => file.replace(/[.*+?^${}()|[\]\\/]/g, '\\$&'));
199
+ build.onLoad({ filter: new RegExp(`^(?:${escaped.join('|')})$`) }, args => ({
200
+ contents: IgnisArtifactsPlugin.rewriteGroups({
201
+ filePath: args.path,
202
+ source: (0, node_fs_1.readFileSync)(args.path, 'utf8'),
203
+ }),
204
+ loader: 'ts',
205
+ }));
206
+ }
207
+ build.onLoad({ filter: IgnisArtifactsPlugin.AUTO_MODULE }, () => ({
208
+ contents: `import { ${IgnisArtifactsPlugin.EXPORT_NAME} } from '${IgnisArtifactsPlugin.VIRTUAL}';\nimport { AutoArtifactGroup } from './auto-group';\nexport default new AutoArtifactGroup({ content: ${IgnisArtifactsPlugin.EXPORT_NAME} });\n`,
209
+ loader: 'ts',
210
+ }));
211
+ },
212
+ };
213
+ }
214
+ /** Registers the run-time plugin once per process; a second call is a no-op. */
215
+ static async registerRuntime(opts = {}) {
216
+ if (Reflect.get(globalThis, IgnisArtifactsPlugin.RUNTIME_KEY) === true) {
217
+ return;
218
+ }
219
+ await Bun.plugin(IgnisArtifactsPlugin.create({ ...opts, isRuntime: true }));
220
+ Reflect.set(globalThis, IgnisArtifactsPlugin.RUNTIME_KEY, true);
221
+ }
222
+ }
223
+ exports.IgnisArtifactsPlugin = IgnisArtifactsPlugin;
224
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/bun/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type IScannedArtifact } from '../generator';
2
+ /** 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. */
3
+ export declare class ArtifactSources {
4
+ private static readonly scans;
5
+ /** The `src` beside the nearest `package.json` at or above `from` (default: the working directory). */
6
+ static packageSource(opts?: {
7
+ from?: string;
8
+ }): string;
9
+ /** The decorated classes under a directory named `folder` in the package whose source holds `site`. A site outside that source (a `dist` copy) is refused: its classes would be a second identity of the ones the package runs. */
10
+ static folderArtifacts(opts: {
11
+ folder: string;
12
+ site: string;
13
+ }): IScannedArtifact[];
14
+ /** Forgets every cached scan - for a long-lived process that rebuilds (a watch mode). */
15
+ static clear(): void;
16
+ }
17
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../src/bun/sources.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtE,qKAAqK;AACrK,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAEtE,uGAAuG;IACvG,MAAM,CAAC,aAAa,CAAC,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM;IAa1D,mOAAmO;IACnO,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,EAAE;IAsBlF,yFAAyF;IACzF,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB"}