An open API service indexing awesome lists of open source software.

https://github.com/vhidvz/naming-conventions-modeler

Simple and Fast naming conventions modeler implemented by Proxy, zero dependencies.
https://github.com/vhidvz/naming-conventions-modeler

modeler naming-conventions proxy zero-dependency

Last synced: 11 months ago
JSON representation

Simple and Fast naming conventions modeler implemented by Proxy, zero dependencies.

Awesome Lists containing this project

README

          

# Naming Conventions Modeler

[![npm](https://img.shields.io/npm/v/naming-conventions-modeler)](https://www.npmjs.com/package/naming-conventions-modeler)
[![Coverage](https://raw.githubusercontent.com/vhidvz/naming-conventions-modeler/master/coverage-badge.svg)](https://htmlpreview.github.io/?https://github.com/vhidvz/naming-conventions-modeler/blob/master/docs/coverage/lcov-report/index.html)
![npm](https://img.shields.io/npm/dm/naming-conventions-modeler)
[![GitHub](https://img.shields.io/github/license/vhidvz/naming-conventions-modeler?style=flat)](https://vhidvz.github.io/naming-conventions-modeler/)
[![Gitter](https://badges.gitter.im/naming-conventions-modeler-npm/community.svg)](https://gitter.im/naming-conventions-modeler-npm/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![documentation](https://img.shields.io/badge/documentation-click_to_read-c27cf4)](https://vhidvz.github.io/naming-conventions-modeler/)
[![Build, Test and Publish](https://github.com/vhidvz/naming-conventions-modeler/actions/workflows/npm-ci.yml/badge.svg)](https://github.com/vhidvz/naming-conventions-modeler/actions/workflows/npm-ci.yml)

Simple and Fast `TypeSafe` naming conventions modeler implemented with `Proxy`; zero dependency.

## Quick Start Guide

```sh
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 |
| **\_-$#@** | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ | $#@ |

### Modeler

```ts
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(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'
* }
*/
```

### Tools

```ts
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
```

## License

[MIT](https://github.com/vhidvz/naming-conventions-modeler/blob/master/LICENSE)