Add more package types, allow for node snippets

This commit is contained in:
atomiks
2018-01-02 01:02:57 +11:00
parent b7b35c4af4
commit 5dce7c771c
5 changed files with 1113 additions and 80 deletions

1
.gitignore vendored
View File

@ -3,5 +3,4 @@ currentSnippet\.js
*.md.temp.js *.md.temp.js
.idea .idea
test.sh test.sh
dist/
test/ test/

1060
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,23 @@
{ {
"dependencies": { "dependencies": {
"babel-preset-env": "^1.6.1",
"chalk": "^2.3.0",
"fs-extra": "^4.0.2", "fs-extra": "^4.0.2",
"html-minifier": "^3.5.7", "html-minifier": "^3.5.7",
"markdown-it": "^8.4.0", "markdown-it": "^8.4.0",
"node-sass": "^4.7.2", "node-sass": "^4.7.2",
"prettier": "^1.9.2", "prettier": "^1.9.2",
"rollup": "^0.53.2",
"rollup-plugin-babel": "^3.0.3",
"rollup-plugin-babel-minify": "^3.1.2",
"semistandard": "^11.0.0", "semistandard": "^11.0.0",
"chalk": "^2.3.0",
"tape": "^4.8.0" "tape": "^4.8.0"
}, },
"name": "30-seconds-of-code", "name": "30-seconds-of-code",
"description": "A collection of useful JavaScript snippets.", "description": "A collection of useful JavaScript snippets.",
"version": "1.0.0", "version": "0.0.0",
"main": "index.js", "main": "dist/_30s.js",
"module": "dist/_30s.esm.js",
"scripts": { "scripts": {
"builder": "node ./scripts/build.js", "builder": "node ./scripts/build.js",
"linter": "node ./scripts/lint.js", "linter": "node ./scripts/lint.js",
@ -25,7 +30,11 @@
"type": "git", "type": "git",
"url": "git+https://github.com/Chalarangelo/30-seconds-of-code.git" "url": "git+https://github.com/Chalarangelo/30-seconds-of-code.git"
}, },
"keywords": ["javascript", "snippets", "list"], "keywords": [
"javascript",
"snippets",
"list"
],
"author": "Chalarangelo (chalarangelo@gmail.com)", "author": "Chalarangelo (chalarangelo@gmail.com)",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {

View File

@ -1,5 +1,5 @@
/* /*
Builds the `Snippet` module. Builds the `_30s` module.
*/ */
const fs = require('fs-extra'); const fs = require('fs-extra');
const cp = require('child_process'); const cp = require('child_process');
@ -27,7 +27,10 @@ try {
let exportStr = 'export default {'; let exportStr = 'export default {';
for (const snippet of snippets) { for (const snippet of snippets) {
const snippetData = fs.readFileSync(path.join(SNIPPETS_PATH, snippet), 'utf8'); const snippetData = fs.readFileSync(
path.join(SNIPPETS_PATH, snippet),
'utf8'
);
const snippetName = snippet.replace('.md', ''); const snippetName = snippet.replace('.md', '');
const isNodeSnippet = tagDatabase const isNodeSnippet = tagDatabase
@ -35,7 +38,6 @@ try {
.split('\n')[0] .split('\n')[0]
.includes('node'); .includes('node');
if (!isNodeSnippet) {
const importData = fs.readFileSync(IMPORTS); const importData = fs.readFileSync(IMPORTS);
fs.writeFileSync( fs.writeFileSync(
IMPORTS, IMPORTS,
@ -43,19 +45,23 @@ try {
); );
exportStr += `${snippetName},`; exportStr += `${snippetName},`;
fs.writeFileSync( const code = snippetData.match(codeRE)[1].replace('\n', '');
`${TEMP_PATH}/${snippetName}.js`,
'export ' + snippetData.match(codeRE)[1].replace('\n', '') const toWrite = isNodeSnippet
); ? `${code
} .replace('const ' + snippetName, 'export const ' + snippetName)
// Prevents errors from being thrown in browser environment
.replace('require(', 'typeof require !== "undefined" && require(')}`
: `export ${code}`;
fs.writeFileSync(`${TEMP_PATH}/${snippetName}.js`, toWrite);
} }
exportStr += '}'; exportStr += '}';
const importData = fs.readFileSync(IMPORTS); fs.appendFileSync(IMPORTS, `\n${exportStr}`);
fs.writeFileSync(IMPORTS, importData + `\n${exportStr}`);
cp.execSync('rollup -c scripts/rollup.js'); cp.execSync('node ./scripts/rollup.js');
fs.removeSync(TEMP_PATH); fs.removeSync(TEMP_PATH);
fs.unlink(IMPORTS); fs.unlink(IMPORTS);

View File

@ -1,19 +1,58 @@
import babel from 'rollup-plugin-babel'; const fs = require('fs-extra');
import minify from 'rollup-plugin-babel-minify'; const { rollup } = require('rollup');
const babel = require('rollup-plugin-babel');
const minify = require('rollup-plugin-babel-minify');
export default { const INPUT_FILE = './imports.js';
input: './imports.js', const MODULE_NAME = '_30s';
output: { const DIST = './dist';
file: './module/TSOC.js',
format: 'umd', if (!fs.existsSync(DIST)) fs.mkdirSync(DIST);
name: 'TSOC'
}, const es5 = () => babel({ presets: [['env', { modules: false }]] });
externalHelpers: true, const min = () => minify({ comments: false });
plugins: [
babel({ (async () => {
presets: ['es2015-rollup'], const bundle = await rollup({ input: INPUT_FILE });
plugins: ['transform-object-assign', 'transform-object-rest-spread'] const bundleES5 = await rollup({ input: INPUT_FILE, plugins: [es5()] });
}), const bundleMin = await rollup({ input: INPUT_FILE, plugins: [min()] });
minify({ comments: false }) const bundleES5Min = await rollup({
] input: INPUT_FILE,
}; plugins: [es5(), min()]
});
// UMD ES2017
await bundle.write({
file: `${DIST}/${MODULE_NAME}.js`,
name: MODULE_NAME,
format: 'umd'
});
// UMD ES2017 minified
await bundleMin.write({
file: `${DIST}/${MODULE_NAME}.min.js`,
name: MODULE_NAME,
format: 'umd'
});
// UMD ES5
await bundleES5.write({
file: `${DIST}/${MODULE_NAME}.es5.js`,
name: MODULE_NAME,
format: 'umd'
});
// UMD ES5 min
await bundleES5Min.write({
file: `${DIST}/${MODULE_NAME}.es5.min.js`,
name: MODULE_NAME,
format: 'umd'
});
// ESM ES2017
await bundle.write({
file: `${DIST}/${MODULE_NAME}.esm.js`,
name: MODULE_NAME,
format: 'es'
});
})();