From dff89e0567a8ca6cd7ca6fd831d5066f18c4ae53 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 16 Oct 2020 15:21:56 -0400 Subject: [PATCH] added auto-generated changelog --- CHANGELOG.md | 64 ++++++++++++++++++++++++++++++++ README.md | 1 + changelog.js | 49 ++++++++++++++++++++++++ package-lock.json | 94 ++++++++++++++++++++++++++++++++++++++++------- package.json | 9 ++++- 5 files changed, 201 insertions(+), 16 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 changelog.js diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..2a2ab1e7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,64 @@ + +# @vladmandic/human + +Version: **0.3.4** +Description: **human: 3D Face Detection, Iris Tracking and Age & Gender Prediction** + +Author: **Vladimir Mandic ** +License: **MIT** +Repository: **** + +## Changelog + +### **HEAD -> main** 2020/10/16 mandic00@live.com + +### **0.3.4** 2020/10/16 mandic00@live.com +- added camera selection +- optimized blazeface anchors +- added error handling + +### **0.3.3** 2020/10/15 mandic00@live.com +- added blazeface back and front models + +### **0.3.2** 2020/10/15 mandic00@live.com +- reduced web worker latency +- added debugging and versioning +- optimized demos and added scoped runs +- added multi backend support + +### **0.3.1** 2020/10/14 mandic00@live.com + +### **0.2.10** 2020/10/14 mandic00@live.com +- added emotion backend +- module parametrization and performance monitoring +- implemented multi-hand support +- fixed documentation typos + +### **0.2.9** 2020/10/13 mandic00@live.com +- added node build and demo + +### **0.2.8** 2020/10/13 mandic00@live.com +- added example image + +### **0.2.7** 2020/10/13 mandic00@live.com +- new examples + +### **0.2.6** 2020/10/13 mandic00@live.com +- enable all models by default + +### **0.2.5** 2020/10/12 mandic00@live.com +- fixed memory leak + +### **0.2.4** 2020/10/12 mandic00@live.com +- removed extra files + +### **0.2.3** 2020/10/12 mandic00@live.com + +### **0.2.2** 2020/10/12 mandic00@live.com + +### **tag: 1.0** 2020/10/12 mandic00@live.com + +### **0.2.1** 2020/10/12 mandic00@live.com +- added sample image +- initial public commit +- initial commit diff --git a/README.md b/README.md index 9a097e9e..b15f6f0f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - [**Code Repository**](https://github.com/vladmandic/human) - [**NPM Package**](https://www.npmjs.com/package/@vladmandic/human) - [**Issues Tracker**](https://github.com/vladmandic/human/issues) +- [**Change Log**](./CHANGELOG.md) - [**Live Demo**](https://vladmandic.github.io/human/demo/demo-esm.html) Compatible with Browser, WebWorker and NodeJS execution! diff --git a/changelog.js b/changelog.js new file mode 100644 index 00000000..e017a85a --- /dev/null +++ b/changelog.js @@ -0,0 +1,49 @@ +const fs = require('fs'); +const path = require('path'); +const dayjs = require('dayjs'); +const simpleGit = require('simple-git/promise'); +const logger = require('@vladmandic/pilogger'); +const app = require('./package.json'); + +const git = simpleGit(); + +let text = ` +# ${app.name} + +Version: **${app.version}** +Description: **${app.description}** + +Author: **${app.author}** +License: **${app.license}** +Repository: **<${app.repository.url}>** + +## Changelog +`; + +async function update(f) { + const all = await git.log(); + const log = all.all.sort((a, b) => (new Date(b.date).getTime() - new Date(a.date).getTime())); + + let previous = ''; + for (const l of log) { + const msg = l.message.toLowerCase(); + if ((l.refs !== '') || msg.match(/^[0-9].[0-9].[0-9]/)) { + const dt = dayjs(l.date).format('YYYY/MM/DD'); + const ver = msg.match(/[0-9].[0-9].[0-9]/) ? msg : l.refs; + text += `\n### **${ver}** ${dt} ${l.author_email}\n`; + } else if ((msg.length > 2) && !msg.startsWith('update') && (previous !== msg)) { + previous = msg; + text += `- ${msg}\n`; + } + } + + const name = path.join(__dirname, f); + fs.writeFileSync(name, text); + logger.state('Change log updated:', name); +} + +exports.update = update; + +if (!module.parent) { + update('CHANGELOG.md'); +} diff --git a/package-lock.json b/package-lock.json index 4a6601bf..83c8b757 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,6 +117,29 @@ } } }, + "@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "requires": { + "debug": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" + }, "@tensorflow/tfjs": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.6.0.tgz", @@ -270,6 +293,15 @@ "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==", "dev": true }, + "@vladmandic/pilogger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@vladmandic/pilogger/-/pilogger-0.2.6.tgz", + "integrity": "sha512-mYkH5icTwXYEi+tfMYmhbXRsNAisAKitcADYci46hxa9Xnha+6fXIFzqDs5aMA5SrOee+pZX853aeEaxCFFCRw==", + "requires": { + "chalk": "^4.1.0", + "dayjs": "^1.8.35" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -324,7 +356,8 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -460,7 +493,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -476,6 +508,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.2.tgz", "integrity": "sha512-lhpKkuUj67j5JgZIPZxLe7nSa4MQoojzRVWQyzMqBp2hBg6gwRjUDAwC1YDeBaC3APDBKNnjWbv2mlDF4XgOSA==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -557,6 +590,11 @@ "which": "^2.0.1" } }, + "dayjs": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.3.tgz", + "integrity": "sha512-V+1SyIvkS+HmNbN1G7A9+ERbFTV9KTXu6Oor98v2xHmzzpp52OIJhQuJSTywWuBY5pyAEmlwbCi1Me87n/SLOw==" + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -617,7 +655,8 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "enquirer": { "version": "2.3.6", @@ -692,7 +731,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", @@ -1197,7 +1237,8 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "glob": { "version": "7.1.6", @@ -1255,8 +1296,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-symbols": { "version": "1.0.1", @@ -1375,7 +1415,8 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.1", @@ -1570,8 +1611,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "natural-compare": { "version": "1.4.0", @@ -2008,7 +2048,8 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "resolve": { "version": "1.17.0", @@ -2091,6 +2132,26 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "simple-git": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.21.0.tgz", + "integrity": "sha512-rohCHmEjD/ESXFLxF4bVeqgdb4Awc65ZyyuCKl3f7BvgMbZOBa/Ye3HN/GFnvruiUOAWWNupxhz3Rz5/3vJLTg==", + "requires": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + } + } + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -2176,6 +2237,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2257,6 +2319,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -2277,7 +2340,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -2511,6 +2573,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2535,7 +2598,8 @@ "y18n": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.2.tgz", - "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==" + "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==", + "dev": true }, "yallist": { "version": "3.1.1", @@ -2547,6 +2611,7 @@ "version": "16.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -2560,7 +2625,8 @@ "yargs-parser": { "version": "20.2.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.2.tgz", - "integrity": "sha512-XmrpXaTl6noDsf1dKpBuUNCOHqjs0g3jRMXf/ztRxdOmb+er8kE5z5b55Lz3p5u2T8KJ59ENBnASS8/iapVJ5g==" + "integrity": "sha512-XmrpXaTl6noDsf1dKpBuUNCOHqjs0g3jRMXf/ztRxdOmb+er8kE5z5b55Lz3p5u2T8KJ59ENBnASS8/iapVJ5g==", + "dev": true } } } diff --git a/package.json b/package.json index eee53f29..1334bbb9 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,13 @@ "type": "git", "url": "git+https://github.com/vladmandic/human.git" }, - "dependencies": {}, + "dependencies": { + }, "peerDependencies": {}, "devDependencies": { + "@vladmandic/pilogger": "^0.2.6", + "dayjs": "^1.9.3", + "simple-git": "^2.21.0", "@tensorflow/tfjs": "^2.6.0", "@tensorflow/tfjs-node": "^2.6.0", "esbuild": "^0.7.15", @@ -42,7 +46,8 @@ "build-node-bundle": "esbuild --bundle --platform=node --sourcemap --target=esnext --format=cjs --minify --outfile=dist/human.cjs src/index.js", "build-node-nobundle": "esbuild --bundle --platform=node --sourcemap --target=esnext --format=cjs --external:@tensorflow --outfile=dist/human-nobundle.cjs src/index.js", "build": "rimraf dist/* && npm run build-iife && npm run build-esm-bundle && npm run build-esm-nobundle && npm run build-node-bundle && npm run build-node-nobundle && ls -l dist/", - "update": "npm update --depth 20 && npm dedupe && npm prune && npm audit" + "update": "npm update --depth 20 && npm dedupe && npm prune && npm audit", + "changelog": "node changelog.js" }, "keywords": [ "tensorflowjs",