Skip to content

Commit 1e072ba

Browse files
committed
v2.0.0-beta.12:
* Upgraded formatting to kurly v2 which supports static pipes * Implemented outputs as Kurly formats * Include kurly in ulog as standard * Added colors * Added alignments * Lazy loading
1 parent 0a82290 commit 1e072ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1510
-738
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/dist
22
/node_modules
33
/ulog.min.js
4+
/ulog.lazy.min.js
45
/.nyc_output
5-
/test.min.js
66
/full.min.js

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2020 Stijn de Witt
3+
Copyright (c) 2021 Stijn de Witt
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 332 additions & 252 deletions
Large diffs are not rendered by default.

base.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
var ulog = module.exports = require('./core')
2+
ulog.use([
3+
require('./mods/config'),
4+
])

build.js

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,74 @@ var path = require('path')
33

44
var gzipSize = require('gzip-size')
55
// be cool and use ulog to print the logging in the build of ulog :)
6-
var log = require('./')('ulog:build')
6+
var ulog = require('./')
7+
var log = ulog('ulog:build')
78

8-
var [ processName, script, command, ...args ] = process.argv
99
var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf-8'))
1010
var v = pkg.version
1111

1212
;(function(){
13-
var data = fs.readFileSync(path.resolve(__dirname, pkg.unpkg), 'utf8')
13+
var file = path.resolve(__dirname, pkg.unpkg)
14+
log('Reading ' + file)
15+
data = fs.readFileSync(file, 'utf8')
16+
log('Estimating gzipped size')
1417
var gzip = (gzipSize.sync(data) / 1024).toFixed(1)
15-
log.info(`Built ${pkg.unpkg} (~${gzip} kB minified and gzipped)`)
16-
data = fs.readFileSync(path.resolve(__dirname, 'full.min.js'), 'utf8')
17-
var fullzip = (gzipSize.sync(data) / 1024).toFixed(1)
18-
log.info(`Built full.min.js (~${fullzip} kB minified and gzipped)`)
19-
var readme = fs.readFileSync('README.md', 'utf-8')
20-
readme = readme.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?/g, `ulog@${v}`)
21-
readme = readme.replace(/\<sub\>\<sup\>v\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?/g, `<sub\><sup\>v${v}`)
22-
readme = readme.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?\) \(~\d\.\dkB/g, `ulog@${v}) (~${gzip}kB`)
23-
readme = readme.replace(/just 2.7kB/g, `just ${gzip}kB`)
24-
readme = readme.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?\/full\.min\.js\) \(~\d\.\dkB/g, `ulog@${v}/full.min.js) (~${fullzip}kB`)
25-
fs.writeFileSync('README.md', readme, 'utf8')
26-
log.info(`Updated README.md`)
18+
log.info(`${pkg.unpkg} (~${(data.length / 1024).toFixed(1)} kB, ${gzip} kB gzipped)`)
19+
20+
file = path.resolve(__dirname, 'ulog.lazy.min.js')
21+
log('Reading ' + file)
22+
data = fs.readFileSync(file, 'utf8')
23+
log('Estimating gzipped size')
24+
var lazy = (gzipSize.sync(data) / 1024).toFixed(1)
25+
log.info(`ulog.lazy.min.js (~${(data.length / 1024).toFixed(1)} kB, ${lazy} kB gzipped)`)
26+
27+
file = path.resolve(__dirname, 'full.min.js')
28+
log('Reading ' + file)
29+
data = fs.readFileSync(file, 'utf8')
30+
log('Estimating gzipped size')
31+
var full = (gzipSize.sync(data) / 1024).toFixed(1)
32+
log.info(`full.min.js (~${(data.length / 1024).toFixed(1)} kB, ${full} kB gzipped)`)
33+
34+
file = path.resolve(__dirname, 'README.md')
35+
log(`Reading ${file}`)
36+
data = fs.readFileSync(file, 'utf-8')
37+
log(`Updating version to ${v} and gzip size to ${gzip}...`)
38+
data = data.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?/g, `ulog@${v}`)
39+
data = data.replace(/\<sub\>\<sup\>v\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?/g, `<sub\><sup\>v${v}`)
40+
data = data.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?\/ulog.min.js\) \(~\d\.\dkB/g, `ulog@${v}/ulog.min.js) (~${gzip}kB`)
41+
data = data.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?\/ulog.lazy.min.js\) \(~\d\.\dkB/g, `ulog@${v}/ulog.lazy.min.js) (~${lazy}kB`)
42+
data = data.replace(/ulog@\d(\d)?\.\d(\d)?\.\d(\d)?(-[a-z]+\.\d(\d)?)?\/full.min.js\) \(~\d\.\dkB/g, `ulog@${v}/full.min.js) (~${full}kB`)
43+
log(`Writing ${file}`)
44+
fs.writeFileSync(file, data, 'utf8')
45+
log.info(`README.md (~${(data.length / 1024).toFixed(1)} kB)`)
46+
47+
ulog('a:one').debug('A debug message')
48+
ulog('a:two').debug('A debug message')
49+
ulog('a:three').debug('A debug message')
50+
ulog('a:four').debug('A debug message')
51+
ulog('a:five').debug('A debug message')
52+
ulog('b:one').log('A log message')
53+
ulog('b:two').log('A log message')
54+
ulog('b:three').log('A log message')
55+
ulog('b:four').log('A log message')
56+
ulog('b:five').log('A log message')
57+
ulog('c:one').info('An info message')
58+
ulog('c:two').info('An info message')
59+
ulog('c:three').info('An info message')
60+
ulog('c:four').info('An info message')
61+
ulog('c:five').info('An info message')
62+
ulog('d:one').warn('A warn message')
63+
ulog('d:two').warn('A warn message')
64+
ulog('d:three').warn('A warn message')
65+
ulog('d:four').warn('A warn message')
66+
ulog('d:five').warn('A warn message')
67+
ulog('e:one').error('An error message')
68+
ulog('e:two').error('An error message')
69+
ulog('e:three').error('An error message')
70+
ulog('e:four').error('An error message')
71+
ulog('e:five').error('An error message')
72+
ulog('ulog').error('An error message')
73+
setTimeout(function(){
74+
log('A delayed message')
75+
}, 1250)
2776
})()

