Skip to content
This repository was archived by the owner on Feb 12, 2022. It is now read-only.

Add L2 URI templates/fix issue on determination of varnames in URI templates #172

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 43 additions & 22 deletions dist/raml-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -5564,14 +5564,18 @@
};

Transformations.prototype.applyTransformationsToRoot = function(rootObject) {
var expressions, template;
var expressions, template, _ref;
if (rootObject.baseUri) {
template = uritemplate.parse(rootObject.baseUri);
expressions = template.expressions.filter(function(expr) {
return 'templateText' in expr;
}).map(function(expression) {
return expression.templateText;
});
expressions = [];
if ((_ref = template.expressions) != null) {
_ref.forEach(function(expression) {
var _ref1;
return (_ref1 = expression.varspecs) != null ? _ref1.forEach(function(spec) {
return expressions.push(spec.varname);
}) : void 0;
});
}
if (expressions.length) {
if (!rootObject.baseUriParameters) {
rootObject.baseUriParameters = {};
Expand All @@ -5593,7 +5597,7 @@
};

Transformations.prototype.applyTransformationsToResources = function(rootObject, resources) {
var expressions, inheritedSecScheme, method, parameterName, pathParts, resource, template, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _results;
var expressions, inheritedSecScheme, method, parameterName, pathParts, resource, template, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
if (resources != null ? resources.length : void 0) {
_results = [];
for (_i = 0, _len = resources.length; _i < _len; _i++) {
Expand All @@ -5616,11 +5620,15 @@
}
resource.relativeUriPathSegments = pathParts;
template = uritemplate.parse(resource.relativeUri);
expressions = template.expressions.filter(function(expr) {
return 'templateText' in expr;
}).map(function(expression) {
return expression.templateText;
});
expressions = [];
if ((_ref2 = template.expressions) != null) {
_ref2.forEach(function(expression) {
var _ref3;
return (_ref3 = expression.varspecs) != null ? _ref3.forEach(function(spec) {
return expressions.push(spec.varname);
}) : void 0;
});
}
if (expressions.length) {
if (!resource.uriParameters) {
resource.uriParameters = {};
Expand Down Expand Up @@ -6390,7 +6398,7 @@
};

Validator.prototype.validate_uri_parameters = function(uri, uriProperty, allowParameterKeys, skipParameterUseCheck, reservedNames) {
var err, expressions, parameterName, template, uriParameter, uriParameters, _i, _len, _ref1, _ref2, _results;
var err, expressions, parameterName, template, uriParameter, uriParameters, _i, _len, _ref1, _ref2, _ref3, _results;
if (reservedNames == null) {
reservedNames = [];
}
Expand All @@ -6400,18 +6408,22 @@
err = _error;
throw new exports.ValidationError('while validating uri parameters', null, err != null ? (_ref1 = err.options) != null ? _ref1.message : void 0 : void 0, uriProperty.start_mark);
}
expressions = template.expressions.filter(function(expr) {
return "templateText" in expr;
}).map(function(expression) {
return expression.templateText;
});
expressions = [];
if ((_ref2 = template.expressions) != null) {
_ref2.forEach(function(expression) {
var _ref3;
return (_ref3 = expression.varspecs) != null ? _ref3.forEach(function(spec) {
return expressions.push(spec.varname);
}) : void 0;
});
}
uriParameters = {};
if (typeof uriProperty.value === "object") {
_ref2 = uriProperty.value;
_ref3 = uriProperty.value;
_results = [];
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
uriParameter = _ref2[_i];
parameterName = this.canonicalizePropertyName(uriParameter[0].value, allowParameterKeys);
for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
uriParameter = _ref3[_i];
parameterName = this.canonicalizeParameterName(uriParameter[0].value, allowParameterKeys);
this.trackRepeatedProperties(uriParameters, parameterName, uriProperty, 'while validating URI parameters', "URI parameter with the same name already exists");
if (__indexOf.call(reservedNames, parameterName) >= 0) {
throw new exports.ValidationError('while validating baseUri', null, uriParameter[0].value + ' parameter not allowed here', uriParameter[0].start_mark);
Expand Down Expand Up @@ -6513,6 +6525,15 @@
return this.validate_method(node, true, 'trait');
};

Validator.prototype.canonicalizeParameterName = function(propertyName, mustRemoveQuestionMark) {
var canonicalParameterName;
canonicalParameterName = this.canonicalizePropertyName(propertyName, mustRemoveQuestionMark);
if (canonicalParameterName[0] === '+') {
return canonicalParameterName.slice(1);
}
return canonicalParameterName;
};

Validator.prototype.canonicalizePropertyName = function(propertyName, mustRemoveQuestionMark) {
if (mustRemoveQuestionMark && propertyName.slice(-1) === '?') {
return propertyName.slice(0, -1);
Expand Down
8 changes: 4 additions & 4 deletions dist/raml-parser.min.js

Large diffs are not rendered by default.

32 changes: 20 additions & 12 deletions lib/transformations.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 23 additions & 10 deletions lib/validator.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 8 additions & 3 deletions src/transformations.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ class @Transformations

applyTransformationsToRoot: (rootObject) ->
if rootObject.baseUri

template = uritemplate.parse rootObject.baseUri
expressions = template.expressions.filter((expr) -> return 'templateText' of expr).map (expression) -> expression.templateText
expressions = []
template.expressions?.forEach (expression) ->
expression.varspecs?.forEach (spec) ->
expressions.push spec.varname

if expressions.length
rootObject.baseUriParameters = {} unless rootObject.baseUriParameters
Expand Down Expand Up @@ -62,7 +64,10 @@ class @Transformations
resource.relativeUriPathSegments = pathParts

template = uritemplate.parse resource.relativeUri
expressions = template.expressions.filter((expr) -> return 'templateText' of expr).map (expression) -> expression.templateText
expressions = []
template.expressions?.forEach (expression) ->
expression.varspecs?.forEach (spec) ->
expressions.push spec.varname

if expressions.length
resource.uriParameters = {} unless resource.uriParameters
Expand Down
15 changes: 13 additions & 2 deletions src/validator.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,16 @@ class @Validator
template = uritemplate.parse uri
catch err
throw new exports.ValidationError 'while validating uri parameters', null, err?.options?.message, uriProperty.start_mark
expressions = template.expressions.filter((expr) -> return "templateText" of expr ).map (expression) -> expression.templateText
expressions = []
template.expressions?.forEach (expression) ->
expression.varspecs?.forEach (spec) ->
expressions.push spec.varname

uriParameters = {}

if typeof uriProperty.value is "object"
for uriParameter in uriProperty.value
parameterName = @canonicalizePropertyName(uriParameter[0].value, allowParameterKeys)
parameterName = @canonicalizeParameterName(uriParameter[0].value, allowParameterKeys)
@trackRepeatedProperties(uriParameters, parameterName, uriProperty, 'while validating URI parameters', "URI parameter with the same name already exists")

if parameterName in reservedNames
Expand Down Expand Up @@ -225,6 +230,12 @@ class @Validator

@validate_method node, true, 'trait'

canonicalizeParameterName: (propertyName, mustRemoveQuestionMark) ->
canonicalParameterName = @canonicalizePropertyName propertyName, mustRemoveQuestionMark
if canonicalParameterName[0] == '+'
return canonicalParameterName.slice(1)
return canonicalParameterName

canonicalizePropertyName: (propertyName, mustRemoveQuestionMark) ->
if mustRemoveQuestionMark and propertyName.slice(-1) is '?'
return propertyName.slice(0,-1)
Expand Down
Loading