@hexonet/semantic-release-whmcs 4.0.4 → 5.0.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.
Files changed (42) hide show
  1. package/.github/dependabot.yml +7 -7
  2. package/.github/workflows/release.yml +29 -0
  3. package/.github/workflows/{pull-request.yml → test.yml} +13 -16
  4. package/.releaserc.json +1 -5
  5. package/HISTORY.md +12 -0
  6. package/index.js +23 -24
  7. package/lib/definitions/errors.js +19 -10
  8. package/lib/delete-marketplace-version.js +48 -48
  9. package/lib/get-error.js +6 -6
  10. package/lib/get-github-releases.js +17 -18
  11. package/lib/publish.js +10 -13
  12. package/lib/puppet.js +73 -74
  13. package/lib/resolve-config.js +5 -6
  14. package/lib/scrape-marketplace-versions.js +30 -28
  15. package/lib/set-compatible-versions.js +42 -41
  16. package/lib/verify.js +4 -4
  17. package/package.json +32 -28
  18. package/whmcs.js +81 -53
  19. package/.eslintignore +0 -3
  20. package/.eslintrc.js +0 -14
  21. package/.github/workflows/push.yml +0 -79
  22. package/coverage/base.css +0 -224
  23. package/coverage/block-navigation.js +0 -87
  24. package/coverage/coverage-final.json +0 -11
  25. package/coverage/favicon.png +0 -0
  26. package/coverage/index.html +0 -131
  27. package/coverage/lib/definitions/errors.js.html +0 -148
  28. package/coverage/lib/definitions/index.html +0 -116
  29. package/coverage/lib/delete-marketplace-version.js.html +0 -343
  30. package/coverage/lib/get-error.js.html +0 -106
  31. package/coverage/lib/get-github-releases.js.html +0 -184
  32. package/coverage/lib/index.html +0 -236
  33. package/coverage/lib/publish.js.html +0 -370
  34. package/coverage/lib/puppet.js.html +0 -424
  35. package/coverage/lib/resolve-config.js.html +0 -118
  36. package/coverage/lib/scrape-marketplace-versions.js.html +0 -220
  37. package/coverage/lib/set-compatible-versions.js.html +0 -298
  38. package/coverage/lib/verify.js.html +0 -157
  39. package/coverage/prettify.css +0 -1
  40. package/coverage/prettify.js +0 -2
  41. package/coverage/sort-arrow-sprite.png +0 -0
  42. package/coverage/sorter.js +0 -196
package/lib/puppet.js CHANGED
@@ -1,113 +1,112 @@
1
- const puppeteer = require('puppeteer')
2
- const debug = require('debug')('semantic-release:whmcs')
3
- const resolveConfig = require('./resolve-config')
4
-
5
- module.exports = async (context) => {
1
+ import puppeteer from "puppeteer";
2
+ import resolveConfig from "./resolve-config.js";
3
+ import debugConfig from "debug";
4
+ const debug = debugConfig("semantic-release:whmcs");
5
+ export default async (context) => {
6
+ let config;
6
7
  const cfg = {
7
- urlbase: 'https://marketplace.whmcs.com',
8
+ urlbase: "https://marketplace.whmcs.com",
8
9
  ...resolveConfig(context),
9
10
  // logger: logger,
10
11
  gotoOpts: {
11
- waitUntil: ['load', 'domcontentloaded'],
12
- timeout: 240000
12
+ waitUntil: ["load", "domcontentloaded"],
13
+ timeout: 240000,
13
14
  },
14
15
  navOpts: {
15
- waitUntil: ['networkidle0'],
16
- timeout: 240000
16
+ waitUntil: ["networkidle0"],
17
+ timeout: 240000,
17
18
  },
18
19
  selectorOpts: {
19
- timeout: 10000
20
+ timeout: 20000,
20
21
  },
21
- logger: context.logger
22
- }
22
+ logger: context.logger,
23
+ };
23
24
 
24
25
  const browser = await puppeteer.launch({
25
- headless: cfg.headless === '1',
26
+ headless: cfg.headless === "1",
26
27
  defaultViewport: null, // automatically full-sized
27
28
  args: [
28
- '--disable-gpu',
29
- '--incognito',
30
- '--start-maximized',
31
- '--no-sandbox',
32
- '--disable-setuid-sandbox',
33
- '--disable-infobars',
34
- '--ignore-certifcate-errors',
35
- '--ignore-certifcate-errors-spki-list',
36
- '--ignoreHTTPSErrors=true'
37
- ]
38
- })
39
- const { logger } = cfg
40
- const [page] = await browser.pages()
29
+ "--disable-gpu",
30
+ "--incognito",
31
+ "--start-maximized",
32
+ "--no-sandbox",
33
+ "--disable-setuid-sandbox",
34
+ "--disable-infobars",
35
+ "--ignore-certifcate-errors",
36
+ "--ignore-certifcate-errors-spki-list",
37
+ "--ignoreHTTPSErrors=true",
38
+ ],
39
+ });
40
+ const { logger } = cfg;
41
+ const [page] = await browser.pages();
41
42
  await page.setExtraHTTPHeaders({
42
- 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8'
43
- })
43
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
44
+ });
44
45
  await page.setUserAgent(
45
- 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
46
- )
47
- await page.setJavaScriptEnabled(true)
46
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
47
+ );
48
+ await page.setJavaScriptEnabled(true);
48
49
 
49
50
  if (cfg.debug) {
50
- page.on('console', (msg) => {
51
+ page.on("console", (msg) => {
51
52
  for (let i = 0; i < msg.args().length; i++) {
52
- logger.log(`${i}: ${msg.args()[i]}`)
53
+ logger.log(`${i}: ${msg.args()[i]}`);
53
54
  }
54
- })
55
+ });
55
56
  }
56
57
 
57
58
  page.clickAndNavigate = async (selector) => {
58
- const { page, navOpts } = this.config
59
- const nav = page.waitForNavigation(navOpts)
60
- await page.hover(selector)
61
- await page.click(selector)
62
- await nav
63
- }
59
+ const { page, navOpts } = config;
60
+ const nav = page.waitForNavigation(navOpts);
61
+ await page.hover(selector);
62
+ await page.click(selector);
63
+ await nav;
64
+ };
64
65
 
65
66
  page.enterAndType = async (selector, value) => {
66
- const { page, selectorOpts } = this.config
67
- await page.waitForSelector(selector, selectorOpts)
68
- await page.type(selector, value)
69
- }
67
+ const { page, selectorOpts } = config;
68
+ await page.waitForSelector(selector, selectorOpts);
69
+ await page.type(selector, value);
70
+ };
70
71
 
71
- this.login = async () => {
72
- const { page, login, password, productid, gotoOpts, urlbase } = this.config
73
- const selector = 'div.login-leftcol form button[type="submit"]'
72
+ async function login() {
73
+ const { page, login, password, productid, gotoOpts, urlbase } = config;
74
+ const selector = 'div.login-leftcol form button[type="submit"]';
74
75
  // do login
75
76
  try {
76
- await page.goto(`${urlbase}/user/login`, gotoOpts)
77
- debug('login form loaded at %s', `${urlbase}/user/login`)
78
- await page.enterAndType('#email', login)
79
- await page.enterAndType('#password', password)
80
- debug('WHMCS Marketplace credentials entered')
81
- await page.clickAndNavigate(selector)
82
- debug('WHMCS Marketplace login form submitted.')
77
+ await page.goto(`${urlbase}/user/login`, gotoOpts);
78
+ debug("login form loaded at %s", `${urlbase}/user/login`);
79
+ await page.enterAndType("#email", login);
80
+ await page.enterAndType("#password", password);
81
+ debug("WHMCS Marketplace credentials entered");
82
+ await page.clickAndNavigate(selector);
83
+ debug("WHMCS Marketplace login form submitted.");
83
84
  } catch (error) {
84
- debug(
85
- 'WHMCS Marketplace login failed or Product ID missing',
86
- error.message
87
- )
88
- await page.browser().close()
89
- return false
85
+ debug("WHMCS Marketplace login failed or Product ID missing", error.message);
86
+ await page.browser().close();
87
+ return false;
90
88
  }
91
- debug('WHMCS Marketplace login succeeded.')
89
+
90
+ debug("WHMCS Marketplace login succeeded.");
92
91
 
93
92
  // access MP Product ID
94
- let tmp = productid
93
+ let tmp = productid;
95
94
  if (!tmp || !/^[0-9]+$/.test(productid) || !parseInt(productid, 10)) {
96
- debug('No or invalid WHMCS Marketplace Product ID provided.')
97
- await page.browser().close()
98
- return false
95
+ debug("No or invalid WHMCS Marketplace Product ID provided.");
96
+ await page.browser().close();
97
+ return false;
99
98
  }
100
99
 
101
- tmp = tmp.replace(/(.)/g, '$&\u200E')
102
- debug(`WHMCS Marketplace Product ID: ${tmp}`)
100
+ tmp = tmp.replace(/(.)/g, "$&\u200E");
101
+ debug(`WHMCS Marketplace Product ID: ${tmp}`);
103
102
 
104
- return true
103
+ return true;
105
104
  }
106
105
 
107
- this.config = {
106
+ config = {
108
107
  ...cfg,
109
- page
110
- }
108
+ page,
109
+ };
111
110
 
112
- return this
113
- }
111
+ return { config, login };
112
+ };
@@ -1,11 +1,10 @@
1
- module.exports = ({ env }) => ({
1
+ export default ({ env }) => ({
2
2
  login: env.WHMCSMP_LOGIN || false,
3
3
  password: env.WHMCSMP_PASSWORD || false,
4
4
  productid: env.WHMCSMP_PRODUCTID || false,
5
- minversion: env.WHMCSMP_MINVERSION || '7.10',
5
+ minversion: env.WHMCSMP_MINVERSION || "7.10",
6
6
  ghtoken: env.GH_TOKEN || env.GITHUB_TOKEN || false,
7
7
  ghrepo: env.GH_REPO || env.GITHUB_REPO || false,
8
- headless: env.PUPPETEER_HEADLESS || '1',
9
- debug:
10
- (env.DEBUG && /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false
11
- })
8
+ headless: env.PUPPETEER_HEADLESS || "1",
9
+ debug: (env.DEBUG && /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false,
10
+ });
@@ -1,45 +1,47 @@
1
- const debug = require('debug')('semantic-release:whmcs')
2
- const puppet = require('./puppet')
3
- const path = require('path')
1
+ import puppet from "./puppet.js";
2
+ import debugConfig from "debug";
3
+ import { fileURLToPath } from "node:url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const debug = debugConfig("semantic-release:whmcs");
4
6
 
5
7
  /**
6
8
  * A method to publish the module update on whmcs market place
7
9
  */
8
- module.exports = async (pluginConfig, context) => {
9
- const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
10
- const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
10
+ export default async (pluginConfig, context) => {
11
+ const sep = "+++++++++++++++++++++++++++++++++++++++++++++++++++";
12
+ const out = `\n${sep}\n${__filename}\n${sep}\n`;
11
13
 
12
- const püppi = await puppet(context)
13
- const result = await püppi.login()
14
+ const püppi = await puppet(context);
15
+ const result = await püppi.login();
14
16
  if (!result) {
15
- return result
17
+ return result;
16
18
  }
17
- const { page, gotoOpts, selectorOpts, productid, urlbase } = püppi.config
19
+ const { page, gotoOpts, selectorOpts, productid, urlbase } = püppi.config;
18
20
 
19
- let marketplaceVersions = []
21
+ let marketplaceVersions = [];
20
22
  try {
21
23
  // scrap versions from WHMCS marketplace
22
- const url = `${urlbase}/product/${productid}/edit#versions`
23
- await page.goto(url, gotoOpts)
24
- debug(`${out}product page loaded at %s`, url)
25
- const selector = 'div#versions tr strong'
26
- await page.waitForSelector(selector, selectorOpts)
27
- debug('product version table found')
24
+ const url = `${urlbase}/product/${productid}/edit#versions`;
25
+ await page.goto(url, gotoOpts);
26
+ debug(`${out}product page loaded at %s`, url);
27
+ const selector = "div#versions tr strong";
28
+ await page.waitForSelector(selector, selectorOpts);
29
+ debug("product version table found");
28
30
  /* istanbul ignore next */
29
31
  marketplaceVersions = await page.$$eval(selector, (tds) =>
30
32
  tds.map((td) => {
31
- return td.innerText.substring(8)
33
+ return td.innerText.substring(8);
32
34
  })
33
- )
34
- marketplaceVersions.reverse()
35
- marketplaceVersions.forEach((v) => debug(`Detected WHMCS version ${v}`))
35
+ );
36
+ marketplaceVersions.reverse();
37
+ marketplaceVersions.forEach((v) => debug(`Detected WHMCS version ${v}`));
36
38
  } catch (error) {
37
- debug('Publishing new product version failed.', error.message)
38
- await page.browser().close()
39
- return false
39
+ debug("Publishing new product version failed.", error.message);
40
+ await page.browser().close();
41
+ return false;
40
42
  }
41
43
 
42
- debug('Publishing new product version succeeded.')
43
- await page.browser().close()
44
- return marketplaceVersions
45
- }
44
+ debug("Publishing new product version succeeded.");
45
+ await page.browser().close();
46
+ return marketplaceVersions;
47
+ };
@@ -1,71 +1,72 @@
1
- const debug = require('debug')('semantic-release:whmcs')
2
- const puppet = require('./puppet')
3
- const path = require('path')
1
+ import puppet from "./puppet.js";
2
+ import debugConfig from "debug";
3
+ import { fileURLToPath } from "node:url";
4
+ const debug = debugConfig("semantic-release:whmcs");
5
+ const __filename = fileURLToPath(import.meta.url);
4
6
 
5
7
  /**
6
8
  * A method to publish the module update on whmcs market place
7
9
  */
8
- module.exports = async (pluginConfig, context) => {
9
- const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
10
- const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
10
+ export default async (pluginConfig, context) => {
11
+ const sep = "+++++++++++++++++++++++++++++++++++++++++++++++++++";
12
+ const out = `\n${sep}\n${__filename}\n${sep}\n`;
11
13
 
12
- const püppi = await puppet(context)
13
- const result = await püppi.login()
14
+ const püppi = await puppet(context);
15
+ const result = await püppi.login();
14
16
  if (!result) {
15
- return result
17
+ return result;
16
18
  }
17
- const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } =
18
- püppi.config
19
+ const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } = püppi.config;
19
20
 
20
- debug(out)
21
+ debug(out);
21
22
  try {
22
23
  // scrap versions from WHMCS marketplace
23
- const url = `${urlbase}/product/${productid}/edit#compatibility`
24
- await page.goto(url, gotoOpts)
25
- debug('product page loaded at %s', url)
24
+ const url = `${urlbase}/product/${productid}/edit#compatibility`;
25
+ await page.goto(url, gotoOpts);
26
+ debug("product page loaded at %s", url);
26
27
 
27
- const selector = 'input[name="versionIds[]"]'
28
- const submitSelector = 'div#compatibility button[type="submit"]'
29
- await page.waitForSelector(selector, selectorOpts)
30
- await page.waitForSelector(submitSelector, selectorOpts)
31
- debug('compatibility version table found')
28
+ const selector = 'input[name="versionIds[]"]';
29
+ const submitSelector = 'div#compatibility button[type="submit"]';
30
+ await page.waitForSelector(selector, selectorOpts);
31
+ await page.waitForSelector(submitSelector, selectorOpts);
32
+ debug("compatibility version table found");
32
33
 
33
- let tmp = minversion
34
+ let tmp = minversion;
34
35
  if (tmp) {
35
- tmp = tmp.replace(/(.)/g, '$&\u200E')
36
+ tmp = tmp.replace(/(.)/g, "$&\u200E");
36
37
  }
37
- debug(`Minimum required WHMCS version: ${tmp}`)
38
+ debug(`Minimum required WHMCS version: ${tmp}`);
38
39
  /* istanbul ignore next */
39
40
  await page.$$eval(
40
41
  selector,
41
42
  (checkboxes, minversion) =>
42
43
  checkboxes.forEach(function (c) {
43
- const checkParts = c.className.split('-')[0].split('_')
44
- const minParts = minversion.split('.')
45
- let check = true
44
+ const checkParts = c.className.split("-")[0].split("_");
45
+ const minParts = minversion.split(".");
46
+ let check = true;
46
47
  for (let i = 0; i < 2; i++) {
47
- const a = ~~checkParts[i]
48
- const b = ~~minParts[i]
48
+ const a = ~~checkParts[i];
49
+ const b = ~~minParts[i];
49
50
  if (a > b) {
50
- break
51
+ break;
51
52
  }
52
53
  if (a < b) {
53
- check = false
54
- break
54
+ check = false;
55
+ break;
55
56
  }
56
57
  }
57
- c.checked = check
58
+ c.checked = check;
58
59
  }),
59
60
  minversion
60
- )
61
- await page.clickAndNavigate(submitSelector)
61
+ );
62
+ await page.clickAndNavigate(submitSelector);
62
63
  } catch (error) {
63
- debug('Updating whmcs compatibility list failed.', error.message)
64
- await page.browser().close()
65
- return false
64
+ debug("Updating whmcs compatibility list failed.", error.message);
65
+ await page.browser().close();
66
+ return false;
66
67
  }
