'use strict';
/** Support some reasonable feature
* @module exampleUtilityOne
*/
import * as SomeUtil from '../../utility/some-util';
//
// Definitions
//
/** A complex set of options
* @typedef {string} Options
* @property {boolean} optOne - Whether to count sheep
* @property {number} optTwo - The number of sheep to count
* @property {boolean} optThree - Whether to allow insomnia
*/
/** Some object or syntax standard to the language, but not easily expressed
* @external Cookie
* @see [MDN > Web APIs > Document > Document.cookie (search `newCookie`)](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#Syntax)
*/
//
// Helpers
//
/** A private helper function
* @private
* @param {string} paramOne - Thing one
* @param {array|string} paramTwo - Thing two (could be string, could be array)
* @param {module:exampleUtilityOne~Options} [options] - Complicated thing
* @return {external:Cookie} A cookie
*/
function _privateHelperFunction(paramOne, paramTwo, {optOne = false, optTwo = undefined, optThree = false} = {}) {
// Amazing code goes here
const prefix = SomeUtil.someMethod();
// Shortcut to get to the chocalate chippity point
const cookie = prefix + 'yummy';
return cookie;
}
//
// Utility
//
/** Manage a thing in a way for a purpose
*
* Maybe talk more about what we're doing. Maybe use a little
* [Markdown](https://daringfireball.net/projects/markdown/syntax).
* Maybe _have a little fun_. But remember, kids:
*
* **A new line in the doc require two new lines here.**
*/
class ExampleUtilityOne {
/** A public property
* @memberof module:exampleUtilityOne~ExampleUtilityOne
* @type {string}
*/
foo = 'fooFighter';
/** A fake private property
*
* This property is accessible externally, and manually hidden from docs.
* @private
* @memberof module:exampleUtilityOne~ExampleUtilityOne
* @type {RegExp}
* @see https://github.com/tc39/proposal-class-fields/blob/master/PRIVATE_SYNTAX_FAQ.md
*/
_bar = 'barMan';
/** A real private property
*
* This property is not accessible externally, and automatically hidden from docs.
* @memberof module:exampleUtilityOne~ExampleUtilityOne
* @type {RegExp}
* @see https://github.com/tc39/proposal-class-fields/blob/master/PRIVATE_SYNTAX_FAQ.md
*/
#baz = 'bazTard';
/* eslint-disable class-methods-use-this */
/** Add a cookie in the legacy format
* @param {string} paramOne - Thing one
* @param {array|string} paramTwo - Thing two (could be string, could be array)
* @param {module:exampleUtilityOne~Options} [paramThree] - Complicated thing
*/
set(paramOne, paramTwo, paramThree = {}) {
document.cookie = _privateHelperFunction(paramOne, paramTwo, paramThree);
}
/* eslint-enable */
/* eslint-disable class-methods-use-this */
/** Expire the named cookie from the browser
* @param {string} name - Name of the cookie to expire i.e. delete
*/
delete(name) {
document.cookie = name + '=; Max-Age=0';
}
/* eslint-enable */
}
/** Instance of the class of this module
*
* > Notice that because `ExampleUtilityOne` is **not** exported,
* it is reerenced with a tilde `~`, not a dot `.`
* @type {module:exampleUtilityOne~ExampleUtilityOne}
*/
export const exampleUtilityOne = new ExampleUtilityOne();