This module contains helper functions to work with Strings.

To use this module, you must import it to your DataWeave code, for example, by adding the line import * from dw::core::URL to the header of your DataWeave script.

Functions

compose

compose(Array<String>, Array<String>): String

Uses a custom interpolator to replace URL components with a encodeURIComponent result.

Parameters
Name Description

parts

A string array that provides the part of the URL to encode.

Example

This example passes in text to encode using $(myText), where myText is a variable defined in the header. Notice that the spaces in the input are encoded in the output URL as %20. Also notice that the entire input to the compose function is surrounded by backticks.

Source
1
2
3
4
5
6
%dw 2.0
import * from dw::core::URL
var myText = " text to encode "
output application/json
---
{ "composition" : compose `http://asd/$(myText)/text` }
Output
1
{ "composition": "http://asd/%20text%20to%20encode%20/text" }

decodeURI

decodeURI(String): String

Decodes the escape sequences (such as %20) in a URI.

The function replaces each escape sequence in the encoded URI with the character that it represents, but does not decode escape sequences that could not have been introduced by encodeURI. The character # is not decoded from escape sequences.

Parameters
Name Description

text

The URI to decode.

Example

This example decodes a URI that contains the URL percent encoding %20, which is used for spaces.

Source
1
2
3
4
5
6
7
%dw 2.0
import * from dw::core::URL
output application/json
---
{
  "decodeURI" : decodeURI('http://asd/%20text%20to%20decode%20/text')
}
Output
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "decodeURI": "http://asd/ text to decode /text"
}


=== decodeURIComponent

==== decodeURIComponent(String): String

Decodes a Uniform Resource Identifier (URI) component previously created
by `encodeURIComponent` or a similar routine.


For an example, see `encodeURIComponent`.

===== Parameters

[%header, cols="1,3"]
|===
| Name | Description
| `text` | URI component string.
|===

===== Example

This example decodes a variety of URI components.

====== Source

[source,DataWeave, linenums]

%dw 2.0 import * from dw::core::URL output application/json --- { "decodeURIComponent": { "decodeURIComponent" : decodeURIComponent("%20PATH/%20TO%20/DECODE%20"), "decodeURIComponent" : decodeURIComponent("%3B%2C%2F%3F%3A%40%26%3D"), "decodeURIComponent" : decodeURIComponent("%2D%5F%2E%21%7E%2A%27%28%29%24"), } }

====== Output

[source,JSON,linenums]

{ decodeURIComponent: { decodeURIComponent: " PATH/ TO /DECODE ", decodeURIComponent: ";,/?:@&=", decodeURIComponent: "-_.!~*'()\$" } }

=== encodeURI

==== encodeURI(String): String

Encodes a URI with UTF-8 escape sequences.


Applies up to four escape sequences for characters composed of two "surrogate"
characters. The function assumes that the URI is a complete URI, so it does
not encode reserved characters that have special meaning.

The function _does not encode these characters_ with UTF-8 escape sequences:

[%header, cols="2,2"]
|===
| Type (not escaped)   | Examples
| Reserved characters  | ; , / ? : @ & = $
| Unescaped characters | alphabetic, decimal digits, - _ . ! ~ * ' ( )
| Number sign          | #
|===

===== Parameters

[%header, cols="1,3"]
|===
| Name | Description
| `text` | The URI to encode.
|===

===== Example

This example shows encodes spaces in one URL and lists some characters that
do not get encoded in the `not_encoded` string.

====== Source

[source,DataWeave, linenums]

%dw 2.0 import * from dw::core::URL output application/json --- { "encodeURI" : encodeURI("http://asd/ text to decode /text"), "not_encoded": encodeURI("http://:;,/?:@&=\$-.!~*'()") }

====== Output

[source,JSON,linenums]

{ "encodeURI": "http://asd/%20text%20to%20decode%20/%25/\"\'/text", "not_encoded": "http://:;,/?:@&=$-.!~*'()" }

=== encodeURIComponent

==== encodeURIComponent(String): String

Escapes certain characters in a URI component using UTF-8 encoding.


There can be only four escape sequences for characters composed of two
"surrogate" * characters. `encodeURIComponent` escapes all characters
_except the following_: alphabetic, decimal digits, `- _ . ! ~ * ' ( )`.
Note that `encodeURIComponent` differs from `encodeURI` in that it encodes
reserved characters and the Number sign `#` of `encodeURI`:

[%header, cols="2,2"]
|===
| Type                 | Includes
| Reserved characters  |
| Unescaped characters | alphabetic, decimal digits, - _ . ! ~ * ' ( )
| Number sign          |
|===

===== Parameters

[%header, cols="1,3"]
|===
| Name | Description
| `text` | URI component string.
|===

===== Example

This example encodes a variety of URI components.

====== Source

[source,DataWeave, linenums]

%dw 2.0 import * from dw::core::URL output application/json --- { "comparing_encode_functions_output" : { "encodeURIComponent" : encodeURI(" PATH/ TO /ENCODE "), "encodeURI" : encodeURI(" PATH/ TO /ENCODE "), "encodeURIComponent_to_hex" : encodeURIComponent(";,/?:@&="), "encodeURI_not_to_hex" : encodeURI(";,/?:@&="), "encodeURIComponent_not_encoded" : encodeURIComponent("-.!~'()"), "encodeURI_not_encoded" : encodeURI("-.!~'()") } }

====== Output

[source,JSON,linenums]

{ "comparing_encode_functions_output": { "encodeURIComponent": "%20PATH/%20TO%20/ENCODE%20", "encodeURI": "%20PATH/%20TO%20/ENCODE%20", "encodeURIComponent_to_hex": "%3B%2C%2F%3F%3A%40%26%3D", "encodeURI_not_to_hex": ";,/?:@&=", "encodeURIComponent_not_encoded": "-.!~'()", "encodeURI_not_encoded": "-.!~'()" } }

=== parseURI

==== parseURI(String): URI

Parses a URL and returns a `URI` object.


The `isValid: Boolean` property in the output `URI` object indicates whether
the parsing process succeeded. Every field in this object is optional, and
a field will appear in the output only if it was present in the URL input.

===== Parameters

[%header, cols="1,3"]
|===
| Name | Description
| `uri` | The URI input.
|===

===== Example

This example parses a URL.

====== Source

[source,DataWeave, linenums]

%dw 2.0 import * from dw::core::URL output application/json --- { 'composition': parseURI('https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#footer') }

====== Output
[source,JSON,linenums]

{ "composition": { "isValid": true, "raw": "https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#footer", "host": "en.wikipedia.org", "authority": "en.wikipedia.org", "fragment": "footer", "path": "/wiki/Uniform_Resource_Identifier", "scheme": "https", "isAbsolute": true, "isOpaque": false } }

== Types

=== URI


.Definition

[source,DataWeave,linenums]

{ isValid: Boolean, host?: String, authority?: String, fragment?: String, path?: String, port?: Number, query?: String, scheme?: String, user?: String, isAbsolute?: Boolean, isOpaque?: Boolean }