@azure-tools/typespec-java 0.20.0 → 0.20.2

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.
Files changed (71) hide show
  1. package/dist/src/code-model-builder.d.ts +0 -1
  2. package/dist/src/code-model-builder.d.ts.map +1 -1
  3. package/dist/src/code-model-builder.js +178 -137
  4. package/dist/src/code-model-builder.js.map +1 -1
  5. package/dist/src/common/client.d.ts +1 -1
  6. package/dist/src/common/client.d.ts.map +1 -1
  7. package/dist/src/common/client.js +1 -0
  8. package/dist/src/common/client.js.map +1 -1
  9. package/dist/src/common/code-model.d.ts +1 -1
  10. package/dist/src/common/code-model.d.ts.map +1 -1
  11. package/dist/src/common/code-model.js +2 -1
  12. package/dist/src/common/code-model.js.map +1 -1
  13. package/dist/src/common/operation.d.ts +2 -2
  14. package/dist/src/common/operation.d.ts.map +1 -1
  15. package/dist/src/common/operation.js +2 -1
  16. package/dist/src/common/operation.js.map +1 -1
  17. package/dist/src/common/schemas/choice.d.ts.map +1 -1
  18. package/dist/src/common/schemas/choice.js +2 -1
  19. package/dist/src/common/schemas/choice.js.map +1 -1
  20. package/dist/src/common/schemas/constant.d.ts +1 -1
  21. package/dist/src/common/schemas/constant.d.ts.map +1 -1
  22. package/dist/src/common/schemas/constant.js +1 -0
  23. package/dist/src/common/schemas/constant.js.map +1 -1
  24. package/dist/src/common/schemas/relationship.d.ts +2 -3
  25. package/dist/src/common/schemas/relationship.d.ts.map +1 -1
  26. package/dist/src/common/schemas/relationship.js +2 -2
  27. package/dist/src/common/schemas/relationship.js.map +1 -1
  28. package/dist/src/common/schemas/time.d.ts +1 -1
  29. package/dist/src/common/schemas/time.d.ts.map +1 -1
  30. package/dist/src/common/schemas/time.js +1 -0
  31. package/dist/src/common/schemas/time.js.map +1 -1
  32. package/dist/src/common/schemas/usage.d.ts +2 -2
  33. package/dist/src/common/schemas/usage.d.ts.map +1 -1
  34. package/dist/src/common/schemas/usage.js +2 -2
  35. package/dist/src/common/schemas/usage.js.map +1 -1
  36. package/dist/src/emitter.d.ts +5 -6
  37. package/dist/src/emitter.d.ts.map +1 -1
  38. package/dist/src/emitter.js +12 -14
  39. package/dist/src/emitter.js.map +1 -1
  40. package/dist/src/external-schemas.d.ts.map +1 -1
  41. package/dist/src/external-schemas.js +3 -2
  42. package/dist/src/external-schemas.js.map +1 -1
  43. package/dist/src/models.d.ts +2 -2
  44. package/dist/src/models.d.ts.map +1 -1
  45. package/dist/src/models.js.map +1 -1
  46. package/dist/src/operation-utils.d.ts +3 -3
  47. package/dist/src/operation-utils.d.ts.map +1 -1
  48. package/dist/src/operation-utils.js +2 -2
  49. package/dist/src/operation-utils.js.map +1 -1
  50. package/dist/src/type-utils.d.ts +2 -2
  51. package/dist/src/type-utils.d.ts.map +1 -1
  52. package/dist/src/type-utils.js +23 -10
  53. package/dist/src/type-utils.js.map +1 -1
  54. package/dist/src/utils.d.ts.map +1 -1
  55. package/dist/src/utils.js +10 -4
  56. package/dist/src/utils.js.map +1 -1
  57. package/dist/tsconfig.tsbuildinfo +1 -1
  58. package/{target → generator/http-client-generator/target}/emitter.jar +0 -0
  59. package/package.json +5 -5
  60. package/dist/src/prenamer/formatter.d.ts +0 -11
  61. package/dist/src/prenamer/formatter.d.ts.map +0 -1
  62. package/dist/src/prenamer/formatter.js +0 -124
  63. package/dist/src/prenamer/formatter.js.map +0 -1
  64. package/dist/src/prenamer/naming-utils.d.ts +0 -67
  65. package/dist/src/prenamer/naming-utils.d.ts.map +0 -1
  66. package/dist/src/prenamer/naming-utils.js +0 -147
  67. package/dist/src/prenamer/naming-utils.js.map +0 -1
  68. package/dist/src/prenamer/prenamer.d.ts +0 -36
  69. package/dist/src/prenamer/prenamer.d.ts.map +0 -1
  70. package/dist/src/prenamer/prenamer.js +0 -333
  71. package/dist/src/prenamer/prenamer.js.map +0 -1
