@tkskto/vue-component-analyzer
Advanced tools
Comparing version 0.2.1 to 0.3.0
# Changelog | ||
## 0.3.0 | ||
### Updates | ||
- \#75 add silent mode | ||
### Bug Fixes | ||
- \#73 fix a bug in file import process. | ||
- \#74 fix a bug in client JavaScript logic. | ||
### Chores | ||
- \#72 update `ws` 7.4.4 to 7.4.6 | ||
## 0.2.1 | ||
@@ -4,0 +19,0 @@ |
@@ -193,11 +193,10 @@ class MyCustomEvent { | ||
renderMetaData() { | ||
let metaString = ''; | ||
const fileSize = (this._fileSize / 1024).toFixed(2); | ||
const lastUpdated = this._lastModifiedTime === 0 ? 0 : this._model.getHowManyDaysAgo(new Date(this._lastModifiedTime)); | ||
if (fileSize && lastUpdated) { | ||
return ` | ||
<span class="file__meta meta__fileSize">FileSize: ${fileSize} KB</span> | ||
<span class="file__meta meta__lastUpdated">LastUpdated: ${lastUpdated} days ago</span> | ||
`; | ||
if (fileSize) { | ||
metaString += `<span class="file__meta meta__fileSize">FileSize: ${fileSize} KB</span>`; | ||
} | ||
return ''; | ||
metaString += `<span class="file__meta meta__lastUpdated">LastUpdated: ${lastUpdated} days ago</span>`; | ||
return metaString; | ||
} | ||
@@ -322,3 +321,2 @@ renderDetails() { | ||
this._app.innerHTML = html + text; | ||
console.log('rendered'); | ||
} | ||
@@ -325,0 +323,0 @@ } |
/*! | ||
@tkskto/vue-component-analyzer v0.2.1 | ||
@tkskto/vue-component-analyzer v0.3.0 | ||
https://github.com/tkskto/ | ||
@@ -13,48 +13,105 @@ Released under the MIT License. | ||
vue-eslint-parser -- 7.6.0 | ||
ws -- 7.4.4 | ||
ws -- 7.4.6 | ||
*/ | ||
'use strict'; | ||
var fs_1 = require('fs'); | ||
var path_1 = require('path'); | ||
var vue_eslint_parser_1 = require('vue-eslint-parser'); | ||
var http = require('http'); | ||
var require$$0 = require('ejs'); | ||
var express = require('express'); | ||
var webSocket = require('ws'); | ||
var opener = require('opener'); | ||
var mkdirp = require('mkdirp'); | ||
var require$$3 = require('commander'); | ||
var globby = require('globby'); | ||
var require$$1 = require('fs'); | ||
var require$$2 = require('path'); | ||
var require$$0 = require('vue-eslint-parser'); | ||
var require$$1$1 = require('http'); | ||
var require$$2$1 = require('ejs'); | ||
var require$$3 = require('express'); | ||
var require$$4 = require('ws'); | ||
var require$$5 = require('opener'); | ||
var require$$6 = require('mkdirp'); | ||
var require$$7 = require('commander'); | ||
var require$$8 = require('globby'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var fs_1__default = /*#__PURE__*/_interopDefaultLegacy(fs_1); | ||
var path_1__default = /*#__PURE__*/_interopDefaultLegacy(path_1); | ||
var vue_eslint_parser_1__default = /*#__PURE__*/_interopDefaultLegacy(vue_eslint_parser_1); | ||
var http__default = /*#__PURE__*/_interopDefaultLegacy(http); | ||
var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1); | ||
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2); | ||
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); | ||
var express__default = /*#__PURE__*/_interopDefaultLegacy(express); | ||
var webSocket__default = /*#__PURE__*/_interopDefaultLegacy(webSocket); | ||
var opener__default = /*#__PURE__*/_interopDefaultLegacy(opener); | ||
var mkdirp__default = /*#__PURE__*/_interopDefaultLegacy(mkdirp); | ||
var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1); | ||
var require$$2__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$2$1); | ||
var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3); | ||
var globby__default = /*#__PURE__*/_interopDefaultLegacy(globby); | ||
var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4); | ||
var require$$5__default = /*#__PURE__*/_interopDefaultLegacy(require$$5); | ||
var require$$6__default = /*#__PURE__*/_interopDefaultLegacy(require$$6); | ||
var require$$7__default = /*#__PURE__*/_interopDefaultLegacy(require$$7); | ||
var require$$8__default = /*#__PURE__*/_interopDefaultLegacy(require$$8); | ||
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; | ||
function createCommonjsModule(fn) { | ||
var module = { exports: {} }; | ||
return fn(module, module.exports), module.exports; | ||
var _temp = {}; | ||
var Constant = {}; | ||
Object.defineProperty(Constant, "__esModule", { value: true }); | ||
Constant.FORMAT = void 0; | ||
Constant.FORMAT = { | ||
BROWSER: 'browser', | ||
JSON: 'json', | ||
BOTH: 'both', | ||
}; | ||
var Model$1 = {}; | ||
Object.defineProperty(Model$1, "__esModule", { value: true }); | ||
Model$1.model = void 0; | ||
const Constant_1$1 = Constant; | ||
class Model { | ||
constructor() { | ||
this._resourceRoot = 'src'; | ||
this._format = Constant_1$1.FORMAT.BROWSER; | ||
this._outDirectory = 'out'; | ||
this._port = '8888'; | ||
this._isSilentMode = false; | ||
} | ||
get resourceRoot() { | ||
return this._resourceRoot; | ||
} | ||
set resourceRoot(value) { | ||
this._resourceRoot = value; | ||
} | ||
get format() { | ||
return this._format; | ||
} | ||
set format(value) { | ||
this._format = value; | ||
} | ||
get outDirectory() { | ||
return this._outDirectory; | ||
} | ||
set outDirectory(value) { | ||
this._outDirectory = value; | ||
} | ||
get port() { | ||
return this._port; | ||
} | ||
set port(value) { | ||
this._port = value; | ||
} | ||
get isSilentMode() { | ||
return this._isSilentMode; | ||
} | ||
set isSilentMode(value) { | ||
this._isSilentMode = value; | ||
} | ||
} | ||
Model$1.model = new Model(); | ||
var utils = createCommonjsModule(function (module, exports) { | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveFile = exports.getDeclarationSyntax = exports.getImportDeclaration = void 0; | ||
const { existsSync } = fs_1__default['default']; | ||
const { resolve, extname, dirname } = path_1__default['default']; | ||
var Analyzer$2 = {}; | ||
var utils = {}; | ||
Object.defineProperty(utils, "__esModule", { value: true }); | ||
utils.resolveFile = utils.getDeclarationSyntax = utils.getImportDeclaration = void 0; | ||
const Model_1$2 = Model$1; | ||
const { existsSync } = require$$1__default['default']; | ||
const { resolve, extname, dirname } = require$$2__default['default']; | ||
const getImportDeclaration = (nodeArr) => { | ||
return nodeArr.filter((node) => node.type === 'ImportDeclaration'); | ||
}; | ||
exports.getImportDeclaration = getImportDeclaration; | ||
utils.getImportDeclaration = getImportDeclaration; | ||
const getDeclarationSyntax = (tokens, targetKeyName) => { | ||
@@ -96,3 +153,3 @@ let isTargetToken = false; | ||
}; | ||
exports.getDeclarationSyntax = getDeclarationSyntax; | ||
utils.getDeclarationSyntax = getDeclarationSyntax; | ||
const resolveFile = (_filename, _currentFileName) => { | ||
@@ -107,3 +164,3 @@ let filename = ''; | ||
else if (_filename.startsWith('~') || _filename.startsWith('@')) { | ||
filename = _filename.replace('~', '.').replace('@', '.'); | ||
filename = _filename.replace('~', Model_1$2.model.resourceRoot).replace('@', Model_1$2.model.resourceRoot); | ||
} | ||
@@ -125,9 +182,9 @@ if (filename) { | ||
}; | ||
exports.resolveFile = resolveFile; | ||
}); | ||
utils.resolveFile = resolveFile; | ||
var FileCounter_1 = createCommonjsModule(function (module, exports) { | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.FileCounter = void 0; | ||
var FileCounter$1 = {}; | ||
Object.defineProperty(FileCounter$1, "__esModule", { value: true }); | ||
FileCounter$1.FileCounter = void 0; | ||
const path_1$1 = require$$2__default['default']; | ||
class FileCounter { | ||
@@ -138,3 +195,3 @@ constructor() { | ||
add(_filename) { | ||
const filename = path_1__default['default'].resolve(_filename); | ||
const filename = path_1$1.resolve(_filename); | ||
if (Object.prototype.hasOwnProperty.call(this._count, filename)) { | ||
@@ -151,10 +208,10 @@ this._count[filename]++; | ||
} | ||
exports.FileCounter = FileCounter; | ||
}); | ||
FileCounter$1.FileCounter = FileCounter; | ||
var VueComponent_1 = createCommonjsModule(function (module, exports) { | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.VueComponent = void 0; | ||
var VueComponent$1 = {}; | ||
Object.defineProperty(VueComponent$1, "__esModule", { value: true }); | ||
VueComponent$1.VueComponent = void 0; | ||
const vue_eslint_parser_1 = require$$0__default['default']; | ||
const utils_1$1 = utils; | ||
const parserOption = { | ||
@@ -177,3 +234,3 @@ ecmaVersion: 2018, | ||
try { | ||
const propsDeclaration = JSON.parse(utils.getDeclarationSyntax(tokens, 'props')); | ||
const propsDeclaration = JSON.parse(utils_1$1.getDeclarationSyntax(tokens, 'props')); | ||
if (propsDeclaration && propsDeclaration.props) { | ||
@@ -198,7 +255,7 @@ return propsDeclaration.props; | ||
const scriptString = ((_c = scriptBody === null || scriptBody === void 0 ? void 0 : scriptBody.groups) === null || _c === void 0 ? void 0 : _c.script) || ''; | ||
const esLintProgram = vue_eslint_parser_1__default['default'].parse(scriptString, parserOption); | ||
const esLintProgram = vue_eslint_parser_1.parse(scriptString, parserOption); | ||
if (esLintProgram.tokens) { | ||
this._props = this.getProps(esLintProgram.tokens); | ||
} | ||
this._importDeclaration = utils.getImportDeclaration(esLintProgram.body); | ||
this._importDeclaration = utils_1$1.getImportDeclaration(esLintProgram.body); | ||
} | ||
@@ -221,25 +278,26 @@ addChildReport(report) { | ||
} | ||
exports.VueComponent = VueComponent; | ||
}); | ||
VueComponent$1.VueComponent = VueComponent; | ||
var Analyzer_1 = createCommonjsModule(function (module, exports) { | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Analyzer = void 0; | ||
Object.defineProperty(Analyzer$2, "__esModule", { value: true }); | ||
Analyzer$2.Analyzer = void 0; | ||
const utils_1 = utils; | ||
const fs_1 = require$$1__default['default']; | ||
const path_1 = require$$2__default['default']; | ||
const FileCounter_1 = FileCounter$1; | ||
const VueComponent_1 = VueComponent$1; | ||
const Model_1$1 = Model$1; | ||
const cwd = process.cwd(); | ||
class Analyzer { | ||
class Analyzer$1 { | ||
constructor() { | ||
this.getImportDeclarationTree = (fileName, parents, isTest = false) => { | ||
const filename = path_1__default['default'].resolve(cwd, fileName); | ||
const filename = path_1.resolve(cwd, fileName); | ||
const shortFilename = filename.replace(cwd, ''); | ||
const stat = fs_1__default['default'].statSync(filename); | ||
const stat = fs_1.statSync(filename); | ||
const ancestorList = parents.concat(); | ||
ancestorList.push(fileName); | ||
console.log(`read ${filename}.`); | ||
if (!Model_1$1.model.isSilentMode) { | ||
console.log(`read ${filename}`); | ||
} | ||
this._counter.add(shortFilename); | ||
if (path_1__default['default'].extname(filename) === '' || path_1__default['default'].extname(filename) !== '.vue') { | ||
if (path_1.extname(filename) === '' || path_1.extname(filename) !== '.vue') { | ||
return { | ||
@@ -253,3 +311,3 @@ name: shortFilename, | ||
} | ||
const contents = fs_1__default['default'].readFileSync(filename, 'utf-8'); | ||
const contents = fs_1.readFileSync(filename, 'utf-8'); | ||
const component = new VueComponent_1.VueComponent(shortFilename, contents, stat); | ||
@@ -260,3 +318,3 @@ try { | ||
if (source) { | ||
const nextFilename = utils.resolveFile(source, filename); | ||
const nextFilename = utils_1.resolveFile(source, filename); | ||
if (nextFilename) { | ||
@@ -285,19 +343,23 @@ if (parents.includes(nextFilename)) { | ||
} | ||
exports.Analyzer = Analyzer; | ||
}); | ||
Analyzer$2.Analyzer = Analyzer$1; | ||
const { renderFile } = require$$0__default['default']; | ||
var server = {}; | ||
const projectRoot = path_1__default['default'].resolve(__dirname, '..'); | ||
Object.defineProperty(server, "__esModule", { value: true }); | ||
const path$1 = require$$2__default['default']; | ||
const http = require$$1__default$1['default']; | ||
const { renderFile } = require$$2__default$1['default']; | ||
const express = require$$3__default['default']; | ||
const webSocket = require$$4__default['default']; | ||
const opener = require$$5__default['default']; | ||
const projectRoot = path$1.resolve(__dirname, '..'); | ||
const startServer$1 = (port, json) => { | ||
const HOST = '127.0.0.1'; | ||
const app = express__default['default'](); | ||
const app = express(); | ||
app.engine('ejs', renderFile); | ||
app.set('view engine', 'ejs'); | ||
app.set('views', `${projectRoot}/views`); | ||
app.use(express__default['default'].static(`${projectRoot}/`)); | ||
const server = http__default['default'].createServer(app); | ||
const wss = new webSocket__default['default'].Server({ | ||
app.use(express.static(`${projectRoot}/`)); | ||
const server = http.createServer(app); | ||
const wss = new webSocket.Server({ | ||
server, | ||
@@ -325,3 +387,3 @@ }); | ||
console.log('Use \'Ctrl+C\' to close it'); | ||
opener__default['default'](url); | ||
opener(url); | ||
wss.on('connection', (ws) => { | ||
@@ -337,8 +399,4 @@ wss.clients.forEach((client) => { | ||
}; | ||
var startServer_1 = startServer$1; | ||
server.startServer = startServer$1; | ||
var server = /*#__PURE__*/Object.defineProperty({ | ||
startServer: startServer_1 | ||
}, '__esModule', {value: true}); | ||
var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
@@ -353,16 +411,14 @@ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
}; | ||
const { Analyzer } = Analyzer_1; | ||
Object.defineProperty(_temp, "__esModule", { value: true }); | ||
const Constant_1 = Constant; | ||
const Model_1 = Model$1; | ||
const { Analyzer } = Analyzer$2; | ||
const { startServer } = server; | ||
const { writeFileSync } = fs_1__default['default']; | ||
const { program } = require$$3__default['default']; | ||
const FORMAT = { | ||
BROWSER: 'browser', | ||
JSON: 'json', | ||
BOTH: 'both', | ||
}; | ||
const { writeFileSync } = require$$1__default['default']; | ||
const path = require$$2__default['default']; | ||
const mkdirp = require$$6__default['default']; | ||
const { program } = require$$7__default['default']; | ||
const globby = require$$8__default['default']; | ||
function writeFileExtra(filename, data) { | ||
mkdirp__default['default'](path_1__default['default'].dirname(filename)).then(() => { | ||
mkdirp(path.dirname(filename)).then(() => { | ||
writeFileSync(filename, data); | ||
@@ -376,15 +432,21 @@ }).catch((err) => { | ||
(() => __awaiter(void 0, void 0, void 0, function* () { | ||
console.log('start analyzing.'); | ||
try { | ||
program.option('--dir [dir]', 'root directory of src.', 'src'); | ||
program.option('-f, --format [type]', 'Add the specified type of report [browser, json or both]', FORMAT.BROWSER); | ||
program.option('-f, --format [type]', 'Add the specified type of report [browser, json or both]', Constant_1.FORMAT.BROWSER); | ||
program.option('-o, --out [dir]', 'output directory (enable with setting --format option to "json" or "both")', 'out'); | ||
program.option('-p, --port [number]', 'select a port number for the local server', '8888'); | ||
program.option('--silent', 'do not show logs with silent flag'); | ||
program.parse(process.argv); | ||
const argv = program.opts(); | ||
if (argv.format !== FORMAT.BROWSER && argv.format !== FORMAT.JSON && argv.format !== FORMAT.BOTH) { | ||
Model_1.model.resourceRoot = argv.dir; | ||
Model_1.model.format = argv.format; | ||
Model_1.model.outDirectory = argv.out; | ||
Model_1.model.port = argv.port; | ||
Model_1.model.isSilentMode = argv.silent || false; | ||
if (argv.format !== Constant_1.FORMAT.BROWSER && argv.format !== Constant_1.FORMAT.JSON && argv.format !== Constant_1.FORMAT.BOTH) { | ||
console.error(`not support ${argv.format} format.`); | ||
} | ||
console.log('start analyzing.'); | ||
const analyzer = new Analyzer(); | ||
const entries = yield globby__default['default']([argv.dir], { | ||
const entries = yield globby([argv.dir], { | ||
expandDirectories: { | ||
@@ -404,11 +466,11 @@ extensions: ['vue'], | ||
}; | ||
if (argv.format === FORMAT.BOTH) { | ||
if (argv.format === Constant_1.FORMAT.BOTH) { | ||
startServer(argv.port, result); | ||
writeFileExtra(path_1__default['default'].resolve(process.cwd(), `${argv.out}/result.json`), JSON.stringify(result, null, 4)); | ||
writeFileExtra(path.resolve(process.cwd(), `${argv.out}/result.json`), JSON.stringify(result, null, 4)); | ||
} | ||
else if (argv.format === FORMAT.BROWSER) { | ||
else if (argv.format === Constant_1.FORMAT.BROWSER) { | ||
startServer(argv.port, result); | ||
} | ||
else if (argv.format === FORMAT.JSON) { | ||
writeFileExtra(path_1__default['default'].resolve(process.cwd(), `${argv.out}/result.json`), JSON.stringify(result, null, 4)); | ||
else if (argv.format === Constant_1.FORMAT.JSON) { | ||
writeFileExtra(path.resolve(process.cwd(), `${argv.out}/result.json`), JSON.stringify(result, null, 4)); | ||
} | ||
@@ -422,6 +484,2 @@ console.log('finished analyzing.'); | ||
var _temp = { | ||
}; | ||
module.exports = _temp; |
{ | ||
"name": "@tkskto/vue-component-analyzer", | ||
"version": "0.2.1", | ||
"version": "0.3.0", | ||
"description": "Analyze dependency tree for Vue.js SFC (Single File Component)", | ||
@@ -55,10 +55,10 @@ "main": "dist/index.js", | ||
"vue-eslint-parser": "7.6.0", | ||
"ws": "7.4.4" | ||
"ws": "7.4.6" | ||
}, | ||
"devDependencies": { | ||
"@mitsue/eslint-config": "3.0.0", | ||
"@rollup/plugin-commonjs": "17.1.0", | ||
"@mitsue/eslint-config": "4.0.1", | ||
"@rollup/plugin-commonjs": "19.0.0", | ||
"@rollup/plugin-json": "4.1.0", | ||
"@rollup/plugin-node-resolve": "11.2.0", | ||
"@rollup/plugin-typescript": "8.2.0", | ||
"@rollup/plugin-node-resolve": "13.0.0", | ||
"@rollup/plugin-typescript": "8.2.1", | ||
"@types/express": "4.17.11", | ||
@@ -68,14 +68,14 @@ "@types/mocha": "8.2.2", | ||
"@types/opener": "1.4.0", | ||
"@types/ws": "7.4.0", | ||
"@typescript-eslint/eslint-plugin": "4.18.0", | ||
"@typescript-eslint/parser": "4.18.0", | ||
"eslint": "7.22.0", | ||
"@types/ws": "7.4.4", | ||
"@typescript-eslint/eslint-plugin": "4.25.0", | ||
"@typescript-eslint/parser": "4.25.0", | ||
"eslint": "7.27.0", | ||
"husky": "4.3.8", | ||
"lint-staged": "10.5.4", | ||
"mocha": "8.3.2", | ||
"lint-staged": "11.0.0", | ||
"mocha": "8.4.0", | ||
"nyc": "15.1.0", | ||
"rollup": "2.42.1", | ||
"rollup": "2.50.1", | ||
"rollup-plugin-license": "2.3.0", | ||
"ts-mocha": "8.0.0", | ||
"typescript": "4.2.3" | ||
"typescript": "4.3.2" | ||
}, | ||
@@ -82,0 +82,0 @@ "lint-staged": { |
Sorry, the diff of this file is not supported yet
44551
1170