@descryy/adapter-java 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +47 -3
- package/dist/adapter.js.map +1 -1
- package/dist/client-base.d.ts +114 -0
- package/dist/client-base.d.ts.map +1 -0
- package/dist/client-base.js +102 -0
- package/dist/client-base.js.map +1 -0
- package/dist/client.d.ts +28 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +83 -4
- package/dist/client.js.map +1 -1
- package/dist/dto.d.ts +86 -0
- package/dist/dto.d.ts.map +1 -0
- package/dist/dto.js +198 -0
- package/dist/dto.js.map +1 -0
- package/dist/external.d.ts +169 -0
- package/dist/external.d.ts.map +1 -0
- package/dist/external.js +262 -0
- package/dist/external.js.map +1 -0
- package/dist/extract.d.ts.map +1 -1
- package/dist/extract.js +403 -4
- package/dist/extract.js.map +1 -1
- package/dist/parse.d.ts +32 -0
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +118 -6
- package/dist/parse.js.map +1 -1
- package/package.json +5 -5
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAML,KAAK,eAAe,EAGpB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAML,KAAK,eAAe,EAGpB,KAAK,eAAe,EAMrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAyB,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAItG,OAAO,EAA0C,QAAQ,EAAmB,MAAM,cAAc,CAAC;AAIjG,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC;;;;;;kCAMkC;AAClC,eAAO,MAAM,eAAe,EAAE,MAErB,CAAC;AACV,eAAO,MAAM,kBAAkB,wBAAyB,CAAC;AAsCzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;CAC1C;AAcD,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAsS/E;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/adapter.js
CHANGED
|
@@ -12,7 +12,7 @@ import { createHash } from "node:crypto";
|
|
|
12
12
|
import { createRequire } from "node:module";
|
|
13
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
14
14
|
import { join } from "node:path";
|
|
15
|
-
import { CLIENT_CALL_EXTRACTOR, ORM_EXTRACTOR, ROUTE_EXTRACTOR, ROUTE_HANDLER_EXTRACTOR, } from "@descryy/ir";
|
|
15
|
+
import { CLIENT_BASE_EXTRACTOR, CLIENT_CALL_EXTRACTOR, ORM_EXTRACTOR, ROUTE_EXTRACTOR, ROUTE_HANDLER_EXTRACTOR, } from "@descryy/ir";
|
|
16
16
|
import { discover, isolateFile, toRepoRelative } from "@descryy/adapter-common";
|
|
17
17
|
import { parserFor, parseText } from "@descryy/adapter-treesitter";
|
|
18
18
|
import { readUnit } from "./parse.js";
|
|
@@ -147,7 +147,23 @@ export function createJavaAdapter(options = {}) {
|
|
|
147
147
|
* `client-base-extractor` stays absent — no composed base URL is read,
|
|
148
148
|
* so DEC-164's strict patterns 08a/08b/08c are unaddressed.
|
|
149
149
|
*/
|
|
150
|
-
nodeTypes: [
|
|
150
|
+
nodeTypes: [
|
|
151
|
+
"MODULE",
|
|
152
|
+
"CLASS",
|
|
153
|
+
"FUNCTION",
|
|
154
|
+
"TEST_CASE",
|
|
155
|
+
"API_ROUTE",
|
|
156
|
+
"API_ENDPOINT",
|
|
157
|
+
"MODEL",
|
|
158
|
+
// `DTO`, and the reason DEC-043 refused it no longer holds HERE.
|
|
159
|
+
// It refused a name rule over three classes separable only by name,
|
|
160
|
+
// and that refusal stands — `dto.ts` never reads the class to decide.
|
|
161
|
+
// A class is a transport shape because a ROUTE declares it one:
|
|
162
|
+
// `@RestController` makes a handler's return type the response body,
|
|
163
|
+
// `@RequestBody` makes a parameter's type the request body. The
|
|
164
|
+
// markers are on the route, so the entity beside them is untouched.
|
|
165
|
+
"DTO",
|
|
166
|
+
],
|
|
151
167
|
edgeTypes: [
|
|
152
168
|
"IMPORTS",
|
|
153
169
|
"CALLS",
|
|
@@ -157,6 +173,23 @@ export function createJavaAdapter(options = {}) {
|
|
|
157
173
|
"USES_TYPE",
|
|
158
174
|
"SERVES_API",
|
|
159
175
|
"USES_API",
|
|
176
|
+
/**
|
|
177
|
+
* `READS` is declared because `extract.ts`'s `mappedFieldRead`
|
|
178
|
+
* emits it — golden 07, `FUNCTION --READS--> MODEL` for
|
|
179
|
+
* `order.getTotalAmount()`. It is admitted only where a JPA mapping
|
|
180
|
+
* and a JavaBeans accessor agree on the same column (the four
|
|
181
|
+
* conditions are written out there), and it carries R2: the edge
|
|
182
|
+
* names a member, it does not compare a shape, and the shape it
|
|
183
|
+
* points at is already the `MODEL` node's own R3 fact.
|
|
184
|
+
*
|
|
185
|
+
* `ASSIGNS` deliberately does **not** follow. A setter call is a
|
|
186
|
+
* write, and filing one as a read states the opposite of what the
|
|
187
|
+
* code does — but the write half needs its own admission rules and
|
|
188
|
+
* its own measurement, and declaring the edge type before the pass
|
|
189
|
+
* exists is how `adapter-php` once published reads that were
|
|
190
|
+
* writes.
|
|
191
|
+
*/
|
|
192
|
+
"READS",
|
|
160
193
|
],
|
|
161
194
|
hasCallHierarchy: false,
|
|
162
195
|
hasTypeHierarchy: false,
|
|
@@ -177,7 +210,18 @@ export function createJavaAdapter(options = {}) {
|
|
|
177
210
|
// reader supplies, already stated correctly in `frameworkCapabilities`
|
|
178
211
|
// below. Listing it twice claimed five bound extractors where four exist.
|
|
179
212
|
frameworkExtractors: ["spring", "jaxrs", "jpa", "spring-data-mongodb"],
|
|
180
|
-
|
|
213
|
+
// `client-base-extractor` (DEC-164): declared because it is emitted —
|
|
214
|
+
// a `WebClient.create(base)`/`.baseUrl(base)`/`.rootUri(base)`
|
|
215
|
+
// declaration this reader can see composes per DEC-097 with the origin
|
|
216
|
+
// stripped, and every caller whose receiver's declaration it saw
|
|
217
|
+
// carries `attrs.clientBase`.
|
|
218
|
+
frameworkCapabilities: [
|
|
219
|
+
ROUTE_EXTRACTOR,
|
|
220
|
+
ORM_EXTRACTOR,
|
|
221
|
+
CLIENT_CALL_EXTRACTOR,
|
|
222
|
+
CLIENT_BASE_EXTRACTOR,
|
|
223
|
+
ROUTE_HANDLER_EXTRACTOR,
|
|
224
|
+
],
|
|
181
225
|
};
|
|
182
226
|
},
|
|
183
227
|
async prepare(ctx) {
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The client-base extractor for Java — DEC-164's contract.
|
|
3
|
+
*
|
|
4
|
+
* Spring is a base-on-the-client framework twice over. `WebClient.create(base)`
|
|
5
|
+
* and `WebClient.builder().baseUrl(base)` hold the origin on the client, and
|
|
6
|
+
* `RestTemplateBuilder.rootUri(base)` does the same for `RestTemplate`; a
|
|
7
|
+
* later `.uri("orders/{id}", id)` resolves against it at run time. So this
|
|
8
|
+
* binding takes C#'s shape — base on the client object, relative path at the
|
|
9
|
+
* call site — and not the spliced shape `adapter-go`, `adapter-rust` and
|
|
10
|
+
* `adapter-swift` had to use.
|
|
11
|
+
*
|
|
12
|
+
* `client.ts` already named this exact case before it could read it: a path
|
|
13
|
+
* with no leading slash was refused as a `capability-gap` whose own text says
|
|
14
|
+
* it "may resolve against a configured base URI this call site does not
|
|
15
|
+
* state". This is that base, read.
|
|
16
|
+
*
|
|
17
|
+
* ## Three states, and where each one comes from
|
|
18
|
+
*
|
|
19
|
+
* A client declaration whose initializer this reader can see and which sets a
|
|
20
|
+
* base earns `resolved` (a string literal, or a `String` constant in the same
|
|
21
|
+
* compilation unit) or `unresolved` (anything else — `System.getenv`, a
|
|
22
|
+
* config read, an injected value). A client declaration whose initializer is
|
|
23
|
+
* visible and sets NO base — `new RestTemplate()` — earns `none`, which is a
|
|
24
|
+
* positive statement. A receiver whose declaration this reader never saw
|
|
25
|
+
* earns DEC-164's fourth state, the field's own absence: the reader did not
|
|
26
|
+
* determine a base, which is not the same claim as there being none.
|
|
27
|
+
*
|
|
28
|
+
* ## The origin rule, and why it is evidence rather than a guess
|
|
29
|
+
*
|
|
30
|
+
* An absolute URL written at a call site is refused as out-of-scope
|
|
31
|
+
* (DEC-113), because the origin usually names a host this repository does not
|
|
32
|
+
* serve and DEC-014 makes an endpoint host-free. That stays, with the one
|
|
33
|
+
* exception `adapter-typescript` and `adapter-python` already adopted: **an
|
|
34
|
+
* origin some base in this same program resolves to is an origin this program
|
|
35
|
+
* treats as its own API.** Java needs it program-wide rather than per file,
|
|
36
|
+
* because one public class per file is not a style here but a rule — the
|
|
37
|
+
* constant and the absolute call site cannot be in the same file.
|
|
38
|
+
*
|
|
39
|
+
* ## The disclosed limit
|
|
40
|
+
*
|
|
41
|
+
* The constant table is per compilation unit. `OtherClass.API_BASE` read
|
|
42
|
+
* across files stays `unresolved` — a recall gap, never a precision one
|
|
43
|
+
* (rule 2), and the refusal row names the expression it could not read.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* DEC-164's contract, minus its fourth state — the field's own absence from
|
|
47
|
+
* `attrs`, which is a fact about the adapter rather than a value this type
|
|
48
|
+
* can hold.
|
|
49
|
+
*/
|
|
50
|
+
export type ClientBaseResult = {
|
|
51
|
+
/** A base traced to a literal. `path` is DEC-097's kept prefix, origin already stripped. */
|
|
52
|
+
readonly state: "resolved";
|
|
53
|
+
readonly path: string;
|
|
54
|
+
}
|
|
55
|
+
/** No base-setting mechanism in play. A positive statement, not a default. */
|
|
56
|
+
| {
|
|
57
|
+
readonly state: "none";
|
|
58
|
+
} | {
|
|
59
|
+
/** A base was configured and its value is not a literal this reader can evaluate. */
|
|
60
|
+
readonly state: "unresolved";
|
|
61
|
+
readonly why: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* DEC-097: the origin — scheme, host, port — is removed and the path prefix
|
|
65
|
+
* kept. `undefined` when the value is not an absolute URI this reader can
|
|
66
|
+
* split, which is refused rather than guessed at.
|
|
67
|
+
*
|
|
68
|
+
* Shared verbatim with `adapter-typescript`, `adapter-python`, `adapter-go`,
|
|
69
|
+
* `adapter-rust` and `adapter-swift` so they cannot drift; another spelling of
|
|
70
|
+
* this split is how a host reaches an id.
|
|
71
|
+
*/
|
|
72
|
+
export declare function pathPrefixOf(uri: string): string | undefined;
|
|
73
|
+
/** The scheme/host/port of an absolute URI, or `undefined` when it is not one. */
|
|
74
|
+
export declare function originOf(uri: string): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* The prefix a base literal contributes, or `undefined` when it contributes
|
|
77
|
+
* none this reader can state.
|
|
78
|
+
*
|
|
79
|
+
* Two shapes resolve: an absolute URI, whose origin is discarded, and a
|
|
80
|
+
* repository-relative path, which is already what it composes to. Anything
|
|
81
|
+
* else — `"api/v1"`, with neither an origin to strip nor a leading slash to
|
|
82
|
+
* anchor it — makes no claim.
|
|
83
|
+
*/
|
|
84
|
+
export declare function prefixOfBaseLiteral(value: string): string | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* One client declaration's own account of its base, as the parse saw it.
|
|
87
|
+
*
|
|
88
|
+
* `kind: "none"` is a real reading and not a default — it means the
|
|
89
|
+
* initializer was visible and set no base at all (`new RestTemplate()`). A
|
|
90
|
+
* declaration this reader never saw produces no site, which is DEC-164's
|
|
91
|
+
* fourth state.
|
|
92
|
+
*/
|
|
93
|
+
export type JavaBaseSite = {
|
|
94
|
+
readonly kind: "base";
|
|
95
|
+
/** The argument's own text, for a refusal that has to name what blocked it. */
|
|
96
|
+
readonly text: string;
|
|
97
|
+
/** Present when the argument is a bare string literal. */
|
|
98
|
+
readonly literal?: string;
|
|
99
|
+
/** Present when the argument is a bare name this reader can look up. */
|
|
100
|
+
readonly name?: string;
|
|
101
|
+
} | {
|
|
102
|
+
readonly kind: "none";
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Resolve a base site against the compilation unit's own `String` constants.
|
|
106
|
+
*
|
|
107
|
+
* `undefined` is never returned — a site exists precisely because the
|
|
108
|
+
* declaration was read, so one of the three states always applies.
|
|
109
|
+
*/
|
|
110
|
+
export declare function resolveBaseSite(site: JavaBaseSite, constants: ReadonlyMap<string, string>): {
|
|
111
|
+
readonly base: ClientBaseResult;
|
|
112
|
+
readonly origin?: string;
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=client-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-base.d.ts","sourceRoot":"","sources":["../src/client-base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IACE,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AACH,8EAA8E;GAC5E;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IACE,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAIN;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5D;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAGD;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9B;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAa/D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The client-base extractor for Java — DEC-164's contract.
|
|
3
|
+
*
|
|
4
|
+
* Spring is a base-on-the-client framework twice over. `WebClient.create(base)`
|
|
5
|
+
* and `WebClient.builder().baseUrl(base)` hold the origin on the client, and
|
|
6
|
+
* `RestTemplateBuilder.rootUri(base)` does the same for `RestTemplate`; a
|
|
7
|
+
* later `.uri("orders/{id}", id)` resolves against it at run time. So this
|
|
8
|
+
* binding takes C#'s shape — base on the client object, relative path at the
|
|
9
|
+
* call site — and not the spliced shape `adapter-go`, `adapter-rust` and
|
|
10
|
+
* `adapter-swift` had to use.
|
|
11
|
+
*
|
|
12
|
+
* `client.ts` already named this exact case before it could read it: a path
|
|
13
|
+
* with no leading slash was refused as a `capability-gap` whose own text says
|
|
14
|
+
* it "may resolve against a configured base URI this call site does not
|
|
15
|
+
* state". This is that base, read.
|
|
16
|
+
*
|
|
17
|
+
* ## Three states, and where each one comes from
|
|
18
|
+
*
|
|
19
|
+
* A client declaration whose initializer this reader can see and which sets a
|
|
20
|
+
* base earns `resolved` (a string literal, or a `String` constant in the same
|
|
21
|
+
* compilation unit) or `unresolved` (anything else — `System.getenv`, a
|
|
22
|
+
* config read, an injected value). A client declaration whose initializer is
|
|
23
|
+
* visible and sets NO base — `new RestTemplate()` — earns `none`, which is a
|
|
24
|
+
* positive statement. A receiver whose declaration this reader never saw
|
|
25
|
+
* earns DEC-164's fourth state, the field's own absence: the reader did not
|
|
26
|
+
* determine a base, which is not the same claim as there being none.
|
|
27
|
+
*
|
|
28
|
+
* ## The origin rule, and why it is evidence rather than a guess
|
|
29
|
+
*
|
|
30
|
+
* An absolute URL written at a call site is refused as out-of-scope
|
|
31
|
+
* (DEC-113), because the origin usually names a host this repository does not
|
|
32
|
+
* serve and DEC-014 makes an endpoint host-free. That stays, with the one
|
|
33
|
+
* exception `adapter-typescript` and `adapter-python` already adopted: **an
|
|
34
|
+
* origin some base in this same program resolves to is an origin this program
|
|
35
|
+
* treats as its own API.** Java needs it program-wide rather than per file,
|
|
36
|
+
* because one public class per file is not a style here but a rule — the
|
|
37
|
+
* constant and the absolute call site cannot be in the same file.
|
|
38
|
+
*
|
|
39
|
+
* ## The disclosed limit
|
|
40
|
+
*
|
|
41
|
+
* The constant table is per compilation unit. `OtherClass.API_BASE` read
|
|
42
|
+
* across files stays `unresolved` — a recall gap, never a precision one
|
|
43
|
+
* (rule 2), and the refusal row names the expression it could not read.
|
|
44
|
+
*/
|
|
45
|
+
const ABSOLUTE = /^([a-zA-Z][a-zA-Z0-9+.-]*:\/\/[^/?#]*)(\/[^?#]*)?/;
|
|
46
|
+
/**
|
|
47
|
+
* DEC-097: the origin — scheme, host, port — is removed and the path prefix
|
|
48
|
+
* kept. `undefined` when the value is not an absolute URI this reader can
|
|
49
|
+
* split, which is refused rather than guessed at.
|
|
50
|
+
*
|
|
51
|
+
* Shared verbatim with `adapter-typescript`, `adapter-python`, `adapter-go`,
|
|
52
|
+
* `adapter-rust` and `adapter-swift` so they cannot drift; another spelling of
|
|
53
|
+
* this split is how a host reaches an id.
|
|
54
|
+
*/
|
|
55
|
+
export function pathPrefixOf(uri) {
|
|
56
|
+
const match = ABSOLUTE.exec(uri.trim());
|
|
57
|
+
if (match === null)
|
|
58
|
+
return undefined;
|
|
59
|
+
const path = match[2] ?? "";
|
|
60
|
+
return path === "/" ? "" : path.replace(/\/+$/, "");
|
|
61
|
+
}
|
|
62
|
+
/** The scheme/host/port of an absolute URI, or `undefined` when it is not one. */
|
|
63
|
+
export function originOf(uri) {
|
|
64
|
+
const match = ABSOLUTE.exec(uri.trim());
|
|
65
|
+
return match === null ? undefined : match[1];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The prefix a base literal contributes, or `undefined` when it contributes
|
|
69
|
+
* none this reader can state.
|
|
70
|
+
*
|
|
71
|
+
* Two shapes resolve: an absolute URI, whose origin is discarded, and a
|
|
72
|
+
* repository-relative path, which is already what it composes to. Anything
|
|
73
|
+
* else — `"api/v1"`, with neither an origin to strip nor a leading slash to
|
|
74
|
+
* anchor it — makes no claim.
|
|
75
|
+
*/
|
|
76
|
+
export function prefixOfBaseLiteral(value) {
|
|
77
|
+
if (value.startsWith("/"))
|
|
78
|
+
return value.length > 1 ? value.replace(/\/+$/, "") : "";
|
|
79
|
+
return pathPrefixOf(value);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve a base site against the compilation unit's own `String` constants.
|
|
83
|
+
*
|
|
84
|
+
* `undefined` is never returned — a site exists precisely because the
|
|
85
|
+
* declaration was read, so one of the three states always applies.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveBaseSite(site, constants) {
|
|
88
|
+
if (site.kind === "none")
|
|
89
|
+
return { base: { state: "none" } };
|
|
90
|
+
const value = site.literal ?? (site.name === undefined ? undefined : constants.get(site.name));
|
|
91
|
+
if (value === undefined) {
|
|
92
|
+
return { base: { state: "unresolved", why: site.text.slice(0, 120) } };
|
|
93
|
+
}
|
|
94
|
+
const prefix = prefixOfBaseLiteral(value);
|
|
95
|
+
// A literal that is neither absolute nor repository-relative — `"api/v1"`.
|
|
96
|
+
// Nothing to strip and nothing to anchor it to, so no claim is made.
|
|
97
|
+
if (prefix === undefined)
|
|
98
|
+
return { base: { state: "unresolved", why: value.slice(0, 120) } };
|
|
99
|
+
const origin = originOf(value);
|
|
100
|
+
return { base: { state: "resolved", path: prefix }, ...(origin === undefined ? {} : { origin }) };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=client-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-base.js","sourceRoot":"","sources":["../src/client-base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAsBH,MAAM,QAAQ,GAAG,mDAAmD,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAuBD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAkB,EAClB,SAAsC;IAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAE7D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1C,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC7F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACpG,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -63,6 +63,10 @@
|
|
|
63
63
|
*/
|
|
64
64
|
import { type IdentityScope, type IRNode } from "@descryy/ir";
|
|
65
65
|
import type { JavaMethod, JavaRef } from "./parse.ts";
|
|
66
|
+
import { type ClientBaseResult } from "./client-base.ts";
|
|
67
|
+
export type { ClientBaseResult };
|
|
68
|
+
/** The origin set before any base has been read. Named so a caller cannot pass `new Set()` by accident and mean something else. */
|
|
69
|
+
export declare const NO_KNOWN_ORIGINS: ReadonlySet<string>;
|
|
66
70
|
export interface ClientCall {
|
|
67
71
|
/** The `FUNCTION` node making the call. */
|
|
68
72
|
readonly fromId: string;
|
|
@@ -72,6 +76,12 @@ export interface ClientCall {
|
|
|
72
76
|
readonly line: number;
|
|
73
77
|
/** `test` when the enclosing method is a test case, else `production`. */
|
|
74
78
|
readonly callerKind: "test" | "production";
|
|
79
|
+
/**
|
|
80
|
+
* DEC-164's contract — see `client-base.ts`. `undefined` is the fourth
|
|
81
|
+
* state: this reader never saw the receiver's declaration, so it did not
|
|
82
|
+
* determine a base, which is not the same claim as there being none.
|
|
83
|
+
*/
|
|
84
|
+
readonly clientBase?: ClientBaseResult;
|
|
75
85
|
}
|
|
76
86
|
export interface ClientRefusal {
|
|
77
87
|
readonly fromId: string;
|
|
@@ -85,6 +95,14 @@ export interface ClientRefusal {
|
|
|
85
95
|
/** Diagnostic only, not part of DEC-242 — see `adapter-rust/src/client.ts`.
|
|
86
96
|
* Present only on `diagnoseArgument`'s generic fallthrough. */
|
|
87
97
|
readonly argumentKind?: "field" | "call" | "concatenation" | "other";
|
|
98
|
+
/** DEC-164's state, when this reader reached one. See `client-base.ts`. */
|
|
99
|
+
readonly clientBase?: ClientBaseResult;
|
|
100
|
+
/**
|
|
101
|
+
* The call's OWN path, with the unreadable base left off — golden 08b's
|
|
102
|
+
* requirement that a refusal name both halves. Without it the row says a
|
|
103
|
+
* base was unreadable and cannot say which call site it belonged to.
|
|
104
|
+
*/
|
|
105
|
+
readonly callPath?: string;
|
|
88
106
|
}
|
|
89
107
|
export type BaseRefusalClass = "value-unknown" | "varies-per-call" | "capability-gap";
|
|
90
108
|
/**
|
|
@@ -107,7 +125,16 @@ export declare function candidateClientRefs(method: JavaMethod): readonly (JavaR
|
|
|
107
125
|
* receiver to its declared type's simple name and is supplied by the caller
|
|
108
126
|
* — the scope rules live in `extract.ts`, and a second copy would drift.
|
|
109
127
|
*/
|
|
110
|
-
export declare function clientCalls(method: JavaMethod, fromId: string, typeOfReceiver: (name: string) => string | undefined, inTestSourceSet: boolean
|
|
128
|
+
export declare function clientCalls(method: JavaMethod, fromId: string, typeOfReceiver: (name: string) => string | undefined, inTestSourceSet: boolean,
|
|
129
|
+
/**
|
|
130
|
+
* DEC-164: the base configured on the receiver named here, or `undefined`
|
|
131
|
+
* when this reader never saw its declaration. Supplied by `extract.ts`,
|
|
132
|
+
* which holds the scope tables a second copy would drift from — the same
|
|
133
|
+
* division of labour `typeOfReceiver` already keeps.
|
|
134
|
+
*/
|
|
135
|
+
clientBaseOfReceiver?: (name: string) => ClientBaseResult | undefined,
|
|
136
|
+
/** Origins some base in this same program resolves to — see `client-base.ts`'s header. */
|
|
137
|
+
knownOrigins?: ReadonlySet<string>): {
|
|
111
138
|
readonly calls: readonly ClientCall[];
|
|
112
139
|
readonly refusals: readonly ClientRefusal[];
|
|
113
140
|
};
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,mIAAmI;AACnI,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAa,CAAC;AA0G/D,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sFAAsF;IACtF,QAAQ,CAAC,YAAY,EAAE,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;IACrE;oEACgE;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC;IACrE,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAYD,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAmEtF;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,GACjB,SAAS,CAAC,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAQtD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACpD,eAAe,EAAE,OAAO;AACxB;;;;;GAKG;AACH,oBAAoB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAA2B;AACtF,0FAA0F;AAC1F,YAAY,GAAE,WAAW,CAAC,MAAM,CAAoB,GACnD;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,CAyNxF;AAED;+EAC+E;AAC/E,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GACtC,MAAM,CAaR"}
|
package/dist/client.js
CHANGED
|
@@ -62,6 +62,9 @@
|
|
|
62
62
|
* missing the hard way, a guard that dropped 113 of 140 call sites silently.
|
|
63
63
|
*/
|
|
64
64
|
import { endpointQsp, nodeId } from "@descryy/ir";
|
|
65
|
+
import { originOf, pathPrefixOf } from "./client-base.js";
|
|
66
|
+
/** The origin set before any base has been read. Named so a caller cannot pass `new Set()` by accident and mean something else. */
|
|
67
|
+
export const NO_KNOWN_ORIGINS = new Set();
|
|
65
68
|
/**
|
|
66
69
|
* Client types whose methods name an outbound HTTP call.
|
|
67
70
|
*
|
|
@@ -241,12 +244,57 @@ export function candidateClientRefs(method) {
|
|
|
241
244
|
* receiver to its declared type's simple name and is supplied by the caller
|
|
242
245
|
* — the scope rules live in `extract.ts`, and a second copy would drift.
|
|
243
246
|
*/
|
|
244
|
-
export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet
|
|
247
|
+
export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet,
|
|
248
|
+
/**
|
|
249
|
+
* DEC-164: the base configured on the receiver named here, or `undefined`
|
|
250
|
+
* when this reader never saw its declaration. Supplied by `extract.ts`,
|
|
251
|
+
* which holds the scope tables a second copy would drift from — the same
|
|
252
|
+
* division of labour `typeOfReceiver` already keeps.
|
|
253
|
+
*/
|
|
254
|
+
clientBaseOfReceiver = () => undefined,
|
|
255
|
+
/** Origins some base in this same program resolves to — see `client-base.ts`'s header. */
|
|
256
|
+
knownOrigins = NO_KNOWN_ORIGINS) {
|
|
245
257
|
const calls = [];
|
|
246
258
|
const refusals = [];
|
|
259
|
+
/**
|
|
260
|
+
* DEC-164's 08c, and the one narrow exception to DEC-113: an origin some
|
|
261
|
+
* base in this same program resolves to is an origin this program treats as
|
|
262
|
+
* its own API, so the path under it is a path in this repository. A bare
|
|
263
|
+
* origin with no path is not an endpoint anything serves.
|
|
264
|
+
*/
|
|
265
|
+
const pathAtKnownOrigin = (literal) => {
|
|
266
|
+
const origin = originOf(literal);
|
|
267
|
+
if (origin === undefined || !knownOrigins.has(origin))
|
|
268
|
+
return undefined;
|
|
269
|
+
const cut = literal.indexOf("?");
|
|
270
|
+
const path = pathPrefixOf(cut === -1 ? literal : literal.slice(0, cut));
|
|
271
|
+
return path === undefined || path === "" ? undefined : path;
|
|
272
|
+
};
|
|
247
273
|
/** Read `ref`'s first argument as a path and push a `ClientCall` or refusal
|
|
248
274
|
* — the shared tail for a verb from `VERB` or from {@link BUILDER_VERB}. */
|
|
249
|
-
const readPathAndEmit = (receiverType, ref, verb, refuse
|
|
275
|
+
const readPathAndEmit = (receiverType, ref, verb, refuse,
|
|
276
|
+
/** The name whose declaration carries the base — the CLIENT, not the fluent-chain step. */
|
|
277
|
+
baseHolder) => {
|
|
278
|
+
const clientBase = clientBaseOfReceiver(baseHolder);
|
|
279
|
+
const carry = clientBase === undefined ? {} : { clientBase };
|
|
280
|
+
if (clientBase?.state === "unresolved" && ref.firstStringArgument !== undefined) {
|
|
281
|
+
// DEC-164 §2: a base injected from outside the readable source cannot be
|
|
282
|
+
// composed and must not be guessed. No edge, and the row names BOTH
|
|
283
|
+
// halves — the blocking expression and the call's own path.
|
|
284
|
+
const own = ref.firstStringArgument.split("?", 1)[0] ?? ref.firstStringArgument;
|
|
285
|
+
refusals.push({
|
|
286
|
+
fromId,
|
|
287
|
+
raw: ref.raw,
|
|
288
|
+
line: ref.line,
|
|
289
|
+
reason: `an HTTP call through ${receiverType} to \`${ref.firstStringArgument}\`, whose base this reader ` +
|
|
290
|
+
`traced to \`${clientBase.why}\` and could not read as a literal. DEC-164 refuses rather than ` +
|
|
291
|
+
`guesses what an unreadable base composes to.`,
|
|
292
|
+
...diagnoseArgument(clientBase.why, method.parameterNames),
|
|
293
|
+
clientBase,
|
|
294
|
+
callPath: own.startsWith("/") ? own : `/${own}`,
|
|
295
|
+
});
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
250
298
|
if (ref.firstStringArgument === undefined) {
|
|
251
299
|
refuse(`an HTTP call through ${receiverType}, but its path is not a bare string literal — a ` +
|
|
252
300
|
`variable, a concatenation, or a builder. A path assembled at run time is not one ` +
|
|
@@ -257,10 +305,40 @@ export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet) {
|
|
|
257
305
|
const template = relativePath(ref.firstStringArgument);
|
|
258
306
|
if (template === undefined) {
|
|
259
307
|
if (namesAnotherOrigin(ref.firstStringArgument)) {
|
|
308
|
+
const under = pathAtKnownOrigin(ref.firstStringArgument);
|
|
309
|
+
if (under !== undefined) {
|
|
310
|
+
calls.push({
|
|
311
|
+
fromId,
|
|
312
|
+
method: ref.name,
|
|
313
|
+
template: under,
|
|
314
|
+
verb,
|
|
315
|
+
line: ref.line,
|
|
316
|
+
callerKind: method.isTest || inTestSourceSet ? "test" : "production",
|
|
317
|
+
...carry,
|
|
318
|
+
});
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
260
321
|
refuse(`an HTTP call through ${receiverType} to \`${ref.firstStringArgument}\`, which names ` +
|
|
261
322
|
`another origin rather than a path in this repository. A scope boundary, not a gap.`, { blockedBy: null, refusalClass: "out-of-scope" });
|
|
262
323
|
return;
|
|
263
324
|
}
|
|
325
|
+
// DEC-164: a base this reader DID read turns the bare-relative path
|
|
326
|
+
// from an undetermined one into a composed one. The refusal below is
|
|
327
|
+
// the case where there is no such base, and its own text has always
|
|
328
|
+
// said so ("against a configured base URI this call site does not
|
|
329
|
+
// state").
|
|
330
|
+
if (clientBase?.state === "resolved") {
|
|
331
|
+
calls.push({
|
|
332
|
+
fromId,
|
|
333
|
+
method: ref.name,
|
|
334
|
+
template: `${clientBase.path}/${(ref.firstStringArgument.split("?", 1)[0] ?? "").replace(/^\/+/, "")}`,
|
|
335
|
+
verb,
|
|
336
|
+
line: ref.line,
|
|
337
|
+
callerKind: method.isTest || inTestSourceSet ? "test" : "production",
|
|
338
|
+
...carry,
|
|
339
|
+
});
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
264
342
|
// A bare relative path, no leading slash, no scheme — structurally like
|
|
265
343
|
// C#'s `HttpClient.BaseAddress` case. May resolve against a configured
|
|
266
344
|
// root URI (`RootUriTemplateHandler`, `baseUrl(...)`) this reader can't
|
|
@@ -279,6 +357,7 @@ export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet) {
|
|
|
279
357
|
template,
|
|
280
358
|
verb,
|
|
281
359
|
line: ref.line,
|
|
360
|
+
...carry,
|
|
282
361
|
// Source set, not just the annotation: `method.isTest` reads `@Test`,
|
|
283
362
|
// but shopizer's `ServicesTestSupport.getHeader` drives
|
|
284
363
|
// `TestRestTemplate` from an unannotated helper — annotation alone
|
|
@@ -312,7 +391,7 @@ export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet) {
|
|
|
312
391
|
`or none, and root-cause traversal would follow it.`, CAPABILITY_GAP);
|
|
313
392
|
continue;
|
|
314
393
|
}
|
|
315
|
-
readPathAndEmit(receiverType, ref, verb, refuse);
|
|
394
|
+
readPathAndEmit(receiverType, ref, verb, refuse, base);
|
|
316
395
|
continue;
|
|
317
396
|
}
|
|
318
397
|
const receiverType = typeOfReceiver(ref.receiver);
|
|
@@ -347,7 +426,7 @@ export function clientCalls(method, fromId, typeOfReceiver, inTestSourceSet) {
|
|
|
347
426
|
`or none, and root-cause traversal would follow it.`, CAPABILITY_GAP);
|
|
348
427
|
continue;
|
|
349
428
|
}
|
|
350
|
-
readPathAndEmit(receiverType, ref, verb, refuse);
|
|
429
|
+
readPathAndEmit(receiverType, ref, verb, refuse, ref.receiver);
|
|
351
430
|
}
|
|
352
431
|
return { calls, refusals };
|
|
353
432
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|