npm.io
3.0.2 • Published 1 year ago

properties-like

Licence
MIT
Version
3.0.2
Deps
0
Size
49 kB
Vulns
0
Weekly
0
Stars
7

properties-like

npm package

NPM version NPM Downloads

A TypeScript implementation of the Java .properties specification, supporting configuration parsing, serialization, and advanced features like variable interpolation and Unicode handling.


Features

  • TypeScript First: Full type safety and autocompletion
  • Bidirectional: Parse files and generate .properties formatted strings
  • Variable Replacement: Use ${variable} placeholders for dynamic values
  • Unicode Support: Handle \uxxxx escape sequences
  • Comment Preservation: Retain and serialize comment lines
  • Cross-Platform: Works in Node.js, browsers, and Deno

Documentation

For detailed usage instructions and API references, please visit the official documentation:

View Full Documentation


Quick Start

Create a test.properties file

# Backslash handling
jdbc.mysql.driver     = com.mysql.jdbc.Driver
jdbc.mysql.url        = jdbc\:mysql\://localhost\:3306/test?useUnicode\=true&characterEncoding\=gbk
jdbc .mysql\ .username= test\
123456789
jdbc\:mysql.password   = ~\ !@#$%^&*
jdbc.mysql\=maxActive  = \ \ 50\ 

# Unicode support
username=\u7528 \u6237 \u540d
\u8d26 \u53f7=test123
\u663a \u540d=\u540a \u70b8 \u5929
p

int=1
bool=true
Properties Class Example
import { readFileSync } from 'node:fs';
import { Properties } from 'properties-like';

const props = new Properties();
props.parse(readFileSync('./test.properties', 'utf8'));

props.get('jdbc.mysql.driver'); // ==> 'com.mysql.jdbc.Driver'
props.getProperty('jdbc.mysql.driver     '); // ==> undefined
props.getProperty('jdbc.mysql.url'); // ==> 'jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk'
props.getProperty('jdbc.mysql .username'); // ==> 'test123456789'
props.getProperty('jdbc:mysql.password'); // ==> '~ !@#$%^&*'
props.getProperty('jdbc.mysql=maxActive'); // ==> '  50 '
props.getProperty('username'); // ==> '用户名'
props.getProperty('账号'); // ==> 'test123'
props.getProperty('昵称'); // ==> '吊炸天'
props.getProperty('p'); // ==> ''
props.getNumber('int'); // ==> 1
props.getBoolean('bool'); // ==> true

props.forEach((value, key) => {

});

for (let [value, key] of props) {

}
parse Function Example
import { parse } from 'properties-like';

parse('key=value\n# comment', {
  onData(key, value, lineno) {
    console.log(`Line ${lineno}: ${key} = ${value}`);
  },
  onComment(comment, lineno) {
    console.log(`Line ${lineno}: COMMENT: ${comment}`);
  }
});
// Output:
// Line 1: key = value
// Line 2: COMMENT: # comment

Contributing

We welcome contributions from the community! If you find a bug or want to suggest an improvement, feel free to open an issue or submit a pull request.

How to Contribute
  1. Fork the repository.
  2. Create a new branch for your changes.
  3. Submit a pull request with a clear description of your changes.

License

This project is licensed under the MIT License.


Browser Support

Chrome Firefox Safari Opera Edge
Latest Latest Latest Latest Latest

Keywords