@antelopejs/interface-core 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Interface Core
2
+
3
+ <div align="center">
4
+ <a href="https://www.npmjs.com/package/@antelopejs/interface-core"><img src="https://img.shields.io/npm/v/@antelopejs/interface-core?style=for-the-badge&labelColor=000000&color=000000" alt="npm"></a>
5
+ <a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg?style=for-the-badge&labelColor=000000"></a>
6
+ <a href="https://discord.gg/sjK28QHrA7"><img src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000" alt="Discord"></a>
7
+ <a href="./docs/1.introduction.md"><img src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000" alt="Documentation"></a>
8
+ </div>
9
+
10
+ The foundational primitives for building AntelopeJS interfaces. This package provides proxy classes, decorator factories, metadata utilities, module lifecycle events, configuration types, and a structured logging system. It enables type-safe, module-aware communication between decoupled components with automatic cleanup on module unload.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @antelopejs/interface-core
16
+ ```
17
+
18
+ ## Documentation
19
+
20
+ Detailed documentation is available in the `docs` directory:
21
+
22
+ - [Introduction](./docs/1.introduction.md) - Overview and core concepts
23
+ - [Proxies](./docs/2.proxies.md) - `AsyncProxy`, `EventProxy`, `RegisteringProxy`, and `InterfaceFunction`
24
+ - [Decorators](./docs/3.decorators.md) - Decorator factory utilities for classes, properties, methods, and parameters
25
+ - [Metadata](./docs/4.metadata.md) - Reflection-based metadata with `GetMetadata`
26
+ - [Modules](./docs/5.modules.md) - Module lifecycle events and management functions
27
+ - [Logging](./docs/6.logging.md) - Structured logging system with channels and severity levels
28
+ - [Configuration](./docs/7.configuration.md) - Configuration types and `defineConfig`
29
+
30
+ ## License
31
+
32
+ This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
package/dist/config.d.ts CHANGED
@@ -11,6 +11,7 @@ export interface ModuleSourceLocal extends ModuleSource {
11
11
  main?: string;
12
12
  watchDir?: ModuleWatchDir;
13
13
  installCommand?: ModuleInstallCommand;
14
+ reloadCommand?: ModuleInstallCommand;
14
15
  }
15
16
  export interface ModuleSourceGit extends ModuleSource {
16
17
  type: "git";
@@ -29,6 +30,7 @@ export interface ModuleSourceLocalFolder extends ModuleSource {
29
30
  path: string;
30
31
  watchDir?: ModuleWatchDir;
31
32
  installCommand?: ModuleInstallCommand;
33
+ reloadCommand?: ModuleInstallCommand;
32
34
  }
33
35
  export interface AntelopeTestConfig {
34
36
  folder?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sBAAsB;;AAqGtB,oCAEC;AAFD,SAAgB,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sBAAsB;;AAuGtB,oCAEC;AAFD,SAAgB,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -7,6 +7,7 @@ export declare const internal: {
7
7
  moduleByFolder: {
8
8
  dir: string;
9
9
  id: string;
10
+ isImplementor?: boolean;
10
11
  }[];
11
12
  testStubMode: boolean;
12
13
  knownAsync: Map<string, any[]>;
@@ -14,6 +15,7 @@ export declare const internal: {
14
15
  knownEvents: any[];
15
16
  interfaceConnections: Record<string, Record<string, InterfaceConnection[]>>;
16
17
  asyncContextReporter: ((trace: NodeJS.CallSite[]) => void) | undefined;
18
+ replayErrorReporter: ((id: unknown, err: unknown) => void) | undefined;
17
19
  addAsyncProxy(module: string, proxy: any): void;
18
20
  addRegisteringProxy(module: string, proxy: any): void;
19
21
  };
package/dist/internal.js CHANGED
@@ -16,6 +16,7 @@ exports.internal = {
16
16
  knownEvents: [],
17
17
  interfaceConnections: {},
18
18
  asyncContextReporter: undefined,
19
+ replayErrorReporter: undefined,
19
20
  addAsyncProxy(module, proxy) {
20
21
  addToMapArray(exports.internal.knownAsync, module, proxy);
21
22
  },
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":";;;AAKA,SAAS,aAAa,CAAC,GAA4B,EAAE,GAAW,EAAE,KAAU;IAC1E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,gBAAgB;AACH,QAAA,QAAQ,GAAG;IACtB,cAAc,EAAE,EAAmC;IACnD,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,IAAI,GAAG,EAAsB;IACzC,cAAc,EAAE,IAAI,GAAG,EAAsB;IAC7C,WAAW,EAAE,EAAW;IACxB,oBAAoB,EAAE,EAGrB;IACD,oBAAoB,EAAE,SAET;IAEb,aAAa,CAAC,MAAc,EAAE,KAAU;QACtC,aAAa,CAAC,gBAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,KAAU;QAC5C,aAAa,CAAC,gBAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":";;;AAKA,SAAS,aAAa,CAAC,GAA4B,EAAE,GAAW,EAAE,KAAU;IAC1E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,gBAAgB;AACH,QAAA,QAAQ,GAAG;IACtB,cAAc,EAAE,EAIb;IACH,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,IAAI,GAAG,EAAsB;IACzC,cAAc,EAAE,IAAI,GAAG,EAAsB;IAC7C,WAAW,EAAE,EAAW;IACxB,oBAAoB,EAAE,EAGrB;IACD,oBAAoB,EAAE,SAET;IACb,mBAAmB,EAAE,SAER;IAEb,aAAa,CAAC,MAAc,EAAE,KAAU;QACtC,aAAa,CAAC,gBAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,KAAU;QAC5C,aAAa,CAAC,gBAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
package/dist/proxies.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventProxy = exports.RegisteringProxy = exports.AsyncProxy = void 0;
4
4
  exports.GetResponsibleModule = GetResponsibleModule;
5
5
  const internal_1 = require("./internal");
6
+ const responsible_module_1 = require("./responsible-module");
6
7
  const STUB_NOT_IMPLEMENTED = "Interface function called without implementation in test environment. " +
7
8
  "Ensure the required module is loaded in your test config.";
8
9
  /**
@@ -92,7 +93,15 @@ class RegisteringProxy {
92
93
  }
93
94
  }
94
95
  for (const [id, { args }] of this.registered) {
95
- callback(id, ...args);
96
+ try {
97
+ callback(id, ...args);
98
+ }
99
+ catch (err) {
100
+ // Best-effort replay: one throwing consumer must not strand the others.
101
+ if (internal_1.internal.replayErrorReporter) {
102
+ internal_1.internal.replayErrorReporter(id, err);
103
+ }
104
+ }
96
105
  }
97
106
  }
98
107
  /**
@@ -225,32 +234,6 @@ function captureCallStack(startFrame = 0) {
225
234
  Error.stackTraceLimit = oldLimit;
226
235
  return trace.slice(startFrame);
227
236
  }
228
- function findResponsibleFile(trace) {
229
- let currentFound = "";
230
- const lastInterface = "";
231
- let currentBestMatch = 0;
232
- for (const site of trace) {
233
- const fileName = site.getFileName();
234
- if (!fileName ||
235
- fileName.startsWith("node:internal/") ||
236
- fileName.match(/[/\\]node_modules[/\\]/)) {
237
- continue;
238
- }
239
- for (const { dir, id } of internal_1.internal.moduleByFolder) {
240
- if (fileName.startsWith(dir) && dir.length > currentBestMatch) {
241
- currentFound = id;
242
- currentBestMatch = dir.length;
243
- }
244
- }
245
- if (currentFound) {
246
- return { module: currentFound, lastInterface };
247
- }
248
- if (!site.getFunctionName() && site.getTypeName()) {
249
- break;
250
- }
251
- }
252
- return { lastInterface };
253
- }
254
237
  /**
255
238
  * Gets the responsible module for the current execution context.
256
239
  *
@@ -262,7 +245,7 @@ function findResponsibleFile(trace) {
262
245
  */
263
246
  function GetResponsibleModule(startFrame = 0) {
264
247
  const trace = captureCallStack(startFrame);
265
- const responsible = findResponsibleFile(trace);
248
+ const responsible = (0, responsible_module_1.findResponsibleFile)(trace);
266
249
  if (responsible.module) {
267
250
  return responsible.module;
268
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface ModuleFolderEntry {
2
+ dir: string;
3
+ id: string;
4
+ isImplementor?: boolean;
5
+ }
6
+ export interface ResponsibleModuleResult {
7
+ module?: string;
8
+ lastInterface: string;
9
+ }
10
+ /**
11
+ * Walk the trace to decide which module is responsible for the current call.
12
+ *
13
+ * Rules:
14
+ * 1. `node_modules` and generic `node:internal/` frames are skipped.
15
+ * 2. `node:internal/modules/...` (the require loader) is a hard boundary:
16
+ * frames above it belong to the module currently being loaded (owning
17
+ * the side effect); frames below it belong to whoever triggered the
18
+ * require and must not be credited.
19
+ * 3. The first non-implementor match wins — that is user code. If only
20
+ * implementor modules match, the first implementor is used as a
21
+ * fallback so framework-level registrations still have an owner.
22
+ */
23
+ export declare function findResponsibleFile(trace: NodeJS.CallSite[], entries?: ModuleFolderEntry[]): ResponsibleModuleResult;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findResponsibleFile = findResponsibleFile;
4
+ const internal_1 = require("./internal");
5
+ function findMatchingEntry(fileName, entries) {
6
+ let best;
7
+ let bestLen = 0;
8
+ for (const entry of entries) {
9
+ if (fileName.startsWith(entry.dir) && entry.dir.length > bestLen) {
10
+ best = entry;
11
+ bestLen = entry.dir.length;
12
+ }
13
+ }
14
+ return best;
15
+ }
16
+ /**
17
+ * Walk the trace to decide which module is responsible for the current call.
18
+ *
19
+ * Rules:
20
+ * 1. `node_modules` and generic `node:internal/` frames are skipped.
21
+ * 2. `node:internal/modules/...` (the require loader) is a hard boundary:
22
+ * frames above it belong to the module currently being loaded (owning
23
+ * the side effect); frames below it belong to whoever triggered the
24
+ * require and must not be credited.
25
+ * 3. The first non-implementor match wins — that is user code. If only
26
+ * implementor modules match, the first implementor is used as a
27
+ * fallback so framework-level registrations still have an owner.
28
+ */
29
+ function findResponsibleFile(trace, entries = internal_1.internal.moduleByFolder) {
30
+ const lastInterface = "";
31
+ let implementorMatch;
32
+ for (const site of trace) {
33
+ const fileName = site.getFileName();
34
+ if (fileName?.startsWith("node:internal/modules/")) {
35
+ break;
36
+ }
37
+ if (!fileName ||
38
+ fileName.startsWith("node:internal/") ||
39
+ fileName.match(/[/\\]node_modules[/\\]/)) {
40
+ continue;
41
+ }
42
+ const match = findMatchingEntry(fileName, entries);
43
+ if (!match) {
44
+ continue;
45
+ }
46
+ if (!match.isImplementor) {
47
+ return { module: match.id, lastInterface };
48
+ }
49
+ implementorMatch = match.id;
50
+ }
51
+ if (implementorMatch) {
52
+ return { module: implementorMatch, lastInterface };
53
+ }
54
+ return { lastInterface };
55
+ }
56
+ //# sourceMappingURL=responsible-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsible-module.js","sourceRoot":"","sources":["../src/responsible-module.ts"],"names":[],"mappings":";;AAyCA,kDAiCC;AA1ED,yCAAsC;AAatC,SAAS,iBAAiB,CACxB,QAAgB,EAChB,OAA4B;IAE5B,IAAI,IAAmC,CAAC;IACxC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;YACjE,IAAI,GAAG,KAAK,CAAC;YACb,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CACjC,KAAwB,EACxB,UAA+B,mBAAQ,CAAC,cAAc;IAEtD,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,IAAI,gBAAoC,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,QAAQ,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACnD,MAAM;QACR,CAAC;QACD,IACE,CAAC,QAAQ;YACT,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACrC,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,EACxC,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC;QAC7C,CAAC;QACD,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const __1 = require("..");
5
+ const internal_1 = require("../internal");
6
+ describe("RegisteringProxy onRegister replay", () => {
7
+ let savedReporter;
8
+ beforeEach(() => {
9
+ savedReporter = internal_1.internal.replayErrorReporter;
10
+ });
11
+ afterEach(() => {
12
+ internal_1.internal.replayErrorReporter = savedReporter;
13
+ });
14
+ it("replays every entry even when an earlier callback throws", () => {
15
+ const proxy = new __1.RegisteringProxy();
16
+ proxy.register("a", "alpha");
17
+ proxy.register("b", "beta");
18
+ proxy.register("c", "gamma");
19
+ const seen = [];
20
+ const errors = [];
21
+ internal_1.internal.replayErrorReporter = (id, err) => errors.push({ id, err });
22
+ proxy.onRegister((id, arg) => {
23
+ seen.push(`${id}:${arg}`);
24
+ if (id === "a") {
25
+ throw new Error("boom");
26
+ }
27
+ }, true);
28
+ (0, chai_1.expect)(seen).to.deep.equal(["a:alpha", "b:beta", "c:gamma"]);
29
+ (0, chai_1.expect)(errors).to.have.length(1);
30
+ (0, chai_1.expect)(errors[0].id).to.equal("a");
31
+ (0, chai_1.expect)(errors[0].err).to.be.instanceOf(Error);
32
+ });
33
+ it("does not require a reporter to remain resilient", () => {
34
+ internal_1.internal.replayErrorReporter = undefined;
35
+ const proxy = new __1.RegisteringProxy();
36
+ proxy.register("a");
37
+ proxy.register("b");
38
+ const seen = [];
39
+ proxy.onRegister((id) => {
40
+ seen.push(String(id));
41
+ if (id === "a")
42
+ throw new Error("boom");
43
+ }, true);
44
+ (0, chai_1.expect)(seen).to.deep.equal(["a", "b"]);
45
+ });
46
+ });
47
+ //# sourceMappingURL=registering-proxy-replay.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registering-proxy-replay.test.js","sourceRoot":"","sources":["../../src/tests/registering-proxy-replay.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,0BAAsC;AACtC,0CAAuC;AAEvC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,aAAkD,CAAC;IAEvD,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,GAAG,mBAAQ,CAAC,mBAAmB,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,mBAAQ,CAAC,mBAAmB,GAAG,aAAa,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,KAAK,GAAG,IAAI,oBAAgB,EAAqC,CAAC;QACxE,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAyC,EAAE,CAAC;QACxD,mBAAQ,CAAC,mBAAmB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAErE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,mBAAQ,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,oBAAgB,EAAwB,CAAC;QAC3D,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const responsible_module_1 = require("../responsible-module");
5
+ function frame(fileName, opts = {}) {
6
+ return {
7
+ getFileName: () => fileName,
8
+ getFunctionName: () => "functionName" in opts ? (opts.functionName ?? null) : "fn",
9
+ getTypeName: () => opts.typeName ?? null,
10
+ };
11
+ }
12
+ describe("findResponsibleFile", () => {
13
+ it("skips node_modules frames and walks to the user module", () => {
14
+ const entries = [{ id: "local", dir: "/app" }];
15
+ const trace = [
16
+ frame("/app/node_modules/@antelopejs/interface-core/dist/proxies.js"),
17
+ frame("/app/dist/pages/skins.js"),
18
+ ];
19
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("local");
20
+ });
21
+ it("skips non-loader node:internal frames", () => {
22
+ const entries = [{ id: "local", dir: "/app" }];
23
+ const trace = [
24
+ frame("node:internal/timers"),
25
+ frame("node:internal/process/task_queues"),
26
+ frame("/app/dist/index.js"),
27
+ ];
28
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("local");
29
+ });
30
+ it("returns the first non-implementor match even when an implementor appears earlier", () => {
31
+ const entries = [
32
+ { id: "cms", dir: "/project/cms", isImplementor: true },
33
+ { id: "playground", dir: "/project/cms/playground" },
34
+ ];
35
+ const trace = [
36
+ frame("/project/cms/dist/interfaces/cms/page.js"),
37
+ frame("/project/cms/dist/interfaces/cms/page.js"),
38
+ frame("/project/cms/playground/dist/table-view/drawer/page.js"),
39
+ ];
40
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("playground");
41
+ });
42
+ it("falls back to the first implementor match when no consumer frame matches", () => {
43
+ const entries = [
44
+ { id: "cms", dir: "/project/cms", isImplementor: true },
45
+ ];
46
+ const trace = [
47
+ frame("/project/cms/dist/interfaces/cms/page.js"),
48
+ frame("/project/cms/dist/implementations/cms/hooks.js"),
49
+ ];
50
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("cms");
51
+ });
52
+ it("returns undefined when no frame matches any module", () => {
53
+ const entries = [{ id: "local", dir: "/app" }];
54
+ const trace = [frame("/some/unrelated/file.js"), frame("/other/path.js")];
55
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal(undefined);
56
+ });
57
+ it("picks the longest matching folder on a single frame", () => {
58
+ const entries = [
59
+ { id: "cms", dir: "/project/cms", isImplementor: true },
60
+ { id: "playground", dir: "/project/cms/playground" },
61
+ ];
62
+ const trace = [
63
+ frame("/project/cms/playground/dist/table-view/drawer/page.js"),
64
+ ];
65
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("playground");
66
+ });
67
+ it("returns the consumer when the implementor lives inside its cache folder", () => {
68
+ const entries = [
69
+ { id: "local", dir: "/home/user/app" },
70
+ {
71
+ id: "cms",
72
+ dir: "/home/user/app/.antelope/cache/@antelopejs-private/cms",
73
+ isImplementor: true,
74
+ },
75
+ ];
76
+ const trace = [
77
+ frame("/home/user/app/.antelope/cache/@antelopejs-private/cms/dist/interfaces/cms/page.js"),
78
+ frame("/home/user/app/dist/pages/skins.js"),
79
+ ];
80
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("local");
81
+ });
82
+ it("walks past unregistered intermediate frames between implementor and consumer", () => {
83
+ const entries = [
84
+ { id: "cms", dir: "/project/cms", isImplementor: true },
85
+ { id: "playground", dir: "/project/cms/playground" },
86
+ ];
87
+ const trace = [
88
+ frame("/project/cms/dist/interfaces/cms/page.js"),
89
+ frame("/third-party/anon.js", { functionName: null, typeName: "Proxy" }),
90
+ frame("/project/cms/playground/dist/page.js"),
91
+ ];
92
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("playground");
93
+ });
94
+ it("stops at the module-loader boundary so top-level side effects are attributed to the loading module, not the requirer", () => {
95
+ const entries = [
96
+ { id: "cms", dir: "/project/cms", isImplementor: true },
97
+ { id: "playground", dir: "/project/cms/playground" },
98
+ ];
99
+ const trace = [
100
+ frame("/project/cms/dist/interfaces/cms/page.js"),
101
+ frame("/project/cms/dist/interfaces/cms/page.js"),
102
+ frame("node:internal/modules/cjs/loader"),
103
+ frame("node:internal/modules/helpers"),
104
+ frame("/project/cms/playground/dist/table-view/category.js"),
105
+ ];
106
+ (0, chai_1.expect)((0, responsible_module_1.findResponsibleFile)(trace, entries).module).to.equal("cms");
107
+ });
108
+ });
109
+ //# sourceMappingURL=responsible-module.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsible-module.test.js","sourceRoot":"","sources":["../../src/tests/responsible-module.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/interface-core",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "AntelopeJS core interface primitives - proxies, decorators, interface functions, and logging",
5
5
  "keywords": [
6
6
  "antelopejs",
@@ -85,12 +85,12 @@
85
85
  "@biomejs/biome": "2.3.2",
86
86
  "@types/chai": "^4.3.20",
87
87
  "@types/mocha": "^10.0.10",
88
- "@types/node": "^22.14.1",
88
+ "@types/node": "^22.19.15",
89
89
  "chai": "^4.5.0",
90
- "release-it": "^19.0.2",
90
+ "release-it": "^19.2.4",
91
91
  "release-it-changelogen": "^0.1.0",
92
- "rimraf": "^6.0.1",
93
- "typescript": "^5.8.3"
92
+ "rimraf": "^6.1.3",
93
+ "typescript": "^5.9.3"
94
94
  },
95
95
  "publishConfig": {
96
96
  "access": "public"