@microsoft/typespec-msgraph 1.0.0-Preview.7 → 1.0.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.
Files changed (59) hide show
  1. package/dist/src/components/property-element.d.ts.map +1 -1
  2. package/dist/src/components/property-element.js +2 -2
  3. package/dist/src/components/property-element.js.map +1 -1
  4. package/dist/src/entities/annotations.d.ts.map +1 -1
  5. package/dist/src/entities/annotations.js +5 -5
  6. package/dist/src/entities/annotations.js.map +1 -1
  7. package/dist/src/entities/enum.d.ts.map +1 -1
  8. package/dist/src/entities/enum.js +3 -2
  9. package/dist/src/entities/enum.js.map +1 -1
  10. package/dist/src/entities/model.d.ts.map +1 -1
  11. package/dist/src/entities/model.js +3 -3
  12. package/dist/src/entities/model.js.map +1 -1
  13. package/dist/src/entities/namespace.d.ts.map +1 -1
  14. package/dist/src/entities/namespace.js +25 -20
  15. package/dist/src/entities/namespace.js.map +1 -1
  16. package/dist/src/entities/operation.js +3 -3
  17. package/dist/src/entities/operation.js.map +1 -1
  18. package/dist/src/lib.d.ts +2 -0
  19. package/dist/src/lib.d.ts.map +1 -1
  20. package/dist/src/lib.js +1 -0
  21. package/dist/src/lib.js.map +1 -1
  22. package/dist/src/linter.d.ts +2 -1
  23. package/dist/src/linter.d.ts.map +1 -1
  24. package/dist/src/linter.js +12 -2
  25. package/dist/src/linter.js.map +1 -1
  26. package/dist/src/rules/collections.d.ts +3 -0
  27. package/dist/src/rules/collections.d.ts.map +1 -1
  28. package/dist/src/rules/collections.js +28 -1
  29. package/dist/src/rules/collections.js.map +1 -1
  30. package/dist/src/rules/entity.d.ts +3 -0
  31. package/dist/src/rules/entity.d.ts.map +1 -1
  32. package/dist/src/rules/entity.js +44 -18
  33. package/dist/src/rules/entity.js.map +1 -1
  34. package/dist/src/rules/graph-partial.d.ts +2 -1
  35. package/dist/src/rules/graph-partial.d.ts.map +1 -1
  36. package/dist/src/rules/graph-partial.js +58 -12
  37. package/dist/src/rules/graph-partial.js.map +1 -1
  38. package/dist/src/rules/graph-route.d.ts.map +1 -1
  39. package/dist/src/rules/graph-route.js.map +1 -1
  40. package/dist/src/rules/namespace.d.ts +6 -0
  41. package/dist/src/rules/namespace.d.ts.map +1 -1
  42. package/dist/src/rules/namespace.js +54 -1
  43. package/dist/src/rules/namespace.js.map +1 -1
  44. package/dist/src/rules/properties.d.ts +11 -3
  45. package/dist/src/rules/properties.d.ts.map +1 -1
  46. package/dist/src/rules/properties.js +130 -12
  47. package/dist/src/rules/properties.js.map +1 -1
  48. package/dist/src/supressions/csdl-suppression-rules.d.ts.map +1 -1
  49. package/dist/src/supressions/csdl-suppression-rules.js +7 -3
  50. package/dist/src/supressions/csdl-suppression-rules.js.map +1 -1
  51. package/dist/src/testing/index.d.ts +1 -0
  52. package/dist/src/testing/index.d.ts.map +1 -1
  53. package/dist/src/testing/index.js +21 -0
  54. package/dist/src/testing/index.js.map +1 -1
  55. package/dist/src/utils.d.ts +14 -0
  56. package/dist/src/utils.d.ts.map +1 -1
  57. package/dist/src/utils.js +59 -4
  58. package/dist/src/utils.js.map +1 -1
  59. package/package.json +11 -8
@@ -3,4 +3,10 @@ export declare function validateNamespaceIsRequired(program: Program): void;
3
3
  export declare function validatePublicNamespaceName(program: Program): void;
4
4
  export declare function validateTopLevelNamespaceMustHavePublicNamespace(program: Program): void;
5
5
  export declare function validateWorkloadNamespaceName(program: Program): void;
6
+ /**
7
+ * Rule to enforce that namespace parts are in camelCase
8
+ */
9
+ export declare const namespacesMustBeCamelCase: import("@typespec/compiler").LinterRuleDefinition<"namespaces-must-be-camel-case", {
10
+ readonly default: import("@typespec/compiler").CallableMessage<["namespace", "suggested"]>;
11
+ }>;
6
12
  //# sourceMappingURL=namespace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkD,MAAM,oBAAoB,CAAC;AAK7F,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QA0B3D;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAqB3D;AAED,wBAAgB,gDAAgD,CAAC,OAAO,EAAE,OAAO,QAkChF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,QAqB7D"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAsF,MAAM,oBAAoB,CAAC;AAKjI,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QA0B3D;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAqB3D;AAED,wBAAgB,gDAAgD,CAAC,OAAO,EAAE,OAAO,QAkChF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,QAqB7D;AASD;;GAEG;AACH,eAAO,MAAM,yBAAyB;;EA+CpC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { reportDiagnostic } from "../lib.js";
