brace-expander-js
v1.0.1
Published
Shell-style Brace Expansions performed by JavaScript.
Downloads
2
Readme
BraceExpander.js
About
A JavaScript-based implementation of Shell Brace Expansions because I couldn't find anything extant.
This takes something like /path/to/{foo,bar{a,b}}
and turns it into:
/path/to/foo
/path/to/bar/a
/path/to/bar/b
Usage
// "one-liner" version
var expansions = new BraceExpander('input_to_expand').getExpansions();
// "clean code" version
var Expanded = new BraceExpander('input_to_expand');
var expansions = Expanded.getExpansions();
var expansionsQuantity = Expanded.getExpansionsCount();
Quick Start
If you would just like to run this "real quick" to see how a particular expansion spring is going to be handled and/or just want to use this project with minimal setup, here is how to do accomplish that with minimal effort.
Short version (if you already know what you're doing):
- Simply "import" the
src/BraceExpander.js
file into your browser's DevTools Console and runnew BraceExpander('input_to_expand');
Long version (if that didn't make 100% sense):
- Open the "Console" portion of your browser's Developer Tools.
- Open
src/BraceExpander.js
from this repository and "run" that code in your Console (i.e. "copy & paste" and "hit enter").- Note: "running" this code won't give you any ineresting output since literally the only thing it does it create a prototype.
- Run
new BraceExpander('/path/to/{foo,bar}').getExpansions();
.- Note: You could also just follow the Usage instructions from this README and
console.log(expansions);
at the end, but honestly if you're reading a Quick Start then you probably want a one-liner.
- Note: You could also just follow the Usage instructions from this README and
Examples
Simple
No expansion
Input
/path/to/file
Output
/path/to/file
Improper expansion (most shells will error)
Input
/path/to/{file1}
Output
/path/to/file1
Simple expansion
Input
/path/to/{file1,file2}
Output
/path/to/file1
/path/to/file2
Simple expansion with subfolders
Input
/path/to/{dir1/file1,dir2/dir3/file2}
Output
/path/to/dir1/file1
/path/to/dir2/dir3/file2
Simple expansion with suffix
Input
/path/to/{dir1,dir2}/file1
Output
/path/to/dir1/file1
/path/to/dir2/file1
Simple expansion with blank and suffix
Input
/path/to/{dir1,}/file1
Output
/path/to/dir1/file1
/path/to/file1
Triple expansion
Input
/path/to/{file1,file2,dir1/file3}
Output
/path/to/file1
/path/to/file2
/path/to/dir1/file3
Triple expansion * quadruple expansion (with content between)
Input
/path/to/{file1,file2,file3}.{ext1,ext2,ext3,ext4}
Output
/path/to/file1.ext1
/path/to/file1.ext2
/path/to/file1.ext3
/path/to/file1.ext4
/path/to/file2.ext1
/path/to/file2.ext2
/path/to/file2.ext3
/path/to/file2.ext4
/path/to/file3.ext1
/path/to/file3.ext2
/path/to/file3.ext3
/path/to/file3.ext4
Simple expansion with nested triple expansion
Input
/path/to/{dir1,dir2/{file1,file2,file3}.txt}
Output
/path/to/dir1
/path/to/dir2/file1.txt
/path/to/dir2/file2.txt
/path/to/dir2/file3.txt
Advanced
Some fun
Input
/path/to/{dir1/{dir2,dir3/file1.{ext1,ext2},file2,file3,file4},{dir4,dir5,dir6/{,dir7}}/file5}
Human-readable Input
/path/to/{
dir1/{
dir2,
dir3/file1.{
ext1,
ext2
},
file2,
file3,
file4
},
{
dir4,
dir5,
dir6/{
dir7,
}
}/file5
}
Output
/path/to/dir1/dir2
/path/to/dir1/dir3/file1.ext1
/path/to/dir1/dir3/file1.ext2
/path/to/dir1/file2
/path/to/dir1/file3
/path/to/dir1/file4
/path/to/dir4/file5
/path/to/dir5/file5
/path/to/dir6/file5
/path/to/dir6/dir7/file5
Excerpt from the script for which this was created
Filesystem
/var/www/project
|-- app
| |-- code/local
| |-- MyNamespace
| |-- Module123
| |-- DifferentNamespace
| |-- Module123
|-- design/frontend/mytheme/default
| |-- template/feature
| |-- layout/feature.xml
|-- skin/frontend/mytheme
|-- feature.css
|-- js/feature.js
Input
/var/www/magento/{app/{code/local/{MyNamespace,DifferentNamespace}/Module123,design/frontend/mytheme/default/{template/feature,layout/feature.xml}},skin/frontend/mytheme/{feature.css,js/feature.js}}
Human-Readable
/var/www/magento/{
app/{
code/local/{
MyNamespace,
DifferentNamespace
}/Module123,
design/frontend/mytheme/default/{
template/feature,
layout/feature.xml
}
},
skin/frontend/mytheme/{
feature.css,
js/feature.js
}
}
Output
/var/www/magento/app/code/local/MyNamespace/Module123
/var/www/magento/app/code/local/DifferentNamespace/Module123
/var/www/magento/app/design/frontend/mytheme/default/template/feature
/var/www/magento/app/design/frontend/mytheme/default/layout/feature.xml
/var/www/magento/skin/frontend/mytheme/feature.css
/var/www/magento/skin/frontend/mytheme/js/feature.js