Skip to content

Instantly share code, notes, and snippets.

@craigphicks
Last active August 16, 2019 22:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save craigphicks/f8681cb33b4e2b7acc74df05914b6207 to your computer and use it in GitHub Desktop.
Save craigphicks/f8681cb33b4e2b7acc74df05914b6207 to your computer and use it in GitHub Desktop.
Create a non-singleton class from a singleton - yargs

A singleton makes sense when it prevent multiple access to a resource than must not be accessed in that way. But sometimes a singleton design is used because it is sufficient for expected usage. But that may block expanded usage unecessarily.

ES6 dynamic import can import a singelton module into a closure allowing a singleton to become a non-singleton class. See the file yargs-class.mjs below.

The result of test-yargs0class.mjs -

argv[0]= {
  "_": [
    "goo"
  ],
  "car": "CAR",
  "r": "CAR",
  "caz": "CAZ",
  "z": "CAZ",
  "$0": "src/test-yargs-obj.mjs"
}
argv[1]= {
  "_": [
    "goo"
  ],
  "car": "BAR",
  "r": "BAR",
  "caz": "BAZ",
  "z": "BAZ",
  "$0": "src/test-yargs-obj.mjs"
}
'use strict'
import createYargsClass from './yargs-class.mjs'
(async function () {
let myArgv = [
["goo", "--car", "CAR", "--caz", "CAZ"],
["goo", "--car", "BAR", "--caz", "BAZ"]
]
var yac = []
yac[0] = await createYargsClass(myArgv[0], process.cwd())
yac[1] = await createYargsClass(myArgv[1], process.cwd())
var argv=[]
for (let i = 0; i < 2; i++) {
argv[i] = yac[i].yargs.command("goo", "GOO", {
car: {
description: ' car arg ',
alias: 'r',
type: 'string'
},
caz: {
description: ' caz arg ',
alias: 'z',
type: 'string'
},
})
.argv
}
console.log("argv[0]=", JSON.stringify(argv[0],0,2))
console.log("argv[1]=", JSON.stringify(argv[1],0,2))
})()
'use strict'
class YargsClass {
constructor(yargs){
this.yargs=yargs
}
}
export default async function createYargsClass(targetArgv, cwd){
var yargsModule = await import('../node_modules/yargs/yargs.js')
var yargs = yargsModule.default(targetArgv, cwd)
return new YargsClass(yargs)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment