semantic-release-openapi 2.1.0 → 2.3.0

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
@@ -1,15 +1,14 @@
1
1
  # semantic-release-openapi
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/semantic-release-openapi)][npm]
4
- [![npm types](https://badgen.net/npm/types/semantic-release-openapi?icon=typescript)][npm]
5
4
  [![license](https://img.shields.io/github/license/aensley/semantic-release-openapi.svg)](https://github.com/aensley/semantic-release-openapi/blob/main/LICENSE)
6
- [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg?style=flat)](https://standardjs.com)
7
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat)](https://prettier.io)
8
-
5
+ [![sponsor](https://img.shields.io/badge/sponsor-4d4d4d?logo=github&logoColor=white)](https://github.com/sponsors/aensley)
6
+ [![install size](https://packagephobia.com/badge?p=semantic-release-openapi)](https://packagephobia.com/result?p=semantic-release-openapi)
7
+ [![npm downloads](https://img.shields.io/npm/dw/semantic-release-openapi)][npm]<br>
8
+ [![npm types](https://badgen.net/npm/types/semantic-release-openapi?icon=typescript)][npm]
9
9
  [![ci](https://github.com/aensley/semantic-release-openapi/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/aensley/semantic-release-openapi/actions/workflows/ci.yml)
10
10
  [![Maintainability](https://qlty.sh/gh/aensley/projects/semantic-release-openapi/maintainability.svg)][qltysh]
11
11
  [![Test Coverage](https://qlty.sh/gh/aensley/projects/semantic-release-openapi/coverage.svg)][qltysh]
12
- [![npm downloads](https://img.shields.io/npm/dw/semantic-release-openapi)][npm]
13
12
 
14
13
  A Semantic Release plugin to update versions in OpenAPI / Swagger specification files.
15
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semantic-release-openapi",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "A Semantic Release plugin to update versions in OpenAPI / Swagger specification files",
5
5
  "repository": {
6
6
  "type": "git",
@@ -42,14 +42,10 @@
42
42
  "platform": "node",
43
43
  "dependencies": {
44
44
  "@semantic-release/error": "^4.0.0",
45
- "fs-extra": "^11.3.5",
46
- "glob": "^13.0.6",
47
- "replace-in-file": "^8.4.0",
48
- "semantic-release": "^25.0.3"
45
+ "fdir": "^6.5.0",
46
+ "jsonfile": "^6.2.1"
49
47
  },
50
- "config": {
51
- "commitizen": {
52
- "path": "./node_modules/cz-conventional-changelog"
53
- }
48
+ "peerDependencies": {
49
+ "semantic-release": ">=20.0.0"
54
50
  }
55
51
  }
package/prepare.d.ts CHANGED
@@ -5,5 +5,5 @@ import PluginConfig from './@types/pluginConfig.js';
5
5
  *
6
6
  * @throws {SemanticReleaseError}
7
7
  */
8
- declare const _default: ({ apiSpecFiles }: PluginConfig, { nextRelease, logger }: PrepareContext) => any;
9
- export default _default;
8
+ declare const prepare: ({ apiSpecFiles }: PluginConfig, { nextRelease, logger }: PrepareContext) => any;
9
+ export default prepare;
package/prepare.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import SemanticReleaseError from '@semantic-release/error';
2
- import { readJsonSync, writeJsonSync } from 'fs-extra';
3
- import { replaceInFileSync } from 'replace-in-file';
4
- import { globSync } from 'glob';
2
+ import { readFileSync as readJsonSync, writeFileSync as writeJsonSync } from 'jsonfile';
3
+ import { readFileSync, writeFileSync } from 'node:fs';
4
+ import { fdir } from 'fdir';
5
5
  /**
6
6
  * Prepare the API Spec files
7
7
  *
@@ -14,7 +14,8 @@ import { globSync } from 'glob';
14
14
  const prepareApiSpecFiles = (apiSpecFiles, version, logger) => {
15
15
  try {
16
16
  apiSpecFiles.forEach((fileNameGlob) => {
17
- const fileNames = globSync(fileNameGlob);
17
+ // eslint-disable-next-line new-cap
18
+ const fileNames = new fdir().glob(fileNameGlob).withBasePath().crawl('.').sync();
18
19
  fileNames.forEach((fileName) => {
19
20
  let results;
20
21
  if (fileName.split('.').pop() === 'json') {
@@ -42,14 +43,10 @@ const prepareApiSpecFiles = (apiSpecFiles, version, logger) => {
42
43
  * @returns {string[]} A list of altered files
43
44
  */
44
45
  const prepareApiSpecFileYml = (apiSpecFile, version) => {
45
- const changedFiles = replaceInFileSync({
46
- files: apiSpecFile,
47
- from: /version: ?.+$/im,
48
- to: 'version: ' + version
49
- })
50
- .filter((result) => result.hasChanged)
51
- .map((result) => result.file);
52
- return changedFiles;
46
+ const content = readFileSync(apiSpecFile, 'utf8');
47
+ const newContent = content.replace(/version: ?.+$/im, 'version: ' + version);
48
+ writeFileSync(apiSpecFile, newContent);
49
+ return [apiSpecFile];
53
50
  };
54
51
  /**
55
52
  * Prepares a single API spec file in JSON format
@@ -70,11 +67,12 @@ const prepareApiSpecFileJson = (apiSpecFile, version) => {
70
67
  *
71
68
  * @throws {SemanticReleaseError}
72
69
  */
73
- export default ({ apiSpecFiles }, { nextRelease, logger }) => {
70
+ const prepare = ({ apiSpecFiles }, { nextRelease, logger }) => {
74
71
  const version = nextRelease?.version ?? '';
75
72
  if (version.length < 1) {
76
73
  throw new SemanticReleaseError('Could not determine the version from semantic release.');
77
74
  }
78
75
  prepareApiSpecFiles(apiSpecFiles, version, logger);
79
76
  };
77
+ export default prepare;
80
78
  //# sourceMappingURL=prepare.js.map
package/prepare.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,CAAC,YAAsB,EAAE,OAAe,EAAE,MAAgC,EAAO,EAAE;IAC7G,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAa,QAAQ,CAAC,YAAY,CAAC,CAAA;YAClD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;gBACrC,IAAI,OAAiB,CAAA;gBACrB,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,CAAC;oBACzC,OAAO,GAAG,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACrD,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACpD,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,cAAsB,EAAE,EAAE;oBACzC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;gBAC/D,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAY,EAAE;IAC/E,MAAM,YAAY,GAAG,iBAAiB,CAAC;QACrC,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,WAAW,GAAG,OAAO;KAC1B,CAAC;SACC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;SACrC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/B,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC/B,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,CAAC,CAAA;AAED;;;;GAIG;AACH,eAAe,CAAC,EAAE,YAAY,EAAgB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAkB,EAAO,EAAE;IAC9F,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE,CAAA;IAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,oBAAoB,CAAC,wDAAwD,CAAC,CAAA;IAC1F,CAAC;IAED,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC,CAAA"}
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,UAAU,CAAA;AACvF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,CAAC,YAAsB,EAAE,OAAe,EAAE,MAAgC,EAAO,EAAE;IAC7G,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;YAC5C,mCAAmC;YACnC,MAAM,SAAS,GAAa,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAc,CAAA;YACtG,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;gBACrC,IAAI,OAAiB,CAAA;gBACrB,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,CAAC;oBACzC,OAAO,GAAG,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACrD,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACpD,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,cAAsB,EAAE,EAAE;oBACzC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;gBAC/D,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAY,EAAE;IAC/E,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,WAAW,GAAG,OAAO,CAAC,CAAA;IAC5E,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACtC,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC/B,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,GAAG,CAAC,EAAE,YAAY,EAAgB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAkB,EAAO,EAAE;IAC/F,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE,CAAA;IAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,oBAAoB,CAAC,wDAAwD,CAAC,CAAA;IAC1F,CAAC;IAED,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -4,5 +4,5 @@ import PluginConfig from './@types/pluginConfig.js';
4
4
  *
5
5
  * @throws {SemanticReleaseError}
6
6
  */
7
- declare const _default: ({ apiSpecFiles }: PluginConfig) => Promise<any>;
8
- export default _default;
7
+ declare const verifyConditions: ({ apiSpecFiles }: PluginConfig) => Promise<any>;
8
+ export default verifyConditions;
@@ -1,19 +1,20 @@
1
1
  import SemanticReleaseError from '@semantic-release/error';
2
- import { globSync } from 'glob';
2
+ import { fdir } from 'fdir';
3
3
  import { extname } from 'node:path';
4
4
  /**
5
5
  * verifyConditions hook for semantic release
6
6
  *
7
7
  * @throws {SemanticReleaseError}
8
8
  */
9
- export default async ({ apiSpecFiles }) => {
9
+ const verifyConditions = async ({ apiSpecFiles }) => {
10
10
  if (apiSpecFiles.length < 1) {
11
11
  throw new SemanticReleaseError('Option "apiSpecFiles" was not included in the plugin config. See the README for instructions.', 'ENOAPISPECFILES');
12
12
  }
13
13
  const expectedExts = ['json', 'yaml', 'yml'];
14
14
  let specFilesFound = false;
15
15
  apiSpecFiles.forEach((fileNameGlob) => {
16
- const fileNames = globSync(fileNameGlob);
16
+ // eslint-disable-next-line new-cap
17
+ const fileNames = new fdir().glob(fileNameGlob).withBasePath().crawl('.').sync();
17
18
  if (fileNames.length > 0) {
18
19
  specFilesFound = true;
19
20
  fileNames.forEach((fileName) => {
@@ -27,4 +28,5 @@ export default async ({ apiSpecFiles }) => {
27
28
  throw new SemanticReleaseError('No files match the paths in "apiSpecFiles". Check your plugin config and try again.', 'EINVALIDAPISPECFILES');
28
29
  }
29
30
  };
31
+ export default verifyConditions;
30
32
  //# sourceMappingURL=verifyConditions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verifyConditions.js","sourceRoot":"","sources":["../src/verifyConditions.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC;;;;GAIG;AACH,eAAe,KAAK,EAAE,EAAE,YAAY,EAAgB,EAAgB,EAAE;IACpE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAC5B,+FAA+F,EAC/F,iBAAiB,CAClB,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,cAAc,GAAY,KAAK,CAAA;IACnC,YAAY,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAa,QAAQ,CAAC,YAAY,CAAC,CAAA;QAClD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,cAAc,GAAG,IAAI,CAAA;YACrB,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;gBACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,MAAM,IAAI,oBAAoB,CAC5B,QAAQ,GAAG,QAAQ,GAAG,qEAAqE,EAC3F,yBAAyB,CAC1B,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAC5B,qFAAqF,EACrF,sBAAsB,CACvB,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"verifyConditions.js","sourceRoot":"","sources":["../src/verifyConditions.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAAE,YAAY,EAAgB,EAAgB,EAAE;IAC9E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAC5B,+FAA+F,EAC/F,iBAAiB,CAClB,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,cAAc,GAAY,KAAK,CAAA;IACnC,YAAY,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;QAC5C,mCAAmC;QACnC,MAAM,SAAS,GAAa,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAc,CAAA;QACtG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,cAAc,GAAG,IAAI,CAAA;YACrB,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;gBACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,MAAM,IAAI,oBAAoB,CAC5B,QAAQ,GAAG,QAAQ,GAAG,qEAAqE,EAC3F,yBAAyB,CAC1B,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAC5B,qFAAqF,EACrF,sBAAsB,CACvB,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED,eAAe,gBAAgB,CAAA"}