2
2
  import { getPublicNamespaceName, hasPublicNamespace } from "../index.js";
3
- import { getNamespaceFullName, navigateTypesInNamespace } from "@typespec/compiler";
3
+ import { getNamespaceFullName, navigateTypesInNamespace, createRule, paramMessage } from "@typespec/compiler";
4
4
  import { getIdForType, isExcludedCoreType, isTypeDefinedInExternalLibrary } from "../utils.js";
5
5
  import { DEFAULT_MSGRAPH_NAMESPACE, GetDeclaredNamespaces, expandNamespaces } from "../entities/namespace.js";
6
6
  import { getWorkloadNamespaceName, hasWorkloadNamespace } from "../decorators/workload-namespace.js";
@@ -107,4 +107,57 @@ function isValidPublicNamespaceName(namespace) {
107
107
  const namespaceRegex = /microsoft\.graph\.[\w]+/;
108
108
  return namespace === DEFAULT_MSGRAPH_NAMESPACE || namespaceRegex.test(namespace);
109
109
  }
110
+ /**
111
+ * Rule to enforce that namespace parts are in camelCase
112
+ */
113
+ export const namespacesMustBeCamelCase = createRule({
114
+ name: "namespaces-must-be-camel-case",
115
+ severity: "warning",
116
+ description: "Namespace parts must be in lower camel case",
117
+ messages: {
118
+ default: paramMessage `Namespace '${"namespace"}' contains parts that don't follow camelCase. Consider renaming to '${"suggested"}'.`,
119
+ },
120
+ create(context) {
121
+ return {
122
+ namespace: (namespace) => {
123
+ // Skip built-in namespaces and library types
124
+ if (!namespace.name || namespace.name === "") {
125
+ return;
126
+ }
127
+ const namespaceName = getNamespaceFullName(namespace);
128
+ if (!namespaceName || isExcludedNamespace(namespaceName)) {
129
+ return;
130
+ }
131
+ const parts = namespaceName.split('.');
132
+ const nonCamelCaseParts = [];
133
+ const suggestedParts = [];
134
+ for (const part of parts) {
135
+ if (part.length > 0 && /^[A-Z]/.test(part)) {
136
+ nonCamelCaseParts.push(part);
137
+ suggestedParts.push(part.charAt(0).toLowerCase() + part.slice(1));
138
+ }
139
+ else {
140
+ suggestedParts.push(part);
141
+ }
142
+ }
143
+ if (nonCamelCaseParts.length > 0) {
144
+ const suggestedNamespace = suggestedParts.join('.');
145
+ context.reportDiagnostic({
146
+ target: namespace,
147
+ format: {
148
+ namespace: namespaceName,
149
+ suggested: suggestedNamespace,
150
+ },
151
+ });
152
+ }
153
+ },
154
+ };
155
+ },
156
+ });
157
+ /**
158
+ * Checks if namespace should be excluded from validation
159
+ */
160
+ function isExcludedNamespace(namespaceName) {
161
+ return namespaceName.startsWith('MsGraph');
162
+ }
110
163
  //# sourceMappingURL=namespace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
+ import { CallableMessage } from "@typespec/compiler";
1
2
  export declare const useCreatedInPropertyNames: import("@typespec/compiler").LinterRuleDefinition<"use-created-in-property-names", {
2
- readonly default: import("@typespec/compiler").CallableMessage<["property", "foundWord", "suggested"]>;
3
+ readonly default: CallableMessage<["property", "foundWord", "suggested"]>;
3
4
  }>;
4
5
  export declare const useModifiedInPropertyNames: import("@typespec/compiler").LinterRuleDefinition<"use-modified-in-property-names", {
5
- readonly default: import("@typespec/compiler").CallableMessage<["property", "foundWord", "suggested"]>;
6
+ readonly default: CallableMessage<["property", "foundWord", "suggested"]>;
6
7
  }>;
7
8
  export declare const useProperDefaultRecord: import("@typespec/compiler").LinterRuleDefinition<"use-proper-default-record", {
8
- readonly default: import("@typespec/compiler").CallableMessage<["model"]>;
9
+ readonly default: CallableMessage<["model"]>;
10
+ }>;
11
+ export declare const propertyNameShouldNotStartWithNavigationSourceName: import("@typespec/compiler").LinterRuleDefinition<"property-name-should-not-start-with-navigation-source-name", {
12
+ readonly navigationSource: CallableMessage<["property", "navigationSource"]>;
13
+ readonly parentProperty: CallableMessage<["property", "parentType", "parentProperty"]>;
14
+ }>;
15
+ export declare const propertyMustNotBeNamedType: import("@typespec/compiler").LinterRuleDefinition<"property-must-not-be-named-type", {
16
+ readonly default: CallableMessage<[]>;
9
17
  }>;
