Skip to content

vhidvz/naming-conventions-modeler

Repository files navigation

Naming Conventions Modeler

npm Coverage npm GitHub Gitter documentation Build, Test and Publish

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

Quick Start Guide

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

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

Tools

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