dev-dep-tool
Advanced tools
Comparing version 0.3.2 to 0.3.3-dev.0
@@ -1,36 +0,45 @@ | ||
var e=require("fs") | ||
var e=require("assert") | ||
var t=require("child_process") | ||
var i=require("fs") | ||
var r=require("dr-js/library/common/format") | ||
var i=require("dr-js/library/node/file/File") | ||
var s=require("dr-js/library/node/system/Run") | ||
var o=require("dr-js/library/node/file/Modify") | ||
var a=require("./__utils__") | ||
exports.initOutput=(async({fromRoot:t,fromOutput:r,deleteKeyList:s=["private","scripts","devDependencies"],copyPathList:a=["LICENSE","README.md"],logger:{padLog:p,log:u}})=>{p("reset output") | ||
await o.modify.delete(r()).catch(()=>{}) | ||
await(0,i.createDirectory)(r()) | ||
p("init output package.json") | ||
const n=require(t("package.json")) | ||
for(const e of s){delete n[e] | ||
u(`dropped key: ${e}`)}(0,e.writeFileSync)(r("package.json"),JSON.stringify(n)) | ||
p("init output file") | ||
for(const e of a){await o.modify.copy(t(e),r(e)) | ||
u(`copied: ${e}`)}return n}) | ||
exports.packOutput=(async({fromRoot:i,fromOutput:s,logger:{padLog:p,log:u}})=>{p("run pack output");(0,t.execSync)("npm pack",{cwd:s(),stdio:a.__VERBOSE__?"inherit":["ignore","ignore"],shell:!0}) | ||
u("move to root path") | ||
const n=require(s("package.json")) | ||
const c=`${n.name.replace(/^@/,"").replace("/","-")}-${n.version}.tgz` | ||
await o.modify.move(s(c),i(c)) | ||
p(`pack size: ${(0,r.binary)((0,e.statSync)(i(c)).size)}B`) | ||
return i(c)}) | ||
const p=e=>{const t=e.includes("publish-dev") | ||
var o=require("dr-js/library/node/file/File") | ||
var s=require("dr-js/library/node/file/Directory") | ||
var n=require("dr-js/library/node/system/Run") | ||
var a=require("dr-js/library/node/file/Modify") | ||
var p=require("./__utils__") | ||
exports.initOutput=(async({fromRoot:e,fromOutput:t,deleteKeyList:r=["private","scripts","devDependencies"],copyPathList:s=["LICENSE","README.md"],logger:{padLog:n,log:p}})=>{n("reset output") | ||
await a.modify.delete(t()).catch(()=>{}) | ||
await(0,o.createDirectory)(t()) | ||
n("init output package.json") | ||
const u=require(e("package.json")) | ||
for(const e of r){delete u[e] | ||
p(`dropped key: ${e}`)}(0,i.writeFileSync)(t("package.json"),JSON.stringify(u)) | ||
n("init output file") | ||
for(const r of s)if("README.md"===r){(0,i.writeFileSync)(t(r),(0,i.readFileSync)(e(r)).toString().split("[//]: # (NON_PACKAGE_CONTENT)")[0].trim()) | ||
p(`copied: ${r} (with NON_PACKAGE_CONTENT trimmed)`)}else{await a.modify.copy(e(r),t(r)) | ||
p(`copied: ${r}`)}return u}) | ||
exports.packOutput=(async({fromRoot:e,fromOutput:o,logger:{padLog:s,log:n}})=>{s("run pack output");(0,t.execSync)("npm pack",{cwd:o(),stdio:p.__VERBOSE__?"inherit":["ignore","ignore"],shell:!0}) | ||
n("move to root path") | ||
const u=require(o("package.json")) | ||
const c=`${u.name.replace(/^@/,"").replace("/","-")}-${u.version}.tgz` | ||
await a.modify.move(o(c),e(c)) | ||
s(`pack size: ${(0,r.binary)((0,i.statSync)(e(c)).size)}B`) | ||
return e(c)}) | ||
exports.verifyOutputBinVersion=(async({fromOutput:i,packageJSON:r,logger:{padLog:o,log:s}})=>{o("verify output bin working") | ||
const n=(0,t.execSync)("node bin --version",{cwd:i(),stdio:"pipe",shell:!0}).toString() | ||
s(`bin test output: ${n}`) | ||
for(const t of[r.name,r.version])(0,e.ok)(n.includes(t),`should output contain: ${t}`)}) | ||
exports.verifyNoGitignore=(async({path:t,logger:{padLog:i}})=>{i("verify no gitignore file left") | ||
const r=(await(0,s.getFileList)(t)).filter(e=>e.includes("gitignore"));(0,e.ok)(!r.length,`bad file:\n - ${r.join("\n - ")}`)}) | ||
const u=e=>{const t=e.includes("publish-dev") | ||
return{isPublish:t||e.includes("publish"),isDev:t}} | ||
exports.getPublishFlag=p | ||
const u=({isDev:e,version:t})=>e?c.test(t):n.test(t) | ||
exports.checkPublishVersion=u | ||
const n=/^\d+\.\d+\.\d+$/ | ||
const c=/^\d+\.\d+\.\d+-dev\.\d+$/ | ||
exports.publishOutput=(async({flagList:e,packageJSON:t,pathPackagePack:r,extraArgs:i=[],logger:o})=>{const{isPublish:a,isDev:n}=p(e) | ||
if(!a)return o.padLog("skipped publish output, no flag found") | ||
if(!r||!r.endsWith(".tgz"))throw new Error(`[publishOutput] invalid pathPackagePack: ${r}`) | ||
if(!u({isDev:n,version:t.version}))throw new Error(`[publishOutput] invalid version: ${t.version}, isDev: ${n}`) | ||
o.padLog(`${n?"publish-dev":"publish"}: ${t.version}`);(0,s.runSync)({command:"npm",argList:["publish",r,"--tag",n?"dev":"latest",...i]})}) | ||
exports.getPublishFlag=u | ||
const c=({isDev:e,version:t})=>e?d.test(t):l.test(t) | ||
exports.checkPublishVersion=c | ||
const l=/^\d+\.\d+\.\d+$/ | ||
const d=/^\d+\.\d+\.\d+-dev\.\d+$/ | ||
exports.publishOutput=(async({flagList:e,packageJSON:t,pathPackagePack:i,extraArgs:r=[],logger:o})=>{const{isPublish:s,isDev:a}=u(e) | ||
if(!s)return o.padLog("skipped publish output, no flag found") | ||
if(!i||!i.endsWith(".tgz"))throw new Error(`[publishOutput] invalid pathPackagePack: ${i}`) | ||
if(!c({isDev:a,version:t.version}))throw new Error(`[publishOutput] invalid version: ${t.version}, isDev: ${a}`) | ||
o.padLog(`${a?"publish-dev":"publish"}: ${t.version}`);(0,n.runSync)({command:"npm",argList:["publish",i,"--tag",a?"dev":"latest",...r]})}) |
@@ -5,22 +5,28 @@ var e=require("path") | ||
var o=require("dr-js/library/common/compare") | ||
var i=require("dr-js/library/common/mutable/Object") | ||
var s=require("dr-js/library/node/file/File") | ||
exports.createExportParser=(({babylonPluginList:a,parserPluginList:n=a,logger:c})=>{let p={} | ||
var a=require("dr-js/library/common/mutable/Object") | ||
var i=require("dr-js/library/node/file/File") | ||
var s=require("dr-js/library/node/file/Directory") | ||
const c=({babylonPluginList:s,parserPluginList:c=s,logger:n})=>{let p={} | ||
const l=e=>{const r=e.join("/") | ||
p[r]||(p[r]={routeList:e,directoryList:[],fileList:[]}) | ||
return p[r]} | ||
return{parseExport:async o=>{const i=await(0,s.getPathStat)(o) | ||
const a=o.split(e.sep) | ||
const p=a.pop() | ||
if(i.isDirectory()){c.devLog(`[directory] ${o}`) | ||
l(a).directoryList.push(p)}else if(i.isFile()&&p.endsWith(".js")){const e=((e,r,o)=>{const i=(0,t.parse)(e,{sourceFilename:r,sourceType:"module",plugins:o||["objectRestSpread","classProperties","exportDefaultFrom","exportNamespaceFrom","jsx"]}).program.body.filter(({type:e})=>"ExportNamedDeclaration"===e) | ||
return[].concat(...i.map(({specifiers:e,declaration:r})=>r?r.declarations?r.declarations.map(({id:{name:e}})=>e):[r.id.name]:e.map(({exported:{name:e}})=>e)))})((0,r.readFileSync)(o,{encoding:"utf8"}),o,n) | ||
c.devLog(`[file] ${o}`) | ||
return{parseExport:async o=>{const a=await(0,i.getPathStat)(o) | ||
const s=o.split(e.sep) | ||
const p=s.pop() | ||
if(a.isDirectory()){n.devLog(`[directory] ${o}`) | ||
l(s).directoryList.push(p)}else if(a.isFile()&&p.endsWith(".js")){const e=((e,r,o)=>{const a=(0,t.parse)(e,{sourceFilename:r,sourceType:"module",plugins:o||["objectRestSpread","classProperties","exportDefaultFrom","exportNamespaceFrom","jsx"]}).program.body.filter(({type:e})=>"ExportNamedDeclaration"===e) | ||
return[].concat(...a.map(({specifiers:e,declaration:r})=>r?r.declarations?r.declarations.map(({id:{name:e}})=>e):[r.id.name]:e.map(({exported:{name:e}})=>e)))})((0,r.readFileSync)(o,{encoding:"utf8"}),o,c) | ||
n.devLog(`[file] ${o}`) | ||
if(!e.length)return | ||
l(a).fileList.push({name:p.slice(0,-3),exportList:e}) | ||
c.devLog(` export [${e.length}]: ${e.join(", ")}`)}else c.devLog(`[skipped] ${o} (${(0,s.getPathTypeFromStat)(i)})`)},getSourceRouteMap:()=>{const e=(e=>{Object.values(e).forEach(({routeList:e,directoryList:r,fileList:t})=>{r.sort(o.compareString) | ||
l(s).fileList.push({name:p.slice(0,-3),exportList:e}) | ||
n.devLog(` export [${e.length}]: ${e.join(", ")}`)}else n.devLog(`[skipped] ${o} (${(0,i.getPathTypeFromStat)(a)})`)},getSourceRouteMap:()=>{const e=(e=>{Object.values(e).forEach(({routeList:e,directoryList:r,fileList:t})=>{r.sort(o.compareString) | ||
t.sort(({name:e},{name:r})=>(0,o.compareString)(e,r)) | ||
t.forEach(({exportList:e})=>e.sort(o.compareString))});(0,i.objectSortKey)(e) | ||
t.forEach(({exportList:e})=>e.sort(o.compareString))});(0,a.objectSortKey)(e) | ||
return e})(p) | ||
p={} | ||
return e}}}) | ||
return e}}} | ||
exports.createExportParser=c | ||
exports.collectSourceRouteMap=(async({pathRootList:e=[],pathInfoFilter:r=(e=>!0),logger:t})=>{const{parseExport:o,getSourceRouteMap:a}=c({logger:t}) | ||
const i=e=>r(e)&&o(e.path) | ||
for(const r of e)await(0,s.walkDirectoryInfoTree)(await(0,s.getDirectoryInfoTree)(r),i) | ||
return a()}) |
var e=require("path") | ||
var r=require("dr-js/library/node/file/function") | ||
var t=require("./generateInfo") | ||
const o=e=>`📄 [${e.replace(/_/g,"\\_")}](${e})` | ||
exports.renderMarkdownFileLink=o | ||
exports.renderMarkdownExportPath=(({exportInfoMap:n,rootPath:s})=>Object.entries(n).reduce((n,[p,a])=>{a[t.EXPORT_LIST_KEY]&&n.push(`+ ${o(`${(0,r.toPosixPath)((0,e.relative)(s,p))}.js`)}`,` - ${a[t.EXPORT_LIST_KEY].map(e=>`\`${e}\``).join(", ")}`) | ||
return n},[])) | ||
const n=({exportInfo:e,routeList:r})=>Object.entries(e).reduce((e,[o,s])=>{if(o===t.HOIST_LIST_KEY);else if(o===t.EXPORT_LIST_KEY||o===t.EXPORT_HOIST_LIST_KEY)e.push(`- ${s.map(e=>`\`${e}\``).join(", ")}`) | ||
else{const t=n({exportInfo:s,routeList:[...r,o]}) | ||
t.length&&e.push(`- **${o}**`,...t.map(e=>` ${e}`))}return e},[]) | ||
exports.renderMarkdownExportTree=n | ||
var o=require("./generateInfo") | ||
exports.getMarkdownHeaderLink=(e=>`[${e}](#${e.trim().toLowerCase().replace(/[^\w\- ]+/g,"").replace(/\s/g,"-").replace(/-+$/,"")})`) | ||
const t=e=>e.replace(/_/g,"\\_") | ||
exports.escapeMarkdownLink=t | ||
const n=e=>`📄 [${t(e)}](${e})` | ||
exports.renderMarkdownFileLink=n | ||
exports.renderMarkdownDirectoryLink=(e=>`📁 [${t(e).replace(/\/*$/,"/")}](${e})`) | ||
exports.renderMarkdownExportPath=(({exportInfoMap:t,rootPath:a})=>Object.entries(t).reduce((t,[p,s])=>{s[o.EXPORT_LIST_KEY]&&t.push(`+ ${n(`${(0,r.toPosixPath)((0,e.relative)(a,p))}.js`)}`,` - ${s[o.EXPORT_LIST_KEY].map(e=>`\`${e}\``).join(", ")}`) | ||
return t},[])) | ||
const a=({exportInfo:e,routeList:r})=>Object.entries(e).reduce((e,[t,n])=>{if(t===o.HOIST_LIST_KEY);else if(t===o.EXPORT_LIST_KEY||t===o.EXPORT_HOIST_LIST_KEY)e.push(`- ${n.map(e=>`\`${e}\``).join(", ")}`) | ||
else{const o=a({exportInfo:n,routeList:[...r,t]}) | ||
o.length&&e.push(`- **${t}**`,...o.map(e=>` ${e}`))}return e},[]) | ||
exports.renderMarkdownExportTree=a |
@@ -1,30 +0,39 @@ | ||
var e=require("fs") | ||
var t=function(e){return e&&e.__esModule?e:{default:e}}(require("webpack")) | ||
var r=require("dr-js/library/common/format") | ||
var e=require("path") | ||
var t=require("fs") | ||
var r=function(e){return e&&e.__esModule?e:{default:e}}(require("webpack")) | ||
var o=require("dr-js/library/common/format") | ||
var i=require("dr-js/library/node/file/File") | ||
var a=require("dr-js/library/node/system/ExitListener") | ||
var i=require("./__utils__") | ||
const o=(e,t)=>(r,a)=>{if(r)return e(r) | ||
if(a.hasErrors()||a.hasWarnings()){const{errors:t=[],warnings:r=[]}=a.toJson() | ||
var n=require("./__utils__") | ||
const s=(e,t)=>(r,o)=>{if(r)return e(r) | ||
if(o.hasErrors()||o.hasWarnings()){const{errors:t=[],warnings:r=[]}=o.toJson() | ||
t.forEach(e=>console.error(e)) | ||
r.forEach(e=>console.warn(e)) | ||
if(a.hasErrors())return e(new Error("webpack stats Error"))}t(a)} | ||
const n=(...e)=>e.filter(Boolean).join(",") | ||
exports.compileWithWebpack=(async({config:s,isWatch:c,profileOutput:u,logger:l})=>{const{log:p}=l | ||
if(u){c&&console.warn("[watch] warning: skipped generate profileOutput") | ||
s.profile=!0}const d=(0,t.default)(s) | ||
const f=((e,{padLog:t,log:a})=>{const o=({compilation:{assets:o={},chunks:s=[]},startTime:c,endTime:u})=>{c&&u&&t(`[${e?"watch":"compile"}] time: ${(0,r.time)(u-c)}`) | ||
const l=[] | ||
Object.entries(o).forEach(([e,t])=>l.push(["asset",e,`${(0,r.binary)(t.size())}B`,n(t.emitted&&"emitted")])) | ||
i.__VERBOSE__&&s.forEach(e=>l.push(["chunk",e.name||e.id,`${(0,r.binary)(e.modulesSize())}B`,n(e.canBeInitial()&&"initial",e.hasRuntime()&&"entry",e.rendered&&"rendered")])) | ||
a(`output:\n ${(0,r.padTable)({table:l,padFuncList:["L","R","R","L"],cellPad:" | ",rowPad:"\n "})}`)} | ||
return e=>{if(e.compilation)return o(e) | ||
if(e.stats)return e.stats.map(o) | ||
if(o.hasErrors())return e(new Error("webpack stats Error"))}t(o)} | ||
const c=(...e)=>e.filter(Boolean).join(",") | ||
exports.compileWithWebpack=(async({config:e,isWatch:i,profileOutput:l,logger:u})=>{const{log:p}=u | ||
if(l){i&&console.warn("[watch] warning: skipped generate profileOutput") | ||
e.profile=!0}const d=(0,r.default)(e) | ||
const f=((e,{padLog:t,log:r})=>{const i=({compilation:{assets:i={},chunks:a=[]},startTime:s,endTime:l})=>{s&&l&&t(`[${e?"watch":"compile"}] time: ${(0,o.time)(l-s)}`) | ||
const u=[] | ||
Object.entries(i).forEach(([e,t])=>u.push(["asset",e,`${(0,o.binary)(t.size())}B`,c(t.emitted&&"emitted")])) | ||
n.__VERBOSE__&&a.forEach(e=>u.push(["chunk",e.name||e.id,`${(0,o.binary)(e.modulesSize())}B`,c(e.canBeInitial()&&"initial",e.hasRuntime()&&"entry",e.rendered&&"rendered")])) | ||
r(`output:\n ${(0,o.padTable)({table:u,padFuncList:["L","R","R","L"],cellPad:" | ",rowPad:"\n "})}`)} | ||
return e=>{if(e.compilation)return i(e) | ||
if(e.stats)return e.stats.map(i) | ||
console.warn("[getLogStats] unexpected statData",e) | ||
throw new Error("[getLogStats] unexpected statData")}})(c,l) | ||
if(!c){p("[compile] start") | ||
const t=await new Promise((e,t)=>d.run(o(t,e))) | ||
f(t) | ||
u&&(0,e.writeFileSync)(u,JSON.stringify(t.toJson())) | ||
u&&p(`[compile] generated profileOutput at: ${u}`) | ||
return t}p("[watch] start") | ||
d.watch({aggregateTimeout:300,poll:void 0},o(e=>p(`error: ${e}`),f));(0,a.addExitListenerSync)(e=>p(`[watch] exit with state: ${JSON.stringify(e)}`))}) | ||
throw new Error("[getLogStats] unexpected statData")}})(i,u) | ||
if(!i){p("[compile] start") | ||
const e=await new Promise((e,t)=>d.run(s(t,e))) | ||
f(e) | ||
l&&(0,t.writeFileSync)(l,JSON.stringify(e.toJson())) | ||
l&&p(`[compile] generated profileOutput at: ${l}`) | ||
return e}p("[watch] start") | ||
d.watch({aggregateTimeout:512,poll:void 0},s(e=>p(`error: ${e}`),f));(0,a.addExitListenerSync)(e=>p(`[watch] exit with state: ${JSON.stringify(e)}`))}) | ||
exports.commonFlag=(async({argvFlag:t,fromRoot:r,logger:{log:o}})=>{const a=t("development","production")||"production" | ||
const n=Boolean(t("watch")) | ||
const s="production"===a | ||
const c=t("profile")?r(".temp-gitignore/profile-stat.json"):null | ||
c&&await(0,i.createDirectory)((0,e.dirname)(c)) | ||
o(`webpack flag: ${JSON.stringify({mode:a,isWatch:n,isProduction:s,profileOutput:c},null," ")}`) | ||
return{mode:a,isWatch:n,isProduction:s,profileOutput:c}}) |
@@ -1,1 +0,1 @@ | ||
{"name":"dev-dep-tool","version":"0.3.2","author":"dr-js","license":"MIT","description":"Provide common package devDependencies","keywords":["Dr","Dr-js","JavaScript"],"repository":"github:dr-js/dev-dep","bin":"bin/index.js","engines":{"node":"^8.11 || ^9.11 || >=10.9","npm":">=6"},"dependencies":{"dr-js":"^0.16.2 || ^0.16.3-dev.0"},"sideEffects":false} | ||
{"name":"dev-dep-tool","version":"0.3.3-dev.0","author":"dr-js","license":"MIT","description":"Provide common package devDependencies","keywords":["Dr","Dr-js","JavaScript"],"repository":"github:dr-js/dev-dep","bin":"bin/index.js","engines":{"node":"^8.11 || ^9.11 || >=10.9","npm":">=6"},"dependencies":{"dr-js":"^0.16.2 || ^0.16.3-dev.0"},"sideEffects":false} |
@@ -10,9 +10,2 @@ # dev-dep-tool | ||
- [![i:p-b]][l:p-b] | ||
- [![i:p-br]][l:p-br] | ||
- [![i:p-w]][l:p-w] | ||
- [![i:p-wr]][l:p-wr] | ||
- [![i:p-wrp]][l:p-wrp] | ||
- [![i:p-wrsc]][l:p-wrsc] | ||
[i:npm]: https://img.shields.io/npm/v/dev-dep-tool.svg?colorB=blue | ||
@@ -24,15 +17,2 @@ [i:npm-dev]: https://img.shields.io/npm/v/dev-dep-tool/dev.svg | ||
[i:lint]: https://img.shields.io/badge/code_style-standard-yellow.svg | ||
[l:lint]: https://standardjs.com | ||
[i:p-b]: https://img.shields.io/badge/dev--dep-babel-yellow.svg | ||
[l:p-b]: https://www.npmjs.com/package/dev-dep-babel | ||
[i:p-br]: https://img.shields.io/badge/dev--dep-babel--react-yellow.svg | ||
[l:p-br]: https://www.npmjs.com/package/dev-dep-babel-react | ||
[i:p-w]: https://img.shields.io/badge/dev--dep-web-blue.svg | ||
[l:p-w]: https://www.npmjs.com/package/dev-dep-web | ||
[i:p-wr]: https://img.shields.io/badge/dev--dep-web--react-blue.svg | ||
[l:p-wr]: https://www.npmjs.com/package/dev-dep-web-react | ||
[i:p-wrp]: https://img.shields.io/badge/dev--dep-web--react--postcss-blue.svg | ||
[l:p-wrp]: https://www.npmjs.com/package/dev-dep-web-react-postcss | ||
[i:p-wrsc]: https://img.shields.io/badge/dev--dep-web--react--styled--components-blue.svg | ||
[l:p-wrsc]: https://www.npmjs.com/package/dev-dep-web-react-styled-components | ||
[l:lint]: https://standardjs.com |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
23796
371
16