10
18
  //# sourceMappingURL=properties.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,yBAAyB;;EAiCpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;EAiCrC,CAAC;AAGH,eAAO,MAAM,sBAAsB;;EAoCjC,CAAC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAShB,MAAM,oBAAoB,CAAC;AAc5B,eAAO,MAAM,yBAAyB;;EAgCpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;EAgCrC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;EAwCjC,CAAC;AA6BH,eAAO,MAAM,kDAAkD;;;EAoB7D,CAAC;AAkHH,eAAO,MAAM,0BAA0B;;EAmBrC,CAAC"}
@@ -1,6 +1,6 @@
1
- import { createRule, paramMessage } from "@typespec/compiler";
2
- import { findOneOfWordsIC, toSameFirstCharCasingAs } from "../utils.js";
3
- import { getActualType } from "../utils.js";
1
+ import { createRule, paramMessage, } from "@typespec/compiler";
2
+ import { isEntity, isComplex, getGraphRoutePaths, hasGraphRoute } from "../index.js";
3
+ import { findOneOfWordsIC, getActualType, getInterfacesTargetingModel, startsWithVariantIC, toSameFirstCharCasingAs, } from "../utils.js";
4
4
  import { GetDeclaredNamespaces } from "../entities/namespace.js";
5
5
  const CREATED_WORD_LIST = ["creation", "create"];
6
6
  const MODIFIED_WORD_LIST = ["updated", "changed"];
@@ -19,7 +19,7 @@ export const useCreatedInPropertyNames = createRule({
19
19
  if (!flaggedWord) {
20
20
  return;
21
21
  }
22
- const correctVariant = toSameFirstCharCasingAs('created', flaggedWord);
22
+ const correctVariant = toSameFirstCharCasingAs("created", flaggedWord);
23
23
  const suggestedPropertyName = propertyName.replace(flaggedWord, correctVariant);
24
24
  context.reportDiagnostic({
25
25
  target: property,
@@ -28,11 +28,11 @@ export const useCreatedInPropertyNames = createRule({
28
28
  property: propertyName,
29
29
  foundWord: flaggedWord,
30
30
  suggested: suggestedPropertyName,
31
- }
31
+ },
32
32
  });
33
- }
33
+ },
34
34
  };
35
- }
35
+ },
36
36
  });
37
37
  export const useModifiedInPropertyNames = createRule({
38
38
  name: "use-modified-in-property-names",
@@ -49,7 +49,7 @@ export const useModifiedInPropertyNames = createRule({
49
49
  if (!flaggedWord) {
50
50
  return;
51
51
  }
52
- const correctVariant = toSameFirstCharCasingAs('modified', flaggedWord);
52
+ const correctVariant = toSameFirstCharCasingAs("modified", flaggedWord);
53
53
  const suggestedPropertyName = propertyName.replace(flaggedWord, correctVariant);
54
54
  context.reportDiagnostic({
55
55
  target: property,
@@ -58,11 +58,11 @@ export const useModifiedInPropertyNames = createRule({
58
58
  property: propertyName,
59
59
  foundWord: flaggedWord,
60
60
  suggested: suggestedPropertyName,
61
- }
61
+ },
62
62
  });
63
- }
63
+ },
64
64
  };
65
- }
65
+ },
66
66
  });
