@azure-tools/typespec-ts 0.13.1 → 0.13.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-ts",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "An experimental CADL emitter for TypeScript RLC",
5
5
  "main": "dist/src/index.js",
6
6
  "type": "module",
@@ -14,7 +14,6 @@
14
14
  "@types/fs-extra": "^9.0.13",
15
15
  "@typescript-eslint/eslint-plugin": "^5.58.0",
16
16
  "@typescript-eslint/parser": "^5.58.0",
17
- "@typespec/http": "~0.44.0",
18
17
  "chai": "^4.3.6",
19
18
  "mkdirp": "^2.1.2",
20
19
  "eslint": "^8.9.0",
@@ -23,10 +22,9 @@
23
22
  "ts-node": "^10.9.1",
24
23
  "typescript": "~5.0.0",
25
24
  "prettier": "~2.7.1",
26
- "@azure-tools/cadl-ranch-specs": "~0.15.4",
27
- "@typespec/versioning": "~0.44.0",
25
+ "@azure-tools/cadl-ranch-specs": "^0.15.4",
28
26
  "@azure-tools/cadl-ranch-expect": "^0.3.2",
29
- "@azure-tools/cadl-ranch": "~0.4.17",
27
+ "@azure-tools/cadl-ranch": "^0.4.17",
30
28
  "chalk": "^4.0.0",
31
29
  "@azure-rest/core-client": "^1.1.3",
32
30
  "@azure/core-auth": "^1.3.2",
@@ -37,17 +35,17 @@
37
35
  "@azure/logger": "^1.0.4"
38
36
  },
39
37
  "peerDependencies": {
40
- "@azure-tools/typespec-azure-core": ">=0.30.0 <1.0.0",
41
- "@azure-tools/typespec-client-generator-core": ">=0.30.0 <1.0.0",
42
- "@typespec/compiler": ">=0.44.0 <1.0.0",
43
- "@typespec/http": ">=0.44.0 <1.0.0",
44
- "@typespec/rest": ">=0.44.0 <1.0.0",
45
- "@typespec/versioning": ">=0.44.0 <1.0.0"
38
+ "@azure-tools/typespec-azure-core": ">=0.31.0 <1.0.0",
39
+ "@azure-tools/typespec-client-generator-core": ">=0.31.0 <1.0.0",
40
+ "@typespec/compiler": ">=0.45.0 <1.0.0",
41
+ "@typespec/http": ">=0.45.0 <1.0.0",
42
+ "@typespec/rest": ">=0.45.0 <1.0.0",
43
+ "@typespec/versioning": ">=0.45.0 <1.0.0"
46
44
  },
47
45
  "dependencies": {
48
46
  "prettier": "^2.6.1",
49
47
  "tslib": "^2.3.1",
50
- "@azure-tools/rlc-common": "^0.13.1",
48
+ "@azure-tools/rlc-common": "^0.13.2",
51
49
  "ts-morph": "^15.1.0",
52
50
  "fs-extra": "^11.1.0"
53
51
  },
package/src/modelUtils.ts CHANGED
@@ -453,6 +453,8 @@ function getSchemaForModel(
453
453
  true /** shouldGuard */
454
454
  );
455
455
 
