mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2024-11-25 15:06:55 +00:00
Fix Generated ARM types (#131)
This commit is contained in:
parent
70f9b28499
commit
a64109ebaa
File diff suppressed because it is too large
Load Diff
@ -88,6 +88,60 @@ function responseType(operation: Operation, namespace: string) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Property {
|
||||||
|
$ref?: string;
|
||||||
|
description?: string;
|
||||||
|
readOnly?: boolean;
|
||||||
|
type: "array" | "object" | "unknown";
|
||||||
|
properties: Property[];
|
||||||
|
items?: {
|
||||||
|
$ref: string;
|
||||||
|
};
|
||||||
|
allOf?: {
|
||||||
|
$ref: string;
|
||||||
|
}[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const propertyToType = (property: Property, prop: string) => {
|
||||||
|
if (property) {
|
||||||
|
if (property.allOf) {
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${property.description || "undocumented"} */
|
||||||
|
${property.readOnly ? "readonly " : ""}${prop}: ${property.allOf
|
||||||
|
.map((allof: { $ref: string }) => refToType(allof.$ref))
|
||||||
|
.join(" & ")}`);
|
||||||
|
} else if (property.$ref) {
|
||||||
|
const type = refToType(property.$ref);
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${property.description || "undocumented"} */
|
||||||
|
${property.readOnly ? "readonly " : ""}${prop}: ${type}
|
||||||
|
`);
|
||||||
|
} else if (property.type === "array") {
|
||||||
|
const type = refToType(property.items.$ref);
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${property.description || "undocumented"} */
|
||||||
|
${property.readOnly ? "readonly " : ""}${prop}: ${type}[]
|
||||||
|
`);
|
||||||
|
} else if (property.type === "object") {
|
||||||
|
const type = refToType(property.$ref);
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${property.description || "undocumented"} */
|
||||||
|
${property.readOnly ? "readonly " : ""}${prop}: ${type}
|
||||||
|
`);
|
||||||
|
} else {
|
||||||
|
if (property.type === undefined) {
|
||||||
|
console.log(`UHANDLED TYPE: ${prop}. Falling back to unknown`);
|
||||||
|
property.type = "unknown";
|
||||||
|
}
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${property.description || "undocumented"} */
|
||||||
|
${property.readOnly ? "readonly " : ""}${prop}: ${
|
||||||
|
propertyMap[property.type] ? propertyMap[property.type] : property.type
|
||||||
|
}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const response = await fetch(schemaURL);
|
const response = await fetch(schemaURL);
|
||||||
const schema = await response.json();
|
const schema = await response.json();
|
||||||
@ -96,6 +150,9 @@ async function main() {
|
|||||||
for (const definition in schema.definitions) {
|
for (const definition in schema.definitions) {
|
||||||
const properties = schema.definitions[definition].properties;
|
const properties = schema.definitions[definition].properties;
|
||||||
if (properties) {
|
if (properties) {
|
||||||
|
outputTypes.push(`
|
||||||
|
/* ${schema.definitions[definition].description || "undocumented"} */
|
||||||
|
`);
|
||||||
if (schema.definitions[definition].allOf) {
|
if (schema.definitions[definition].allOf) {
|
||||||
const baseTypes = schema.definitions[definition].allOf
|
const baseTypes = schema.definitions[definition].allOf
|
||||||
.map((allof: { $ref: string }) => refToType(allof.$ref))
|
.map((allof: { $ref: string }) => refToType(allof.$ref))
|
||||||
@ -104,35 +161,12 @@ async function main() {
|
|||||||
} else {
|
} else {
|
||||||
outputTypes.push(`export interface ${definition} {`);
|
outputTypes.push(`export interface ${definition} {`);
|
||||||
}
|
}
|
||||||
|
if (definition === "SqlDatabaseGetProperties") {
|
||||||
|
console.log(schema.definitions[definition]);
|
||||||
|
}
|
||||||
for (const prop in schema.definitions[definition].properties) {
|
for (const prop in schema.definitions[definition].properties) {
|
||||||
const property = schema.definitions[definition].properties[prop];
|
const property = schema.definitions[definition].properties[prop];
|
||||||
if (property) {
|
propertyToType(property, prop);
|
||||||
if (property.$ref) {
|
|
||||||
const type = refToType(property.$ref);
|
|
||||||
outputTypes.push(`
|
|
||||||
/* ${property.description} */
|
|
||||||
${property.readOnly ? "readonly " : ""}${prop}: ${type}
|
|
||||||
`);
|
|
||||||
} else if (property.type === "array") {
|
|
||||||
const type = refToType(property.items.$ref);
|
|
||||||
outputTypes.push(`
|
|
||||||
/* ${property.description} */
|
|
||||||
${property.readOnly ? "readonly " : ""}${prop}: ${type}[]
|
|
||||||
`);
|
|
||||||
} else if (property.type === "object") {
|
|
||||||
const type = refToType(property.$ref);
|
|
||||||
outputTypes.push(`
|
|
||||||
/* ${property.description} */
|
|
||||||
${property.readOnly ? "readonly " : ""}${prop}: ${type}
|
|
||||||
`);
|
|
||||||
} else {
|
|
||||||
outputTypes.push(`
|
|
||||||
/* ${property.description} */
|
|
||||||
${property.readOnly ? "readonly " : ""}${prop}: ${
|
|
||||||
propertyMap[property.type] ? propertyMap[property.type] : property.type
|
|
||||||
}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
outputTypes.push(`}`);
|
outputTypes.push(`}`);
|
||||||
outputTypes.push("\n\n");
|
outputTypes.push("\n\n");
|
||||||
@ -140,23 +174,23 @@ async function main() {
|
|||||||
const def = schema.definitions[definition];
|
const def = schema.definitions[definition];
|
||||||
if (def.enum) {
|
if (def.enum) {
|
||||||
outputTypes.push(`
|
outputTypes.push(`
|
||||||
/* ${def.description} */
|
/* ${def.description || "undocumented"} */
|
||||||
export type ${definition} = ${def.enum.map((v: string) => `"${v}"`).join(" | ")}`);
|
export type ${definition} = ${def.enum.map((v: string) => `"${v}"`).join(" | ")}`);
|
||||||
outputTypes.push("\n");
|
outputTypes.push("\n");
|
||||||
} else if (def.type === "string") {
|
} else if (def.type === "string") {
|
||||||
outputTypes.push(`
|
outputTypes.push(`
|
||||||
/* ${def.description} */
|
/* ${def.description || "undocumented"} */
|
||||||
export type ${definition} = string
|
export type ${definition} = string
|
||||||
`);
|
`);
|
||||||
} else if (def.type === "array") {
|
} else if (def.type === "array") {
|
||||||
const type = refToType(def.items.$ref);
|
const type = refToType(def.items.$ref);
|
||||||
outputTypes.push(`
|
outputTypes.push(`
|
||||||
/* ${def.description} */
|
/* ${def.description || "undocumented"} */
|
||||||
export type ${definition} = ${type}[]
|
export type ${definition} = ${type}[]
|
||||||
`);
|
`);
|
||||||
} else if (def.type === "object" && def.additionalProperties) {
|
} else if (def.type === "object" && def.additionalProperties) {
|
||||||
outputTypes.push(`
|
outputTypes.push(`
|
||||||
/* ${def.description} */
|
/* ${def.description || "undocumented"} */
|
||||||
export type ${definition} = { [key: string]: ${def.additionalProperties.type}}
|
export type ${definition} = { [key: string]: ${def.additionalProperties.type}}
|
||||||
`);
|
`);
|
||||||
} else if (def.type === "object" && def.allOf) {
|
} else if (def.type === "object" && def.allOf) {
|
||||||
@ -197,13 +231,12 @@ async function main() {
|
|||||||
for (const path of clients[clientName].paths) {
|
for (const path of clients[clientName].paths) {
|
||||||
for (const method in schema.paths[path]) {
|
for (const method in schema.paths[path]) {
|
||||||
const operation = schema.paths[path][method];
|
const operation = schema.paths[path][method];
|
||||||
console.log(operation["x-ms-long-running-operation"]);
|
|
||||||
const [, methodName] = operation.operationId.split("_");
|
const [, methodName] = operation.operationId.split("_");
|
||||||
const bodyParameter = operation.parameters.find(
|
const bodyParameter = operation.parameters.find(
|
||||||
(parameter: { in: string; required: boolean }) => parameter.in === "body" && parameter.required === true
|
(parameter: { in: string; required: boolean }) => parameter.in === "body" && parameter.required === true
|
||||||
);
|
);
|
||||||
outputClient.push(`
|
outputClient.push(`
|
||||||
/* ${operation.description} */
|
/* ${operation.description || "undocumented"} */
|
||||||
export async function ${sanitize(camelize(methodName))} (
|
export async function ${sanitize(camelize(methodName))} (
|
||||||
${parametersFromPath(path)
|
${parametersFromPath(path)
|
||||||
.map(p => `${p}: string`)
|
.map(p => `${p}: string`)
|
||||||
|
Loading…
Reference in New Issue
Block a user