properties-like
v3.0.2
Published
A TypeScript implementation of the Java .properties specification, supporting configuration parsing, serialization, and advanced features like variable interpolation and Unicode handling.
Maintainers
Readme
properties-like
A TypeScript implementation of the Java
.propertiesspecification, 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
.propertiesformatted strings - 🔍 Variable Replacement: Use
${variable}placeholders for dynamic values - 🌐 Unicode Support: Handle
\uxxxxescape 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:
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=trueProperties 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: # commentContributing
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
- Fork the repository.
- Create a new branch for your changes.
- Submit a pull request with a clear description of your changes.
License
This project is licensed under the MIT License.
Browser Support
|
|
|
|
|
--- | --- | --- | --- | --- |
Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ |

