From 93c39981f909c3450ca9399c2da5b9d5c4459052 Mon Sep 17 00:00:00 2001 From: Roman Axelrod Date: Sun, 2 Oct 2022 09:41:31 +0300 Subject: [PATCH] - Generate technical repo files. #Create Block from registry. --- create-block.js | 83 +++++++++++ generators/block/index.js | 95 ++++++++----- package-lock.json | 280 +++++++++++++++++++++++++++++++++++++- package.json | 5 + 4 files changed, 425 insertions(+), 38 deletions(-) create mode 100644 create-block.js diff --git a/create-block.js b/create-block.js new file mode 100644 index 0000000..6586c60 --- /dev/null +++ b/create-block.js @@ -0,0 +1,83 @@ +import {Command} from 'commander'; +import path from 'path'; +import fetch from "node-fetch"; +import fs from "fs"; +import http from "https"; +import unzipper from "unzipper"; +import {createTechnicalFiles, defaultGitRepo} from "./generators/block/index.js"; +import {fileURLToPath} from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + + +init(); + +function init() { + const program = new Command(); + + program + .name('create-block') + .description('AXE-WEB Platform Blocks'); + + program.command('pull') + .argument('', 'Provide a full name of required block, for example: @axe-web/hero-block') + .action(async (blockName, options) => { + console.log('Block to download:', blockName) + + await getBlockSourceFiles(blockName); + + + }); + + program.parse(); +} + +async function getBlockSourceFiles(blockName) { + const blocksRegistry = 'http://localhost:3020'; + + const queryString = new URLSearchParams(); + queryString.append('blockName', blockName); + + const response = await fetch(`${blocksRegistry}?${queryString.toString()}`); + const responseData = await response.json(); + if (!responseData) { + return; + } + + const zipFile = await downloadFile(responseData.downloadUrl, responseData.name); + + const file = await fs.createReadStream(zipFile) + .pipe(unzipper.Extract({path: `blocks/${responseData.name}/src`})) + .promise(); + + // Remove downloaded file. + try { + await fs.promises.access(zipFile, fs.constants.W_OK); + await fs.promises.unlink(zipFile); + } catch (e) { + console.log(e) + } + + await createTechnicalFiles({ + name: responseData.name, + blockFilename: responseData.name, + devToolSource: defaultGitRepo + }, __dirname); +} + +async function downloadFile(url, blockName) { + const file = fs.createWriteStream(blockName + '.zip'); + + return new Promise((resolve, reject) => { + const request = http.get(url, function (response) { + response.pipe(file); + + // after download completed close filestream + file.on("finish", () => { + file.close(); + resolve(`./${blockName}.zip`); + }); + }); + }) +} diff --git a/generators/block/index.js b/generators/block/index.js index 36691da..23a84e5 100644 --- a/generators/block/index.js +++ b/generators/block/index.js @@ -3,12 +3,16 @@ import Generator from "yeoman-generator"; import mkdirp from "mkdirp"; import {fileURLToPath} from 'url'; import {capitalize} from "../../helpers.js"; +import memFs from 'mem-fs'; +import editor from 'mem-fs-editor'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const baseDir = path.join(__dirname, '../../'); +export const defaultGitRepo = 'git+https://roman-axe-web@bitbucket.org/axeweb/create-block-dev-tool.git#master'; + export default class extends Generator { async prompting() { this.data = await this.prompt([ @@ -57,7 +61,7 @@ export default class extends Generator { type: 'input', name: 'devToolSource', message: 'DevTool Version/Source (master)', - default: 'git+https://roman-axe-web@bitbucket.org/axeweb/create-block-dev-tool.git#master' + default: defaultGitRepo } ]); } @@ -74,6 +78,20 @@ export default class extends Generator { const pathDist = path.join(baseDir, 'blocks', data.blockFilename); + this.fs.copyTpl( + this.templatePath('block.json'), + this.destinationPath(path.join(pathDist, 'block.json')), + data + ); + + this.fs.copyTpl( + this.templatePath('config/default.cjs'), + this.destinationPath(path.join(pathDist, 'config', 'default.cjs')), + data + ); + + + // SRC Template files this.fs.copyTpl( this.templatePath('src/template.template.hbs'), this.destinationPath(path.join(pathDist, 'src', data.blockFilename + '.template.hbs')), @@ -98,26 +116,10 @@ export default class extends Generator { data ); + // Design Directory mkdirp.sync(path.join(pathDist, 'design')); - this.fs.copyTpl( - this.templatePath('config/default.cjs'), - this.destinationPath(path.join(pathDist, 'config', 'default.cjs')), - data - ); - - this.fs.copyTpl( - this.templatePath('block.json'), - this.destinationPath(path.join(pathDist, 'block.json')), - data - ); - - this.fs.copyTpl( - this.templatePath('package.json'), - this.destinationPath(path.join(pathDist, 'package.json')), - data - ); - + // Data Files this.fs.copyTpl( this.templatePath('data/default.json'), this.destinationPath(path.join(pathDist, 'data', 'default.json')), @@ -130,22 +132,51 @@ export default class extends Generator { data ); - this.fs.copyTpl( - this.templatePath('README.md'), - this.destinationPath(path.join(pathDist, 'README.md')), - data - ); + // Technical Project files. + createTechnicalFiles(data, baseDir).then(); + + // this.fs.copyTpl( + // this.templatePath('package.json'), + // this.destinationPath(path.join(pathDist, 'package.json')), + // data + // ); + // + // this.fs.copyTpl( + // this.templatePath('README.md'), + // this.destinationPath(path.join(pathDist, 'README.md')), + // data + // ); + // + // this.fs.copyTpl( + // this.templatePath('.editorconfig'), + // this.destinationPath(path.join(pathDist, '.editorconfig')), + // data + // ); + // + // this.fs.copyTpl( + // this.templatePath('.gitignore'), + // this.destinationPath(path.join(pathDist, '.gitignore')), + // data + // ); + } +} - this.fs.copyTpl( - this.templatePath('.editorconfig'), - this.destinationPath(path.join(pathDist, '.editorconfig')), - data - ); +export async function createTechnicalFiles(data, baseDir) { + const pathDist = path.join(baseDir, `blocks/${data.name}`); + const generatorsPath = path.join(baseDir, 'generators/block/templates'); - this.fs.copyTpl( - this.templatePath('.gitignore'), - this.destinationPath(path.join(pathDist, '.gitignore')), + const store = memFs.create(); + const filesystem = editor.create(store); + + const files = ['package.json', 'README.md', '.editorconfig', '.gitignore']; + + for (let file of files) { + await filesystem.copyTplAsync( + `${generatorsPath}/${file}`, + `${pathDist}/${file}`, data ); } + + return filesystem.commit(); // Promise } diff --git a/package-lock.json b/package-lock.json index 6186415..a7deb80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@braintree/sanitize-url": "^6.0.0", "archiver": "^5.3.1", "browser-sync": "^2.27.9", + "commander": "^9.4.1", "config": "^3.3.7", "escape-html": "^1.0.3", "express": "^4.17.3", @@ -24,11 +25,14 @@ "gulp-sourcemaps": "^3.0.0", "gulp-uglify": "^3.0.2", "lodash-es": "^4.17.21", + "mem-fs": "^2.2.1", + "mem-fs-editor": "^9.5.0", "mkdirp": "^1.0.4", "node-fetch": "^3.2.10", "open": "^8.4.0", "sanitize-html": "^2.7.1", "sass": "^1.50.1", + "unzipper": "^0.10.11", "yeoman-environment": "^3.10.0", "yeoman-generator": "^5.6.1", "yo": "4.3.0" @@ -2156,6 +2160,14 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/bin-links": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", @@ -2323,6 +2335,18 @@ "node": ">=0.10.0" } }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2374,6 +2398,11 @@ "node": ">= 6" } }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -2692,6 +2721,22 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -2861,6 +2906,17 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3219,9 +3275,12 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "engines": { + "node": "^12.20.0 || >=14" + } }, "node_modules/common-ancestor-path": { "version": "1.0.1", @@ -3256,6 +3315,12 @@ "node": ">= 0.8" } }, + "node_modules/commoner/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/commoner/node_modules/glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -4132,6 +4197,14 @@ "node": ">=0.10.0" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -5550,6 +5623,42 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/fullname": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/fullname/-/fullname-4.0.1.tgz", @@ -8312,6 +8421,11 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -12760,6 +12874,11 @@ "node": ">=0.10.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -13402,6 +13521,11 @@ "node": ">= 0.10.0" } }, + "node_modules/stream-throttle/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -14263,6 +14387,14 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "engines": { + "node": "*" + } + }, "node_modules/treeverse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", @@ -14579,6 +14711,23 @@ "node": ">=4" } }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -17992,6 +18141,11 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, "bin-links": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", @@ -18123,6 +18277,15 @@ } } }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -18164,6 +18327,11 @@ } } }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, "body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -18409,6 +18577,16 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" + }, "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -18537,6 +18715,14 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -18814,9 +19000,9 @@ } }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" }, "common-ancestor-path": { "version": "1.0.1", @@ -18845,6 +19031,12 @@ "recast": "^0.11.17" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -19505,6 +19697,14 @@ "is-root": "^1.0.0" } }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + } + }, "duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -20634,6 +20834,35 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, "fullname": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/fullname/-/fullname-4.0.1.tgz", @@ -22729,6 +22958,11 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -26119,6 +26353,11 @@ } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -26624,6 +26863,13 @@ "requires": { "commander": "^2.2.0", "limiter": "^1.0.5" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } } }, "strict-uri-encode": { @@ -27281,6 +27527,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, "treeverse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", @@ -27513,6 +27764,23 @@ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==" }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", diff --git a/package.json b/package.json index eeb1f50..f515326 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "start": "component-dev", "dev": "NODE_ENV=development node server.js", "generate-block": "yo ./generators/block/index.js", + "create-block": "node ./create-block.js pull", "build": "rollup --config rollup.config.js", "build-platform": "NODE_ENV=development yo ./build.cjs", "build-platform-cli": "component-build", @@ -17,6 +18,7 @@ "@braintree/sanitize-url": "^6.0.0", "archiver": "^5.3.1", "browser-sync": "^2.27.9", + "commander": "^9.4.1", "config": "^3.3.7", "escape-html": "^1.0.3", "express": "^4.17.3", @@ -29,11 +31,14 @@ "gulp-sourcemaps": "^3.0.0", "gulp-uglify": "^3.0.2", "lodash-es": "^4.17.21", + "mem-fs": "^2.2.1", + "mem-fs-editor": "^9.5.0", "mkdirp": "^1.0.4", "node-fetch": "^3.2.10", "open": "^8.4.0", "sanitize-html": "^2.7.1", "sass": "^1.50.1", + "unzipper": "^0.10.11", "yeoman-environment": "^3.10.0", "yeoman-generator": "^5.6.1", "yo": "4.3.0"