Comments (9)
I have the same problem with one of our legacy .properties i18n files. I just want to point out that fixing this issue (assign keys to a String) might cause issues for people who are using this to convert the object to JSON.
var s = new String("foo");
s.bar = "bar"
console.log(""+s) // VM199:4 foo
console.log(s.bar) // VM199:5 bar
JSON.stringify(s) // "foo" (note that bar is not represented in the final object)
The fix of course might be to resolve those issues in the properties files...
app.name=My App
app.version=2
from properties.
My current plan is to interpret the object for .path()
at the time it is requested rather than as the properties object is built, deferring this TypeError
out of construction.
Adding an option to ignore the property tree of primitives would probably resolve this case -
properties = {};
properties.a = new String('a');
properties.a.b = 'b';
JSON.stringify(properties); // {"a": "a"}
properties.a.b === 'b'; // true
from properties.
Also, two problems exist. The first is when we try to assign an object to a string (which throws an error) the other is when the object already exists an we try to assign a string to it.
app.version=2
app=My App
Honestly it would make sense to have some kind of option we could add that would tell the parser to not error and/or handle primitive assignments.
In my case since I'm ultimately creating a JSON file, I might be rather bewildered when some of my keys are missing. :)
from properties.
What's the ETA on this? I'm working on a fix but I'm afraid it won't quite be up to the standard of making a PR.
from properties.
Apologies about the delay, I've had a lot of other things on - festive break seems like as good a time as any to work on this.
from properties.
No worries, I'll keep tuned :)
from properties.
What would be a reasonable default when trying to get this property? I.e. what should properties.get('app') give in the original example? The string "My app" or the object containing all values below?
I feel like the first one makes more sense but they both have their uses.
from properties.
I am of the opinion that overwriting the original string value with an object should mean that the original string is replaced so the returned value would be the object.
from properties.
That does make sense. The way get is implemented currently it primarily looks in the _properties object which means that 'app' will resolve to "My app" in the example.
I have implemented what seems to be a functioning solution in terms of the parsing at least, I'll make a PR so you can have a look at it if you like. If you have any ideas about how to modify the getter then I'd love to hear them!
from properties.
Related Issues (20)
- Allow to write without sections HOT 4
- How to remove a property? HOT 1
- How I can save new property value after set it? HOT 1
- Adding a property to a pre-existing section results in a duplicated section HOT 1
- How to read other format nls files? HOT 1
- initialize from JSON string
- Not exactly an issue, but some further explainations maybe ? HOT 1
- Data type parsing doesn't seem to happen when using `each` or `getAllProperties`
- Parsing is substantially slower than I'd expect HOT 1
- import syntax not working HOT 2
- Snyk - potential prototype pollution HOT 1
- Can't disable creation of sections HOT 2
- Is it possible to have = signs in the keys?
- Setting saveSection to false does not work HOT 1
- saveSections = false still creates the sections in the property file HOT 1
- Multiline support
- Convert ini file with dot-delimited notation into one big object
- How to get section names?
- properties.path() not working for dot-separated keys after upgrade from 2.1.1 to 2.2.0 HOT 1
- Missing documentation: propertiesReader without any arguments for creating a new empty properties object.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from properties.