@semantic-release/release-notes-generator 10.0.3 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![npm next version](https://img.shields.io/npm/v/@semantic-release/release-notes-generator/next.svg)](https://www.npmjs.com/package/@semantic-release/release-notes-generator)
7
7
 
8
8
  | Step | Description |
9
- |-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
9
+ | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
10
10
  | `generateNotes` | Generate release notes for the commits added since the last release with [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog). |
11
11
 
12
12
  ## Install
@@ -22,26 +22,33 @@ The plugin can be configured in the [**semantic-release** configuration file](ht
22
22
  ```json
23
23
  {
24
24
  "plugins": [
25
- ["@semantic-release/commit-analyzer", {
26
- "preset": "angular",
27
- "parserOpts": {
28
- "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
25
+ [
26
+ "@semantic-release/commit-analyzer",
27
+ {
28
+ "preset": "angular",
29
+ "parserOpts": {
30
+ "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
31
+ }
29
32
  }
30
- }],
31
- ["@semantic-release/release-notes-generator", {
32
- "preset": "angular",
33
- "parserOpts": {
34
- "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
35
- },
36
- "writerOpts": {
37
- "commitsSort": ["subject", "scope"]
33
+ ],
34
+ [
35
+ "@semantic-release/release-notes-generator",
36
+ {
37
+ "preset": "angular",
38
+ "parserOpts": {
39
+ "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
40
+ },
41
+ "writerOpts": {
42
+ "commitsSort": ["subject", "scope"]
43
+ }
38
44
  }
39
- }]
45
+ ]
40
46
  ]
41
47
  }
42
48
  ```
43
49
 
44
50
  With this example:
51
+
45
52
  - the commits that contains `BREAKING CHANGE`, `BREAKING CHANGES` or `BREAKING` in their body will be considered breaking changes (by default the [angular preset](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/index.js#L14) checks only for `BREAKING CHANGE` and `BREAKING CHANGES`)
46
53
  - the commits will be sorted in the changelog by `subject` then `scope` (by default the [angular preset](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/index.js#L90) sort the commits in the changelog by `scope` then `subject`)
47
54
 
@@ -50,7 +57,7 @@ With this example:
50
57
  ### Options
51
58
 
52
59
  | Option | Description | Default |
53
- |------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
60
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
54
61
  | `preset` | [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog) preset (possible values: [`angular`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular), [`atom`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-atom), [`codemirror`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-codemirror), [`ember`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-ember), [`eslint`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-eslint), [`express`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-express), [`jquery`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-jquery), [`jshint`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-jshint), [`conventionalcommits`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-conventionalcommits)). | [`angular`](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular) |
55
62
  | `config` | NPM package name of a custom [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog) preset. | - |
56
63
  | `parserOpts` | Additional [conventional-commits-parser](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-parser#conventionalcommitsparseroptions) options that will extends the ones loaded by `preset` or `config`. This is convenient to use a [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog) preset with some customizations without having to create a new module. | - |
package/index.js CHANGED
@@ -1,21 +1,23 @@
1
- const {format} = require('url');
2
- const {find, merge} = require('lodash');
3
- const getStream = require('get-stream');
4
- const intoStream = require('into-stream');
5
- const parser = require('conventional-commits-parser').sync;
6
- const writer = require('conventional-changelog-writer');
7
- const filter = require('conventional-commits-filter');
8
- const readPkgUp = require('read-pkg-up');
9
- const debug = require('debug')('semantic-release:release-notes-generator');
10
- const loadChangelogConfig = require('./lib/load-changelog-config');
11
- const HOSTS_CONFIG = require('./lib/hosts-config');
1
+ import { format } from "url";
2
+ import { find, merge } from "lodash-es";
3
+ import getStream from "get-stream";
4
+ import intoStream from "into-stream";
5
+ import { sync as parser } from "conventional-commits-parser";
6
+ import writer from "./wrappers/conventional-changelog-writer.js";
7
+ import filter from "conventional-commits-filter";
8
+ import { readPackageUp } from "read-pkg-up";
9
+ import debugFactory from "debug";
10
+ import loadChangelogConfig from "./lib/load-changelog-config.js";
11
+ import HOSTS_CONFIG from "./lib/hosts-config.js";
12
+
13
+ const debug = debugFactory("semantic-release:release-notes-generator");
12
14
 
13
15
  /**
14
16
  * Generate the changelog for all the commits in `options.commits`.
15
17
  *
16
18
  * @param {Object} pluginConfig The plugin configuration.
17
19
  * @param {String} pluginConfig.preset conventional-changelog preset ('angular', 'atom', 'codemirror', 'ember', 'eslint', 'express', 'jquery', 'jscs', 'jshint').
18
- * @param {String} pluginConfig.config Requierable npm package with a custom conventional-changelog preset
20
+ * @param {String} pluginConfig.config Requireable npm package with a custom conventional-changelog preset
19
21
  * @param {Object} pluginConfig.parserOpts Additional `conventional-changelog-parser` options that will overwrite ones loaded by `preset` or `config`.
20
22
  * @param {Object} pluginConfig.writerOpts Additional `conventional-changelog-writer` options that will overwrite ones loaded by `preset` or `config`.
21
23
  * @param {Object} context The semantic-release context.
@@ -26,43 +28,43 @@ const HOSTS_CONFIG = require('./lib/hosts-config');
26
28
  *
27
29
  * @returns {String} The changelog for all the commits in `context.commits`.
28
30
  */
29
- async function generateNotes(pluginConfig, context) {
30
- const {commits, lastRelease, nextRelease, options, cwd} = context;
31
- const repositoryUrl = options.repositoryUrl.replace(/\.git$/i, '');
32
- const {parserOpts, writerOpts} = await loadChangelogConfig(pluginConfig, context);
31
+ export async function generateNotes(pluginConfig, context) {
32
+ const { commits, lastRelease, nextRelease, options, cwd } = context;
33
+ const repositoryUrl = options.repositoryUrl.replace(/\.git$/i, "");
34
+ const { parserOpts, writerOpts } = await loadChangelogConfig(pluginConfig, context);
33
35
 
34
36
  const [match, auth, host, path] = /^(?!.+:\/\/)(?:(?<auth>.*)@)?(?<host>.*?):(?<path>.*)$/.exec(repositoryUrl) || [];
35
- let {hostname, port, pathname, protocol} = new URL(
36
- match ? `ssh://${auth ? `${auth}@` : ''}${host}/${path}` : repositoryUrl
37
+ let { hostname, port, pathname, protocol } = new URL(
38
+ match ? `ssh://${auth ? `${auth}@` : ""}${host}/${path}` : repositoryUrl
37
39
  );
38
- port = protocol.includes('ssh') ? '' : port;
39
- protocol = protocol && /http[^s]/.test(protocol) ? 'http' : 'https';
40
+ port = protocol.includes("ssh") ? "" : port;
41
+ protocol = protocol && /http[^s]/.test(protocol) ? "http" : "https";
40
42
  const [, owner, repository] = /^\/(?<owner>[^/]+)?\/?(?<repository>.+)?$/.exec(pathname);
41
43
 
42
- const {issue, commit, referenceActions, issuePrefixes} =
43
- find(HOSTS_CONFIG, conf => conf.hostname === hostname) || HOSTS_CONFIG.default;
44
+ const { issue, commit, referenceActions, issuePrefixes } =
45
+ find(HOSTS_CONFIG, (conf) => conf.hostname === hostname) || HOSTS_CONFIG.default;
44
46
  const parsedCommits = filter(
45
47
  commits
46
- .filter(({message, hash}) => {
48
+ .filter(({ message, hash }) => {
47
49
  if (!message.trim()) {
48
- debug('Skip commit %s with empty message', hash);
50
+ debug("Skip commit %s with empty message", hash);
49
51
  return false;
50
52
  }
51
53
 
52
54
  return true;
53
55
  })
54
- .map(rawCommit => ({
56
+ .map((rawCommit) => ({
55
57
  ...rawCommit,
56
- ...parser(rawCommit.message, {referenceActions, issuePrefixes, ...parserOpts}),
58
+ ...parser(rawCommit.message, { referenceActions, issuePrefixes, ...parserOpts }),
57
59
  }))
58
60
  );
59
61
  const previousTag = lastRelease.gitTag || lastRelease.gitHead;
60
62
  const currentTag = nextRelease.gitTag || nextRelease.gitHead;
61
- const {host: hostConfig, linkCompare, linkReferences, commit: commitConfig, issue: issueConfig} = pluginConfig;
63
+ const { host: hostConfig, linkCompare, linkReferences, commit: commitConfig, issue: issueConfig } = pluginConfig;
62
64
  const changelogContext = merge(
63
65
  {
64
66
  version: nextRelease.version,
65
- host: format({protocol, hostname, port}),
67
+ host: format({ protocol, hostname, port }),
66
68
  owner,
67
69
  repository,
68
70
  previousTag,
@@ -70,23 +72,21 @@ async function generateNotes(pluginConfig, context) {
70
72
  linkCompare: currentTag && previousTag,
71
73
  issue,
72
74
  commit,
73
- packageData: ((await readPkgUp({normalize: false, cwd})) || {}).packageJson,
75
+ packageData: ((await readPackageUp({ normalize: false, cwd })) || {}).packageJson,
74
76
  },
75
- {host: hostConfig, linkCompare, linkReferences, commit: commitConfig, issue: issueConfig}
77
+ { host: hostConfig, linkCompare, linkReferences, commit: commitConfig, issue: issueConfig }
76
78
  );
77
79
 
78
- debug('version: %o', changelogContext.version);
79
- debug('host: %o', changelogContext.hostname);
80
- debug('owner: %o', changelogContext.owner);
81
- debug('repository: %o', changelogContext.repository);
82
- debug('previousTag: %o', changelogContext.previousTag);
83
- debug('currentTag: %o', changelogContext.currentTag);
84
- debug('host: %o', changelogContext.host);
85
- debug('linkReferences: %o', changelogContext.linkReferences);
86
- debug('issue: %o', changelogContext.issue);
87
- debug('commit: %o', changelogContext.commit);
80
+ debug("version: %o", changelogContext.version);
81
+ debug("host: %o", changelogContext.hostname);
82
+ debug("owner: %o", changelogContext.owner);
83
+ debug("repository: %o", changelogContext.repository);
84
+ debug("previousTag: %o", changelogContext.previousTag);
85
+ debug("currentTag: %o", changelogContext.currentTag);
86
+ debug("host: %o", changelogContext.host);
87
+ debug("linkReferences: %o", changelogContext.linkReferences);
88
+ debug("issue: %o", changelogContext.issue);
89
+ debug("commit: %o", changelogContext.commit);
88
90
 
89
91
  return getStream(intoStream.object(parsedCommits).pipe(writer(changelogContext, writerOpts)));
90
92
  }
91
-
92
- module.exports = {generateNotes};
@@ -1,55 +1,55 @@
1
- module.exports = {
1
+ export default {
2
2
  github: {
3
- hostname: 'github.com',
4
- issue: 'issues',
5
- commit: 'commit',
6
- referenceActions: ['close', 'closes', 'closed', 'fix', 'fixes', 'fixed', 'resolve', 'resolves', 'resolved'],
7
- issuePrefixes: ['#', 'gh-'],
3
+ hostname: "github.com",
4
+ issue: "issues",
5
+ commit: "commit",
6
+ referenceActions: ["close", "closes", "closed", "fix", "fixes", "fixed", "resolve", "resolves", "resolved"],
7
+ issuePrefixes: ["#", "gh-"],
8
8
  },
9
9
  bitbucket: {
10
- hostname: 'bitbucket.org',
11
- issue: 'issue',
12
- commit: 'commits',
10
+ hostname: "bitbucket.org",
11
+ issue: "issue",
12
+ commit: "commits",
13
13
  referenceActions: [
14
- 'close',
15
- 'closes',
16
- 'closed',
17
- 'closing',
18
- 'fix',
19
- 'fixes',
20
- 'fixed',
21
- 'fixing',
22
- 'resolve',
23
- 'resolves',
24
- 'resolved',
25
- 'resolving',
14
+ "close",
15
+ "closes",
16
+ "closed",
17
+ "closing",
18
+ "fix",
19
+ "fixes",
20
+ "fixed",
21
+ "fixing",
22
+ "resolve",
23
+ "resolves",
24
+ "resolved",
25
+ "resolving",
26
26
  ],
27
- issuePrefixes: ['#'],
27
+ issuePrefixes: ["#"],
28
28
  },
29
29
  gitlab: {
30
- hostname: 'gitlab.com',
31
- issue: 'issues',
32
- commit: 'commit',
33
- referenceActions: ['close', 'closes', 'closed', 'closing', 'fix', 'fixes', 'fixed', 'fixing'],
34
- issuePrefixes: ['#'],
30
+ hostname: "gitlab.com",
31
+ issue: "issues",
32
+ commit: "commit",
33
+ referenceActions: ["close", "closes", "closed", "closing", "fix", "fixes", "fixed", "fixing"],
34
+ issuePrefixes: ["#"],
35
35
  },
36
36
  default: {
37
- issue: 'issues',
38
- commit: 'commit',
37
+ issue: "issues",
38
+ commit: "commit",
39
39
  referenceActions: [
40
- 'close',
41
- 'closes',
42
- 'closed',
43
- 'closing',
44
- 'fix',
45
- 'fixes',
46
- 'fixed',
47
- 'fixing',
48
- 'resolve',
49
- 'resolves',
50
- 'resolved',
51
- 'resolving',
40
+ "close",
41
+ "closes",
42
+ "closed",
43
+ "closing",
44
+ "fix",
45
+ "fixes",
46
+ "fixed",
47
+ "fixing",
48
+ "resolve",
49
+ "resolves",
50
+ "resolved",
51
+ "resolving",
52
52
  ],
53
- issuePrefixes: ['#', 'gh-'],
53
+ issuePrefixes: ["#", "gh-"],
54
54
  },
55
55
  };
@@ -1,24 +1,27 @@
1
- const {promisify} = require('util');
2
- const {isPlainObject} = require('lodash');
3
- const importFrom = require('import-from');
4
- const conventionalChangelogAngular = require('conventional-changelog-angular');
1
+ import { dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { promisify } from "node:util";
4
+ import { isPlainObject } from "lodash-es";
5
+ import importFrom from "import-from";
6
+ import conventionalChangelogAngular from "conventional-changelog-angular";
5
7
 
6
8
  /**
7
9
  * Load `conventional-changelog-parser` options. Handle presets that return either a `Promise<Array>` or a `Promise<Function>`.
8
10
  *
9
11
  * @param {Object} pluginConfig The plugin configuration.
10
12
  * @param {Object} pluginConfig.preset conventional-changelog preset ('angular', 'atom', 'codemirror', 'ember', 'eslint', 'express', 'jquery', 'jscs', 'jshint')
11
- * @param {string} pluginConfig.config Requierable npm package with a custom conventional-changelog preset
12
- * @param {Object} pluginConfig.parserOpts Additionnal `conventional-changelog-parser` options that will overwrite ones loaded by `preset` or `config`.
13
- * @param {Object} pluginConfig.writerOpts Additionnal `conventional-changelog-writer` options that will overwrite ones loaded by `preset` or `config`.
13
+ * @param {string} pluginConfig.config Requireable npm package with a custom conventional-changelog preset
14
+ * @param {Object} pluginConfig.parserOpts Additional `conventional-changelog-parser` options that will overwrite ones loaded by `preset` or `config`.
15
+ * @param {Object} pluginConfig.writerOpts Additional `conventional-changelog-writer` options that will overwrite ones loaded by `preset` or `config`.
14
16
  * @param {Object} context The semantic-release context.
15
17
  * @param {Array<Object>} context.commits The commits to analyze.
16
18
  * @param {String} context.cwd The current working directory.
17
19
  *
18
20
  * @return {Promise<Object>} a `Promise` that resolve to the `conventional-changelog-core` config.
19
21
  */
20
- module.exports = async ({preset, config, parserOpts, writerOpts, presetConfig}, {cwd}) => {
22
+ export default async ({ preset, config, parserOpts, writerOpts, presetConfig }, { cwd }) => {
21
23
  let loadedConfig;
24
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
25
 
23
26
  if (preset) {
24
27
  const presetPackage = `conventional-changelog-${preset.toLowerCase()}`;
@@ -29,14 +32,14 @@ module.exports = async ({preset, config, parserOpts, writerOpts, presetConfig},
29
32
  loadedConfig = conventionalChangelogAngular;
30
33
  }
31
34
 
32
- loadedConfig = await (typeof loadedConfig === 'function'
35
+ loadedConfig = await (typeof loadedConfig === "function"
33
36
  ? isPlainObject(presetConfig)
34
37
  ? loadedConfig(presetConfig)
35
38
  : promisify(loadedConfig)()
36
39
  : loadedConfig);
37
40
 
38
41
  return {
39
- parserOpts: {...loadedConfig.parserOpts, ...parserOpts},
40
- writerOpts: {...loadedConfig.writerOpts, ...writerOpts},
42
+ parserOpts: { ...loadedConfig.parserOpts, ...parserOpts },
43
+ writerOpts: { ...loadedConfig.writerOpts, ...writerOpts },
41
44
  };
42
45
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@semantic-release/release-notes-generator",
3
3
  "description": "semantic-release plugin to generate changelog content with conventional-changelog",
4
- "version": "10.0.3",
4
+ "version": "11.0.1",
5
5
  "author": "Pierre Vanduynslager (https://twitter.com/@pvdlg_)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/semantic-release/release-notes-generator/issues"
@@ -18,32 +18,33 @@
18
18
  "debug": "^4.0.0",
19
19
  "get-stream": "^6.0.0",
20
20
  "import-from": "^4.0.0",
21
- "into-stream": "^6.0.0",
22
- "lodash": "^4.17.4",
23
- "read-pkg-up": "^7.0.0"
21
+ "into-stream": "^7.0.0",
22
+ "lodash-es": "^4.17.21",
23
+ "read-pkg-up": "^9.0.0"
24
24
  },
25
25
  "devDependencies": {
26
- "ava": "3.15.0",
26
+ "ava": "5.2.0",
27
+ "c8": "7.10.0",
27
28
  "conventional-changelog-atom": "2.0.8",
28
- "conventional-changelog-conventionalcommits": "4.6.1",
29
+ "conventional-changelog-conventionalcommits": "5.0.0",
29
30
  "conventional-changelog-ember": "2.0.9",
30
31
  "conventional-changelog-eslint": "3.0.9",
31
32
  "conventional-changelog-express": "2.0.6",
32
33
  "conventional-changelog-jshint": "2.0.9",
33
- "escape-string-regexp": "4.0.0",
34
- "fs-extra": "10.0.0",
35
- "nyc": "15.1.0",
36
- "proxyquire": "2.1.3",
37
- "semantic-release": "18.0.1",
38
- "sinon": "12.0.1",
39
- "tempy": "1.0.1",
40
- "xo": "0.28.3"
34
+ "escape-string-regexp": "5.0.0",
35
+ "fs-extra": "11.1.0",
36
+ "prettier": "2.8.8",
37
+ "semantic-release": "21.0.1",
38
+ "stream-buffers": "3.0.2",
39
+ "tempy": "3.0.0",
40
+ "testdouble": "3.16.8"
41
41
  },
42
42
  "engines": {
43
- "node": ">=14.17"
43
+ "node": ">=18"
44
44
  },
45
45
  "files": [
46
46
  "lib",
47
+ "wrappers",
47
48
  "index.js"
48
49
  ],
49
50
  "homepage": "https://github.com/semantic-release/release-notes-generator#readme",
@@ -59,7 +60,7 @@
59
60
  ],
60
61
  "license": "MIT",
61
62
  "main": "index.js",
62
- "nyc": {
63
+ "c8": {
63
64
  "include": [
64
65
  "lib/**/*.js",
65
66
  "index.js"
@@ -72,32 +73,34 @@
72
73
  "all": true
73
74
  },
74
75
  "peerDependencies": {
75
- "semantic-release": ">=18.0.0-beta.1"
76
+ "semantic-release": ">=20.1.0"
76
77
  },
77
78
  "prettier": {
78
79
  "printWidth": 120,
79
80
  "trailingComma": "es5"
80
81
  },
81
82
  "publishConfig": {
82
- "access": "public"
83
+ "access": "public",
84
+ "provenance": true
83
85
  },
84
86
  "repository": {
85
87
  "type": "git",
86
88
  "url": "https://github.com/semantic-release/release-notes-generator.git"
87
89
  },
88
90
  "scripts": {
89
- "lint": "xo",
91
+ "lint": "prettier --check \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"{bin,lib,test}/*.js\"",
92
+ "lint:fix": "prettier --write \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"{bin,lib,test}/*.js\"",
90
93
  "pretest": "npm run lint",
91
94
  "semantic-release": "semantic-release",
92
- "test": "nyc ava -v",
93
- "test:ci": "nyc ava -v"
95
+ "test": "c8 ava -v",
96
+ "test:ci": "c8 ava -v"
94
97
  },
95
- "xo": {
96
- "prettier": true,
97
- "space": true,
98
- "rules": {
99
- "unicorn/string-content": "off"
100
- }
98
+ "type": "module",
99
+ "ava": {
100
+ "nodeArguments": [
101
+ "--loader=testdouble",
102
+ "--no-warnings"
103
+ ]
101
104
  },
102
105
  "renovate": {
103
106
  "extends": [
@@ -0,0 +1,3 @@
1
+ import writer from 'conventional-changelog-writer';
2
+
3
+ export default writer;