@azure-tools/typespec-ts 0.18.0 → 0.19.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/CHANGELOG.md +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +36 -20
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +4 -1
- package/dist/src/lib.js.map +1 -1
- package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
- package/dist/src/modular/buildClassicalClient.js +50 -51
- package/dist/src/modular/buildClassicalClient.js.map +1 -1
- package/dist/src/modular/buildClassicalOperationGroups.d.ts +4 -0
- package/dist/src/modular/buildClassicalOperationGroups.d.ts.map +1 -0
- package/dist/src/modular/buildClassicalOperationGroups.js +79 -0
- package/dist/src/modular/buildClassicalOperationGroups.js.map +1 -0
- package/dist/src/modular/buildClientContext.d.ts.map +1 -1
- package/dist/src/modular/buildClientContext.js +3 -2
- package/dist/src/modular/buildClientContext.js.map +1 -1
- package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
- package/dist/src/modular/buildCodeModel.js +69 -23
- package/dist/src/modular/buildCodeModel.js.map +1 -1
- package/dist/src/modular/buildOperations.d.ts +1 -1
- package/dist/src/modular/buildOperations.d.ts.map +1 -1
- package/dist/src/modular/buildOperations.js +21 -13
- package/dist/src/modular/buildOperations.js.map +1 -1
- package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
- package/dist/src/modular/buildProjectFiles.js +183 -73
- package/dist/src/modular/buildProjectFiles.js.map +1 -1
- package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
- package/dist/src/modular/buildRootIndex.js +7 -5
- package/dist/src/modular/buildRootIndex.js.map +1 -1
- package/dist/src/modular/buildSubpathIndex.d.ts +5 -1
- package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
- package/dist/src/modular/buildSubpathIndex.js +32 -4
- package/dist/src/modular/buildSubpathIndex.js.map +1 -1
- package/dist/src/modular/emitModels.d.ts.map +1 -1
- package/dist/src/modular/emitModels.js +3 -2
- package/dist/src/modular/emitModels.js.map +1 -1
- package/dist/src/modular/helpers/classicalOperationHelpers.d.ts +4 -0
- package/dist/src/modular/helpers/classicalOperationHelpers.d.ts.map +1 -0
- package/dist/src/modular/helpers/classicalOperationHelpers.js +127 -0
- package/dist/src/modular/helpers/classicalOperationHelpers.js.map +1 -0
- package/dist/src/modular/helpers/clientHelpers.d.ts +2 -1
- package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/clientHelpers.js +3 -2
- package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
- package/dist/src/modular/helpers/namingHelpers.d.ts +2 -1
- package/dist/src/modular/helpers/namingHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/namingHelpers.js +14 -0
- package/dist/src/modular/helpers/namingHelpers.js.map +1 -1
- package/dist/src/modular/helpers/operationHelpers.d.ts +4 -3
- package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
- package/dist/src/modular/helpers/operationHelpers.js +63 -48
- package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
- package/dist/src/modular/modularCodeModel.d.ts +4 -0
- package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
- package/dist/src/transform/transform.d.ts.map +1 -1
- package/dist/src/transform/transform.js +7 -5
- package/dist/src/transform/transform.js.map +1 -1
- package/dist/src/transform/transformParameters.d.ts +2 -2
- package/dist/src/transform/transformParameters.d.ts.map +1 -1
- package/dist/src/transform/transformParameters.js +2 -2
- package/dist/src/transform/transformParameters.js.map +1 -1
- package/dist/src/transform/transformResponses.d.ts +2 -2
- package/dist/src/transform/transformResponses.d.ts.map +1 -1
- package/dist/src/transform/transformResponses.js +2 -2
- package/dist/src/transform/transformResponses.js.map +1 -1
- package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
- package/dist/src/transform/transfromRLCOptions.js +30 -4
- package/dist/src/transform/transfromRLCOptions.js.map +1 -1
- package/dist/src/utils/emitUtil.d.ts.map +1 -1
- package/dist/src/utils/emitUtil.js +12 -5
- package/dist/src/utils/emitUtil.js.map +1 -1
- package/dist/src/utils/modelUtils.d.ts.map +1 -1
- package/dist/src/utils/modelUtils.js +17 -9
- package/dist/src/utils/modelUtils.js.map +1 -1
- package/dist/src/utils/namespaceUtils.d.ts +6 -0
- package/dist/src/utils/namespaceUtils.d.ts.map +1 -0
- package/dist/src/utils/namespaceUtils.js +54 -0
- package/dist/src/utils/namespaceUtils.js.map +1 -0
- package/dist/src/utils/operationUtil.d.ts.map +1 -1
- package/dist/src/utils/operationUtil.js +9 -13
- package/dist/src/utils/operationUtil.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -4
- package/src/index.ts +29 -12
- package/src/lib.ts +4 -1
- package/src/modular/buildClassicalClient.ts +90 -69
- package/src/modular/buildClassicalOperationGroups.ts +151 -0
- package/src/modular/buildClientContext.ts +3 -2
- package/src/modular/buildCodeModel.ts +82 -18
- package/src/modular/buildOperations.ts +41 -16
- package/src/modular/buildProjectFiles.ts +224 -87
- package/src/modular/buildRootIndex.ts +34 -5
- package/src/modular/buildSubpathIndex.ts +41 -6
- package/src/modular/emitModels.ts +9 -2
- package/src/modular/helpers/classicalOperationHelpers.ts +212 -0
- package/src/modular/helpers/clientHelpers.ts +7 -2
- package/src/modular/helpers/namingHelpers.ts +25 -1
- package/src/modular/helpers/operationHelpers.ts +101 -46
- package/src/modular/modularCodeModel.ts +4 -0
- package/src/transform/transform.ts +10 -6
- package/src/transform/transformParameters.ts +3 -3
- package/src/transform/transformResponses.ts +4 -4
- package/src/transform/transfromRLCOptions.ts +43 -4
- package/src/utils/emitUtil.ts +10 -4
- package/src/utils/modelUtils.ts +11 -1
- package/src/utils/namespaceUtils.ts +74 -0
- package/src/utils/operationUtil.ts +10 -19
- package/dist/src/modular/helpers/credentialHelpers.d.ts +0 -7
- package/dist/src/modular/helpers/credentialHelpers.d.ts.map +0 -1
- package/dist/src/modular/helpers/credentialHelpers.js +0 -32
- package/dist/src/modular/helpers/credentialHelpers.js.map +0 -1
- package/src/modular/helpers/credentialHelpers.ts +0 -40
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FunctionDeclarationStructure,
|
|
3
|
+
OptionalKind,
|
|
4
|
+
PropertySignatureStructure,
|
|
5
|
+
SourceFile,
|
|
6
|
+
StructureKind
|
|
7
|
+
} from "ts-morph";
|
|
8
|
+
import { Client, OperationGroup } from "../modularCodeModel.js";
|
|
9
|
+
import { getClassicalLayerPrefix, getClientName } from "./namingHelpers.js";
|
|
10
|
+
import { NameType, normalizeName } from "@azure-tools/rlc-common";
|
|
11
|
+
import { getOperationFunction } from "./operationHelpers.js";
|
|
12
|
+
|
|
13
|
+
export function getClassicalOperation(
|
|
14
|
+
classicFile: SourceFile,
|
|
15
|
+
client: Client,
|
|
16
|
+
operationGroup: OperationGroup,
|
|
17
|
+
layer: number = operationGroup.namespaceHierarchies.length - 1
|
|
18
|
+
) {
|
|
19
|
+
const modularClientName = `${getClientName(client)}Context`;
|
|
20
|
+
const hasClientContextImport = classicFile
|
|
21
|
+
.getImportDeclarations()
|
|
22
|
+
.filter((i) => {
|
|
23
|
+
return (
|
|
24
|
+
i.getModuleSpecifierValue() ===
|
|
25
|
+
`${"../".repeat(layer + 2)}api/${modularClientName}.js`
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
if (!hasClientContextImport || hasClientContextImport.length === 0) {
|
|
29
|
+
classicFile.addImportDeclaration({
|
|
30
|
+
namedImports: [client.rlcClientName],
|
|
31
|
+
moduleSpecifier: `${"../".repeat(layer + 2)}api/${modularClientName}.js`
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const operationMap = new Map<
|
|
36
|
+
OptionalKind<FunctionDeclarationStructure>,
|
|
37
|
+
string | undefined
|
|
38
|
+
>();
|
|
39
|
+
const operationDeclarations: OptionalKind<FunctionDeclarationStructure>[] =
|
|
40
|
+
operationGroup.operations.map((operation) => {
|
|
41
|
+
const declarations = getOperationFunction(operation, modularClientName);
|
|
42
|
+
operationMap.set(declarations, operation.oriName);
|
|
43
|
+
return declarations;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const interfaceName = `${getClassicalLayerPrefix(
|
|
47
|
+
operationGroup,
|
|
48
|
+
NameType.Interface,
|
|
49
|
+
"",
|
|
50
|
+
layer
|
|
51
|
+
)}Operations`;
|
|
52
|
+
const existInterface = classicFile
|
|
53
|
+
.getInterfaces()
|
|
54
|
+
.filter((i) => i.getName() === interfaceName)[0];
|
|
55
|
+
const properties: OptionalKind<PropertySignatureStructure>[] = [];
|
|
56
|
+
if (layer !== operationGroup.namespaceHierarchies.length - 1) {
|
|
57
|
+
properties.push({
|
|
58
|
+
kind: StructureKind.PropertySignature,
|
|
59
|
+
name:
|
|
60
|
+
normalizeName(
|
|
61
|
+
(layer === operationGroup.namespaceHierarchies.length - 1
|
|
62
|
+
? operationGroup.namespaceHierarchies[layer]
|
|
63
|
+
: operationGroup.namespaceHierarchies[layer + 1]) ?? "",
|
|
64
|
+
NameType.Property
|
|
65
|
+
) ?? operationGroup.propertyName,
|
|
66
|
+
type: `${getClassicalLayerPrefix(
|
|
67
|
+
operationGroup,
|
|
68
|
+
NameType.Interface,
|
|
69
|
+
"",
|
|
70
|
+
layer + 1
|
|
71
|
+
)}Operations`
|
|
72
|
+
});
|
|
73
|
+
} else {
|
|
74
|
+
operationDeclarations.forEach((d) => {
|
|
75
|
+
properties.push({
|
|
76
|
+
kind: StructureKind.PropertySignature,
|
|
77
|
+
name: getClassicalMethodName(d),
|
|
78
|
+
type: `(${d.parameters
|
|
79
|
+
?.filter((p) => p.name !== "context")
|
|
80
|
+
.map(
|
|
81
|
+
(p) => p.name + (p.name === "options" ? "?" : "") + ": " + p.type
|
|
82
|
+
)
|
|
83
|
+
.join(",")}) => ${d.returnType}`
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (existInterface) {
|
|
88
|
+
existInterface.addProperties([...properties]);
|
|
89
|
+
} else {
|
|
90
|
+
classicFile.addInterface({
|
|
91
|
+
name: interfaceName,
|
|
92
|
+
isExported: true,
|
|
93
|
+
properties
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (layer === operationGroup.namespaceHierarchies.length - 1) {
|
|
98
|
+
classicFile.addFunction({
|
|
99
|
+
name: `get${getClassicalLayerPrefix(
|
|
100
|
+
operationGroup,
|
|
101
|
+
NameType.Interface,
|
|
102
|
+
"",
|
|
103
|
+
layer
|
|
104
|
+
)}`,
|
|
105
|
+
isExported: true,
|
|
106
|
+
parameters: [
|
|
107
|
+
{
|
|
108
|
+
name: "context",
|
|
109
|
+
type: client.rlcClientName
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
statements: `return {
|
|
113
|
+
${operationDeclarations
|
|
114
|
+
.map((d) => {
|
|
115
|
+
return `${getClassicalMethodName(d)}: (${d.parameters
|
|
116
|
+
?.filter((p) => p.name !== "context")
|
|
117
|
+
.map(
|
|
118
|
+
(p) =>
|
|
119
|
+
p.name + (p.name === "options" ? "?" : "") + ": " + p.type
|
|
120
|
+
)
|
|
121
|
+
.join(",")}) => ${d.name}(${[
|
|
122
|
+
"context",
|
|
123
|
+
...[
|
|
124
|
+
d.parameters?.map((p) => p.name).filter((p) => p !== "context")
|
|
125
|
+
]
|
|
126
|
+
].join(",")})`;
|
|
127
|
+
})
|
|
128
|
+
.join(",")}
|
|
129
|
+
}`
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const operationFunctionName = `get${getClassicalLayerPrefix(
|
|
134
|
+
operationGroup,
|
|
135
|
+
NameType.Interface,
|
|
136
|
+
"",
|
|
137
|
+
layer
|
|
138
|
+
)}Operations`;
|
|
139
|
+
const existFunction = classicFile
|
|
140
|
+
.getFunctions()
|
|
141
|
+
.filter((f) => f.getName() === operationFunctionName)[0];
|
|
142
|
+
if (existFunction) {
|
|
143
|
+
const returnStatement = existFunction.getBodyText();
|
|
144
|
+
if (returnStatement) {
|
|
145
|
+
let statement = `,
|
|
146
|
+
...get${getClassicalLayerPrefix(
|
|
147
|
+
operationGroup,
|
|
148
|
+
NameType.Interface,
|
|
149
|
+
"",
|
|
150
|
+
layer + 1
|
|
151
|
+
)}Operations(context)}`;
|
|
152
|
+
if (layer !== operationGroup.namespaceHierarchies.length - 1) {
|
|
153
|
+
statement = `,
|
|
154
|
+
${normalizeName(
|
|
155
|
+
operationGroup.namespaceHierarchies[layer + 1] ?? "FIXME",
|
|
156
|
+
NameType.Property
|
|
157
|
+
)}: get${getClassicalLayerPrefix(
|
|
158
|
+
operationGroup,
|
|
159
|
+
NameType.Interface,
|
|
160
|
+
"",
|
|
161
|
+
layer + 1
|
|
162
|
+
)}Operations(context)}`;
|
|
163
|
+
}
|
|
164
|
+
const newReturnStatement = returnStatement.replace(/}$/, statement);
|
|
165
|
+
existFunction.setBodyText(newReturnStatement);
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
classicFile.addFunction({
|
|
169
|
+
name: operationFunctionName,
|
|
170
|
+
isExported: true,
|
|
171
|
+
parameters: [
|
|
172
|
+
{
|
|
173
|
+
name: "context",
|
|
174
|
+
type: client.rlcClientName
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
returnType: `${getClassicalLayerPrefix(
|
|
178
|
+
operationGroup,
|
|
179
|
+
NameType.Interface,
|
|
180
|
+
"",
|
|
181
|
+
layer
|
|
182
|
+
)}Operations`,
|
|
183
|
+
statements:
|
|
184
|
+
layer !== operationGroup.namespaceHierarchies.length - 1
|
|
185
|
+
? `return {
|
|
186
|
+
${normalizeName(
|
|
187
|
+
operationGroup.namespaceHierarchies[layer + 1] ?? "FIXME",
|
|
188
|
+
NameType.Property
|
|
189
|
+
)}: get${getClassicalLayerPrefix(
|
|
190
|
+
operationGroup,
|
|
191
|
+
NameType.Interface,
|
|
192
|
+
"",
|
|
193
|
+
layer + 1
|
|
194
|
+
)}Operations(context)
|
|
195
|
+
}`
|
|
196
|
+
: `return {
|
|
197
|
+
...get${getClassicalLayerPrefix(
|
|
198
|
+
operationGroup,
|
|
199
|
+
NameType.Interface,
|
|
200
|
+
"",
|
|
201
|
+
layer
|
|
202
|
+
)}(context)
|
|
203
|
+
}`
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function getClassicalMethodName(
|
|
208
|
+
declaration: OptionalKind<FunctionDeclarationStructure>
|
|
209
|
+
) {
|
|
210
|
+
return operationMap.get(declaration) ?? declaration.name ?? "FIXME";
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
import { Client } from "../modularCodeModel.js";
|
|
7
7
|
import { getType } from "./typeHelpers.js";
|
|
8
8
|
import { getClientName } from "./namingHelpers.js";
|
|
9
|
+
import { Imports as RuntimeImports } from "@azure-tools/rlc-common";
|
|
10
|
+
import { getImportSpecifier } from "@azure-tools/rlc-common";
|
|
9
11
|
|
|
10
12
|
export function getClientParameters(
|
|
11
13
|
client: Client
|
|
@@ -42,9 +44,12 @@ export function getClientParameters(
|
|
|
42
44
|
return params;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
export function importCredential(
|
|
47
|
+
export function importCredential(
|
|
48
|
+
runtimeImports: RuntimeImports,
|
|
49
|
+
clientSourceFile: SourceFile
|
|
50
|
+
): void {
|
|
46
51
|
clientSourceFile.addImportDeclaration({
|
|
47
|
-
moduleSpecifier: "
|
|
52
|
+
moduleSpecifier: getImportSpecifier("coreAuth", runtimeImports),
|
|
48
53
|
namedImports: ["TokenCredential", "KeyCredential"]
|
|
49
54
|
});
|
|
50
55
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toCamelCase, toPascalCase } from "../../utils/casingUtils.js";
|
|
2
|
-
import { Client, Operation } from "../modularCodeModel.js";
|
|
2
|
+
import { Client, Operation, OperationGroup } from "../modularCodeModel.js";
|
|
3
3
|
import {
|
|
4
4
|
ReservedModelNames,
|
|
5
5
|
NameType,
|
|
@@ -42,3 +42,27 @@ export function isReservedName(name: string, nameType: NameType): boolean {
|
|
|
42
42
|
reservedName.reservedFor.includes(nameType)
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
|
+
|
|
46
|
+
export function getClassicalLayerPrefix(
|
|
47
|
+
operationGroup: OperationGroup | Operation,
|
|
48
|
+
nameType: NameType,
|
|
49
|
+
separator: string = "",
|
|
50
|
+
layer: number = operationGroup.namespaceHierarchies.length - 1
|
|
51
|
+
): string {
|
|
52
|
+
const prefix: string[] = [];
|
|
53
|
+
if (layer < 0) {
|
|
54
|
+
return prefix.join(separator);
|
|
55
|
+
}
|
|
56
|
+
if (layer === 0) {
|
|
57
|
+
return normalizeName(
|
|
58
|
+
operationGroup.namespaceHierarchies[0] ?? "",
|
|
59
|
+
nameType
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
for (let i = 0; i <= layer; i++) {
|
|
63
|
+
prefix.push(
|
|
64
|
+
normalizeName(operationGroup.namespaceHierarchies[i] ?? "", nameType)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return prefix.join(separator);
|
|
68
|
+
}
|