@@ -1,333 +0,0 @@
1
- import { isVirtualParameter, isObjectSchema, getAllParentProperties, SchemaType, ImplementationLocation, } from "@autorest/codemodel";
2
- import { selectName } from "@azure-tools/codegen";
3
- import { getNameOptions, isUnassigned, ScopeNamer, NamingService } from "./naming-utils.js";
4
- import { Style } from "./formatter.js";
5
- import pkg from "lodash";
6
- const { partition } = pkg;
7
- export class PreNamer {
8
- constructor(codeModel) {
9
- this.options = {};
10
- this.format = {
11
- parameter: Style.camel,
12
- property: Style.camel,
13
- operation: Style.camel,
14
- operationGroup: Style.pascal,
15
- responseHeader: Style.camel,
16
- choice: Style.pascal,
17
- choiceValue: Style.upper,
18
- constant: Style.pascal,
19
- constantParameter: Style.camel,
20
- type: Style.pascal,
21
- client: Style.pascal,
22
- local: Style.camel,
23
- global: Style.pascal,
24
- override: {},
25
- };
26
- this.enum = 0;
27
- this.constant = 0;
28
- this.codeModel = codeModel;
29
- this.namingService = new NamingService();
30
- }
31
- init() {
32
- // get our configuration for this run.
33
- this.options = {
34
- prenamer: true,
35
- naming: {
36
- "parameter": "camel",
37
- "property": "camel",
38
- "operation": "camel",
39
- "operationGroup": "pascal",
40
- "choice": "pascal",
41
- "choiceValue": "upper",
42
- "constant": "pascal",
43
- "constantParameter": "camel",
44
- "client": "pascal",
45
- "type": "pascal",
46
- "local": "camel",
47
- "global": "camel",
48
- "preserve-uppercase-max-length": 1,
49
- },
50
- };
51
- const naming = this.options.naming || {};
52
- const maxPreserve = Number(naming["preserve-uppercase-max-length"]) || 3;
53
- this.format = {
54
- parameter: Style.select(naming.parameter, Style.camel, maxPreserve),
55
- property: Style.select(naming.property, Style.camel, maxPreserve),
56
- operation: Style.select(naming.operation, Style.camel, maxPreserve),
57
- operationGroup: Style.select(naming.operationGroup, Style.pascal, maxPreserve),
58
- responseHeader: Style.select(naming.header, Style.camel, maxPreserve),
59
- choice: Style.select(naming.choice, Style.pascal, maxPreserve),
60
- choiceValue: Style.select(naming.choiceValue, Style.upper, maxPreserve),
61
- constant: Style.select(naming.constant, Style.pascal, maxPreserve),
62
- constantParameter: Style.select(naming.constantParameter, Style.camel, maxPreserve),
63
- client: Style.select(naming.client, Style.pascal, maxPreserve),
64
- type: Style.select(naming.type, Style.pascal, maxPreserve),
65
- local: Style.select(naming.local, Style.camel, maxPreserve),
66
- global: Style.select(naming.global, Style.pascal, maxPreserve),
67
- override: naming.override || {},
68
- };
69
- return this;
70
- }
71
- process() {
72
- if (this.options["prenamer"] === false) {
73
- return this.codeModel;
74
- }
75
- const deduplicateSchemaNames = !!this.options["lenient-model-deduplication"] || !!this.options["resolve-schema-name-collisons"];
76
- const scopeNamer = new ScopeNamer({
77
- deduplicateNames: deduplicateSchemaNames,
78
- overrides: this.format.override,
79
- });
80
- // choice
81
- this.processChoiceNames(this.codeModel.schemas.choices, scopeNamer);
82
- // sealed choice
83
- this.processChoiceNames(this.codeModel.schemas.sealedChoices, scopeNamer);
84
- // constant
85
- for (const schema of values(this.codeModel.schemas.constants)) {
86
- this.namingService.setName(schema, this.format.constant, `Constant${this.enum++}`, this.format.override);
87
- }
88
- // ors
89
- for (const schema of values(this.codeModel.schemas.ors)) {
90
- this.namingService.setName(schema, this.format.type, `Union${this.enum++}`, this.format.override);
91
- }
92
- // strings
93
- for (const schema of values(this.codeModel.schemas.strings)) {
94
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
95
- }
96
- // number
97
- for (const schema of values(this.codeModel.schemas.numbers)) {
98
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
99
- }
100
- for (const schema of values(this.codeModel.schemas.dates)) {
101
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
102
- }
103
- for (const schema of values(this.codeModel.schemas.dateTimes)) {
104
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
105
- }
106
- for (const schema of values(this.codeModel.schemas.durations)) {
107
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
108
- }
109
- for (const schema of values(this.codeModel.schemas.uuids)) {
110
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
111
- }
112
- for (const schema of values(this.codeModel.schemas.uris)) {
113
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
114
- }
115
- for (const schema of values(this.codeModel.schemas.unixtimes)) {
116
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
117
- if (isUnassigned(schema.language.default.description)) {
118
- schema.language.default.description = "date in seconds since 1970-01-01T00:00:00Z.";
119
- }
120
- }
121
- for (const schema of values(this.codeModel.schemas.byteArrays)) {
122
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
123
- }
124
- for (const schema of values(this.codeModel.schemas.chars)) {
125
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
126
- }
127
- for (const schema of values(this.codeModel.schemas.booleans)) {
128
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
129
- }
130
- for (const schema of values(this.codeModel.schemas.flags)) {
131
- this.namingService.setName(schema, this.format.type, schema.type, this.format.override);
132
- }
133
- // dictionary
134
- for (const schema of values(this.codeModel.schemas.dictionaries)) {
135
- this.namingService.setName(schema, this.format.type, `DictionaryOf${schema.elementType.language.default.name}`, this.format.override);
136
- if (isUnassigned(schema.language.default.description)) {
137
- schema.language.default.description = `Dictionary of ${schema.elementType.language.default.name}`;
138
- }
139
- }
140
- for (const schema of values(this.codeModel.schemas.arrays)) {
141
- this.namingService.setName(schema, this.format.type, `ArrayOf${schema.elementType.language.default.name}`, this.format.override);
142
- if (isUnassigned(schema.language.default.description)) {
143
- schema.language.default.description = `Array of ${schema.elementType.language.default.name}`;
144
- }
145
- }
146
- for (const schema of values(this.codeModel.schemas.objects)) {
147
- scopeNamer.add(schema, this.format.type, "");
148
- const propertyScopeName = new ScopeNamer({
149
- deduplicateNames: false,
150
- overrides: this.format.override,
151
- });
152
- for (const property of values(schema.properties)) {
153
- propertyScopeName.add(property, this.format.property, "");
154
- }
155
- propertyScopeName.process();
156
- }
157
- for (const schema of values(this.codeModel.schemas.groups)) {
158
- scopeNamer.add(schema, this.format.type, "");
159
- for (const property of values(schema.properties)) {
160
- this.namingService.setName(property, this.format.property, "", this.format.override);
161
- }
162
- }
163
- for (const parameter of values(this.codeModel.globalParameters)) {
164
- if (parameter.schema.type === SchemaType.Constant) {
165
- this.namingService.setName(parameter, this.format.constantParameter, "", this.format.override);
166
- }
167
- else {
168
- this.namingService.setName(parameter, this.format.parameter, "", this.format.override);
169
- }
170
- }
171
- for (const operationGroup of this.codeModel.operationGroups) {
172
- this.namingService.setNameAllowEmpty(operationGroup, this.format.operationGroup, operationGroup.$key, this.format.override, {
173
- removeDuplicates: false,
174
- });
175
- const operationScopeNamer = new ScopeNamer({
176
- overrides: this.format.override,
177
- });
178
- for (const operation of operationGroup.operations) {
179
- operationScopeNamer.add(operation, this.format.operation, "");
180
- this.setParameterNames(operation);
181
- for (const request of values(operation.requests)) {
182
- this.setParameterNames(request);
183
- }
184
- for (const response of values(operation.responses)) {
185
- this.setResponseHeaderNames(response);
186
- }
187
- for (const response of values(operation.exceptions)) {
188
- this.setResponseHeaderNames(response);
189
- }
190
- const convenienceApi = operation.convenienceApi;
191
- if (convenienceApi) {
192
- this.namingService.setName(convenienceApi, this.format.operation, "", this.format.override);
193
- }
194
- const p = operation.language.default.paging;
195
- if (p) {
196
- p.group = p.group ? this.format.operationGroup(p.group, true, this.format.override) : undefined;
197
- p.member = p.member ? this.format.operation(p.member, true, this.format.override) : undefined;
198
- }
199
- }
200
- operationScopeNamer.process();
201
- }
202
- scopeNamer.process();
203
- // set a styled client name
204
- this.namingService.setName(this.codeModel, this.format.client, this.codeModel.info.title, this.format.override);
205
- if (this.codeModel.clients) {
206
- // client
207
- for (const client of this.codeModel.clients) {
208
- this.namingService.setName(client, this.format.client, "", this.format.override);
209
- // operation group
210
- for (const operationGroup of client.operationGroups) {
211
- this.namingService.setNameAllowEmpty(operationGroup, this.format.operationGroup, operationGroup.$key, this.format.override, {
212
- removeDuplicates: false,
213
- });
214
- }
215
- }
216
- }
217
- // fix collisions from flattening on ObjectSchemas
218
- this.fixPropertyCollisions();
219
- // fix collisions from flattening on VirtualParameters
220
- this.fixParameterCollisions();
221
- return this.codeModel;
222
- }
223
- processChoiceNames(choices, scopeNamer) {
224
- for (const schema of values(choices)) {
225
- scopeNamer.add(schema, this.format.choice, `Enum${this.enum++}`);
226
- for (const choice of values(schema.choices)) {
227
- this.namingService.setName(choice, this.format.choiceValue, "", this.format.override, {
228
- removeDuplicates: false,
229
- nameEmptyErrorMessage: `Enum '${schema.language.default.name}' cannot have a value '${choice.value}' that result in an empty name. Use x-ms-enum.values to specify the name of the values.`,
230
- });
231
- }
232
- }
233
- }
234
- setParameterNames(parameterContainer) {
235
- var _a;
236
- for (const parameter of values(parameterContainer.signatureParameters)) {
237
- if (parameter.schema.type === SchemaType.Constant) {
238
- this.namingService.setName(parameter, this.format.constantParameter, "", this.format.override);
239
- }
240
- else {
241
- this.namingService.setName(parameter, this.format.parameter, "", this.format.override);
242
- }
243
- }
244
- for (const parameter of values(parameterContainer.parameters)) {
245
- if (((_a = parameterContainer.signatureParameters) !== null && _a !== void 0 ? _a : []).indexOf(parameter) === -1) {
246
- if (parameter.schema.type === SchemaType.Constant) {
247
- this.namingService.setName(parameter, this.format.constantParameter, "", this.format.override);
248
- }
249
- else {
250
- if (parameter.implementation === ImplementationLocation.Client) {
251
- this.namingService.setName(parameter, this.format.global, "", this.format.override);
252
- }
253
- else {
254
- this.namingService.setName(parameter, this.format.local, "", this.format.override);
255
- }
256
- }
257
- }
258
- }
259
- }
260
- setResponseHeaderNames(response) {
261
- var _a;
262
- if (response.protocol.http) {
263
- for (const header of Object.values((_a = response.protocol.http.headers) !== null && _a !== void 0 ? _a : {})) {
264
- this.namingService.setName(header, this.format.responseHeader, "", this.format.override);
265
- }
266
- }
267
- }
268
- fixParameterCollisions() {
269
- for (const operation of values(this.codeModel.operationGroups).flatMap((each) => each.operations)) {
270
- for (const request of values(operation.requests)) {
271
- const parameters = values(operation.signatureParameters).concat(values(request.signatureParameters));
272
- const usedNames = new Set();
273
- const collisions = new Set();
274
- // we need to make sure we avoid name collisions. operation parameters get first crack.
275
- for (const each of values(parameters)) {
276
- const name = this.format.parameter(each.language.default.name);
277
- if (usedNames.has(name)) {
278
- collisions.add(each);
279
- }
280
- else {
281
- usedNames.add(name);
282
- }
283
- }
284
- // handle operation parameters
285
- for (const parameter of collisions) {
286
- let options = [parameter.language.default.name];
287
- if (isVirtualParameter(parameter)) {
288
- options = getNameOptions(parameter.schema.language.default.name, [
289
- parameter.language.default.name,
290
- ...parameter.pathToProperty.map((each) => each.language.default.name),
291
- ]).map((each) => this.format.parameter(each));
292
- }
293
- parameter.language.default.name = this.format.parameter(selectName(options, usedNames));
294
- }
295
- }
296
- }
297
- }
298
- fixCollisions(schema) {
299
- var _a, _b;
300
- for (const each of values((_a = schema.parents) === null || _a === void 0 ? void 0 : _a.immediate).filter((each) => isObjectSchema(each))) {
301
- this.fixCollisions(each);
302
- }
303
- const [owned, flattened] = partition((_b = schema.properties) !== null && _b !== void 0 ? _b : [], (each) => each.flattenedNames === undefined || each.flattenedNames.length === 0);
304
- const inherited = [...getAllParentProperties(schema)];
305
- const all = [...owned, ...inherited, ...flattened];
306
- const inlined = new Map();
307
- for (const each of all) {
308
- const name = this.format.property(each.language.default.name);
309
- // track number of instances of a given name.
310
- inlined.set(name, (inlined.get(name) || 0) + 1);
311
- }
312
- const usedNames = new Set(inlined.keys());
313
- for (const each of flattened /*.sort((a, b) => length(a.nameOptions) - length(b.nameOptions)) */) {
314
- const ct = inlined.get(this.format.property(each.language.default.name));
315
- if (ct && ct > 1) {
316
- const options = getNameOptions(each.schema.language.default.name, [
317
- each.language.default.name,
318
- ...values(each.flattenedNames),
319
- ]);
320
- each.language.default.name = this.format.property(selectName(options, usedNames));
321
- }
322
- }
323
- }
324
- fixPropertyCollisions() {
325
- for (const schema of values(this.codeModel.schemas.objects)) {
326
- this.fixCollisions(schema);
327
- }
328
- }
329
- }
330
- function values(item) {
331
- return Object.values(item !== null && item !== void 0 ? item : []);
332
- }
333
- //# sourceMappingURL=prenamer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prenamer.js","sourceRoot":"","sources":["../../../src/prenamer/prenamer.ts"],"names":[],"mappings":"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"}