xml-sitemap
Version:
Utilities for quickly writing XML sitemaps
421 lines (318 loc) • 14.1 kB
Markdown
# API
An object representation of XML sitemaps and methods for editing them.
**Kind**: global class
* [XmlSitemap](#XmlSitemap)
* [new XmlSitemap([xmlAsString])](#new_XmlSitemap_new)
* _instance_
* [.host](#XmlSitemap+host) : <code>String</code>
* [.xmlObj](#XmlSitemap+xmlObj) : <code>Object</code>
* [.urls](#XmlSitemap+urls) : <code>Array.<String></code>
* [.files](#XmlSitemap+files) : <code>Object</code>
* [.urlOptions](#XmlSitemap+urlOptions) : <code>Array.<String></code>
* [.optionHandlers](#XmlSitemap+optionHandlers) : <code>Object</code>
* [.xml](#XmlSitemap+xml) ⇒ <code>String</code>
* [.hasUrl(url)](#XmlSitemap+hasUrl) ⇒ <code>Bool</code>
* [.add(url, [urlOptions])](#XmlSitemap+add) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
* [.remove(url)](#XmlSitemap+remove) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
* [.getUrlNode(url)](#XmlSitemap+getUrlNode) ⇒ <code>Object</code>
* [.buildUrlNode(url, [options])](#XmlSitemap+buildUrlNode) ⇒ <code>Object</code>
* [.setHost(url, [urlOptions])](#XmlSitemap+setHost) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
* _static_
* [.w3Date(date)](#XmlSitemap.w3Date) ⇒ <code>String</code>
* [.handleLastmod([date])](#XmlSitemap.handleLastmod) ⇒ <code>String</code>
* [.handleChangefreq(value)](#XmlSitemap.handleChangefreq) ⇒ <code>String</code>
* [.handlePriority(value)](#XmlSitemap.handlePriority) ⇒ <code>String</code>
* [.getLastmodFromFile(filepath)](#XmlSitemap.getLastmodFromFile) ⇒ <code>String</code>
* [.parseUrlObject(urlObject)](#XmlSitemap.parseUrlObject) ⇒ <code>Object</code>
<a name="new_XmlSitemap_new"></a>
### new XmlSitemap([xmlAsString])
Create a new sitemap or create a sitemap object from an XML string.
| Param | Type | Description |
| --- | --- | --- |
| [xmlAsString] | <code>String</code> | <code>Buffer</code> | Optional, the sitemap XML as a string or Buffer. Must be a valid sitemap. |
**Example**
```js
See Basic Usage above
```
<a name="XmlSitemap+host"></a>
### xmlSitemap.host : <code>String</code>
The webpage host to which all future urls will be relative. See [setHost](#XmlSitemap+setHost)
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Default**: <code>''</code>
**Example**
```js
var sitemap = new XmlSitemap()
.setHost('http://domain.com/');
sitemap.host
//=> 'http://domain.com/'
sitemap.add([
'/magic',
'http://domain.com/another-page'
]);
sitemap.urls
//=> [ 'http://domain.com/', 'http://domain.com/magic',
// 'http://domain.com/another-page']
```
<a name="XmlSitemap+xmlObj"></a>
### xmlSitemap.xmlObj : <code>Object</code>
XML object tree of sitemap, as generated by [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js). Automatically created and udated as the sitemap is modified.
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Example**
```js
{
urlset: {
'$': { xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9' },
url: [
{ loc: 'http://domain.com/',
lastmod: '1985-12-25',
priority: '0.9' },
{ loc: 'http://domain.com/magic',
lastmod: '2012-12-21',
changefreq: 'never' }
]
}
}
```
<a name="XmlSitemap+urls"></a>
### xmlSitemap.urls : <code>Array.<String></code>
Array of urls in the sitemap. Add urls by using [add](#XmlSitemap+add).
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Example**
```js
var sitemap = new XmlSitemap()
.add('http://domain.com/')
.add('http://domain.com/magic');
console.log(sitemap.urls);
// [ 'http://domain.com/', 'http://domain.com/magic' ]
```
<a name="XmlSitemap+files"></a>
### xmlSitemap.files : <code>Object</code>
Object of files linked to a url, for determining lastmod. To link a file use [XmlSitemap#linkFile](XmlSitemap#linkFile) or pass the filename under the key `file` in the initial options.
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
<a name="XmlSitemap+urlOptions"></a>
### xmlSitemap.urlOptions : <code>Array.<String></code>
Allowable option tags for urls in sitemap. Add options with or without handlers by using [XmlSitemap#addOption](XmlSitemap#addOption).
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Default**: <code>['lastmod', 'changefreq', 'priority']</code>
**Example**
```js
var sitemap = new XmlSitemap();
console.log(sitemap.urlOptions);
// [ 'lastmod', 'changefreq', 'priority' ]
sitemap.addOption('foo');
console.log(sitemap.urlOptions);
// [ 'lastmod', 'changefreq', 'priority', 'foo' ]
```
<a name="XmlSitemap+optionHandlers"></a>
### xmlSitemap.optionHandlers : <code>Object</code>
Optional handlers for custom option settings. Handler functions are listed under the option name key. Add options with [XmlSitemap#addOption](XmlSitemap#addOption).
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Default**: <code>{
lastmod: XmlSitemap.handleLastmod,
changefreq: XmlSitemap.handleChangefreq,
priority: XmlSitemap.handlePriority
}</code>
<a name="XmlSitemap+xml"></a>
### xmlSitemap.xml ⇒ <code>String</code>
Output the sitemap as XML.
**Kind**: instance property of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - The sitemap XML
<a name="XmlSitemap+hasUrl"></a>
### xmlSitemap.hasUrl(url) ⇒ <code>Bool</code>
Check if sitemap contains a url.
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>Bool</code> - Whether the url is in the sitemap
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | The url to look for |
**Example**
```js
var sitemap = new XmlSitemap()
.add('http://domain.com/');
sitemap.hasUrl('http://domain.com/'); // true
sitemap.hasUrl('http://otherdomain.com/'); // false
```
<a name="XmlSitemap+add"></a>
### xmlSitemap.add(url, [urlOptions]) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
There are a few ways to add a urls:
1. Pass a single url as a string
2. Pass a single url as a string with an options object
3. Pass a single object with either a `url` or `loc` attribute and options
4. Pass an array with any of the above as elements
Aliased with `addUrl` or `addUrls`
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>[XmlSitemap](#XmlSitemap)</code> - The sitemap object
**Throws**:
- <code>TypeError</code> Url object must contain a `url` or `loc` property
- <code>Error</code> Url is already in sitemap
- <code>TypeError</code> Url must be object, string, or array
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | <code>Object</code> | <code>Array</code> | The url(s) to add |
| [urlOptions] | <code>Object</code> | Options for setting various information about the url. Options must be in the objects [urlOptions](#XmlSitemap+urlOptions). |
**Example**
```js
var sitemap = new XmlSitemap();
.add('http://domain.com/')
.add('http://domain.com/other', {lastmod: '2012-11-21'})
.add({
url: 'http://domain.com/magic',
priority: 0.7
})
.add({
loc: 'http://domain.com/another-page',
changefreq: 'never'
});
// which makes the same sitemap as:
var sitemap = new XmlSitemap()
.add([
'http://domain.com/',
{
url: 'http://domain.com/other',
lastmod: '2012-11-21'
},
{
url: 'http://domain.com/magic'
priority: 0.7
},
{
loc: 'http://domain.com/another-page',
changefreq: 'never'
}
];
sitemap.urls
//=> [ 'http://domain.com/', 'http://domain.com/other', ....s
sitemap.xml
//=> xml version="1.0"....
```
<a name="XmlSitemap+remove"></a>
### xmlSitemap.remove(url) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
Remove url from the Sitemap. Aliased with `removeUrl`.
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>[XmlSitemap](#XmlSitemap)</code> - The sitemap object
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | The url to remove |
**Example**
```js
var sitemap = new XmlSitemap()
.add('http://domain.com/')
.add('http://domain.com/other');
// BEFORE
console.log(sitemap.urls); // ['http://domain.com/', 'http://domain.com/other']
sitemap.hasUrl('http://domain.com/other'); // true
sitemap.remove('http://domain.com/other');
// AFTER
console.log(sitemap.urls); // ['http://domain.com/']
console.log(sitemap.xml);
// <?xml version="1.0" encoding="UTF-8"?>
// <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
// <url>
// <loc>http://domain.com/</loc>
// </url>
// </urlset>
```
<a name="XmlSitemap+getUrlNode"></a>
### xmlSitemap.getUrlNode(url) ⇒ <code>Object</code>
Get node of the XML object tree for a url.
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>Object</code> - The XML element of the url
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | The url of the desired XML node |
**Example**
```js
var sitemap = new XmlSitemap()
.add('http://domain.com/', {lastmod: '2012-12-21', changefreq: 'never'});
sitemap.getUrlNode('http://domain.com/');
// { loc: 'http://domain.com/',
// lastmod: '2012-12-21',
// changefreq: 'never' }
```
<a name="XmlSitemap+buildUrlNode"></a>
### xmlSitemap.buildUrlNode(url, [options]) ⇒ <code>Object</code>
Create a url node XML object
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>Object</code> - The url XML node
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | The url to add |
| [options] | <code>Object</code> | Options for setting various information about the url, must be one of [urlOptions](#XmlSitemap+urlOptions). Add options with [XmlSitemap#addOption](XmlSitemap#addOption). |
<a name="XmlSitemap+setHost"></a>
### xmlSitemap.setHost(url, [urlOptions]) ⇒ <code>[XmlSitemap](#XmlSitemap)</code>
Sets the host of the webpage. All relative links added after this will added relative to the host. Automatically adds the host to the tree with the provided options.
**Kind**: instance method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>[XmlSitemap](#XmlSitemap)</code> - The updated sitemap object
**Throws**:
- <code>Error</code> Url object must contain a `url` or `loc` property
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | <code>Object</code> | The url to set as host, or urlObject |
| [urlOptions] | <code>Object</code> | Options for setting various information about the url. Options must valid options in the [urlOptions](#XmlSitemap+urlOptions). |
<a name="XmlSitemap.w3Date"></a>
### XmlSitemap.w3Date(date) ⇒ <code>String</code>
Format a Date object to W3 standard string.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - Date formatted as year-month-day
**Throws**:
- <code>TypeError</code> Argument must be Date object
| Param | Type | Description |
| --- | --- | --- |
| date | <code>Date</code> | the Date to format |
**Example**
```js
var date = new Date();
date.setFullYear(2012);
date.setMonth(11);
date.setDate(21);
XmlSitemap.w3Date(date); // '2012-12-21'
```
<a name="XmlSitemap.handleLastmod"></a>
### XmlSitemap.handleLastmod([date]) ⇒ <code>String</code>
Determine what to put in the lastmod field given the input. Will NOT check format of string.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - The value of lastmod
| Param | Type | Description |
| --- | --- | --- |
| [date] | <code>String</code> | <code>Date</code> | The lastmod value as a Date object, the string 'now', or a string (will not confirm format) |
<a name="XmlSitemap.handleChangefreq"></a>
### XmlSitemap.handleChangefreq(value) ⇒ <code>String</code>
Check if changfreq value is valid.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - A valid changefreq value
**Throws**:
- <code>Error</code> The changefreq must be valid. Allowed values are "always", "hourly", "daily", "weekly", "monthly", "yearly", "never".
| Param | Type | Description |
| --- | --- | --- |
| value | <code>String</code> | The changefreq value to check |
<a name="XmlSitemap.handlePriority"></a>
### XmlSitemap.handlePriority(value) ⇒ <code>String</code>
Check for valid priority value and return it as a string. Priority must be between 0 and 1.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - The priority value as a string
**Throws**:
- <code>Error</code> Priority must be number between 0 & 1, inclusive.
| Param | Type | Description |
| --- | --- | --- |
| value | <code>Double</code> | The Priority value |
<a name="XmlSitemap.getLastmodFromFile"></a>
### XmlSitemap.getLastmodFromFile(filepath) ⇒ <code>String</code>
Get W3-standard formatted date string from file's last modified time.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>String</code> - W3-standard formatted date string
**Throws**:
- <code>Error</code> Unable to resolve filepath
| Param | Type | Description |
| --- | --- | --- |
| filepath | <code>String</code> | The path to the file |
<a name="XmlSitemap.parseUrlObject"></a>
### XmlSitemap.parseUrlObject(urlObject) ⇒ <code>Object</code>
Separates out url from options in urlObject.
**Kind**: static method of <code>[XmlSitemap](#XmlSitemap)</code>
**Returns**: <code>Object</code> - Object with url under `url` and options object under `options`
**Throws**:
- <code>TypeError</code> `urlObject` must be an object
- <code>TypeError</code> `urlObject` contains no `url` or `loc` key
| Param | Type | Description |
| --- | --- | --- |
| urlObject | <code>Object</code> | The url object to parse |