67
67
  export const useProperDefaultRecord = createRule({
68
68
  name: "use-proper-default-record",
@@ -106,7 +106,7 @@ function isModelUsedInCollections(program, targetModel) {
106
106
  for (const [_, model] of namespace.models) {
107
107
  for (const [_, property] of model.properties) {
108
108
  const type = property.type;
109
- if (type.kind === "Union" || type.kind === "Model" && type.name === "Array") {
109
+ if (type.kind === "Union" || (type.kind === "Model" && type.name === "Array")) {
110
110
  const actualType = getActualType(program, type);
111
111
  return actualType === targetModel && model !== targetModel;
112
112
  }
@@ -115,4 +115,122 @@ function isModelUsedInCollections(program, targetModel) {
115
115
  }
116
116
  return false;
117
117
  }
118
+ export const propertyNameShouldNotStartWithNavigationSourceName = createRule({
119
+ name: "property-name-should-not-start-with-navigation-source-name",
120
+ severity: "warning",
121
+ description: "Property names should not start with their parent navigation source name or parent property name to avoid repeated path segments",
122
+ messages: {
123
+ navigationSource: paramMessage `The property '${"property"}' starts with the name of the navigation source '${"navigationSource"}'. This may lead to repeated path segments in the URL, which is not desirable. For more information see [the guidelines](https://github.com/microsoft/api-guidelines/blob/vNext/graph/GuidelinesGraph.md#naming).`,
124
+ parentProperty: paramMessage `The property '${"property"}' starts with the name of the property '${"parentType"}/${"parentProperty"}'. This may lead to repeated path segments in the URL, which is not desirable. For more information see [the guidelines](https://github.com/microsoft/api-guidelines/blob/vNext/graph/GuidelinesGraph.md#naming).`,
125
+ },
126
+ create(context) {
127
+ return {
128
+ modelProperty: (property) => {
129
+ // Check 1: Property name vs navigation source name
130
+ checkPropertyVsNavigationSource(context, property);
131
+ // Check 2: Nested property name vs parent property name
132
+ checkNestedPropertyVsParentProperty(context, property);
133
+ },
134
+ };
135
+ },
136
+ });
137
+ /**
138
+ * Check if property name starts with navigation source name
139
+ */
140
+ function checkPropertyVsNavigationSource(context, property) {
141
+ if (!property.model ||
142
+ (!isEntity(context.program, property.model) && !isComplex(context.program, property.model))) {
143
+ return;
144
+ }
145
+ const interfaces = getInterfacesTargetingModel(context.program, property.model);
146
+ for (const theInterface of interfaces) {
147
+ const navigationSourceName = getNavigationSourceNameFromInterface(context.program, theInterface);
148
+ if (!navigationSourceName) {
149
+ continue;
150
+ }
151
+ if (startsWithVariantIC(property.name, navigationSourceName)) {
152
+ context.reportDiagnostic({
153
+ target: property,
154
+ messageId: "navigationSource",
155
+ format: {
156
+ property: property.name,
157
+ navigationSource: navigationSourceName,
158
+ },
159
+ });
160
+ return; // Report once per property
161
+ }
162
+ }
163
+ }
164
+ /**
165
+ * Extract navigation source name from the interface's graph routes
166
+ */
167
+ function getNavigationSourceNameFromInterface(program, theInterface) {
168
+ if (!hasGraphRoute(program, theInterface)) {
169
+ return null;
170
+ }
171
+ const graphRoutes = getGraphRoutePaths(program, theInterface);
172
+ if (!graphRoutes || graphRoutes.length === 0) {
173
+ return null;
174
+ }
175
+ // Get the last non-parameter segment from the first route
176
+ for (const route of graphRoutes) {
177
+ const segments = route.split("/").filter((s) => s.length > 0 && !s.startsWith("{"));
178
+ if (segments.length > 0) {
179
+ return segments[segments.length - 1];
180
+ }
181
+ }
182
+ return null;
183
+ }
184
+ /**
185
+ * Check if nested property names start with their parent property name
186
+ */
187
+ function checkNestedPropertyVsParentProperty(context, property) {
188
+ var _a;
189
+ const propertyType = getActualType(context.program, property.type);
190
+ // Only check if property type is a structured type (entity or complex)
191
+ if (!isStructuredType(context.program, propertyType)) {
192
+ return;
193
+ }
194
+ // Check all nested properties
195
+ for (const [_, nestedProperty] of propertyType.properties) {
196
+ if (startsWithVariantIC(nestedProperty.name, property.name)) {
197
+ const parentTypeName = ((_a = property.model) === null || _a === void 0 ? void 0 : _a.name) || "unknown";
198
+ context.reportDiagnostic({
199
+ target: nestedProperty,
200
+ messageId: "parentProperty",
201
+ format: {
202
+ property: nestedProperty.name,
203
+ parentType: parentTypeName,
204
+ parentProperty: property.name,
205
+ },
206
+ });
207
+ }
208
+ }
209
+ }
210
+ /**
211
+ * Helper to check if a type is a structured type (entity or complex)
212
+ */
213
+ function isStructuredType(program, type) {
214
+ return (type === null || type === void 0 ? void 0 : type.kind) === "Model" && (isEntity(program, type) || isComplex(program, type));
215
+ }
216
+ export const propertyMustNotBeNamedType = createRule({
217
+ name: "property-must-not-be-named-type",
218
+ severity: "warning",
219
+ description: "A property should not be named 'type'.",
220
+ messages: {
221
+ default: paramMessage `Property should not be named 'type'. Consider using a more descriptive name like 'itemType', 'objectType', or 'category'.`,
222
+ },
223
+ create(context) {
224
+ return {
225
+ modelProperty: (property) => {
226
+ if (property.name.toLowerCase() === "type") {
227
+ context.reportDiagnostic({
228
+ target: property,
229
+ format: {},
230
+ });
231
+ }
232
+ },
233
+ };
234
+ },
235
+ });
118
236
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"csdl-suppression-rules.d.ts","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAenE,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7E"}
1
+ {"version":3,"file":"csdl-suppression-rules.d.ts","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAmBnE,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7E"}
@@ -1,10 +1,10 @@
1
- import { collectionPropertyShouldNotBeNullable, collectionOfComplexTypeShouldUseEntityType } from "../rules/collections.js";
1
+ import { collectionPropertyShouldNotBeNullable, collectionOfComplexTypeShouldUseEntityType, collectionPropertyNameShouldBePlural } from "../rules/collections.js";
2
2
  import { containedEntityShouldNotHaveEntitySet } from "../rules/contains.js";
3
- import { referenceIdPropertyShouldBeNavigationProperty } from "../rules/entity.js";
3
+ import { referenceIdPropertyShouldBeNavigationProperty, entityNamesShouldBeSingular } from "../rules/entity.js";
4
4
  import { collectionShouldNotBeEnum, nullableBooleanShouldBeEnum, nullableEnumsShouldAddAdditionalMember, useEvolvableEnumRule } from "../rules/enum.js";
5
5
  import { shouldNotUseUnnecessaryInheritance } from "../rules/model.js";
6
6
  import { namesMustBeCamelCase } from "../rules/naming.js";
7
- import { useCreatedInPropertyNames, useModifiedInPropertyNames, useProperDefaultRecord } from "../rules/properties.js";
7
+ import { useCreatedInPropertyNames, useModifiedInPropertyNames, useProperDefaultRecord, propertyMustNotBeNamedType, propertyNameShouldNotStartWithNavigationSourceName } from "../rules/properties.js";
8
8
  const DEFAULT_RULE = "default";
9
9
  /**
10
10
  * Map of internal linter rule export names (without package scope)
@@ -13,12 +13,16 @@ const DEFAULT_RULE = "default";
13
13
  */
14
14
  export const csdlSuppressionRules = {
15
15
  [collectionPropertyShouldNotBeNullable.name]: "CollectionPropertyShouldNotBeNullable",
16
+ [collectionPropertyNameShouldBePlural.name]: "PluralNoun",
16
17
  [collectionOfComplexTypeShouldUseEntityType.name]: "ComplexTypeCollectionShouldUseEntityTypeInstead",
17
18
  [collectionShouldNotBeEnum.name]: "EnumCollectionShouldBeFlaggedEnum",
18
19
  [containedEntityShouldNotHaveEntitySet.name]: "ContainedNavPropertyShouldNotHaveEntitySet",
20
+ [entityNamesShouldBeSingular.name]: "EntityTypeNameShouldBeSingular",
19
21
  [namesMustBeCamelCase.name]: "CamelCase",
20
22
  [nullableBooleanShouldBeEnum.name]: "NullableBooleanShouldBeEnum",
21
23
  [nullableEnumsShouldAddAdditionalMember.name]: "NullableEnumsShouldAddAdditionalMember",
24
+ [propertyNameShouldNotStartWithNavigationSourceName.name]: "MustNotUseParentPathSegmentInPropertyName",
25
+ [propertyMustNotBeNamedType.name]: "PropertyMustNotBeNamedType",
22
26
  [referenceIdPropertyShouldBeNavigationProperty.name]: "ReferenceIdPropertyShouldBeNavigationProperty",
23
27
  [shouldNotUseUnnecessaryInheritance.name]: "ShouldNotUseUnnecessaryInheritance",
24
28
  [useCreatedInPropertyNames.name]: "UseCreatedInPropertyName",
@@ -1 +1 @@
1
- {"version":3,"file":"csdl-suppression-rules.js","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,0CAA0C,EAAE,MAAM,yBAAyB,CAAC;AAC5H,OAAO,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,6CAA6C,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,sCAAsC,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxJ,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEvH,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACtE,CAAC,qCAAqC,CAAC,IAAI,CAAC,EAAE,uCAAuC;IACrF,CAAC,0CAA0C,CAAC,IAAI,CAAC,EAAE,iDAAiD;IACpG,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,mCAAmC;IACrE,CAAC,qCAAqC,CAAC,IAAI,CAAC,EAAE,4CAA4C;IAC1F,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW;IACxC,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,6BAA6B;IACjE,CAAC,sCAAsC,CAAC,IAAI,CAAC,EAAE,wCAAwC;IACvF,CAAC,6CAA6C,CAAC,IAAI,CAAC,EAAE,+CAA+C;IACrG,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,oCAAoC;IAC/E,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,0BAA0B;IAC5D,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,uBAAuB;IACpD,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,2BAA2B;IAC9D,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,wBAAwB;IACvD,YAAY,EAAE,SAAS;CACxB,CAAC;AAIF,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY,CAAC,CAAC;IAC5D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"csdl-suppression-rules.js","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,0CAA0C,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAClK,OAAO,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,6CAA6C,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,sCAAsC,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxJ,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,kDAAkD,EAAE,MAAM,wBAAwB,CAAC;AAEvM,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACtE,CAAC,qCAAqC,CAAC,IAAI,CAAC,EAAE,uCAAuC;IACrF,CAAC,oCAAoC,CAAC,IAAI,CAAC,EAAE,YAAY;IACzD,CAAC,0CAA0C,CAAC,IAAI,CAAC,EAAE,iDAAiD;IACpG,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,mCAAmC;IACrE,CAAC,qCAAqC,CAAC,IAAI,CAAC,EAAE,4CAA4C;IAC1F,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,gCAAgC;IACpE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW;IACxC,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,6BAA6B;IACjE,CAAC,sCAAsC,CAAC,IAAI,CAAC,EAAE,wCAAwC;IACvF,CAAC,kDAAkD,CAAC,IAAI,CAAC,EAAE,2CAA2C;IACtG,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,4BAA4B;IAC/D,CAAC,6CAA6C,CAAC,IAAI,CAAC,EAAE,+CAA+C;IACrG,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,oCAAoC;IAC/E,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,0BAA0B;IAC5D,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,uBAAuB;IACpD,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,2BAA2B;IAC9D,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,wBAAwB;IACvD,YAAY,EAAE,SAAS;CACxB,CAAC;AAIF,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY,CAAC,CAAC;IAC5D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { TypeSpecTestLibrary } from "@typespec/compiler/testing";
2
2
  export declare const MsGraphTestLibrary: TypeSpecTestLibrary;
3
3
  export declare const ReferenceModelTestLibrary: TypeSpecTestLibrary;
4
+ export declare const GeneratedReferenceModelTestLibrary: TypeSpecTestLibrary;
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,eAAO,MAAM,kBAAkB,EAAE,mBAoBhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,mBAoBvC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,eAAO,MAAM,kBAAkB,EAAE,mBAoBhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,mBAoBvC,CAAA;AAED,eAAO,MAAM,kCAAkC,EAAE,mBAoBhD,CAAA"}
@@ -42,4 +42,25 @@ export const ReferenceModelTestLibrary = {
42
42
  },
43
43
  ],
44
44
  };
45
+ export const GeneratedReferenceModelTestLibrary = {
46
+ name: "@microsoft/typespec-msgraph-reference/Prod/Beta",
47
+ packageRoot: resolvePath(fileURLToPath(import.meta.url), "../../../../../typespec-msgraph-reference/"),
48
+ files: [
49
+ {
50
+ realDir: "",
51
+ pattern: "package.json",
52
+ virtualPath: "./node_modules/@microsoft/typespec-msgraph-reference",
53
+ },
54
+ {
55
+ realDir: "dist/",
56
+ pattern: "*.js",
57
+ virtualPath: "./node_modules/@microsoft/typespec-msgraph-reference/dist/",
58
+ },
59
+ {
60
+ realDir: "lib/Prod/Beta",
61
+ pattern: "*.tsp",
62
+ virtualPath: "./node_modules/@microsoft/typespec-msgraph-reference/lib/Prod/Beta",
63
+ },
64
+ ],
65
+ };
45
66
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC;IACxE,KAAK,EAAE;QACL;YACE,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD;YACE,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,qDAAqD;SACnE;QACD;YACE,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,gDAAgD;SAC9D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,IAAI,EAAE,iDAAiD;IACvD,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sDAAsD,CAAC;IAChH,KAAK,EAAE;QACL;YACE,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,gEAAgE;SAC9E;QACD;YACE,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sEAAsE;SACpF;QACD;YACE,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,oEAAoE;SAClF;KACF;CACF,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC;IACxE,KAAK,EAAE;QACL;YACE,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD;YACE,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,qDAAqD;SACnE;QACD;YACE,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,gDAAgD;SAC9D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,IAAI,EAAE,iDAAiD;IACvD,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sDAAsD,CAAC;IAChH,KAAK,EAAE;QACL;YACE,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,gEAAgE;SAC9E;QACD;YACE,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,sEAAsE;SACpF;QACD;YACE,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,oEAAoE;SAClF;KACF;CACF,CAAA;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAwB;IACrE,IAAI,EAAE,iDAAiD;IACvD,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4CAA4C,CAAC;IACtG,KAAK,EAAE;QACL;YACE,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,sDAAsD;SACpE;QACD;YACE,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,4DAA4D;SAC1E;QACD;YACE,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,oEAAoE;SAClF;KACF;CACF,CAAA"}
@@ -114,4 +114,18 @@ export declare function findOneOfWordsIC(value: string, targetWords: Array<strin
114
114
  export declare function toSameFirstCharCasingAs(value: string, other: string): string;
115
115
  export declare function toCamelCase(str: string): string;
116
116
  export declare function getDefaultPropertyValue(property: ModelProperty): string | boolean | Numeric | undefined;
117
+ export declare function isPlural(word: string): boolean;
118
+ export declare function isSingular(word: string): boolean;
119
+ /**
120
+ * Cleans up documentation strings by removing backticks around @ symbols.
121
+ * TypeSpec uses backticks to escape @ in doc comments, but we don't want them in CSDL output.
122
+ * Converts: username`@`tenant.com -> username@tenant.com
123
+ */
124
+ export declare function cleanDescription(description: string | undefined): string | undefined;
125
+ /**
126
+ * Checks if a string starts with another string (case-insensitive)
127
+ * Matches C# StartsWithVariantIC logic: splits value into words and compares
128
+ * the first word against the prefix and its singular/plural forms
129
+ */
130
+ export declare function startsWithVariantIC(value: string, prefix: string): boolean;
117
131
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAGJ,SAAS,EACT,aAAa,EAEb,KAAK,EACL,aAAa,EACb,SAAS,EAET,OAAO,EACP,SAAS,EACT,OAAO,EAEP,MAAM,EACN,IAAI,EACJ,KAAK,EAEN,MAAM,oBAAoB,CAAC;AAsB5B,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,SAAS,CAAC;IACxB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAElF;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAMjG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAqBnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,aAAa,UAoDzF;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,UAqCxD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAWtE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAQ7F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CA6BjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,MAAM,CAOrF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACzC,KAAK,EAAE,MAAM,EAAE,GACd,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA8B/B;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAY1G;AAED,wBAAgB,0CAA0C,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrG;AAKD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgBvI;AAsBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAgBxE;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,GAAI,OAAO,CAc7G;AAYD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE9C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,CAEzD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,YAAY,EAAE,SAAS,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAMpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAoBtE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAC1F,MAAM,CAuBR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAC9E,OAAO,CAQT;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAC9E,OAAO,CAIT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAQvF;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAEnE;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAElF;AAID,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,KAAK,GAAE,SAAS,CAQ5G;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,GAAE,SAAS,CAE/F;AAiBF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,UAEtD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,CAK1F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGpF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,CAExE;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAExF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAEjF;AAUD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAE,OAAe,GAAG,aAAa,EAAE,CAS7H;AAsGD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,CAW5F;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAE,GAAG,CAAC,KAAK,CAAa,GAAG,GAAG,CAAC,KAAK,CAAC,CActH;AAED,wBAAgB,8CAA8C,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,GAAI,eAAe,GAAG,SAAS,CAqBhJ;AAED,wBAAgB,2BAA2B,CAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,SAAS,EAAE,CAkBvF;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS,CAmCnG;AAuED,wBAAgB,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,WAGtD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE3C;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAqB/E;AAGD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAOpF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAyBpD;AAED,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAExH;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAE1G;AAYD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,wBAAwB,GAAE,OAAe,GAAG,KAAK,GAAG,SAAS,CAUvH;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,wBAAwB,GAAE,OAAe,GAAG,IAAI,GAAG,SAAS,CAoBvH;AAoCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAmBxD;AAED,wBAAgB,uCAAuC,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,GAAI,KAAK,GAAG,SAAS,CAUtH;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAM5E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjD;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CASzF;AAGD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqB5E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAevG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAGJ,SAAS,EACT,aAAa,EAEb,KAAK,EACL,aAAa,EACb,SAAS,EAET,OAAO,EACP,SAAS,EACT,OAAO,EAEP,MAAM,EACN,IAAI,EACJ,KAAK,EAEN,MAAM,oBAAoB,CAAC;AAsB5B,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,SAAS,CAAC;IACxB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAElF;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAMjG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAqBnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,aAAa,UAoDzF;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,UAqCxD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAWtE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAQ7F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CA6BjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,MAAM,CAOrF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACzC,KAAK,EAAE,MAAM,EAAE,GACd,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA8B/B;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAY1G;AAED,wBAAgB,0CAA0C,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrG;AAKD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgBvI;AAsBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAgBxE;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,GAAI,OAAO,CAc7G;AAYD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE9C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,CAEzD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,YAAY,EAAE,SAAS,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAMpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAoBtE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAC1F,MAAM,CAuBR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAC9E,OAAO,CAQT;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAC9E,OAAO,CAIT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAQvF;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAEnE;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAElF;AAID,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,GAAG,KAAK,GAAE,SAAS,CAQ5G;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,GAAE,SAAS,CAE/F;AAiBF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,UAEtD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,CAK1F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGpF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,CAExE;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAExF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAEjF;AAUD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAE,OAAe,GAAG,aAAa,EAAE,CAS7H;AA4GD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,CAW5F;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAE,GAAG,CAAC,KAAK,CAAa,GAAG,GAAG,CAAC,KAAK,CAAC,CActH;AAED,wBAAgB,8CAA8C,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,GAAI,eAAe,GAAG,SAAS,CAqBhJ;AAED,wBAAgB,2BAA2B,CAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,SAAS,EAAE,CAkBvF;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS,CAmCnG;AAuED,wBAAgB,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,WAGtD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE3C;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAqB/E;AAGD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAOpF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAyBpD;AAED,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAExH;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAE1G;AAYD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,wBAAwB,GAAE,OAAe,GAAG,KAAK,GAAG,SAAS,CAUvH;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,wBAAwB,GAAE,OAAe,GAAG,IAAI,GAAG,SAAS,CAoBvH;AAoCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAmBxD;AAED,wBAAgB,uCAAuC,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,GAAI,KAAK,GAAG,SAAS,CAUtH;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAM5E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjD;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CASzF;AAGD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqB5E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAevG;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIhD;AACD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMpF;AACD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CA0B1E"}
package/dist/src/utils.js CHANGED
@@ -3,6 +3,8 @@ import { getEntity, getExpand, getFilter, getGraphRoutePaths, getPublicNamespace
3
3
  import { getOperationVerb } from "@typespec/http";
4
4
  import { DEFAULT_MSGRAPH_NAMESPACE, GetDeclaredNamespaces, usedLibraryTypesKey } from "./entities/namespace.js";
5
5
  import { PathTree } from "./path-tree.js";
6
+ import pluralize from "pluralize";
7
+ const MAXIMUN_NESTING_DEPTH = 1;
6
8
  // schema namespace is workloadNamespace if its defined or publicNamespace if its defined
7
9
  export function hasSchemaNamespace(program, namespace) {
8
10
  return hasWorkloadNamespace(program, namespace) || hasPublicNamespace(program, namespace);
@@ -490,30 +492,35 @@ function getPropertiesOfTypeModel(program, model, structuralPropertiesOnly = fal
490
492
  }
491
493
  return propertiesOfTypeModel;
492
494
  }
493
- function getNestedPropertyNames(program, propertyTypes, structuralPropertiesOnly = false, prefix = "") {
495
+ function getNestedPropertyNames(program, propertyTypes, structuralPropertiesOnly = false, prefix = "", depth = 0) {
494
496
  const names = [];
495
497
  if (prefix && hasRepeatedItem(prefix)) {
496
498
  return names;
497
499
  }
498
500
  for (const propertyType of propertyTypes) {
499
501
  const propertyTypePrefix = prefix + propertyType.name + "/";
500
- const nestedPropertyTypes = getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly);
502
+ const nestedPropertyTypes = getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly, depth);
501
503
  nestedPropertyTypes.forEach(m => {
502
504
  const name = propertyTypePrefix + m.name;
503
505
  if (!hasRepeatedItem(name)) {
504
506
  names.push(name);
505
507
  }
506
508
  });
507
- names.push(...getNestedPropertyNames(program, nestedPropertyTypes, structuralPropertiesOnly, propertyTypePrefix));
509
+ names.push(...getNestedPropertyNames(program, nestedPropertyTypes, structuralPropertiesOnly, propertyTypePrefix, depth + 1));
508
510
  }
509
511
  return names;
510
512
  }
511
- function getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly = false) {
513
+ function getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly = false, depth = 0) {
512
514
  const propertyTypes = [];
513
515
  const theType = propertyType.type;
514
516
  if (theType.kind === "Scalar" || theType.kind === "Enum") {
515
517
  return propertyTypes;
516
518
  }
519
+ // Skip processing properties of external library types at depth > 1 due to how extensive the property tree can be causing memory issues.
520
+ // But allow depth 0-1 to get direct properties from partial reference models
521
+ if (isTypeDefinedInExternalLibrary(program, theType) && depth > MAXIMUN_NESTING_DEPTH) {
522
+ return propertyTypes;
523
+ }
517
524
  theType.properties.forEach((property, name) => {
518
525
  const type = getPropertyType(program, property, structuralPropertiesOnly);
519
526
  if (type !== undefined) {
@@ -951,4 +958,52 @@ export function getDefaultPropertyValue(property) {
951
958
  return undefined;
952
959
  }
953
960
  }
961
+ export function isPlural(word) {
962
+ const words = splitWords(word);
963
+ const lastWord = words[words.length - 1];
964
+ return pluralize.isPlural(lastWord);
965
+ }
966
+ export function isSingular(word) {
967
+ const words = splitWords(word);
968
+ const lastWord = words[words.length - 1];
969
+ return pluralize.isSingular(lastWord);
970
+ }
971
+ /**
972
+ * Cleans up documentation strings by removing backticks around @ symbols.
973
+ * TypeSpec uses backticks to escape @ in doc comments, but we don't want them in CSDL output.
974
+ * Converts: username`@`tenant.com -> username@tenant.com
975
+ */
976
+ export function cleanDescription(description) {
977
+ if (!description) {
978
+ return description;
979
+ }
980
+ // Remove backticks around @ symbols: `@` -> @
981
+ return description.replace(/`@`/g, '@');
982
+ }
983
+ /**
984
+ * Checks if a string starts with another string (case-insensitive)
985
+ * Matches C# StartsWithVariantIC logic: splits value into words and compares
986
+ * the first word against the prefix and its singular/plural forms
987
+ */
988
+ export function startsWithVariantIC(value, prefix) {
989
+ if (!value || value === "") {
990
+ return prefix === "";
991
+ }
992
+ if (!prefix || prefix === "") {
993
+ return false;
994
+ }
995
+ // Split value into words (camelCase/PascalCase boundaries)
996
+ const words = splitWords(value);
997
+ if (words.length === 0) {
998
+ return false;
999
+ }
1000
+ const firstWord = words[0];
1001
+ const firstWordLower = firstWord.toLowerCase();
1002
+ const prefixLower = prefix.toLowerCase();
1003
+ // Check singular form
1004
+ const singularPrefix = pluralize.singular(prefixLower);
1005
+ // Check plural form
1006
+ const pluralPrefix = pluralize.plural(prefixLower);
1007
+ return firstWordLower === singularPrefix || firstWordLower === pluralPrefix;
1008
+ }
954
1009
  //# sourceMappingURL=utils.js.map