Giter Club home page Giter Club logo

Comments (6)

vsmalladi avatar vsmalladi commented on May 23, 2024

I agree this would be nice.

from js-quantities.

luzlab avatar luzlab commented on May 23, 2024

yes! This would be a much appreciated feature! Is it challenging?

Honestly, I'm just checking this library out for the first time. We're about to bake unit handling into our web app and I'm looking to pick one library to get started... I thought js-quanties was the best - are there any other that support math operations? The big question I had was "Can I serialize and deserialize Qty objects from JSON?"

from js-quantities.

gentooboontoo avatar gentooboontoo commented on May 23, 2024

I am open to any suggestion or help about concrete implementation. To me, the best representation of a quantity is its plain string form (as output by Qty#toString()). In this case, Qty#toJSON would just be implemented as a call to Qty#toString() with no arguments.
It is also possible to the client code to add a customized JSON serialization by simply extending Qty.prototype.

For now, I don't see any use case for a richer data structure except for performance reasons as suggested by @WorldMaker but it might eventually be considered with further argumentation.

from js-quantities.

luzlab avatar luzlab commented on May 23, 2024

Yeah, I realized that I could use toString() to serialize and deserialize Qty objects after my last post. I made an atmosphere package to use js-quantities in a Meteor app. Basically, I just had to add a few methods (.toJSONValue(), .typeName(), .clone(), and .eq()) to support automatic handling of Qty object between the client and server.

I was looking over the code for the constructor and saw the option to import from a DefinitionObject. Is a definition object just the following? If so, I could just export this from .toJSONValue() rather than .toString().

{
   scalar : Number;
   numerator: [ String ],
   denominator: [ String ]
}

from js-quantities.

luzlab avatar luzlab commented on May 23, 2024

So I made a fork that automatically detects if EJSON is being used and adds support for automatic detection/serialization/deserialization of Qty objects.

var ejson = require('ejson');
var qty = require('js-quantities');
var m = qty('1 m');
var stringified = ejson.stringify({foo: m}) // {"foo":{"$type":"js-quantity","$value":{"scalar":1,"numerator":["<meter>"],"denominator":["<1>"]}}}
var parsed = ejson.parse(stringified);
console.log(parsed.foo.toString()) // 1 m

I had to make changes to the build config to support this and I haven't added any tests.

If there's interest in this, I can submit a PR.

from js-quantities.

luzlab avatar luzlab commented on May 23, 2024

I created an npm module ejson-extras that extends EJSON to support automatic serialization and deserialization of Qty objects.

from js-quantities.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.