Fileable Component: File
Fileable template component used to create files
;const template = <File name='readme.md'># This is a sample file</File>
If a file may contains other files, content will be concatinated.
const template = <File name='readme.md'> # This is a sample file <File>'\n'## This is more content</File> <File>'\n'## As is this'\n'</File> ## This is the end</File>
Attributs
name
Name of the file.
const template = <File name="empty_file"/>;
If no name is passed, a hash (SHA_256) of the content will be used.
extension
Extension appended to name. Particularly useful when name is autogenerated.
const template = <File extension='.js'>...javascript content</File>;
src
File content in src attribute will be appended to child content.
const template = <File src='https://www.google.com'>Google's Home Page:</File>;
src_context
Relative sources are, by default, resolved relative to the template location.
const template = <File src='./sibbling-of-template'/>;
Setting src_content to 'File.SRC_CONTEXT_FOLDER' will resolve the file relative to the destination folder.
const template = <File src='./sibbling-of-template' src_context=FileSRC_CONTEXT_FOLDER/>;
You may also set src_context to a string.
const template = <File src='./bashrc' src_context='~'/>;
Defaults to 'File.SRC_CONTEXT_TEMPLATE'
const template = <File src='./sibbling-of-template' src_context=FileSRC_CONTEXT_TEMPLATE/>;
cmd
Command will be run and content in src attribute will be appended to child content.
const template = <File cmd='date'>Content created at:</File>;
If cmd starts with '|', child content will be piped through command
const template = <File name='.cheesefile' cmd='|grep Cheese'>`Lines containing "Cheese:": - Feta Cheese - Broccoli - American Cheese - Ham - Bread - Cheesebread`</File>;
mode
Set the mode of a file.
const template = <File name='helloworld' mode=0o777>#!/usr/bin/env nodeconsole;</File>;
sgmldoctype
Add a doctype to the beginning of an SGML file.
const template = <File name='index.html' sgmldoctype='html'>`<html> <head></head> <body></body></html>`</File>;
transform
Content will be transformed via given function
const addBeginning = `// Begin$`; const template = <File transform=addBeginning>// Middle</File>;
raw
Content is not transformed into a buffer.
const template = <File name='main.js' transform=JSON > <File raw> name: 'Amy' age: 25 </File></File>;
ps
When used within other files, the ps attribute adds content to files after any transfomations from (cmd, transform) are applied.
const addEnd = `// ^End`; const template = <File transform=addBeginning> // Middle <File ps/> // Post End </File></File>;
content
...
const template = <File name='main.js' content='hello world'/>;
clone
When used within other files, the clone command takes the content of the file up to that point and clones it to another file.
const template = <File name='main.js'> Content <File clone /></File>;
If a placeholder string is passed as the clone attribute, it will appear in place of that file within the parent.
const template = <File name='main.js'> Content <File clone='// filed cloned at hash' /></File>;
Combine other attributes to create "sidecar" files
const template = <File src='../src/index.js' name='index.js' cmd='|./minify-file'> <File clone='//src-map: index.map.js' ps name='index.map.js' cmd='|./produce-file-map'></File></File>;
map
Chlldren will be transformed via given function.
const incrementAge = {personage += 1; return person;};const template = <File name='main.js' map=incrementAge> <File raw> name='Amy' age:25 <File/> <File raw> name='Bob' age:30 <File/> <File raw> name='Carl' age:35 <File/></File>;
react_renderer
By default, React's HTML tags can be used to produce a file's content.
const template = <File name="index.html"> <!doctype html> <html> <body> Hello World <script src='index.js'></script> </body> </html></File>;
Adding the "react_renderer" allows you to customize how react componets are rendered.
;const template = <File name="index.png" react_renderer= > <html> <style> ` * { color: green; }` </style> <body> Hello World <script src='index.js'></script> </body> </html></File>;
Rendering new lines
The folowing template:
const template = <File>123</File>
renders as:
123
To add a new line in react, there are at least 3 options.
Brackets and backtics
The folowing template:
const template = <File>`123`</File>
renders as:
123
Newline character within brackets
The folowing template:
const template = <File>1'\n'2'\n'3</File>
renders as:
123
Sub-Files with new-line characters
The folowing template:
const template = <File>1<File end />2<File end />3</File>
renders as:
123
API
Table of contents
Todo
- remove unnecessary dependencies
- add proper typescript typeings