@typespec/http 0.54.0-dev.5 → 0.54.0-dev.6
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/src/lib.d.ts +5 -5
- package/dist/src/lib.js +1 -1
- package/dist/src/lib.js.map +1 -1
- package/dist/src/validate.d.ts.map +1 -1
- package/dist/src/validate.js +44 -13
- package/dist/src/validate.js.map +1 -1
- package/package.json +1 -1
package/dist/src/lib.d.ts
CHANGED
|
@@ -48,7 +48,7 @@ export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
|
48
48
|
readonly default: import("@typespec/compiler").CallableMessage<[string]>;
|
|
49
49
|
};
|
|
50
50
|
"shared-inconsistency": {
|
|
51
|
-
readonly default: "
|
|
51
|
+
readonly default: import("@typespec/compiler").CallableMessage<[string, string]>;
|
|
52
52
|
};
|
|
53
53
|
"write-visibility-not-supported": {
|
|
54
54
|
readonly default: "@visibility(\"write\") is not supported. Use @visibility(\"update\"), @visibility(\"create\") or @visibility(\"create\", \"update\") as appropriate.";
|
|
@@ -113,7 +113,7 @@ export declare const reportDiagnostic: <C extends "http-verb-duplicate" | "http-
|
|
|
113
113
|
readonly default: import("@typespec/compiler").CallableMessage<[string]>;
|
|
114
114
|
};
|
|
115
115
|
"shared-inconsistency": {
|
|
116
|
-
readonly default: "
|
|
116
|
+
readonly default: import("@typespec/compiler").CallableMessage<[string, string]>;
|
|
117
117
|
};
|
|
118
118
|
"write-visibility-not-supported": {
|
|
119
119
|
readonly default: "@visibility(\"write\") is not supported. Use @visibility(\"update\"), @visibility(\"create\") or @visibility(\"create\", \"update\") as appropriate.";
|
|
@@ -177,7 +177,7 @@ export declare const reportDiagnostic: <C extends "http-verb-duplicate" | "http-
|
|
|
177
177
|
readonly default: import("@typespec/compiler").CallableMessage<[string]>;
|
|
178
178
|
};
|
|
179
179
|
"shared-inconsistency": {
|
|
180
|
-
readonly default: "
|
|
180
|
+
readonly default: import("@typespec/compiler").CallableMessage<[string, string]>;
|
|
181
181
|
};
|
|
182
182
|
"write-visibility-not-supported": {
|
|
183
183
|
readonly default: "@visibility(\"write\") is not supported. Use @visibility(\"update\"), @visibility(\"create\") or @visibility(\"create\", \"update\") as appropriate.";
|
|
@@ -241,7 +241,7 @@ export declare const reportDiagnostic: <C extends "http-verb-duplicate" | "http-
|
|
|
241
241
|
readonly default: import("@typespec/compiler").CallableMessage<[string]>;
|
|
242
242
|
};
|
|
243
243
|
"shared-inconsistency": {
|
|
244
|
-
readonly default: "
|
|
244
|
+
readonly default: import("@typespec/compiler").CallableMessage<[string, string]>;
|
|
245
245
|
};
|
|
246
246
|
"write-visibility-not-supported": {
|
|
247
247
|
readonly default: "@visibility(\"write\") is not supported. Use @visibility(\"update\"), @visibility(\"create\") or @visibility(\"create\", \"update\") as appropriate.";
|
|
@@ -305,7 +305,7 @@ export declare const reportDiagnostic: <C extends "http-verb-duplicate" | "http-
|
|
|
305
305
|
readonly default: import("@typespec/compiler").CallableMessage<[string]>;
|
|
306
306
|
};
|
|
307
307
|
"shared-inconsistency": {
|
|
308
|
-
readonly default: "
|
|
308
|
+
readonly default: import("@typespec/compiler").CallableMessage<[string, string]>;
|
|
309
309
|
};
|
|
310
310
|
"write-visibility-not-supported": {
|
|
311
311
|
readonly default: "@visibility(\"write\") is not supported. Use @visibility(\"update\"), @visibility(\"create\") or @visibility(\"create\", \"update\") as appropriate.";
|
package/dist/src/lib.js
CHANGED
|
@@ -98,7 +98,7 @@ export const $lib = createTypeSpecLibrary({
|
|
|
98
98
|
"shared-inconsistency": {
|
|
99
99
|
severity: "error",
|
|
100
100
|
messages: {
|
|
101
|
-
default:
|
|
101
|
+
default: paramMessage `Each operation routed at "${"verb"} ${"path"}" needs to have the @sharedRoute decorator.`,
|
|
102
102
|
},
|
|
103
103
|
},
|
|
104
104
|
"write-visibility-not-supported": {
|
package/dist/src/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;QACX,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,gCAAgC,YAAY,EAAE;aACpE;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,eAAe,MAAM,SAAS,YAAY,EAAE;aAClE;SACF;QACD,oBAAoB,EAAE;YACpB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,2BAA2B,OAAO,uCAAuC;aAC/F;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,mBAAmB,WAAW,uBAAuB;aAC3E;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,kCAAkC,OAAO,wCAAwC;aACvG;SACF;QACD,gBAAgB,EAAE;YAChB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,kDAAkD;gBAC3D,oBAAoB,EAClB,4FAA4F;gBAC9F,kBAAkB,EAChB,iGAAiG;aACpG;SACF;QACD,2BAA2B,EAAE;YAC3B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,SAAS,EAAE,sEAAsE;aAClF;SACF;QACD,gCAAgC,EAAE;YAChC,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,SAAS,WAAW,yBAAyB,OAAO,GAAG;aAC7E;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,wBAAwB,eAAe,gBAAgB,MAAM,IAAI,MAAM,IAAI;aACjG;SACF;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,wEAAwE;aAClF;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EACL,6FAA6F;gBAC/F,KAAK,EAAE,iEAAiE;aACzE;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,4EAA4E;aACtF;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,yDAAyD;aACnE;SACF;QACD,kBAAkB,EAAE;YAClB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,0DAA0D,WAAW,mEAAmE;aAC9J;SACF;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,YAAY,MAAM,sEAAsE;aAC9G;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAO3C"}
|
package/dist/src/validate.js
CHANGED
|
@@ -7,20 +7,51 @@ export function $onValidate(program) {
|
|
|
7
7
|
if (diagnostics.length > 0) {
|
|
8
8
|
program.reportDiagnostics(diagnostics);
|
|
9
9
|
}
|
|
10
|
+
validateSharedRouteConsistency(program, services);
|
|
11
|
+
}
|
|
12
|
+
function groupHttpOperations(operations) {
|
|
13
|
+
const paths = new Map();
|
|
14
|
+
for (const operation of operations) {
|
|
15
|
+
const { verb, path } = operation;
|
|
16
|
+
let pathOps = paths.get(path);
|
|
17
|
+
if (pathOps === undefined) {
|
|
18
|
+
pathOps = new Map();
|
|
19
|
+
paths.set(path, pathOps);
|
|
20
|
+
}
|
|
21
|
+
const ops = pathOps.get(verb);
|
|
22
|
+
if (ops === undefined) {
|
|
23
|
+
pathOps.set(verb, [operation]);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
ops.push(operation);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return paths;
|
|
30
|
+
}
|
|
31
|
+
function validateSharedRouteConsistency(program, services) {
|
|
10
32
|
for (const service of services) {
|
|
11
|
-
const paths =
|
|
12
|
-
for (const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
33
|
+
const paths = groupHttpOperations(service.operations);
|
|
34
|
+
for (const pathOps of paths.values()) {
|
|
35
|
+
for (const ops of pathOps.values()) {
|
|
36
|
+
let hasShared = false;
|
|
37
|
+
let hasNonShared = false;
|
|
38
|
+
for (const op of ops) {
|
|
39
|
+
if (isSharedRoute(program, op.operation)) {
|
|
40
|
+
hasShared = true;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
hasNonShared = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (hasShared && hasNonShared) {
|
|
47
|
+
for (const op of ops) {
|
|
48
|
+
reportDiagnostic(program, {
|
|
49
|
+
code: "shared-inconsistency",
|
|
50
|
+
target: op.operation,
|
|
51
|
+
format: { verb: op.verb, path: op.path },
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
24
55
|
}
|
|
25
56
|
}
|
|
26
57
|
}
|
package/dist/src/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IACD,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAA2B;IAE3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwC,CAAC;IAE9D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;QACjC,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;YAC7C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,8BAA8B,CAAC,OAAgB,EAAE,QAAuB;IAC/E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnC,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;wBACzC,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;yBAAM,CAAC;wBACN,YAAY,GAAG,IAAI,CAAC;oBACtB,CAAC;gBACH,CAAC;gBACD,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;oBAC9B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;wBACrB,gBAAgB,CAAC,OAAO,EAAE;4BACxB,IAAI,EAAE,sBAAsB;4BAC5B,MAAM,EAAE,EAAE,CAAC,SAAS;4BACpB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;yBACzC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|