@typespec/compiler 0.48.0-dev.11 → 0.48.0-dev.13
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/dist/manifest.js +2 -2
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +70 -50
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/parser.d.ts.map +1 -1
- package/dist/src/core/parser.js +2 -1
- package/dist/src/core/parser.js.map +1 -1
- package/package.json +1 -1
package/dist/manifest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/checker.js
CHANGED
|
@@ -3797,42 +3797,55 @@ export function createChecker(program) {
|
|
|
3797
3797
|
* @param diagnosticTarget Target for the diagnostic, unless something better can be inferred.
|
|
3798
3798
|
*/
|
|
3799
3799
|
function isTypeAssignableTo(source, target, diagnosticTarget) {
|
|
3800
|
+
const [related, diagnostics] = isTypeAssignableToInternal(source, target, diagnosticTarget, new MultiKeyMap());
|
|
3801
|
+
return [related === Related.true, diagnostics];
|
|
3802
|
+
}
|
|
3803
|
+
function isTypeAssignableToInternal(source, target, diagnosticTarget, relationCache) {
|
|
3804
|
+
const cached = relationCache.get([source, target]);
|
|
3805
|
+
if (cached !== undefined) {
|
|
3806
|
+
return [cached, []];
|
|
3807
|
+
}
|
|
3808
|
+
const [result, diagnostics] = isTypeAssignableToWorker(source, target, diagnosticTarget, new MultiKeyMap());
|
|
3809
|
+
relationCache.set([source, target], result);
|
|
3810
|
+
return [result, diagnostics];
|
|
3811
|
+
}
|
|
3812
|
+
function isTypeAssignableToWorker(source, target, diagnosticTarget, relationCache) {
|
|
3800
3813
|
var _a;
|
|
3801
3814
|
// BACKCOMPAT: Added May 2023 sprint, to be removed by June 2023 sprint
|
|
3802
3815
|
if (source.kind === "TemplateParameter" && source.constraint && target.kind === "Value") {
|
|
3803
|
-
const [assignable] =
|
|
3816
|
+
const [assignable] = isTypeAssignableToInternal(source.constraint, target.target, diagnosticTarget, relationCache);
|
|
3804
3817
|
if (assignable) {
|
|
3805
3818
|
const constraint = getTypeName(source.constraint);
|
|
3806
3819
|
reportDeprecated(program, `Template constrainted to '${constraint}' will not be assignable to '${getTypeName(target)}' in the future. Update the constraint to be 'valueof ${constraint}'`, diagnosticTarget);
|
|
3807
|
-
return [true, []];
|
|
3820
|
+
return [Related.true, []];
|
|
3808
3821
|
}
|
|
3809
3822
|
}
|
|
3810
3823
|
if (source.kind === "TemplateParameter") {
|
|
3811
3824
|
source = (_a = source.constraint) !== null && _a !== void 0 ? _a : unknownType;
|
|
3812
3825
|
}
|
|
3813
3826
|
if (source === target)
|
|
3814
|
-
return [true, []];
|
|
3827
|
+
return [Related.true, []];
|
|
3815
3828
|
if (target.kind === "Value") {
|
|
3816
|
-
return isAssignableToValueType(source, target, diagnosticTarget);
|
|
3829
|
+
return isAssignableToValueType(source, target, diagnosticTarget, relationCache);
|
|
3817
3830
|
}
|
|
3818
3831
|
if (source.kind === "Value") {
|
|
3819
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3832
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3820
3833
|
}
|
|
3821
3834
|
const isSimpleTypeRelated = isSimpleTypeAssignableTo(source, target);
|
|
3822
3835
|
if (isSimpleTypeRelated === true) {
|
|
3823
|
-
return [true, []];
|
|
3836
|
+
return [Related.true, []];
|
|
3824
3837
|
}
|
|
3825
3838
|
else if (isSimpleTypeRelated === false) {
|
|
3826
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3839
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3827
3840
|
}
|
|
3828
3841
|
if (source.kind === "Union") {
|
|
3829
3842
|
for (const variant of source.variants.values()) {
|
|
3830
|
-
const [variantAssignable] =
|
|
3843
|
+
const [variantAssignable] = isTypeAssignableToInternal(variant.type, target, diagnosticTarget, relationCache);
|
|
3831
3844
|
if (!variantAssignable) {
|
|
3832
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3845
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3833
3846
|
}
|
|
3834
3847
|
}
|
|
3835
|
-
return [true, []];
|
|
3848
|
+
return [Related.true, []];
|
|
3836
3849
|
}
|
|
3837
3850
|
if (target.kind === "Model" &&
|
|
3838
3851
|
source.kind === "Model" &&
|
|
@@ -3841,7 +3854,7 @@ export function createChecker(program) {
|
|
|
3841
3854
|
source.indexer &&
|
|
3842
3855
|
source.indexer.key.name === "integer") {
|
|
3843
3856
|
return [
|
|
3844
|
-
false,
|
|
3857
|
+
Related.false,
|
|
3845
3858
|
[
|
|
3846
3859
|
createDiagnostic({
|
|
3847
3860
|
code: "missing-index",
|
|
@@ -3855,43 +3868,43 @@ export function createChecker(program) {
|
|
|
3855
3868
|
];
|
|
3856
3869
|
}
|
|
3857
3870
|
else if (target.kind === "Model" && target.indexer !== undefined && source.kind === "Model") {
|
|
3858
|
-
return isIndexerValid(source, target, diagnosticTarget);
|
|
3871
|
+
return isIndexerValid(source, target, diagnosticTarget, relationCache);
|
|
3859
3872
|
}
|
|
3860
3873
|
else if (target.kind === "Model" && source.kind === "Model") {
|
|
3861
|
-
return isModelRelatedTo(source, target, diagnosticTarget);
|
|
3874
|
+
return isModelRelatedTo(source, target, diagnosticTarget, relationCache);
|
|
3862
3875
|
}
|
|
3863
3876
|
else if (target.kind === "Model" && target.indexer && source.kind === "Tuple") {
|
|
3864
3877
|
for (const item of source.values) {
|
|
3865
|
-
const [related, diagnostics] =
|
|
3878
|
+
const [related, diagnostics] = isTypeAssignableToInternal(item, target.indexer.value, diagnosticTarget, relationCache);
|
|
3866
3879
|
if (!related) {
|
|
3867
|
-
return [false, diagnostics];
|
|
3880
|
+
return [Related.false, diagnostics];
|
|
3868
3881
|
}
|
|
3869
3882
|
}
|
|
3870
|
-
return [true, []];
|
|
3883
|
+
return [Related.true, []];
|
|
3871
3884
|
}
|
|
3872
3885
|
else if (target.kind === "Tuple" && source.kind === "Tuple") {
|
|
3873
|
-
return isTupleAssignableToTuple(source, target, diagnosticTarget);
|
|
3886
|
+
return isTupleAssignableToTuple(source, target, diagnosticTarget, relationCache);
|
|
3874
3887
|
}
|
|
3875
3888
|
else if (target.kind === "Union") {
|
|
3876
|
-
return isAssignableToUnion(source, target, diagnosticTarget);
|
|
3889
|
+
return isAssignableToUnion(source, target, diagnosticTarget, relationCache);
|
|
3877
3890
|
}
|
|
3878
3891
|
else if (target.kind === "Enum") {
|
|
3879
3892
|
return isAssignableToEnum(source, target, diagnosticTarget);
|
|
3880
3893
|
}
|
|
3881
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3894
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3882
3895
|
}
|
|
3883
|
-
function isAssignableToValueType(source, target, diagnosticTarget) {
|
|
3896
|
+
function isAssignableToValueType(source, target, diagnosticTarget, relationCache) {
|
|
3884
3897
|
if (source.kind === "Value") {
|
|
3885
|
-
return
|
|
3898
|
+
return isTypeAssignableToInternal(source.target, target.target, diagnosticTarget, relationCache);
|
|
3886
3899
|
}
|
|
3887
|
-
const [assignable, diagnostics] =
|
|
3900
|
+
const [assignable, diagnostics] = isTypeAssignableToInternal(source, target.target, diagnosticTarget, relationCache);
|
|
3888
3901
|
if (!assignable) {
|
|
3889
3902
|
return [assignable, diagnostics];
|
|
3890
3903
|
}
|
|
3891
3904
|
if (!isValueType(source)) {
|
|
3892
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3905
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
3893
3906
|
}
|
|
3894
|
-
return [true, []];
|
|
3907
|
+
return [Related.true, []];
|
|
3895
3908
|
}
|
|
3896
3909
|
function isReflectionType(type) {
|
|
3897
3910
|
var _a, _b, _c;
|
|
@@ -3974,7 +3987,8 @@ export function createChecker(program) {
|
|
|
3974
3987
|
const [low, high, options] = numericRanges[target.name];
|
|
3975
3988
|
return source.value >= low && source.value <= high && (!options.int || isInt);
|
|
3976
3989
|
}
|
|
3977
|
-
function isModelRelatedTo(source, target, diagnosticTarget) {
|
|
3990
|
+
function isModelRelatedTo(source, target, diagnosticTarget, relationCache) {
|
|
3991
|
+
relationCache.set([source, target], Related.maybe);
|
|
3978
3992
|
const diagnostics = [];
|
|
3979
3993
|
for (const prop of walkPropertiesInherited(target)) {
|
|
3980
3994
|
const sourceProperty = getProperty(source, prop.name);
|
|
@@ -3992,27 +4006,27 @@ export function createChecker(program) {
|
|
|
3992
4006
|
}
|
|
3993
4007
|
}
|
|
3994
4008
|
else {
|
|
3995
|
-
const [related, propDiagnostics] =
|
|
4009
|
+
const [related, propDiagnostics] = isTypeAssignableToInternal(sourceProperty.type, prop.type, diagnosticTarget, relationCache);
|
|
3996
4010
|
if (!related) {
|
|
3997
4011
|
diagnostics.push(...propDiagnostics);
|
|
3998
4012
|
}
|
|
3999
4013
|
}
|
|
4000
4014
|
}
|
|
4001
|
-
return [diagnostics.length === 0, diagnostics];
|
|
4015
|
+
return [diagnostics.length === 0 ? Related.true : Related.false, diagnostics];
|
|
4002
4016
|
}
|
|
4003
4017
|
function getProperty(model, name) {
|
|
4004
4018
|
var _a;
|
|
4005
4019
|
return ((_a = model.properties.get(name)) !== null && _a !== void 0 ? _a : (model.baseModel !== undefined ? getProperty(model.baseModel, name) : undefined));
|
|
4006
4020
|
}
|
|
4007
|
-
function isIndexerValid(source, target, diagnosticTarget) {
|
|
4021
|
+
function isIndexerValid(source, target, diagnosticTarget, relationCache) {
|
|
4008
4022
|
// Model expressions should be able to be assigned.
|
|
4009
4023
|
if (source.name === "" && target.indexer.key.name !== "integer") {
|
|
4010
|
-
return isIndexConstraintValid(target.indexer.value, source, diagnosticTarget);
|
|
4024
|
+
return isIndexConstraintValid(target.indexer.value, source, diagnosticTarget, relationCache);
|
|
4011
4025
|
}
|
|
4012
4026
|
else {
|
|
4013
4027
|
if (source.indexer === undefined || source.indexer.key !== target.indexer.key) {
|
|
4014
4028
|
return [
|
|
4015
|
-
false,
|
|
4029
|
+
Related.false,
|
|
4016
4030
|
[
|
|
4017
4031
|
createDiagnostic({
|
|
4018
4032
|
code: "missing-index",
|
|
@@ -4025,7 +4039,7 @@ export function createChecker(program) {
|
|
|
4025
4039
|
],
|
|
4026
4040
|
];
|
|
4027
4041
|
}
|
|
4028
|
-
return
|
|
4042
|
+
return isTypeAssignableToInternal(source.indexer.value, target.indexer.value, diagnosticTarget, relationCache);
|
|
4029
4043
|
}
|
|
4030
4044
|
}
|
|
4031
4045
|
/**
|
|
@@ -4033,25 +4047,25 @@ export function createChecker(program) {
|
|
|
4033
4047
|
* @param type Type of the model that should be respecting the constraint.
|
|
4034
4048
|
* @param diagnosticTarget Diagnostic target unless something better can be inferred.
|
|
4035
4049
|
*/
|
|
4036
|
-
function isIndexConstraintValid(constraintType, type, diagnosticTarget) {
|
|
4050
|
+
function isIndexConstraintValid(constraintType, type, diagnosticTarget, relationCache) {
|
|
4037
4051
|
for (const prop of type.properties.values()) {
|
|
4038
4052
|
const [related, diagnostics] = isTypeAssignableTo(prop.type, constraintType, diagnosticTarget);
|
|
4039
4053
|
if (!related) {
|
|
4040
|
-
return [false, diagnostics];
|
|
4054
|
+
return [Related.false, diagnostics];
|
|
4041
4055
|
}
|
|
4042
4056
|
}
|
|
4043
4057
|
if (type.baseModel) {
|
|
4044
|
-
const [related, diagnostics] = isIndexConstraintValid(constraintType, type.baseModel, diagnosticTarget);
|
|
4058
|
+
const [related, diagnostics] = isIndexConstraintValid(constraintType, type.baseModel, diagnosticTarget, relationCache);
|
|
4045
4059
|
if (!related) {
|
|
4046
|
-
return [false, diagnostics];
|
|
4060
|
+
return [Related.false, diagnostics];
|
|
4047
4061
|
}
|
|
4048
4062
|
}
|
|
4049
|
-
return [true, []];
|
|
4063
|
+
return [Related.true, []];
|
|
4050
4064
|
}
|
|
4051
|
-
function isTupleAssignableToTuple(source, target, diagnosticTarget) {
|
|
4065
|
+
function isTupleAssignableToTuple(source, target, diagnosticTarget, relationCache) {
|
|
4052
4066
|
if (source.values.length !== target.values.length) {
|
|
4053
4067
|
return [
|
|
4054
|
-
false,
|
|
4068
|
+
Related.false,
|
|
4055
4069
|
[
|
|
4056
4070
|
createDiagnostic({
|
|
4057
4071
|
code: "unassignable",
|
|
@@ -4068,40 +4082,40 @@ export function createChecker(program) {
|
|
|
4068
4082
|
}
|
|
4069
4083
|
for (const [index, sourceItem] of source.values.entries()) {
|
|
4070
4084
|
const targetItem = target.values[index];
|
|
4071
|
-
const [related, diagnostics] =
|
|
4085
|
+
const [related, diagnostics] = isTypeAssignableToInternal(sourceItem, targetItem, diagnosticTarget, relationCache);
|
|
4072
4086
|
if (!related) {
|
|
4073
|
-
return [false, diagnostics];
|
|
4087
|
+
return [Related.false, diagnostics];
|
|
4074
4088
|
}
|
|
4075
4089
|
}
|
|
4076
|
-
return [true, []];
|
|
4090
|
+
return [Related.true, []];
|
|
4077
4091
|
}
|
|
4078
|
-
function isAssignableToUnion(source, target, diagnosticTarget) {
|
|
4092
|
+
function isAssignableToUnion(source, target, diagnosticTarget, relationCache) {
|
|
4079
4093
|
for (const option of target.variants.values()) {
|
|
4080
|
-
const [related] =
|
|
4094
|
+
const [related] = isTypeAssignableToInternal(source, option.type, diagnosticTarget, relationCache);
|
|
4081
4095
|
if (related) {
|
|
4082
|
-
return [true, []];
|
|
4096
|
+
return [Related.true, []];
|
|
4083
4097
|
}
|
|
4084
4098
|
}
|
|
4085
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4099
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4086
4100
|
}
|
|
4087
4101
|
function isAssignableToEnum(source, target, diagnosticTarget) {
|
|
4088
4102
|
switch (source.kind) {
|
|
4089
4103
|
case "Enum":
|
|
4090
4104
|
if (source === target) {
|
|
4091
|
-
return [true, []];
|
|
4105
|
+
return [Related.true, []];
|
|
4092
4106
|
}
|
|
4093
4107
|
else {
|
|
4094
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4108
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4095
4109
|
}
|
|
4096
4110
|
case "EnumMember":
|
|
4097
4111
|
if (source.enum === target) {
|
|
4098
|
-
return [true, []];
|
|
4112
|
+
return [Related.true, []];
|
|
4099
4113
|
}
|
|
4100
4114
|
else {
|
|
4101
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4115
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4102
4116
|
}
|
|
4103
4117
|
default:
|
|
4104
|
-
return [false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4118
|
+
return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
|
|
4105
4119
|
}
|
|
4106
4120
|
}
|
|
4107
4121
|
function createUnassignableDiagnostic(source, target, diagnosticTarget) {
|
|
@@ -4522,4 +4536,10 @@ const ReflectionNameToKind = {
|
|
|
4522
4536
|
UnionVariant: "UnionVariant",
|
|
4523
4537
|
};
|
|
4524
4538
|
const _assertReflectionNameToKind = ReflectionNameToKind;
|
|
4539
|
+
var Related;
|
|
4540
|
+
(function (Related) {
|
|
4541
|
+
Related[Related["false"] = 0] = "false";
|
|
4542
|
+
Related[Related["true"] = 1] = "true";
|
|
4543
|
+
Related[Related["maybe"] = 2] = "maybe";
|
|
4544
|
+
})(Related || (Related = {}));
|
|
4525
4545
|
//# sourceMappingURL=checker.js.map
|