build-number-generator
Advanced tools
Comparing version 1.0.0 to 2.0.0
@@ -1,40 +0,31 @@ | ||
var __defProp = Object.defineProperty; | ||
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); | ||
var __export = (target, all) => { | ||
__markAsModule(target); | ||
for (var name in all) | ||
__defProp(target, name, {get: all[name], enumerable: true}); | ||
}; | ||
'use strict'; | ||
// lib/index.js | ||
__export(exports, { | ||
format: () => format_default, | ||
generate: () => generate_default, | ||
parse: () => parse_default, | ||
validate: () => validate_default | ||
}); | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
// lib/pad.js | ||
function pad2(value) { | ||
return value > 9 ? `${value}` : `0${value}`; | ||
function pad2 (value) { | ||
return value > 9 ? `${value}` : `0${value}` | ||
} | ||
function pad3(value) { | ||
return value > 99 ? `${value}` : value > 9 ? `0${value}` : `00${value}`; | ||
function pad3 (value) { | ||
/* c8 ignore next */ | ||
return value > 99 ? `${value}` : value > 9 ? `0${value}` : `00${value}` | ||
} | ||
// lib/generate.js | ||
function generateBuildNumber(options) { | ||
function generateBuildNumber (options) { | ||
let build = getBuildStamp(); | ||
options || (options = {}); | ||
if (typeof options === "string") { | ||
options = {version: options}; | ||
if (typeof options === 'string') { | ||
options = { version: options }; | ||
} | ||
const version = options.version; | ||
if (version) { | ||
const versionSeparator = options.versionSeparator || "."; | ||
const versionSeparator = options.versionSeparator || '.'; | ||
build = version.trim() + versionSeparator.trim() + build; | ||
} | ||
return build; | ||
return build | ||
} | ||
function getBuildStamp() { | ||
function getBuildStamp () { | ||
const now = new Date(); | ||
@@ -44,13 +35,14 @@ const year = now.getFullYear() % 100; | ||
const day = now.getDate(); | ||
// Count 2-minute intervals elapsed since midnight:(HH * 60 + MM) / 2 | ||
const counter = parseInt((now.getHours() * 60 + now.getMinutes()) / 2); | ||
return `${pad2(year)}${pad2(month)}${pad2(day)}${pad3(counter)}`; | ||
// Format the stamp as YYMMDDCCC | ||
return `${pad2(year)}${pad2(month)}${pad2(day)}${pad3(counter)}` | ||
} | ||
var generate_default = generateBuildNumber; | ||
// lib/split.js | ||
function splitBuildNumber(build) { | ||
function splitBuildNumber (build) { | ||
const parts = /(\d{2})(\d{2})(\d{2})(\d{3})$/.exec(build.trim()); | ||
if (!parts) { | ||
throw new Error('Build number has to end with "YYMMDDCCC".'); | ||
throw new Error('Build number has to end with "YYMMDDCCC".') | ||
} | ||
const year = +parts[1]; | ||
@@ -61,35 +53,35 @@ const month = +parts[2]; | ||
if (!(year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= 31)) { | ||
throw new Error("Build number has to contain numbers formatting a date."); | ||
throw new Error('Build number has to contain numbers formatting a date.') | ||
} | ||
return {year, month, day, counter}; | ||
return { year, month, day, counter } | ||
} | ||
var split_default = splitBuildNumber; | ||
// lib/validate.js | ||
function validateBuildNumber(build) { | ||
function validateBuildNumber (build) { | ||
try { | ||
split_default(build); | ||
return true; | ||
} catch (error) { | ||
return false; | ||
splitBuildNumber(build); | ||
return true | ||
} catch { | ||
return false | ||
} | ||
} | ||
var validate_default = validateBuildNumber; | ||
// lib/parse.js | ||
function parseBuildTime(build) { | ||
let {year, month, day, counter} = split_default(build); | ||
year += 2e3; | ||
function parseBuildTime (build) { | ||
let { year, month, day, counter } = splitBuildNumber(build); | ||
// Convert the two-digit year to the full year | ||
year += 2000; | ||
// Prepare the month to be accepted by the Date constructor | ||
month -= 1; | ||
// Convert count of 2-minute intervals to minutes elapsed since midnight | ||
counter *= 2; | ||
const hours = parseInt(counter / 60); | ||
const minutes = parseInt(counter % 60); | ||
return new Date(year, month, day, hours, minutes); | ||
return new Date(year, month, day, hours, minutes) | ||
} | ||
var parse_default = parseBuildTime; | ||
// lib/format.js | ||
function formatBuildTime(date) { | ||
if (typeof date === "string") { | ||
date = parse_default(date); | ||
function formatBuildTime (date) { | ||
if (typeof date === 'string') { | ||
date = parseBuildTime(date); | ||
} | ||
@@ -99,5 +91,9 @@ const datePart = date.toDateString(); | ||
const minutes = date.getMinutes(); | ||
return `${datePart} ${pad2(hours)}:${pad2(minutes)}`; | ||
return `${datePart} ${pad2(hours)}:${pad2(minutes)}` | ||
} | ||
var format_default = formatBuildTime; | ||
exports.format = formatBuildTime; | ||
exports.generate = generateBuildNumber; | ||
exports.parse = parseBuildTime; | ||
exports.validate = validateBuildNumber; | ||
//# sourceMappingURL=index.js.map |
@@ -1,50 +0,33 @@ | ||
(function(root, factory) { | ||
if (typeof define === "function" && define.amd) { | ||
define(factory); | ||
} else if (typeof module === "object" && module.exports) { | ||
module.exports = factory(); | ||
} else { | ||
root.buildnumgen = factory(); | ||
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.buildnumgen = {})); | ||
})(this, (function (exports) { 'use strict'; | ||
function pad2 (value) { | ||
return value > 9 ? `${value}` : `0${value}` | ||
} | ||
}(typeof self !== "undefined" ? self : this, () => { | ||
var __defProp = Object.defineProperty; | ||
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); | ||
var __export = (target, all) => { | ||
__markAsModule(target); | ||
for (var name in all) | ||
__defProp(target, name, {get: all[name], enumerable: true}); | ||
}; | ||
// lib/index.js | ||
var lib_exports = {}; | ||
__export(lib_exports, { | ||
format: () => format_default, | ||
generate: () => generate_default, | ||
parse: () => parse_default, | ||
validate: () => validate_default | ||
}); | ||
// lib/pad.js | ||
function pad2(value) { | ||
return value > 9 ? `${value}` : `0${value}`; | ||
function pad3 (value) { | ||
/* c8 ignore next */ | ||
return value > 99 ? `${value}` : value > 9 ? `0${value}` : `00${value}` | ||
} | ||
function pad3(value) { | ||
return value > 99 ? `${value}` : value > 9 ? `0${value}` : `00${value}`; | ||
} | ||
// lib/generate.js | ||
function generateBuildNumber(options) { | ||
function generateBuildNumber (options) { | ||
let build = getBuildStamp(); | ||
options || (options = {}); | ||
if (typeof options === "string") { | ||
options = {version: options}; | ||
if (typeof options === 'string') { | ||
options = { version: options }; | ||
} | ||
const version = options.version; | ||
if (version) { | ||
const versionSeparator = options.versionSeparator || "."; | ||
const versionSeparator = options.versionSeparator || '.'; | ||
build = version.trim() + versionSeparator.trim() + build; | ||
} | ||
return build; | ||
return build | ||
} | ||
function getBuildStamp() { | ||
function getBuildStamp () { | ||
const now = new Date(); | ||
@@ -54,13 +37,14 @@ const year = now.getFullYear() % 100; | ||
const day = now.getDate(); | ||
// Count 2-minute intervals elapsed since midnight:(HH * 60 + MM) / 2 | ||
const counter = parseInt((now.getHours() * 60 + now.getMinutes()) / 2); | ||
return `${pad2(year)}${pad2(month)}${pad2(day)}${pad3(counter)}`; | ||
// Format the stamp as YYMMDDCCC | ||
return `${pad2(year)}${pad2(month)}${pad2(day)}${pad3(counter)}` | ||
} | ||
var generate_default = generateBuildNumber; | ||
// lib/split.js | ||
function splitBuildNumber(build) { | ||
function splitBuildNumber (build) { | ||
const parts = /(\d{2})(\d{2})(\d{2})(\d{3})$/.exec(build.trim()); | ||
if (!parts) { | ||
throw new Error('Build number has to end with "YYMMDDCCC".'); | ||
throw new Error('Build number has to end with "YYMMDDCCC".') | ||
} | ||
const year = +parts[1]; | ||
@@ -71,35 +55,35 @@ const month = +parts[2]; | ||
if (!(year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= 31)) { | ||
throw new Error("Build number has to contain numbers formatting a date."); | ||
throw new Error('Build number has to contain numbers formatting a date.') | ||
} | ||
return {year, month, day, counter}; | ||
return { year, month, day, counter } | ||
} | ||
var split_default = splitBuildNumber; | ||
// lib/validate.js | ||
function validateBuildNumber(build) { | ||
function validateBuildNumber (build) { | ||
try { | ||
split_default(build); | ||
return true; | ||
} catch (error) { | ||
return false; | ||
splitBuildNumber(build); | ||
return true | ||
} catch { | ||
return false | ||
} | ||
} | ||
var validate_default = validateBuildNumber; | ||
// lib/parse.js | ||
function parseBuildTime(build) { | ||
let {year, month, day, counter} = split_default(build); | ||
year += 2e3; | ||
function parseBuildTime (build) { | ||
let { year, month, day, counter } = splitBuildNumber(build); | ||
// Convert the two-digit year to the full year | ||
year += 2000; | ||
// Prepare the month to be accepted by the Date constructor | ||
month -= 1; | ||
// Convert count of 2-minute intervals to minutes elapsed since midnight | ||
counter *= 2; | ||
const hours = parseInt(counter / 60); | ||
const minutes = parseInt(counter % 60); | ||
return new Date(year, month, day, hours, minutes); | ||
return new Date(year, month, day, hours, minutes) | ||
} | ||
var parse_default = parseBuildTime; | ||
// lib/format.js | ||
function formatBuildTime(date) { | ||
if (typeof date === "string") { | ||
date = parse_default(date); | ||
function formatBuildTime (date) { | ||
if (typeof date === 'string') { | ||
date = parseBuildTime(date); | ||
} | ||
@@ -109,7 +93,13 @@ const datePart = date.toDateString(); | ||
const minutes = date.getMinutes(); | ||
return `${datePart} ${pad2(hours)}:${pad2(minutes)}`; | ||
return `${datePart} ${pad2(hours)}:${pad2(minutes)}` | ||
} | ||
var format_default = formatBuildTime; | ||
return lib_exports; | ||
exports.format = formatBuildTime; | ||
exports.generate = generateBuildNumber; | ||
exports.parse = parseBuildTime; | ||
exports.validate = validateBuildNumber; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
})); | ||
//# sourceMappingURL=index.umd.js.map |
@@ -1,2 +0,2 @@ | ||
(function(root,factory){if(typeof define==="function"&&define.amd){define(factory);}else if(typeof module==="object"&&module.exports){module.exports=factory();}else{root.buildnumgen=factory();}}(typeof self!=="undefined"?self:this,()=>{var c=Object.defineProperty,g=t=>c(t,"__esModule",{value:!0}),$=(t,r)=>{g(t);for(var e in r)c(t,e,{get:r[e],enumerable:!0})},D={};$(D,{format:()=>f,generate:()=>m,parse:()=>u,validate:()=>p});function i(t){return t>9?`${t}`:`0${t}`}function d(t){return t>99?`${t}`:t>9?`0${t}`:`00${t}`}function B(t){let r=h();t||(t={}),typeof t=="string"&&(t={version:t});let e=t.version;if(e){let n=t.versionSeparator||".";r=e.trim()+n.trim()+r}return r}function h(){let t=new Date,r=t.getFullYear()%100,e=t.getMonth()+1,n=t.getDate(),o=parseInt((t.getHours()*60+t.getMinutes())/2);return`${i(r)}${i(e)}${i(n)}${d(o)}`}var m=B;function b(t){let r=/(\d{2})(\d{2})(\d{2})(\d{3})$/.exec(t.trim());if(!r)throw new Error('Build number has to end with "YYMMDDCCC".');let e=+r[1],n=+r[2],o=+r[3],s=+r[4];if(!(e>=0&&n>=1&&n<=12&&o>=1&&o<=31))throw new Error("Build number has to contain numbers formatting a date.");return{year:e,month:n,day:o,counter:s}}var a=b;function y(t){try{return a(t),!0}catch(r){return!1}}var p=y;function w(t){let{year:r,month:e,day:n,counter:o}=a(t);r+=2e3,e-=1,o*=2;let s=parseInt(o/60),l=parseInt(o%60);return new Date(r,e,n,s,l)}var u=w;function x(t){typeof t=="string"&&(t=u(t));let r=t.toDateString(),e=t.getHours(),n=t.getMinutes();return`${r} ${i(e)}:${i(n)}`}var f=x;return D;})); | ||
!function(b,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a((b="undefined"!=typeof globalThis?globalThis:b||self).buildnumgen={})}(this,function(a){"use strict";function c(a){return a>9?`${a}`:`0${a}`}function d(e){let a=/(\d{2})(\d{2})(\d{2})(\d{3})$/.exec(e.trim());if(!a)throw Error('Build number has to end with "YYMMDDCCC".');let d=+a[1],b=+a[2],c=+a[3],f=+a[4];if(!(d>=0&&b>=1&&b<=12&&c>=1&&c<=31))throw Error("Build number has to contain numbers formatting a date.");return{year:d,month:b,day:c,counter:f}}function b(e){let{year:b,month:c,day:f,counter:a}=d(e);b+=2e3,c-=1,a*=2;let g=parseInt(a/60),h=parseInt(a%60);return new Date(b,c,f,g,h)}a.format=function(a){"string"==typeof a&&(a=b(a));let d=a.toDateString(),e=a.getHours(),f=a.getMinutes();return`${d} ${c(e)}:${c(f)}`},a.generate=function(a){let b=function h(){var a;let b=new Date,d=b.getFullYear()%100,e=b.getMonth()+1,f=b.getDate(),g=parseInt((60*b.getHours()+b.getMinutes())/2);return`${c(d)}${c(e)}${c(f)}${(a=g)>99?`${a}`:a>9?`0${a}`:`00${a}`}`}();a||(a={}),"string"==typeof a&&(a={version:a});let d=a.version;if(d){let e=a.versionSeparator||".";b=d.trim()+e.trim()+b}return b},a.parse=b,a.validate=function(a){try{return d(a),!0}catch{return!1}},Object.defineProperty(a,"__esModule",{value:!0})}) | ||
//# sourceMappingURL=index.umd.min.js.map |
{ | ||
"name": "build-number-generator", | ||
"description": "Generates a unique build number with a human-readable build time.", | ||
"version": "1.0.0", | ||
"version": "2.0.0", | ||
"homepage": "https://github.com/prantlf/build-number-generator#readme", | ||
@@ -26,9 +26,15 @@ "author": { | ||
"engines": { | ||
"node": ">=8" | ||
"node": ">=14.8" | ||
}, | ||
"type": "module", | ||
"main": "dist/index.js", | ||
"module": "dist/index.mjs", | ||
"browser": "dist/index.umd.js", | ||
"browser": "dist/index.umd.min.js", | ||
"types": "lib/index.d.ts", | ||
"exports": { | ||
"require": "./dist/index.cjs", | ||
"import": "./dist/index.mjs" | ||
}, | ||
"bin": { | ||
"buildnumgen": "bin/buildnumgen" | ||
"buildnumgen": "bin/buildnumgen.cjs" | ||
}, | ||
@@ -40,22 +46,46 @@ "files": [ | ||
"scripts": { | ||
"prepare": "node util/build", | ||
"lint": "standard --verbose bin/buildnumgen lib tests", | ||
"check": "tap tests/*.js", | ||
"cover": "npm run check -- --cov --coverage-report=lcov --no-browser", | ||
"test": "npm run lint && npm run check" | ||
"prepare": "rollup -c", | ||
"lint": "denolint", | ||
"check": "teru-esm tests/*.js", | ||
"cover": "c8 teru-esm tests/*.js", | ||
"test": "denolint && c8 teru-esm tests/*.js" | ||
}, | ||
"dependencies": { | ||
"commander": "6.2.0" | ||
"c8": { | ||
"check-coverage": true, | ||
"reporter": [ | ||
"text", | ||
"lcov" | ||
], | ||
"branches": 100, | ||
"lines": 100, | ||
"functions": 100, | ||
"statements": 100 | ||
}, | ||
"release": { | ||
"plugins": [ | ||
"@semantic-release/commit-analyzer", | ||
"@semantic-release/release-notes-generator", | ||
"@semantic-release/changelog", | ||
"@semantic-release/npm", | ||
[ | ||
"@semantic-release/github", | ||
{ | ||
"failComment": false | ||
} | ||
], | ||
"@semantic-release/git" | ||
] | ||
}, | ||
"devDependencies": { | ||
"@prantlf/esbuild": "0.8.17", | ||
"coveralls": "3.1.0", | ||
"eslint-config-standard": "16.0.2", | ||
"eslint-plugin-import": "2.22.1", | ||
"eslint-plugin-node": "11.1.0", | ||
"eslint-plugin-promise": "4.2.1", | ||
"eslint-plugin-standard": "4.1.0", | ||
"sprintf-js": "1.1.2", | ||
"standard": "16.0.3", | ||
"tap": "14.11.0" | ||
"@node-rs/deno-lint": "^1.13.1", | ||
"@semantic-release/changelog": "^6.0.1", | ||
"@semantic-release/git": "^10.0.1", | ||
"c8": "^7.11.3", | ||
"rollup": "^2.75.6", | ||
"rollup-plugin-esbuild-minify": "^1.0.4", | ||
"rollup-plugin-swc-minify": "^1.0.2", | ||
"sprintf-js": "^1.1.2", | ||
"tehanu": "^1.0.1", | ||
"tehanu-repo-coco": "^1.0.0", | ||
"tehanu-teru": "^1.0.0" | ||
}, | ||
@@ -62,0 +92,0 @@ "keywords": [ |
# build-number-generator | ||
[![NPM version](https://badge.fury.io/js/build-number-generator.png)](http://badge.fury.io/js/build-number-generator) | ||
[![Build Status](https://travis-ci.org/prantlf/build-number-generator.png)](https://travis-ci.org/prantlf/build-number-generator) | ||
[![Coverage Status](https://coveralls.io/repos/github/prantlf/build-number-generator/badge.svg?branch=master)](https://coveralls.io/github/prantlf/build-number-generator?branch=master) | ||
[![Dependency Status](https://david-dm.org/prantlf/build-number-generator.svg)](https://david-dm.org/prantlf/build-number-generator) | ||
[![devDependency Status](https://david-dm.org/prantlf/build-number-generator/dev-status.svg)](https://david-dm.org/prantlf/build-number-generator#info=devDependencies) | ||
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) | ||
[![Latest version](https://img.shields.io/npm/v/build-number-generator) | ||
![Dependency status](https://img.shields.io/librariesio/release/npm/build-number-generator) | ||
](https://www.npmjs.com/package/build-number-generator) | ||
[![Coverage](https://codecov.io/gh/prantlf/build-number-generator/branch/master/graph/badge.svg)](https://codecov.io/gh/prantlf/build-number-generator) | ||
Generates a build number to be appended to your product version number, which is unique for each build and which can be read "by a human" to learn about the build time. No need for maintaining the most recent build number in your sources, incrementing it during the build and committing & pushing the new one to your sources. | ||
@@ -13,2 +12,4 @@ | ||
**Note**: If you use Node.js < 10, stay with the versions 1.x. If you use Node.js < 14.8, stay with the versions 2.x. The functionality of the command-line script and of the API is the same. | ||
## Features | ||
@@ -26,3 +27,6 @@ | ||
* Command-line tool to generate, validate and parse the build numbers. (Can be integrated to any build script.) | ||
* [ESM], [CJS] and [UMD] modules offering an [API] for programmatic usage in [Node.js] and the browser. Can be integrated to JavaScript build scripts like [Grunt] or [Gulp]. | ||
* [ESM], [CJS] and [UMD] modules offering an [API] for programmatic usage in [Node.js], Deno and a web browser. Can be integrated to JavaScript build scripts like [Grunt] or [Gulp]. | ||
* Includes TypeScript types. | ||
* No dependencies. | ||
* Tiny size - 1.12 kB minified, 602 B gzipped, 530 B brotlied. | ||
@@ -197,3 +201,3 @@ ### Example | ||
Copyright (c) 2018-2020 Ferdinand Prantl | ||
Copyright (c) 2018-2022 Ferdinand Prantl | ||
@@ -200,0 +204,0 @@ Licensed under the MIT license. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
54198
0
311
215
Yes
11
- Removedcommander@6.2.0
- Removedcommander@6.2.0(transitive)