@azure-tools/typespec-autorest-canonical 0.1.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/LICENSE +21 -0
- package/README.md +72 -0
- package/dist/src/autorest-canonical-openapi-schema.d.ts +3 -0
- package/dist/src/autorest-canonical-openapi-schema.d.ts.map +1 -0
- package/dist/src/autorest-canonical-openapi-schema.js +12 -0
- package/dist/src/autorest-canonical-openapi-schema.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/json-schema-sorter/sorter.d.ts +30 -0
- package/dist/src/json-schema-sorter/sorter.d.ts.map +1 -0
- package/dist/src/json-schema-sorter/sorter.js +175 -0
- package/dist/src/json-schema-sorter/sorter.js.map +1 -0
- package/dist/src/lib.d.ts +188 -0
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/src/lib.js +150 -0
- package/dist/src/lib.js.map +1 -0
- package/dist/src/openapi.d.ts +31 -0
- package/dist/src/openapi.d.ts.map +1 -0
- package/dist/src/openapi.js +1684 -0
- package/dist/src/openapi.js.map +1 -0
- package/dist/src/testing/index.d.ts +3 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +6 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/types.d.ts +475 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +42 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +79 -0
- package/dist/src/utils.js.map +1 -0
- package/lib/autorest-canonical.tsp +1 -0
- package/package.json +84 -0
- package/schema/dist/schema.js +3 -0
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE
|
package/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# @azure-tools/typespec-autorest-canonical
|
2
|
+
|
3
|
+
TypeSpec library for emitting canonical swagger
|
4
|
+
|
5
|
+
## Install
|
6
|
+
|
7
|
+
```bash
|
8
|
+
npm install @azure-tools/typespec-autorest-canonical
|
9
|
+
```
|
10
|
+
|
11
|
+
## Emitter
|
12
|
+
|
13
|
+
### Usage
|
14
|
+
|
15
|
+
1. Via the command line
|
16
|
+
|
17
|
+
```bash
|
18
|
+
tsp compile . --emit=@azure-tools/typespec-autorest-canonical
|
19
|
+
```
|
20
|
+
|
21
|
+
2. Via the config
|
22
|
+
|
23
|
+
```yaml
|
24
|
+
emit:
|
25
|
+
- "@azure-tools/typespec-autorest-canonical"
|
26
|
+
```
|
27
|
+
|
28
|
+
### Emitter options
|
29
|
+
|
30
|
+
#### `output-file`
|
31
|
+
|
32
|
+
**Type:** `string`
|
33
|
+
|
34
|
+
Name of the output file.
|
35
|
+
Output file will interpolate the following values:
|
36
|
+
|
37
|
+
- service-name: Name of the service if multiple
|
38
|
+
- azure-resource-provider-folder: Value of the azure-resource-provider-folder option
|
39
|
+
|
40
|
+
Default: `{azure-resource-provider-folder}/{service-name}/{version}/openapi.json`
|
41
|
+
|
42
|
+
Example: Single service
|
43
|
+
|
44
|
+
- `canonical.openapi.json`
|
45
|
+
|
46
|
+
Example: Multiple services
|
47
|
+
|
48
|
+
- `Service1.canonical.openapi.json`
|
49
|
+
- `Service2.canonical.openapi.json`
|
50
|
+
|
51
|
+
#### `azure-resource-provider-folder`
|
52
|
+
|
53
|
+
**Type:** `string`
|
54
|
+
|
55
|
+
#### `new-line`
|
56
|
+
|
57
|
+
**Type:** `"crlf" | "lf"`
|
58
|
+
|
59
|
+
Set the newline character for emitting files.
|
60
|
+
|
61
|
+
#### `omit-unreachable-types`
|
62
|
+
|
63
|
+
**Type:** `boolean`
|
64
|
+
|
65
|
+
Omit unreachable types. By default all types declared under the service namespace will be included. With this flag on only types references in an operation will be emitted.
|
66
|
+
|
67
|
+
#### `include-x-typespec-name`
|
68
|
+
|
69
|
+
**Type:** `"inline-only" | "never"`
|
70
|
+
|
71
|
+
If the generated openapi types should have the `x-typespec-name` extension set with the name of the TypeSpec type that created it.
|
72
|
+
This extension is meant for debugging and should not be depended on.
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"autorest-canonical-openapi-schema.d.ts","sourceRoot":"","sources":["../../src/autorest-canonical-openapi-schema.ts"],"names":[],"mappings":"AAAA,QAAA,IAAI,8BAA8B,EAAE,GAAG,CAAC;AAUxC,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
let AutorestCanonicalOpenAPISchema;
|
2
|
+
try {
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
4
|
+
// @ts-ignore
|
5
|
+
AutorestCanonicalOpenAPISchema = (await import("../../schema/dist/schema.js")).default;
|
6
|
+
}
|
7
|
+
catch {
|
8
|
+
const name = "../schema/dist/schema.js";
|
9
|
+
AutorestCanonicalOpenAPISchema = (await import(/* @vite-ignore */ name)).default;
|
10
|
+
}
|
11
|
+
export { AutorestCanonicalOpenAPISchema };
|
12
|
+
//# sourceMappingURL=autorest-canonical-openapi-schema.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"autorest-canonical-openapi-schema.js","sourceRoot":"","sources":["../../src/autorest-canonical-openapi-schema.ts"],"names":[],"mappings":"AAAA,IAAI,8BAAmC,CAAC;AACxC,IAAI,CAAC;IACH,6DAA6D;IAC7D,aAAa;IACb,8BAA8B,GAAG,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC;AACzF,CAAC;AAAC,MAAM,CAAC;IACP,MAAM,IAAI,GAAG,0BAA0B,CAAC;IACxC,8BAA8B,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AACjE,cAAc,cAAc,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmC,MAAM,UAAU,CAAC;AACjE,cAAc,cAAc,CAAC"}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
export type JsonSchema = {
|
2
|
+
title?: string;
|
3
|
+
id?: string;
|
4
|
+
schema?: string;
|
5
|
+
$defs?: Record<string, JsonSchemaType>;
|
6
|
+
} & JsonSchemaObject;
|
7
|
+
export type ResolvedJsonSchemaType = Exclude<JsonSchemaType, JsonSchemaRef>;
|
8
|
+
export type JsonSchemaType = JsonSchemaObject | JsonSchemaArray | JsonSchemaPrimitive | JsonSchemaRef;
|
9
|
+
export interface JsonSchemaBase {
|
10
|
+
$id?: string;
|
11
|
+
}
|
12
|
+
export interface JsonSchemaObject extends JsonSchemaBase {
|
13
|
+
type: "object";
|
14
|
+
properties?: Record<string, JsonSchemaType>;
|
15
|
+
additionalProperties?: JsonSchemaType | boolean;
|
16
|
+
patternProperties?: Record<string, JsonSchemaType>;
|
17
|
+
"x-ordering"?: "keep" | "url";
|
18
|
+
}
|
19
|
+
export interface JsonSchemaArray extends JsonSchemaBase {
|
20
|
+
type: "array";
|
21
|
+
items?: JsonSchema;
|
22
|
+
}
|
23
|
+
export interface JsonSchemaRef {
|
24
|
+
$ref: string;
|
25
|
+
}
|
26
|
+
export interface JsonSchemaPrimitive extends JsonSchemaBase {
|
27
|
+
type: "number" | "string" | "boolean";
|
28
|
+
}
|
29
|
+
export declare function sortWithJsonSchema<T>(value: T, jsonSchema: JsonSchema, ref?: string): T;
|
30
|
+
//# sourceMappingURL=sorter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sorter.d.ts","sourceRoot":"","sources":["../../../src/json-schema-sorter/sorter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC,GAAG,gBAAgB,CAAC;AAErB,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAE5E,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,aAAa,CAAC;AAElB,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC/B;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAGvF"}
|
@@ -0,0 +1,175 @@
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
6
|
+
};
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
|
+
};
|
12
|
+
var _JsonSchemaReader_doc, _JsonSchemaReader_defs;
|
13
|
+
export function sortWithJsonSchema(value, jsonSchema, ref) {
|
14
|
+
const schema = ref ? resolveJsonRef(ref, jsonSchema) : jsonSchema;
|
15
|
+
return internalSort(value, schema, new JsonSchemaReader(jsonSchema));
|
16
|
+
}
|
17
|
+
function internalSort(value, relativeSchema, reader) {
|
18
|
+
if (typeof value !== "object" || value === null) {
|
19
|
+
return value;
|
20
|
+
}
|
21
|
+
const resolvedRelativeSchema = relativeSchema && resolveSchema(relativeSchema, reader);
|
22
|
+
if (Array.isArray(value)) {
|
23
|
+
const itemsSchema = (resolvedRelativeSchema === null || resolvedRelativeSchema === void 0 ? void 0 : resolvedRelativeSchema.type) === "array" ? resolvedRelativeSchema.items : undefined;
|
24
|
+
return value.map((x) => internalSort(x, itemsSchema, reader));
|
25
|
+
}
|
26
|
+
const objectSchema = resolvedRelativeSchema;
|
27
|
+
const properties = (objectSchema === null || objectSchema === void 0 ? void 0 : objectSchema.properties) && Object.keys(objectSchema.properties);
|
28
|
+
const keys = Object.keys(value);
|
29
|
+
const ordering = objectSchema === null || objectSchema === void 0 ? void 0 : objectSchema["x-ordering"];
|
30
|
+
if (ordering === "url") {
|
31
|
+
keys.sort(compareUrl);
|
32
|
+
}
|
33
|
+
else if (ordering !== "keep") {
|
34
|
+
keys.sort((a, b) => {
|
35
|
+
if (properties) {
|
36
|
+
const aIndex = properties.indexOf(a);
|
37
|
+
const bIndex = properties.indexOf(b);
|
38
|
+
if (aIndex !== -1 && bIndex !== -1) {
|
39
|
+
return aIndex - bIndex;
|
40
|
+
}
|
41
|
+
else if (aIndex !== -1) {
|
42
|
+
return -1;
|
43
|
+
}
|
44
|
+
else if (bIndex !== -1) {
|
45
|
+
return 1;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return defaultCompare(a, b);
|
49
|
+
});
|
50
|
+
}
|
51
|
+
return keys.reduce((o, key) => {
|
52
|
+
var _a, _b, _c;
|
53
|
+
const v = value[key];
|
54
|
+
const propertySchema = (_c = (_b = (_a = objectSchema === null || objectSchema === void 0 ? void 0 : objectSchema.properties) === null || _a === void 0 ? void 0 : _a[key]) !== null && _b !== void 0 ? _b : resolvePatternProperties(key, objectSchema === null || objectSchema === void 0 ? void 0 : objectSchema.patternProperties)) !== null && _c !== void 0 ? _c : resolveAdditionalProperties(objectSchema === null || objectSchema === void 0 ? void 0 : objectSchema.additionalProperties);
|
55
|
+
if (propertySchema !== undefined) {
|
56
|
+
o[key] = internalSort(v, propertySchema, reader);
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
o[key] = v;
|
60
|
+
}
|
61
|
+
return o;
|
62
|
+
}, {});
|
63
|
+
}
|
64
|
+
/**
|
65
|
+
* Default sort implementation for deterministic sorting.
|
66
|
+
*/
|
67
|
+
function defaultCompare(a, b) {
|
68
|
+
return +(a > b) || -(b > a);
|
69
|
+
}
|
70
|
+
/** Sort urls in a specific way so path with field show up before a fixed segment. */
|
71
|
+
function compareUrl(leftPath, rightPath) {
|
72
|
+
const leftParts = leftPath.split("/").slice(1);
|
73
|
+
const rightParts = rightPath.split("/").slice(1);
|
74
|
+
for (let i = 0; i < Math.max(leftParts.length, rightParts.length); i++) {
|
75
|
+
// Have we exhausted the path parts of one of them?
|
76
|
+
if (i === leftParts.length)
|
77
|
+
return -1;
|
78
|
+
if (i === rightParts.length)
|
79
|
+
return 1;
|
80
|
+
// Does this segment represent a path parameter (field) on either side?
|
81
|
+
const leftIsField = leftParts[i][0] === "{";
|
82
|
+
const rightIsField = rightParts[i][0] === "{";
|
83
|
+
// If both are fields, try the next part regardless of the field name
|
84
|
+
// since the field ordering is all that really matters
|
85
|
+
if (leftIsField && rightIsField) {
|
86
|
+
continue;
|
87
|
+
}
|
88
|
+
// If only one is a field, it automatically wins
|
89
|
+
if (leftIsField || rightIsField) {
|
90
|
+
return leftIsField ? -1 : 1;
|
91
|
+
}
|
92
|
+
// Sort lexicographically
|
93
|
+
const result = defaultCompare(leftParts[i], rightParts[i]);
|
94
|
+
if (result !== 0) {
|
95
|
+
return result;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
// Must be the same
|
99
|
+
return 0;
|
100
|
+
}
|
101
|
+
function resolveSchema(schema, reader) {
|
102
|
+
if ("$ref" in schema) {
|
103
|
+
return reader.resolveRef(schema.$ref);
|
104
|
+
}
|
105
|
+
else {
|
106
|
+
return schema;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
function resolveJsonRef(ref, baseSchema) {
|
110
|
+
const [file, path] = ref.split("#");
|
111
|
+
if (file !== "") {
|
112
|
+
throw new Error(`JsonSchemaSorter: Not supporting cross file ref: "${ref}".`);
|
113
|
+
}
|
114
|
+
const segments = path.split("/");
|
115
|
+
let current = baseSchema;
|
116
|
+
for (const segment of segments.slice(1)) {
|
117
|
+
if (segment in current) {
|
118
|
+
current = current[segment];
|
119
|
+
}
|
120
|
+
else {
|
121
|
+
throw new Error(`JsonSchemaSorter: ref "${ref}" is invalid`);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
return current;
|
125
|
+
}
|
126
|
+
function resolvePatternProperties(key, patternProperties) {
|
127
|
+
if (patternProperties === undefined) {
|
128
|
+
return undefined;
|
129
|
+
}
|
130
|
+
for (const [pattern, schema] of Object.entries(patternProperties)) {
|
131
|
+
if (key.match(pattern)) {
|
132
|
+
return schema;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
return undefined;
|
136
|
+
}
|
137
|
+
function resolveAdditionalProperties(additionalProperties) {
|
138
|
+
if (typeof additionalProperties === "boolean") {
|
139
|
+
return undefined;
|
140
|
+
}
|
141
|
+
return additionalProperties;
|
142
|
+
}
|
143
|
+
class JsonSchemaReader {
|
144
|
+
constructor(doc) {
|
145
|
+
_JsonSchemaReader_doc.set(this, void 0);
|
146
|
+
_JsonSchemaReader_defs.set(this, new Map());
|
147
|
+
__classPrivateFieldSet(this, _JsonSchemaReader_doc, doc, "f");
|
148
|
+
if (doc.$defs) {
|
149
|
+
for (const value of Object.values(doc.$defs)) {
|
150
|
+
if ("$id" in value && value.$id) {
|
151
|
+
__classPrivateFieldGet(this, _JsonSchemaReader_defs, "f").set(value.$id, value);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
resolveRef(ref) {
|
157
|
+
if (ref.includes("#")) {
|
158
|
+
return resolveJsonRef(ref, __classPrivateFieldGet(this, _JsonSchemaReader_doc, "f"));
|
159
|
+
}
|
160
|
+
else {
|
161
|
+
const schema = __classPrivateFieldGet(this, _JsonSchemaReader_defs, "f").get(ref);
|
162
|
+
if (schema === undefined) {
|
163
|
+
throw new Error(`JsonSchemaSorter: Cannot find schema with $id ${ref}`);
|
164
|
+
}
|
165
|
+
if ("$ref" in schema) {
|
166
|
+
return this.resolveRef(schema.$ref);
|
167
|
+
}
|
168
|
+
else {
|
169
|
+
return schema;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
_JsonSchemaReader_doc = new WeakMap(), _JsonSchemaReader_defs = new WeakMap();
|
175
|
+
//# sourceMappingURL=sorter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sorter.js","sourceRoot":"","sources":["../../../src/json-schema-sorter/sorter.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,188 @@
|
|
1
|
+
export interface AutorestCanonicalEmitterOptions {
|
2
|
+
/**
|
3
|
+
* Name of the output file.
|
4
|
+
* Output file will interpolate the following values:
|
5
|
+
* - service-name: Name of the service if multiple
|
6
|
+
* - version: Version of the service if multiple
|
7
|
+
* - azure-resource-provider-folder: Value of the azure-resource-provider-folder option
|
8
|
+
*
|
9
|
+
* @default `{azure-resource-provider-folder}/{service-name}/{version}/openapi.json`
|
10
|
+
*
|
11
|
+
*
|
12
|
+
* @example Single service no versioning
|
13
|
+
* - `canonical.openapi.json`
|
14
|
+
*
|
15
|
+
* @example Multiple services no versioning
|
16
|
+
* - `Service1.canonical.openapi.json`
|
17
|
+
* - `Service2.canonical.openapi.json`
|
18
|
+
*
|
19
|
+
* @example Single service with versioning
|
20
|
+
* - `canonical.openapi.json`
|
21
|
+
*
|
22
|
+
* @example Multiple service with versioning
|
23
|
+
* - `Service1.canonical.openapi.json`
|
24
|
+
* - `Service2.canonical.openapi.json`
|
25
|
+
*/
|
26
|
+
"output-file"?: string;
|
27
|
+
"azure-resource-provider-folder"?: string;
|
28
|
+
/**
|
29
|
+
* Set the newline character for emitting files.
|
30
|
+
* @default lf
|
31
|
+
*/
|
32
|
+
"new-line"?: "crlf" | "lf";
|
33
|
+
/**
|
34
|
+
* Omit unreachable types.
|
35
|
+
* By default all types declared under the service namespace will be included. With this flag on only types references in an operation will be emitted.
|
36
|
+
*/
|
37
|
+
"omit-unreachable-types"?: boolean;
|
38
|
+
/**
|
39
|
+
* If the generated openapi types should have the `x-typespec-name` extension set with the name of the TypeSpec type that created it.
|
40
|
+
* This extension is meant for debugging and should not be depended on.
|
41
|
+
* @default "never"
|
42
|
+
*/
|
43
|
+
"include-x-typespec-name"?: "inline-only" | "never";
|
44
|
+
}
|
45
|
+
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
46
|
+
"duplicate-body-types": {
|
47
|
+
readonly default: "Request has multiple body types";
|
48
|
+
};
|
49
|
+
"invalid-schema": {
|
50
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
51
|
+
};
|
52
|
+
"union-null": {
|
53
|
+
readonly default: "Cannot have a union containing only null types.";
|
54
|
+
};
|
55
|
+
"union-unsupported": {
|
56
|
+
readonly default: "Unions cannot be emitted to OpenAPI v2 unless all options are literals of the same type.";
|
57
|
+
readonly empty: "Empty unions are not supported for OpenAPI v2 - enums must have at least one value.";
|
58
|
+
};
|
59
|
+
"invalid-default": {
|
60
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
61
|
+
};
|
62
|
+
"invalid-multi-collection-format": {
|
63
|
+
readonly default: "The 'multi' should be applied to parameter in 'query', 'header' or 'formData'.";
|
64
|
+
};
|
65
|
+
"inline-cycle": {
|
66
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
67
|
+
};
|
68
|
+
"nonspecific-scalar": {
|
69
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type", "chosenType"]>;
|
70
|
+
};
|
71
|
+
"unsupported-http-auth-scheme": {
|
72
|
+
readonly default: import("@typespec/compiler").CallableMessage<["scheme"]>;
|
73
|
+
};
|
74
|
+
"unsupported-status-code-range": {
|
75
|
+
readonly default: import("@typespec/compiler").CallableMessage<["start", "end"]>;
|
76
|
+
};
|
77
|
+
"unsupported-multipart-type": {
|
78
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
79
|
+
};
|
80
|
+
"unsupported-param-type": {
|
81
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
82
|
+
};
|
83
|
+
"invalid-format": {
|
84
|
+
readonly default: import("@typespec/compiler").CallableMessage<["schema", "format"]>;
|
85
|
+
};
|
86
|
+
"unsupported-auth": {
|
87
|
+
readonly default: import("@typespec/compiler").CallableMessage<["authType"]>;
|
88
|
+
};
|
89
|
+
"unsupported-versioning-decorator": {
|
90
|
+
readonly default: import("@typespec/compiler").CallableMessage<["decorator"]>;
|
91
|
+
};
|
92
|
+
}, AutorestCanonicalEmitterOptions, never>;
|
93
|
+
export declare const reportDiagnostic: <C extends "duplicate-body-types" | "invalid-schema" | "union-null" | "union-unsupported" | "invalid-default" | "invalid-multi-collection-format" | "inline-cycle" | "nonspecific-scalar" | "unsupported-http-auth-scheme" | "unsupported-status-code-range" | "unsupported-multipart-type" | "unsupported-param-type" | "invalid-format" | "unsupported-auth" | "unsupported-versioning-decorator", M extends keyof {
|
94
|
+
"duplicate-body-types": {
|
95
|
+
readonly default: "Request has multiple body types";
|
96
|
+
};
|
97
|
+
"invalid-schema": {
|
98
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
99
|
+
};
|
100
|
+
"union-null": {
|
101
|
+
readonly default: "Cannot have a union containing only null types.";
|
102
|
+
};
|
103
|
+
"union-unsupported": {
|
104
|
+
readonly default: "Unions cannot be emitted to OpenAPI v2 unless all options are literals of the same type.";
|
105
|
+
readonly empty: "Empty unions are not supported for OpenAPI v2 - enums must have at least one value.";
|
106
|
+
};
|
107
|
+
"invalid-default": {
|
108
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
109
|
+
};
|
110
|
+
"invalid-multi-collection-format": {
|
111
|
+
readonly default: "The 'multi' should be applied to parameter in 'query', 'header' or 'formData'.";
|
112
|
+
};
|
113
|
+
"inline-cycle": {
|
114
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
115
|
+
};
|
116
|
+
"nonspecific-scalar": {
|
117
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type", "chosenType"]>;
|
118
|
+
};
|
119
|
+
"unsupported-http-auth-scheme": {
|
120
|
+
readonly default: import("@typespec/compiler").CallableMessage<["scheme"]>;
|
121
|
+
};
|
122
|
+
"unsupported-status-code-range": {
|
123
|
+
readonly default: import("@typespec/compiler").CallableMessage<["start", "end"]>;
|
124
|
+
};
|
125
|
+
"unsupported-multipart-type": {
|
126
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
127
|
+
};
|
128
|
+
"unsupported-param-type": {
|
129
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
130
|
+
};
|
131
|
+
"invalid-format": {
|
132
|
+
readonly default: import("@typespec/compiler").CallableMessage<["schema", "format"]>;
|
133
|
+
};
|
134
|
+
"unsupported-auth": {
|
135
|
+
readonly default: import("@typespec/compiler").CallableMessage<["authType"]>;
|
136
|
+
};
|
137
|
+
"unsupported-versioning-decorator": {
|
138
|
+
readonly default: import("@typespec/compiler").CallableMessage<["decorator"]>;
|
139
|
+
};
|
140
|
+
}[C]>(program: import("@typespec/compiler").Program, diag: import("@typespec/compiler").DiagnosticReport<{
|
141
|
+
"duplicate-body-types": {
|
142
|
+
readonly default: "Request has multiple body types";
|
143
|
+
};
|
144
|
+
"invalid-schema": {
|
145
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
146
|
+
};
|
147
|
+
"union-null": {
|
148
|
+
readonly default: "Cannot have a union containing only null types.";
|
149
|
+
};
|
150
|
+
"union-unsupported": {
|
151
|
+
readonly default: "Unions cannot be emitted to OpenAPI v2 unless all options are literals of the same type.";
|
152
|
+
readonly empty: "Empty unions are not supported for OpenAPI v2 - enums must have at least one value.";
|
153
|
+
};
|
154
|
+
"invalid-default": {
|
155
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
156
|
+
};
|
157
|
+
"invalid-multi-collection-format": {
|
158
|
+
readonly default: "The 'multi' should be applied to parameter in 'query', 'header' or 'formData'.";
|
159
|
+
};
|
160
|
+
"inline-cycle": {
|
161
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type"]>;
|
162
|
+
};
|
163
|
+
"nonspecific-scalar": {
|
164
|
+
readonly default: import("@typespec/compiler").CallableMessage<["type", "chosenType"]>;
|
165
|
+
};
|
166
|
+
"unsupported-http-auth-scheme": {
|
167
|
+
readonly default: import("@typespec/compiler").CallableMessage<["scheme"]>;
|
168
|
+
};
|
169
|
+
"unsupported-status-code-range": {
|
170
|
+
readonly default: import("@typespec/compiler").CallableMessage<["start", "end"]>;
|
171
|
+
};
|
172
|
+
"unsupported-multipart-type": {
|
173
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
174
|
+
};
|
175
|
+
"unsupported-param-type": {
|
176
|
+
readonly default: import("@typespec/compiler").CallableMessage<["part"]>;
|
177
|
+
};
|
178
|
+
"invalid-format": {
|
179
|
+
readonly default: import("@typespec/compiler").CallableMessage<["schema", "format"]>;
|
180
|
+
};
|
181
|
+
"unsupported-auth": {
|
182
|
+
readonly default: import("@typespec/compiler").CallableMessage<["authType"]>;
|
183
|
+
};
|
184
|
+
"unsupported-versioning-decorator": {
|
185
|
+
readonly default: import("@typespec/compiler").CallableMessage<["decorator"]>;
|
186
|
+
};
|
187
|
+
}, C, M>) => void, createStateSymbol: (name: string) => symbol, getTracer: (program: import("@typespec/compiler").Program) => import("@typespec/compiler").Tracer;
|
188
|
+
//# sourceMappingURL=lib.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,+BAA+B;IAC9C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAE1C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CACrD;AA0JD,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAAgC,CAAC;AAClD,eAAO,MAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAE,iBAAiB,4BAAE,SAAS,wFAAS,CAAC"}
|