Giter Club home page Giter Club logo

gluegun's Issues

Branding Header

For printing the header in the CLI, if we're in brand mode, we will do the first of this list:

  • execute the default function in brand/header.js
  • render brand/header.txt as straight up text
  • render nothing

We only show the gluegun header if we're not in branded mode.

Continuous Integration

Will need to setup CI to protect this code base from myself.

I've only used semaphore, but I'm open to anything really.

Create a contributing document

globals

brew install nodejs
npm i -g n
n 7.2
npm i -g yarn

monorepo setup

git clone [email protected]/skellock/gluegun
cd gluegun
npm i

gluegun setup

cd packages/gluegun
yarn
yarn test
yarn run lint
yarn run watch

adding a feature

git branch fun
# furious typing
git commit -m "Adds fun"
# submit a PR with an awesome gif
# win

Selectively show help depending on user input

When invoking gluegun, it currently shows all commands. This could quickly spiral. Let's switch to this:

gluegun

# show a list of namespaces
gluegun something

# show a list of commands in the something namespace

Support argument naming

@GantMan pointed out that commander has a dsl that might work well for us.

We could use that in the front matter for the *.js files by including it:

@command name <thing> [otherThing]

Also, lets promote & clobber onto the context.parameters object the things the user names (e.g. thing and otherThing).

Sporkable templates

Allow templates to be pseudo-forked.

Provide some kind of directory we can copy the *.njk files to. When we then run a generate() call, if the template has been overridden, we'll call that one instead.

This configuration will be handled in the app's configuration file.

Allow a silent mode config setting

Inside the app .toml file, let's add:

[defaults]
silent = true

When true (default is false), it will suppress all print commands triggered through the print extension.

Add testing to the CLI.

There's no tests in the CLI. It kinda just grew and grew until it started doing important things. Now it needs tests.

Coveralls

Let's setup coveralls. I know my tests coverage is slipping, but having an automated score will motivate me.

Clean Runtime and CLI

These are the gateway to the system. And they've become a bit messy now. Let's clean these up so people wanting to hack at the core aren't confused.

Load plugin with matching support.

Currently we have

  .load('one_plugin_dir') // loads a directory as plugin
  .loadAll('many_plugins_dir') // loads the immediate sub-directories as plugins

But what we could use this as well:

  .loadAll('node_modules', 'ignite-*') // same, but only ones that match a jetpack pattern

Consider renaming namespace to plugin name.

Plugins have unique names. I call these namespaces. But there's nothing magical or special about them. I'm thinking for simplicity sake, change the name from "namespace" to "name".

Namespace seems to imply there's stuff to learn. But there isn't. It's just a name.

Then the description of the command line goes:

<cliname> <pluginname> <commandname>

Loading extensions dynamically

We need a way to load the extensions dynamically from plugins. The sample way we do it with commands, but this time from an extensions directory.

Support default commands

Currently a command can't live on it's own. It needs to live under a namespace.

With spork, i made that name space. And since namespaces aren't commands, you can't just type it. So I created default as the command.

So now it's:

gluegun spork default

Which is lame.

I want:

gluegun spork.

So we need to build the concept of a default command. default.js would be fine, but I think index.js is a little nicer because of the convention on the web and React Native.

Restricted plugin namespaces

Prevent these namespaces from being defined in 3rd party plugins:

  • spork
  • project
  • gluegun
  • default

If we see those namespaces, we should just go into a badnamespace error state on the plugin.

Add a debug flag

When a plugin, extension, or command is in a bad state, there's no way of knowing. Let's provide a --debug flag people can run which will emit the errors somehow.

Repair default plugin

This seems to be broken after a batch of refactoring. The tests didn't seem to catch this.

Make askToOverwrite more generic

Let's make this askToOverwrite prompt be more like askYesOrNo or something like that.

We can pass in { message: 'something', yes: 'Yup', no: 'Newp' } or something like that.

@GantMan helped me clarify what I was after. ๐ŸŒฎ

Use apisauce for http

@GantMan convinced me to use apisauce over axios because of the response type opinions. I agree i guess.

This will be the extension that lives under context.http.

Default commands have unpruned params

As violent delights have violent ends, so do default commands have unpruned params
-- Dolores

running ignite add ui gives parameters.first the value of "default"
image

This looks like some leakage.

๐Ÿ‘™ Bikini Bonus:
Would be helpful to have parameters.last - which is how I plan on fixing this for futureproof ways. But I'm not a fan of that method.

Hidden plugins

We would like support for hidden plugins & commands.

This is useful if CLIs want to have their own plugins in the gluegun plugin format, but prevent the end user from having to know of them.

You would still be able to call these from runtime.run({}).

I recommend adding an object as a 2nd parameter to:

.load('dir', { hidden: true })
.loadDefault('dir', { hidden: true })
.loadAll('dir', { hidden: true })

Problem is, loadAll already has an optional 2nd parameter for matching sub-directories, so let's upgrade that to:

.loadAll('dir', { hidden: true, matching: 'ignite-*' })`

This would be a breaking change, but now is the time!

Default namespace

Allow a command line option to pass to the CLI which specifies a default namespace.

gluegun --gluegun-namespace ignite

This namespace then gets priority over all others. In fact, it will be checked even before the other namespace names.

This allows people to brand their own cli like: alias ignite="gluegun --gluegun-namespace ignite" or even in their package.json bin scripts.

Add string extension

I'd like to see a string extension. These would be the things that are automatically placed on the filters list in nunjucks. Let's grow this slowly and start with the cases that we already put into the generate extension.

They're useful to many people, so let's hang them on context.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.