67
68
 
68
- debug('Updating whmcs compatibility list succeeded.')
69
- await page.browser().close()
70
- return true
71
- }
69
+ debug("Updating whmcs compatibility list succeeded.");
70
+ await page.browser().close();
71
+ return true;
72
+ };
package/lib/verify.js CHANGED
@@ -1,8 +1,8 @@
1
- const AggregateError = require("aggregate-error");
2
- const resolveConfig = require("./resolve-config");
3
- const getError = require("./get-error");
1
+ import AggregateError from "aggregate-error";
2
+ import resolveConfig from "./resolve-config.js";
3
+ import getError from "./get-error.js";
4
4
 
5
- module.exports = async (pluginConfig, context) => {
5
+ export default async (pluginConfig, context) => {
6
6
  const cfg = resolveConfig(context);
7
7
  const errors = [];
8
8
  if (cfg.ghtoken === false) {
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@hexonet/semantic-release-whmcs",
3
3
  "description": "`semantic-release` plugin for auto-publishing on WHMCS marketplace",
4
- "version": "4.0.4",
4
+ "version": "5.0.0",
5
5
  "private": false,
6
+ "type": "module",
6
7
  "publishConfig": {
7
8
  "access": "public"
8
9
  },
@@ -10,11 +11,10 @@
10
11
  "name": "Kai Schwarz",
11
12
  "email": "kschwarz@hexonet.net"
12
13
  },
13
- "main": "index.js",
14
14
  "license": "MIT",
15
15
  "engines": {
16
- "node": ">=16.15.1",
17
- "npm": ">=8.11.0"
16
+ "node": ">=18",
17
+ "npm": "8.11.0"
18
18
  },
19
19
  "homepage": "https://github.com/centralnicgroup-opensource/rtldev-middleware-semantic-release-whmcs#readme",
20
20
  "repository": "github:centralnicgroup-opensource/rtldev-middleware-semantic-release-whmcs",
@@ -34,9 +34,24 @@
34
34
  "semantic-release",
35
35
  "version"
36
36
  ],
37
- "nyc": {
37
+ "ava": {
38
+ "files": [
39
+ "test/**/*.test.js"
40
+ ],
41
+ "nodeArguments": [
42
+ "--no-warnings"
43
+ ],
44
+ "timeout": "2m"
45
+ },
46
+ "prettier": {
47
+ "printWidth": 120,
48
+ "trailingComma": "es5"
49
+ },
50
+ "c8": {
38
51
  "include": [
39
- "lib/**/*.js"
52
+ "lib/**/*.js",
53
+ "index.js",
54
+ "cli.js"
40
55
  ],
41
56
  "reporter": [
42
57
  "json",
@@ -45,39 +60,28 @@
45
60
  ],
46
61
  "all": true
47
62
  },
48
- "ava": {
49
- "require": [
50
- "esm"
51
- ]
52
- },
63
+ "main": "index.js",
53
64
  "scripts": {
54
- "coverage": "nyc npm run test",
55
- "test": "ava --fail-fast --verbose --timeout=2m",
56
- "lint": "eslint --fix --config=./.eslintrc.js *.js lib/*.js lib/definitions/*.js README.md *.json test/*.test.js"
65
+ "test": "c8 ava --verbose",
66
+ "lint": "prettier --check \"*.{js,json}\" \".github/**/*.{md,yml}\" \"{lib,test}/*.js\"",
67
+ "lint:fix": "prettier --write \"*.{js,json}\" \".github/**/*.{md,yml}\" \"{lib,test}/*.js\""
57
68
  },
58
69
  "devDependencies": {
59
70
  "@semantic-release/changelog": "^6.0.1",
60
71
  "@semantic-release/exec": "^6.0.2",
61
72
  "@semantic-release/git": "^10.0.1",
62
- "ava": "^5.1.0",
63
- "eslint": "^8.0.1",
64
- "eslint-config-standard": "^17.0.0",
65
- "eslint-plugin-import": "^2.25.2",
66
- "eslint-plugin-json": "^3.0.0",
67
- "eslint-plugin-markdown": "^3.0.0",
68
- "eslint-plugin-n": "^15.2.2",
69
- "eslint-plugin-promise": "^6.0.0",
70
- "esm": "^3.2.25",
71
- "nyc": "^15.1.0",
72
- "semantic-release": "^19.0.3",
73
+ "ava": "5.1.1",
74
+ "c8": "^7.12.0",
75
+ "prettier": "^2.8.3",
76
+ "semantic-release": "^20.0.2",
73
77
  "stream-buffers": "^3.0.2"
74
78
  },
75
79
  "dependencies": {
76
80
  "@semantic-release/error": "^3.0.0",
77
- "aggregate-error": "^3.1.0",
81
+ "aggregate-error": "^4.0.1",
78
82
  "debug": "^4.3.4",
79
83
  "github-api": "^3.4.0",
80
- "puppeteer": "^16.0.0",
81
- "yargs": "^17.0.1"
84
+ "puppeteer": "^19.4.1",
85
+ "yargs": "^17.5.1"
82
86
  }
83
87
  }
package/whmcs.js CHANGED
@@ -1,59 +1,87 @@
1
-
2
- const { publish, syncVersions, delVersion, updateCompatibility } = require('./index.js')
1
+ import { createRequire } from "node:module";
2
+ import { publish, syncVersions, delVersion, updateCompatibility } from "./index.js";
3
+ const require = createRequire(import.meta.url);
3
4
 
4
5
  const context = {
5
6
  env: process.env,
6
- logger: new class {
7
- log (msg) { console.log(msg) }
8
- info (msg) { console.log(msg) }
9
- error (msg, details) { console.error(msg + ' ' + details) }
10
- }()
11
- }
7
+ logger: new (class {
8
+ log(msg) {
9
+ console.log(msg);
10
+ }
11
+ info(msg) {
12
+ console.log(msg);
13
+ }
14
+ error(msg, details) {
15
+ console.error(msg + " " + details);
16
+ }
17
+ })(),
18
+ };
12
19
 
13
20
  // eslint-disable-next-line no-unused-expressions
14
- require('yargs')
15
- .scriptName('whmcs.js')
16
- .usage('$0 <cmd> [args]')
17
- .command('publish [ver] [notes]', 'publishes the specified version to the WHMCS Marketplace', (yargs) => {
18
- yargs.positional('ver', {
19
- type: 'string',
20
- demandOption: true,
21
- describe: 'the version to publish'
22
- }).positional('notes', {
23
- type: 'string',
24
- demandOption: true,
25
- describe: 'the changelog'
26
- })
27
- }, function (argv) {
28
- context.nextRelease = {
29
- version: argv.ver,
30
- notes: argv.notes
21
+ require("yargs")
22
+ .scriptName("whmcs.js")
23
+ .usage("$0 <cmd> [args]")
24
+ .command(
25
+ "publish [ver] [notes]",
26
+ "publishes the specified version to the WHMCS Marketplace",
27
+ (yargs) => {
28
+ yargs
29
+ .positional("ver", {
30
+ type: "string",
31
+ demandOption: true,
32
+ describe: "the version to publish",
33
+ })
34
+ .positional("notes", {
35
+ type: "string",
36
+ demandOption: true,
37
+ describe: "the changelog",
38
+ });
39
+ },
40
+ function (argv) {
41
+ context.nextRelease = {
42
+ version: argv.ver,
43
+ notes: argv.notes,
44
+ };
45
+ publish({}, context).then((r) => {
46
+ console.log(r === false ? "Failed" : "Successful");
47
+ });
48
+ }
49
+ )
50
+ .command(
51
+ "sync",
52
+ "adds missing versions to the WHMCS Marketplace",
53
+ () => {},
54
+ function () {
55
+ syncVersions({}, context).then((r) => {
56
+ console.log(r === false ? "Failed" : "Successful");
57
+ });
58
+ }
59
+ )
60
+ .command(
61
+ "del [ver]",
62
+ "deletes the specified version from the WHMCS Marketplace",
63
+ (yargs) => {
64
+ yargs.positional("ver", {
65
+ type: "string",
66
+ demandOption: true,
67
+ describe: "the version to delete",
68
+ });
69
+ },
70
+ function (argv) {
71
+ context.version = argv.ver;
72
+ delVersion({}, context).then((r) => {
73
+ console.log(r === false ? "Failed" : "Successful");
74
+ });
75
+ }
76
+ )
77
+ .command(
78
+ "compatibility",
79
+ "set the compatible WHMCS versions in the Marketplace",
80
+ () => {},
81
+ function () {
82
+ updateCompatibility({}, context).then((r) => {
83
+ console.log(r === false ? "Failed" : "Successful");
84
+ });
31
85
  }
32
- publish({}, context).then(r => {
33
- console.log(r === false ? 'Failed' : 'Successful')
34
- })
35
- })
36
- .command('sync', 'adds missing versions to the WHMCS Marketplace', () => {}, function () {
37
- syncVersions({}, context).then(r => {
38
- console.log(r === false ? 'Failed' : 'Successful')
39
- })
40
- })
41
- .command('del [ver]', 'deletes the specified version from the WHMCS Marketplace', (yargs) => {
42
- yargs.positional('ver', {
43
- type: 'string',
44
- demandOption: true,
45
- describe: 'the version to delete'
46
- })
47
- }, function (argv) {
48
- context.version = argv.ver
49
- delVersion({}, context).then(r => {
50
- console.log(r === false ? 'Failed' : 'Successful')
51
- })
52
- })
53
- .command('compatibility', 'set the compatible WHMCS versions in the Marketplace', () => {}, function () {
54
- updateCompatibility({}, context).then(r => {
55
- console.log(r === false ? 'Failed' : 'Successful')
56
- })
57
- })
58
- .help()
59
- .argv
86
+ )
87
+ .help().argv;
package/.eslintignore DELETED
@@ -1,3 +0,0 @@
1
- coverage
2
- node_modules
3
- .nyc_output