core/grab.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
var merge = require('./merge')
2+
13
module.exports = function(ulog, name, result) {
2-
ulog.mods.reduce(function(r,item) {
3-
if (Array.isArray(r) && (name in item)) {
4-
r.push(item[name])
4+
ulog.mods.reduce(function(r,mod){
5+
if (Array.isArray(r) && (name in mod)) {
6+
r.push(mod[name])
57
} else {
6-
for (var o in item[name]) {
7-
r[o] = item[name][o]
8-
}
8+
merge(r, mod[name])
99
}
1010
return r
1111
}, result)

core/index.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
var ulog = require('anylogger')
22
var grab = require('./grab')
33

4-
// ulog.levels.none = 0
5-
// ulog.levels.all = 9007199254740991 // Number.MAX_SAFE_INTEGER
6-
// var ext = ulog.ext // save for later
4+
var ext = ulog.ext
75

86
/**
97
* `ulog.ext(logger) => logger`
@@ -19,9 +17,12 @@ var grab = require('./grab')
1917
*/
2018
ulog.ext = function(logger) {
2119
if (logger) {
22-
// ext(logger) // create default methods
20+
ext(logger)
2321
grab(ulog, 'ext', []).map(function(ext){
24-
ext.call(ulog, logger) // call hook on registered mods
22+
ext.call(ulog, logger)
23+
})
24+
grab(ulog, 'after', []).map(function(ext){
25+
ext.call(ulog, logger)
2526
})
2627
return logger
2728
} else {
@@ -69,7 +70,7 @@ ulog.use = function(mod) {
6970
if (Array.isArray(mod)) {
7071
return mod.reduce(function(r,mod){return r + ulog.use(mod)}, 0)
7172
}
72-
// handle mod being a single mod
73+
// // handle mod being a single mod
7374
var result = ulog.mods.indexOf(mod) === -1 ? 1 : 0
7475
if (result) {
7576
if (mod.use) {

core/merge.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var merge = module.exports = function(result, obj) {
2+
for (var o in obj) {
3+
if ((typeof obj[o] == 'object') && (Object.getPrototypeOf(obj[o]) === Object.prototype)) {
4+
if (! (o in result)) result[o] = {}
5+
if ((typeof result[o] == 'object') && (Object.getPrototypeOf(obj[o]) === Object.prototype)) {
6+
merge(result[o], obj[o])
7+
} else {
8+
result[o] = obj[o]
9+
}
10+
} else {
11+
result[o] = obj[o]
12+
}
13+
}
14+
}

core/parse.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
"lvl name:22 date:yy/mm/dd perf"
2+
3+
"console file:./log.output url:https://deze-auto-kopen.nl component:( with nested components )"
4+
5+
6+
function parse(str) {
7+
var tag, result = []
8+
if (str || (str === '')) {
9+
while (tag = nextTag(str)) {
10+
var before = str.substring(0, tag.index)
11+
if (before) result.push(before)
12+
result.push({
13+
name: tag.name,
14+
text: tag.text,
15+
ast: parse(tag.text)
16+
})
17+
str = str.substring(tag.end + 1)
18+
}
19+
if (str) result.push(str)
20+
}
21+
return result
22+
}
23+
24+
function nextTag(str) {
25+
var match = str.match(/\{[_a-zA-Z][_a-zA-Z0-9]*([^_a-zA-Z0-9].*)?\}/)
26+
var result
27+
if (match) {
28+
var name = match[1] ? match[0].substring(1, match[0].indexOf(match[1])) : match[0].substring(1, match[0].indexOf('}'))
29+
result = { name: name, index: match.index, end: -1, text: '' }
30+
// loop through the string, parsing it as we go through it
31+
var esc = false
32+
var open=1 // we already found one open brace
33+
for (var i=match.index+name.length+1; i<str.length; i++) {
34+
var token = str[i]
35+
if (esc) {
36+
token = (token == 'n') ? '\n' :
37+
(token == 't') ? '\t' :
38+
(token == '{') ||
39+
(token == '}') ||
40+
(token == '\\') ? token :
41+
'\\' + token // unrecognized escape sequence is ignored
42+
}
43+
else {
44+
if (token === '{') {
45+
open++
46+
}
47+
if (token === '}') {
48+
open--
49+
if (!open) {
50+
result.end = i
51+
break
52+
}
53+
}
54+
if (token === '\\') {
55+
esc = true
56+
continue
57+
}
58+
if (!result.text && (token.search(/\s/)===0)) {
59+
continue
60+
}
61+
}
62+
result.text += token
63+
esc = false
64+
}
65+
}
66+
return result
67+
}
68+
69+
/**
70+
* Compiles an abstract syntax tree into a function
71+
*
72+
* @param {Array<String|Object>} ast An abstract syntax tree created with `parse`
73+
* @param {Object} tags An object of tags keyed by tag name
74+
* @param {Function} parent Optionally, a compiled parent function for the ast
75+
*
76+
* @returns An array, possibly empty but never null or undefined.
77+
*/
78+
function compile(ast, tags, parent) {
79+
if (process.env.NODE_ENV != 'production') {
80+
log.debug('compile', ast, tags, parent)
81+
if ((ast === undefined) || (ast === null)) throw new Error('parameter `ast` is required')
82+
if (! Array.isArray(ast)) throw new Error('parameter `ast` must be an array')
83+
if ((tags === undefined) || (tags === null)) throw new Error('parameter `tags` is required')
84+
if (typeof tags != 'object') throw new Error('parameter `tags` must be an object')
85+
}
86+
87+
// recursively compile the ast
88+
var nodes = ast.map(function(n){
89+
return typeof n == 'string'
90+
? n :
91+
compile(n.ast, tags,
92+
tags[n.name] ? tags[n.name](n) :
93+
tags['*'] ? tags['*'](n) :
94+
undefined
95+
)
96+
})
97+
98+
// create the result function
99+
var result = function(rec) {
100+
// clone rec into res
101+
var res = {}
102+
for (k in rec) res[k] = rec[k]
103+
// get the result children
104+
res.children = nodes.reduce(function(r, n){
105+
if (typeof n == 'function') n = n(rec)
106+
r.push.apply(r, Array.isArray(n) ? n : [n])
107+
return r
108+
}, [])
109+
// invoke parent if we have it
110+
return parent ? parent(res) : res.children
111+
}
112+
if (process.env.NODE_ENV != 'production') {
113+
log('compile', ast, tags, parent, '=>', '[Function]')
114+
}
115+
return result;
116+
}
117+
118+

example.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)