git clone https://github.com/pinojs/pinojs
cd pinojs
npm install
npm start
pinojs / quick-format-unescaped Goto Github PK
View Code? Open in Web Editor NEWSolves a problem with util.format
License: MIT License
Solves a problem with util.format
License: MIT License
Could you please provide a license. I am using quick-format and have just realised there is no license mentioned.
A repository link in package.json would also be appreciated.
#4 looks like a good option
This commit: 858729a
Causes this issue: pinojs/pino#983
Reproduction:
{
"dependencies": {
"qfu2": "npm:[email protected]",
"quick-format-unescaped": "4.0.1"
}
}
'use strict'
const assert = require('assert')
const qfu = require('quick-format-unescaped')
const qfu2 = require('qfu2')
const out1 = qfu(undefined, [])
const out2 = qfu2(undefined, [])
assert.equal(out1, out2)
If two %s
is next to each other, the last one will be ignored:
var format = require('quick-format-unescaped')
format('%s%s', 'foo', 'bar') // => "foo%s bar"
format('%s %s', 'foo', 'bar') // => "foo bar"
Arguments are get skipped when %% is used:
const util = require('util');
const format = require('quick-format-unescaped');
console.log(util.format('test with %%: %s', 'foo')); // -> test with %: foo
console.log(format(['test with %%: %s', 'foo'])); // -> test with %: %s
console.log offers %f and %i as replacements which are unsupported by this package.
%f is an alternative to %d where %i floors the numeric value.
e.g.
console.log('%f', 42.9) //> 42.9
console.log('%i', 42.9) //> 42
Is it a goal of this lib to support those replacements?
currently if an object has a circular reference the whole object is serialized as: [Circular]
This is a problem, first if the intended JSON is a key or some other stringify JSON it's going to cause an error on parse (since [Circular] isn't quoted) - second all other non-circular properties on the object are lost
we could use json-stringify-safe but this double or triples the benchmarks, so we need a faster version of json-stringify-safe
I met this issue when I test with pino.
I noticed there is a similar issue #18
But it seems there are still some other issues when a format string next to one another.
The detail would be
const format = require('quick-format-unescaped')
console.log(format('%d%d', [11, 22]));
console.log(format('%d%s', [11, 22]));
console.log(format('%d%o', [11, { aa: 22 }]));
console.log(format('%d%d%d', [11, 22, 33]));
console.log(format('%d%d%s', [11, 22, 33]));
console.log(format('%d%o%d%s', [11, { aa: 22 }, 33, 'sss']))
console.log(format('%d%%%d', [11, 22]));
console.log(format('%d%%%s', [11, 22]));
console.log('\n');
console.log(format('%s%d', [11, 22])); //
console.log(format('%s%s', [11, 22]));
console.log(format('%s%o', [11, { aa: 22 }]));
console.log(format('%s%d%d', [11, 22, 33]));
console.log(format('%s%d%s', [11, 22, 33]));
console.log(format('%s%o%d%s', [11, { aa: 22 }, 33, 'sss']))
console.log(format('%s%%%d', [11, 22]));
console.log(format('%s%%%s', [11, 22]));
These produce:
11%d
11%s
11%o
11%d22
11%d22
11%oNaN%s
11%%d
11%%s
1122
1122
11{"aa":22}
1122%d
1122%s
11{"aa":22}33%s
11%22
11%22
fast-safe-stringify
is now on 2.0.7 and it would be nice to update to use it
I have some problem with format. This is not convenient for testing
Example:
let util = require('util');
let format = require('quick-format-unescaped');
let a = util.format('foo %o', {name: "alex"}); // foo { name: 'alex' }
let b = format('foo %o', [{name: "alex"}]); // foo {"name":"alex"}
a === b // false
Is it possible add option for change formatting?
I've used pino logger and found that interpolated messages get escaped. So, it happens here.
const util = require('util');
const format = require('quick-format-unescaped');
console.log(util.format('test: %s', 'with \"qoutes\"')); // -> test: with "qoutes"
console.log(format(['test: %s', 'with \"qoutes\"'])); // -> test: with \"qoutes\"
I recently upgraded to the latest version of pinojs, which pulls in this library. In the previous version of pino, I could do something like this:
log.info('Uhoh, an error occurred:', err);
--or--
log.info('This object was just received', { some: 'object', with: 'values' });
Which would print the string + the provided object/arguments.
I see that in quick-format-unescaped v4, this was changed to not work without using the format: log.info('This object was just received %s, { some: 'object', with: 'values' });
, which ends up breaking a lot of logging code that I had.
@davidmarkclements could you elaborate what the purpose was for this change? (i.e. 7113010)
Or, is there some workaround?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.