Document Uri.js constructor and methods throwing Errors
authorThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 23 Jan 2019 21:01:07 +0000 (22:01 +0100)
committerThiemo Kreuz (WMDE) <thiemo.kreuz@wikimedia.de>
Thu, 24 Jan 2019 08:22:30 +0000 (08:22 +0000)
I, personally, think the fact an empty `new Uri()` call can fail with
an Error being thrown is a bug. But it seems others think this is a
feature (see Ib4dc568). Can we at least document it then? And then
somehow (not sure how) tell everybody who ever used this class to fix
their code?

Change-Id: I86ef1ccf90f9be9c61bc6a8312369ae09d622b0c

resources/src/mediawiki.Uri/Uri.js

index 0e5a5ba..385604d 100644 (file)
@@ -95,7 +95,7 @@
         *
         * @private
         * @static
-        * @property {Array} properties
+        * @property {string[]} properties
         */
        properties = [
                'protocol',
         */
 
        /**
-        * A factory method to create a Uri class with a default location to resolve relative URLs
+        * A factory method to create an mw.Uri class with a default location to resolve relative URLs
         * against (including protocol-relative URLs).
         *
         * @method
         * @param {string|Function} documentLocation A full url, or function returning one.
         *  If passed a function, the return value may change over time and this will be honoured. (T74334)
         * @member mw
-        * @return {Function} Uri class
+        * @return {Function} An mw.Uri class constructor
         */
        mw.UriRelative = function ( documentLocation ) {
                var getDefaultUri = ( function () {
                 * @param {boolean} [options.strictMode=false] Trigger strict mode parsing of the url.
                 * @param {boolean} [options.overrideKeys=false] Whether to let duplicate query parameters
                 *  override each other (`true`) or automagically convert them to an array (`false`).
+                * @throws {Error} when the query string or fragment contains an unknown % sequence
                 */
                function Uri( uri, options ) {
                        var prop, hrefCur,
                 * @static
                 * @param {string} s String to decode
                 * @return {string} Decoded string
+                * @throws {Error} when the string contains an unknown % sequence
                 */
                Uri.decode = function ( s ) {
                        return decodeURIComponent( s.replace( /\+/g, '%20' ) );
                         * @private
                         * @param {string} str URI, see constructor.
                         * @param {Object} options See constructor.
+                        * @throws {Error} when the query string or fragment contains an unknown % sequence
                         */
                        parse: function ( str, options ) {
                                var q, matches,