456
+ modelSchema.typeName = modelSchema.name;
457
+
456
458
  if (
457
459
  (model.name === "ErrorResponse" ||
458
460
  model.name === "ErrorModel" ||
@@ -1,5 +1,6 @@
1
1
  import { toCamelCase, toPascalCase } from "../../casingUtils.js";
2
2
  import { Client, Operation } from "../modularCodeModel.js";
3
+ import { ReservedModelNames, NameType, normalizeName } from "@azure-tools/rlc-common";
3
4
 
4
5
  export function getClientName(client: Client) {
5
6
  return client.name.replace(/Client$/, "");
@@ -17,7 +18,7 @@ export function getOperationName(
17
18
  const casingFn = options.casing === "camel" ? toCamelCase : toPascalCase;
18
19
  if (isReservedName(operation.name, NameType.Operation)) {
19
20
  return {
20
- name: `${operation.name}Operation`,
21
+ name: normalizeName(operation.name, NameType.Operation, true),
21
22
  fixme: [
22
23
  `${operation.name} is a reserved word that cannot be used as an operation name. Please add @projectedName(
23
24
  "javascript", "<JS-Specific-Name>") to the operation to override the generated name.`
@@ -31,95 +32,8 @@ export function getOperationName(
31
32
  }
32
33
 
33
34
  export function isReservedName(name: string, nameType: NameType): boolean {
34
- return RESERVED_NAMES.some(
35
+ return ReservedModelNames.some(
35
36
  (reservedName) =>
36
37
  reservedName.name === name && reservedName.reservedFor.includes(nameType)
37
38
  );
38
39
  }
39
-
40
- interface ReservedName {
41
- name: string;
42
- reservedFor: NameType[];
43
- }
44
-
45
- enum NameType {
46
- Class,
47
- File,
48
- Interface,
49
- Property,
50
- Parameter,
51
- Operation,
52
- OperationGroup
53
- }
54
-
55
- const Newable = [NameType.Class, NameType.Interface, NameType.OperationGroup];
56
-
57
- const RESERVED_NAMES: ReservedName[] = [
58
- { name: "any", reservedFor: [NameType.Parameter] },
59
- { name: "as", reservedFor: [NameType.Parameter] },
60
- { name: "boolean", reservedFor: [NameType.Parameter, ...Newable] },
61
- { name: "break", reservedFor: [NameType.Parameter] },
62
- { name: "case", reservedFor: [NameType.Parameter] },
63
- { name: "catch", reservedFor: [NameType.Parameter] },
64
- { name: "class", reservedFor: [NameType.Parameter] },
65
- { name: "const", reservedFor: [NameType.Parameter] },
66
- { name: "constructor", reservedFor: [NameType.Parameter] },
67
- { name: "continue", reservedFor: [NameType.Parameter] },
68
- { name: "date", reservedFor: [NameType.Parameter, ...Newable] },
69
- { name: "debugger", reservedFor: [NameType.Parameter] },
70
- { name: "declare", reservedFor: [NameType.Parameter] },
71
- { name: "default", reservedFor: [NameType.Parameter] },
72
- {
73
- name: "delete",
74
- reservedFor: [NameType.Parameter, NameType.Operation, ...Newable]
75
- },
76
- { name: "do", reservedFor: [NameType.Parameter] },
77
- { name: "else", reservedFor: [NameType.Parameter] },
78
- { name: "enum", reservedFor: [NameType.Parameter] },
79
- { name: "error", reservedFor: [NameType.Parameter, ...Newable] },
80
- { name: "export", reservedFor: [NameType.Parameter] },
81
- { name: "extends", reservedFor: [NameType.Parameter] },
82
- { name: "false", reservedFor: [NameType.Parameter] },
83
- { name: "finally", reservedFor: [NameType.Parameter] },
84
- { name: "for", reservedFor: [NameType.Parameter] },
85
- { name: "from", reservedFor: [NameType.Parameter] },
86
- { name: "function", reservedFor: [NameType.Parameter, ...Newable] },
87
- { name: "get", reservedFor: [NameType.Parameter] },
88
- { name: "if", reservedFor: [NameType.Parameter] },
89
- { name: "implements", reservedFor: [NameType.Parameter] },
90
- { name: "import", reservedFor: [NameType.Parameter] },
91
- { name: "in", reservedFor: [NameType.Parameter] },
92
- { name: "instanceof", reservedFor: [NameType.Parameter] },
93
- { name: "interface", reservedFor: [NameType.Parameter] },
94
- { name: "let", reservedFor: [NameType.Parameter] },
95
- { name: "module", reservedFor: [NameType.Parameter] },
96
- { name: "new", reservedFor: [NameType.Parameter] },
97
- { name: "null", reservedFor: [NameType.Parameter] },
98
- { name: "number", reservedFor: [NameType.Parameter, ...Newable] },
99
- { name: "of", reservedFor: [NameType.Parameter] },
100
- { name: "package", reservedFor: [NameType.Parameter] },
101
- { name: "private", reservedFor: [NameType.Parameter] },
102
- { name: "protected", reservedFor: [NameType.Parameter] },
103
- { name: "public", reservedFor: [NameType.Parameter] },
104
- { name: "requestoptions", reservedFor: [NameType.Parameter] },
105
- { name: "require", reservedFor: [NameType.Parameter] },
106
- { name: "return", reservedFor: [NameType.Parameter] },
107
- { name: "set", reservedFor: [NameType.Parameter, ...Newable] },
108
- { name: "static", reservedFor: [NameType.Parameter] },
109
- { name: "string", reservedFor: [NameType.Parameter, ...Newable] },
110
- { name: "super", reservedFor: [NameType.Parameter] },
111
- { name: "switch", reservedFor: [NameType.Parameter] },
112
- { name: "symbol", reservedFor: [NameType.Parameter, ...Newable] },
113
- { name: "this", reservedFor: [NameType.Parameter] },
114
- { name: "throw", reservedFor: [NameType.Parameter] },
115
- { name: "true", reservedFor: [NameType.Parameter] },
116
- { name: "try", reservedFor: [NameType.Parameter] },
117
- { name: "type", reservedFor: [NameType.Parameter] },
118
- { name: "typeof", reservedFor: [NameType.Parameter] },
119
- { name: "var", reservedFor: [NameType.Parameter] },
120
- { name: "void", reservedFor: [NameType.Parameter] },
121
- { name: "while", reservedFor: [NameType.Parameter] },
122
- { name: "with", reservedFor: [NameType.Parameter] },
123
- { name: "yield", reservedFor: [NameType.Parameter] },
124
- { name: "arguments", reservedFor: [NameType.Parameter] }
125
- ];
@@ -194,6 +194,7 @@ function extractSpecialSerializeInfo(
194
194
  let hasPipeCollection = false;
195
195
  let hasTsvCollection = false;
196
196
  let hasSsvCollection = false;
197
+ let hasCsvCollection = false;
197
198
  const operationGroups = listOperationGroups(dpgContext, client);
198
199
  for (const operationGroup of operationGroups) {
199
200
  const operations = listOperationsInOperationGroup(
@@ -216,6 +217,9 @@ function extractSpecialSerializeInfo(
216
217
  hasSsvCollection = hasSsvCollection
217
218
  ? hasSsvCollection
218
219
  : serializeInfo.hasSsvCollection;
220
+ hasCsvCollection = hasCsvCollection
221
+ ? hasCsvCollection
222
+ : serializeInfo.hasCsvCollection;
219
223
  });
220
224
  }
221
225
  }
@@ -236,12 +240,16 @@ function extractSpecialSerializeInfo(
236
240
  hasSsvCollection = hasSsvCollection
237
241
  ? hasSsvCollection
238
242
  : serializeInfo.hasSsvCollection;
243
+ hasCsvCollection = hasCsvCollection
244
+ ? hasCsvCollection
245
+ : serializeInfo.hasCsvCollection;
239
246
  });
240
247
  }
241
248
  return {
242
249
  hasMultiCollection,
243
250
  hasPipeCollection,
244
251
  hasTsvCollection,
245
- hasSsvCollection
252
+ hasSsvCollection,
253
+ hasCsvCollection
246
254
  };
247
255
  }
@@ -126,15 +126,19 @@ function getParameterMetadata(
126
126
  paramType: "query" | "path" | "header",
127
127
  parameter: HttpOperationParameter
128
128
  ): ParameterMetadata {
129
+ const schemaContext = [SchemaContext.Exception, SchemaContext.Input];
129
130
  const schema = getSchemaForType(
130
131
  program,
131
132
  dpgContext,
132
133
  parameter.param.type,
133
- [SchemaContext.Exception, SchemaContext.Input],
134
+ schemaContext,
134
135
  false,
135
136
  parameter.param
136
137
  ) as Schema;
137
- let type = getTypeName(schema);
138
+ let type =
139
+ paramType === "query"
140
+ ? getTypeName(schema, schemaContext)
141
+ : getTypeName(schema);
138
142
  const name = getParameterName(parameter.name);
139
143
  let description =
140
144
  getFormattedPropertyDoc(program, parameter.param, schema) ?? "";
@@ -144,7 +148,8 @@ function getParameterMetadata(
144
148
  serializeInfo.hasMultiCollection ||
145
149
  serializeInfo.hasPipeCollection ||
146
150
  serializeInfo.hasSsvCollection ||
147
- serializeInfo.hasTsvCollection
151
+ serializeInfo.hasTsvCollection ||
152
+ serializeInfo.hasCsvCollection
148
153
  ) {
149
154
  type = "string";
150
155
  description += ` This parameter needs to be formatted as ${serializeInfo.collectionInfo.join(
@@ -495,6 +500,7 @@ export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
495
500
  let hasPipeCollection = false;
496
501
  let hasSsvCollection = false;
497
502
  let hasTsvCollection = false;
503
+ let hasCsvCollection = false;
498
504
  const descriptions = [];
499
505
  const collectionInfo = [];
500
506
  if (
@@ -522,11 +528,18 @@ export function getSpecialSerializeInfo(parameter: HttpOperationParameter) {
522
528
  descriptions.push("buildPipeCollection");
523
529
  collectionInfo.push("pipe");
524
530
  }
531
+
532
+ if (parameter.type === "header" && (parameter as any).format === "csv") {
533
+ hasCsvCollection = true;
534
+ descriptions.push("buildCsvCollection");
535
+ collectionInfo.push("csv");
536
+ }
525
537
  return {
526
538
  hasMultiCollection,
527
539
  hasPipeCollection,
528
540
  hasSsvCollection,
529
541
  hasTsvCollection,
542
+ hasCsvCollection,
530
543
  descriptions,
531
544
  collectionInfo
532
545
  };