Simple and Fast TypeSafe
naming conventions modeler implemented with Proxy
; zero dependency.
npm install --save naming-conventions-modeler
Original | snake_case | camelCase | PascalCase | kebab-case | MACRO_CASE | Train-Case | flatcase | no case |
---|---|---|---|---|---|---|---|---|
RegExr | reg_exr | regExr | RegExr | reg-exr | REG_EXR | Reg-Exr | regexr | Reg Exr |
PCRE | pcre | pcre | PCRE | pcre | PCRE | PCRE | pcre | PCRE |
JavaScript | java_script | javaScript | JavaScript | java-script | JAVA_SCRIPT | Java-Script | javascript | Java Script |
JSProgrammingLanguage | js_programming_language | jsProgrammingLanguage | JSProgrammingLanguage | js-programming-language | JS_PROGRAMMING_LANGUAGE | JS-Programming-Language | jsprogramminglanguage | JS Programming Language |
OTP | otp | otp | OTP | otp | OTP | OTP | otp | OTP |
Train-Case | train_case | trainCase | TrainCase | train-case | TRAIN_CASE | Train-Case | traincase | Train Case |
__meta__ | meta | meta | Meta | meta | META | Meta | meta | meta |
camelCase | camel_case | camelCase | CamelCase | camel-case | CAMEL_CASE | Camel-Case | camelcase | camel Case |
_id | id | id | Id | id | ID | Id | id | id |
ID | id | id | ID | id | ID | ID | id | ID |
iD | id | id | ID | id | ID | ID | id | iD |
id | id | id | Id | id | ID | Id | id | id |
Id | id | id | Id | id | ID | Id | id | Id |
0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 |
_-$#@ | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ |
import { Modeler, lookup } from 'naming-conventions-modeler';
let obj = {
_id: 123,
TestValue: 'test value',
data: {
_id: 456,
test_value: '456',
},
items: [
{
_id: 789,
test_value: '789',
},
],
__meata__: 'metadata',
};
type camelObj = {
// type safety support
id: number;
testValue: string;
data: {
id: number;
testValue: string;
[x: string]: any;
};
items: [
{
id: number;
testValue: string;
},
];
meta: string;
[x: string]: any;
};
// Replace misspell keys by regex
obj = lookup(obj, { '__me.*ta__': '__meta__' });
const model = Modeler.build<camelObj>(obj, 'camelCase');
console.log(model.id); // 123
console.log(model.testValue); // test value
console.log(model.TestValue); // test value
console.log(model.data.id); // 456
console.log(model.items[0].testValue); // 789
// Set value dynamically
model.NO_name = 'no name';
model.NO_VALUE = 'no value';
console.log(model.noName); // no name
console.log(model.noValue); // no value
/**
* It takes an convention model and converts all properties at once
*/
Modeler.convert(model);
console.log(model);
/**
* {
* data: { id: 456, testValue: '456' },
* items: [ { testValue: '789', id: 789 } ],
* testValue: 'test value',
* noName: 'no name',
* noValue: 'no value',
* id: 123,
* meta: 'metadata'
* }
*/
import { convention, toSnakeCase, isSnakeCase } from 'naming-conventions-modeler';
const str = 'JSProgrammingLanguage';
const camelCase = convention('camelCase');
console.log(camelCase.to(str)); // jsProgrammingLanguage
console.log(toSnakeCase(str)); // js_programming_language
console.log(isSnakeCase(toSnakeCase(str))); // true