From dee7b773f34bc38e5a069b23e7aedd83ae52692e Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 07:33:35 +0200 Subject: [PATCH 1/9] refactor: Reorganized files --- packages/ember/src/{ => ember}/entity-name/camelize.ts | 0 packages/ember/src/{ => ember}/entity-name/classify.ts | 0 .../ember/src/{ => ember}/entity-name/double-colonize.ts | 0 packages/ember/src/index.ts | 6 +++--- .../{ => ember}/entity-name/camelize/base-case.test.ts | 4 ++-- .../entity-name/camelize/edge-case-empty-string.test.ts | 7 +++++++ .../entity-name/camelize/edge-case-entity-name.test.ts | 4 ++-- .../entity-name/camelize/edge-case-spaces.test.ts | 4 ++-- .../{ => ember}/entity-name/classify/base-case.test.ts | 4 ++-- .../entity-name/classify/edge-case-empty-string.test.ts | 7 +++++++ .../entity-name/classify/edge-case-entity-name.test.ts | 4 ++-- .../entity-name/classify/edge-case-periods.test.ts | 4 ++-- .../entity-name/classify/edge-case-spaces.test.ts | 4 ++-- .../entity-name/double-colonize/base-case.test.ts | 4 ++-- .../double-colonize/edge-case-empty-string.test.ts | 7 +++++++ .../double-colonize/edge-case-entity-name.test.ts | 4 ++-- .../entity-name/camelize/edge-case-empty-string.test.ts | 7 ------- .../entity-name/classify/edge-case-empty-string.test.ts | 7 ------- .../double-colonize/edge-case-empty-string.test.ts | 7 ------- 19 files changed, 42 insertions(+), 42 deletions(-) rename packages/ember/src/{ => ember}/entity-name/camelize.ts (100%) rename packages/ember/src/{ => ember}/entity-name/classify.ts (100%) rename packages/ember/src/{ => ember}/entity-name/double-colonize.ts (100%) rename packages/ember/tests/{ => ember}/entity-name/camelize/base-case.test.ts (65%) create mode 100644 packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts rename packages/ember/tests/{ => ember}/entity-name/camelize/edge-case-entity-name.test.ts (72%) rename packages/ember/tests/{ => ember}/entity-name/camelize/edge-case-spaces.test.ts (60%) rename packages/ember/tests/{ => ember}/entity-name/classify/base-case.test.ts (65%) create mode 100644 packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts rename packages/ember/tests/{ => ember}/entity-name/classify/edge-case-entity-name.test.ts (72%) rename packages/ember/tests/{ => ember}/entity-name/classify/edge-case-periods.test.ts (55%) rename packages/ember/tests/{ => ember}/entity-name/classify/edge-case-spaces.test.ts (60%) rename packages/ember/tests/{ => ember}/entity-name/double-colonize/base-case.test.ts (65%) create mode 100644 packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts rename packages/ember/tests/{ => ember}/entity-name/double-colonize/edge-case-entity-name.test.ts (72%) delete mode 100644 packages/ember/tests/entity-name/camelize/edge-case-empty-string.test.ts delete mode 100644 packages/ember/tests/entity-name/classify/edge-case-empty-string.test.ts delete mode 100644 packages/ember/tests/entity-name/double-colonize/edge-case-empty-string.test.ts diff --git a/packages/ember/src/entity-name/camelize.ts b/packages/ember/src/ember/entity-name/camelize.ts similarity index 100% rename from packages/ember/src/entity-name/camelize.ts rename to packages/ember/src/ember/entity-name/camelize.ts diff --git a/packages/ember/src/entity-name/classify.ts b/packages/ember/src/ember/entity-name/classify.ts similarity index 100% rename from packages/ember/src/entity-name/classify.ts rename to packages/ember/src/ember/entity-name/classify.ts diff --git a/packages/ember/src/entity-name/double-colonize.ts b/packages/ember/src/ember/entity-name/double-colonize.ts similarity index 100% rename from packages/ember/src/entity-name/double-colonize.ts rename to packages/ember/src/ember/entity-name/double-colonize.ts diff --git a/packages/ember/src/index.ts b/packages/ember/src/index.ts index 9f45a3ad..622d67be 100644 --- a/packages/ember/src/index.ts +++ b/packages/ember/src/index.ts @@ -1,3 +1,3 @@ -export * from './entity-name/camelize.js'; -export * from './entity-name/classify.js'; -export * from './entity-name/double-colonize.js'; +export * from './ember/entity-name/camelize.js'; +export * from './ember/entity-name/classify.js'; +export * from './ember/entity-name/double-colonize.js'; diff --git a/packages/ember/tests/entity-name/camelize/base-case.test.ts b/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts similarity index 65% rename from packages/ember/tests/entity-name/camelize/base-case.test.ts rename to packages/ember/tests/ember/entity-name/camelize/base-case.test.ts index c9e44bfa..eeeb956f 100644 --- a/packages/ember/tests/entity-name/camelize/base-case.test.ts +++ b/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { camelize } from '../../../src/index.js'; +import { camelize } from '../../../../src/index.js'; -test('entity-name | camelize > base case', function () { +test('utils | ember | entity-name | camelize > base case', function () { assert.strictEqual(camelize('innerHTML'), 'innerHTML'); assert.strictEqual(camelize('action_name'), 'actionName'); assert.strictEqual(camelize('css-class-name'), 'cssClassName'); diff --git a/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts new file mode 100644 index 00000000..b31c2f2a --- /dev/null +++ b/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts @@ -0,0 +1,7 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { camelize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | camelize > edge case (empty string)', function () { + assert.strictEqual(camelize(''), ''); +}); diff --git a/packages/ember/tests/entity-name/camelize/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts similarity index 72% rename from packages/ember/tests/entity-name/camelize/edge-case-entity-name.test.ts rename to packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts index ca359323..0b0c5967 100644 --- a/packages/ember/tests/entity-name/camelize/edge-case-entity-name.test.ts +++ b/packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { camelize } from '../../../src/index.js'; +import { camelize } from '../../../../src/index.js'; -test('entity-name | camelize > edge case (entity name)', function () { +test('utils | ember | entity-name | camelize > edge case (entity name)', function () { assert.strictEqual(camelize('tracks'), 'tracks'); assert.strictEqual(camelize('navigation-menu'), 'navigationMenu'); assert.strictEqual(camelize('ui/page'), 'ui/page'); diff --git a/packages/ember/tests/entity-name/camelize/edge-case-spaces.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts similarity index 60% rename from packages/ember/tests/entity-name/camelize/edge-case-spaces.test.ts rename to packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts index adc694a6..9e3cb169 100644 --- a/packages/ember/tests/entity-name/camelize/edge-case-spaces.test.ts +++ b/packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { camelize } from '../../../src/index.js'; +import { camelize } from '../../../../src/index.js'; -test('entity-name | camelize > edge case (spaces)', function () { +test('utils | ember | entity-name | camelize > edge case (spaces)', function () { assert.strictEqual(camelize('my favorite items'), 'myFavoriteItems'); assert.strictEqual(camelize('My favorite items'), 'myFavoriteItems'); }); diff --git a/packages/ember/tests/entity-name/classify/base-case.test.ts b/packages/ember/tests/ember/entity-name/classify/base-case.test.ts similarity index 65% rename from packages/ember/tests/entity-name/classify/base-case.test.ts rename to packages/ember/tests/ember/entity-name/classify/base-case.test.ts index f97db6ee..98f3c271 100644 --- a/packages/ember/tests/entity-name/classify/base-case.test.ts +++ b/packages/ember/tests/ember/entity-name/classify/base-case.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { classify } from '../../../src/index.js'; +import { classify } from '../../../../src/index.js'; -test('entity-name | classify > base case', function () { +test('utils | ember | entity-name | classify > base case', function () { assert.strictEqual(classify('innerHTML'), 'InnerHTML'); assert.strictEqual(classify('action_name'), 'ActionName'); assert.strictEqual(classify('css-class-name'), 'CssClassName'); diff --git a/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts new file mode 100644 index 00000000..2491d92d --- /dev/null +++ b/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts @@ -0,0 +1,7 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { classify } from '../../../../src/index.js'; + +test('utils | ember | entity-name | classify > edge case (empty string)', function () { + assert.strictEqual(classify(''), ''); +}); diff --git a/packages/ember/tests/entity-name/classify/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts similarity index 72% rename from packages/ember/tests/entity-name/classify/edge-case-entity-name.test.ts rename to packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts index dc6f372f..b39129df 100644 --- a/packages/ember/tests/entity-name/classify/edge-case-entity-name.test.ts +++ b/packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { classify } from '../../../src/index.js'; +import { classify } from '../../../../src/index.js'; -test('entity-name | classify > edge case (entity name)', function () { +test('utils | ember | entity-name | classify > edge case (entity name)', function () { assert.strictEqual(classify('tracks'), 'Tracks'); assert.strictEqual(classify('navigation-menu'), 'NavigationMenu'); assert.strictEqual(classify('ui/page'), 'UiPage'); diff --git a/packages/ember/tests/entity-name/classify/edge-case-periods.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts similarity index 55% rename from packages/ember/tests/entity-name/classify/edge-case-periods.test.ts rename to packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts index ef152a5d..ad4b2d6b 100644 --- a/packages/ember/tests/entity-name/classify/edge-case-periods.test.ts +++ b/packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { classify } from '../../../src/index.js'; +import { classify } from '../../../../src/index.js'; -test('entity-name | classify > edge case (periods)', function () { +test('utils | ember | entity-name | classify > edge case (periods)', function () { assert.strictEqual(classify('aa.bb.cc'), 'Aa.Bb.Cc'); assert.strictEqual(classify('aa.b/b.cc'), 'Aa.BB.Cc'); }); diff --git a/packages/ember/tests/entity-name/classify/edge-case-spaces.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts similarity index 60% rename from packages/ember/tests/entity-name/classify/edge-case-spaces.test.ts rename to packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts index 5233b613..3eb48f2e 100644 --- a/packages/ember/tests/entity-name/classify/edge-case-spaces.test.ts +++ b/packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { classify } from '../../../src/index.js'; +import { classify } from '../../../../src/index.js'; -test('entity-name | classify > edge case (spaces)', function () { +test('utils | ember | entity-name | classify > edge case (spaces)', function () { assert.strictEqual(classify('my favorite items'), 'MyFavoriteItems'); assert.strictEqual(classify('My favorite items'), 'MyFavoriteItems'); }); diff --git a/packages/ember/tests/entity-name/double-colonize/base-case.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts similarity index 65% rename from packages/ember/tests/entity-name/double-colonize/base-case.test.ts rename to packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts index d796da41..a3a6ade7 100644 --- a/packages/ember/tests/entity-name/double-colonize/base-case.test.ts +++ b/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { doubleColonize } from '../../../src/index.js'; +import { doubleColonize } from '../../../../src/index.js'; -test('entity-name | double-colonize > base case', function () { +test('utils | ember | entity-name | double-colonize > base case', function () { assert.strictEqual(doubleColonize('innerHTML'), 'InnerHTML'); assert.strictEqual(doubleColonize('action_name'), 'ActionName'); assert.strictEqual(doubleColonize('css-class-name'), 'CssClassName'); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts new file mode 100644 index 00000000..ba46104f --- /dev/null +++ b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts @@ -0,0 +1,7 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { doubleColonize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | double-colonize > edge case (empty string)', function () { + assert.strictEqual(doubleColonize(''), ''); +}); diff --git a/packages/ember/tests/entity-name/double-colonize/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts similarity index 72% rename from packages/ember/tests/entity-name/double-colonize/edge-case-entity-name.test.ts rename to packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts index 19f32137..cb5916be 100644 --- a/packages/ember/tests/entity-name/double-colonize/edge-case-entity-name.test.ts +++ b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts @@ -1,8 +1,8 @@ import { assert, test } from '@codemod-utils/tests'; -import { doubleColonize } from '../../../src/index.js'; +import { doubleColonize } from '../../../../src/index.js'; -test('entity-name | double-colonize > edge case (entity name)', function () { +test('utils | ember | entity-name | double-colonize > edge case (entity name)', function () { assert.strictEqual(doubleColonize('tracks'), 'Tracks'); assert.strictEqual(doubleColonize('navigation-menu'), 'NavigationMenu'); assert.strictEqual(doubleColonize('ui/page'), 'Ui::Page'); diff --git a/packages/ember/tests/entity-name/camelize/edge-case-empty-string.test.ts b/packages/ember/tests/entity-name/camelize/edge-case-empty-string.test.ts deleted file mode 100644 index dbae3a8d..00000000 --- a/packages/ember/tests/entity-name/camelize/edge-case-empty-string.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { camelize } from '../../../src/index.js'; - -test('entity-name | camelize > edge case (empty string)', function () { - assert.strictEqual(camelize(''), ''); -}); diff --git a/packages/ember/tests/entity-name/classify/edge-case-empty-string.test.ts b/packages/ember/tests/entity-name/classify/edge-case-empty-string.test.ts deleted file mode 100644 index f633b5d4..00000000 --- a/packages/ember/tests/entity-name/classify/edge-case-empty-string.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../src/index.js'; - -test('entity-name | classify > edge case (empty string)', function () { - assert.strictEqual(classify(''), ''); -}); diff --git a/packages/ember/tests/entity-name/double-colonize/edge-case-empty-string.test.ts b/packages/ember/tests/entity-name/double-colonize/edge-case-empty-string.test.ts deleted file mode 100644 index fa9ab4be..00000000 --- a/packages/ember/tests/entity-name/double-colonize/edge-case-empty-string.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { doubleColonize } from '../../../src/index.js'; - -test('entity-name | double-colonize > edge case (empty string)', function () { - assert.strictEqual(doubleColonize(''), ''); -}); From 8c7833b9fb73c233f8ce7d4dcc6e3976ab513456 Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 07:42:37 +0200 Subject: [PATCH 2/9] breaking: Removed camelize() (unused) --- packages/ember/README.md | 13 ------- .../ember/src/ember/entity-name/camelize.ts | 34 ------------------- .../ember/src/ember/entity-name/classify.ts | 19 +++++++++-- .../src/ember/entity-name/double-colonize.ts | 2 +- packages/ember/src/index.ts | 1 - .../entity-name/camelize/base-case.test.ts | 9 ----- .../camelize/edge-case-empty-string.test.ts | 7 ---- .../camelize/edge-case-entity-name.test.ts | 13 ------- .../camelize/edge-case-spaces.test.ts | 8 ----- 9 files changed, 17 insertions(+), 89 deletions(-) delete mode 100644 packages/ember/src/ember/entity-name/camelize.ts delete mode 100644 packages/ember/tests/ember/entity-name/camelize/base-case.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts diff --git a/packages/ember/README.md b/packages/ember/README.md index 54997f94..ebd1d8cb 100644 --- a/packages/ember/README.md +++ b/packages/ember/README.md @@ -17,19 +17,6 @@ The methods are built with the **entity name** in mind, a string (possibly with (For example, the `` component has the entity name `'ui/button'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) -### camelize - -Returns a string in camel-case. - -```ts -import { camelize } from '@codemod-utils/ember'; - -const newValue = camelize('css-class-name'); - -// 'cssClassName' -``` - - ### classify Returns a string that can be used to name a JavaScript `class` (a.k.a. Pascal case). diff --git a/packages/ember/src/ember/entity-name/camelize.ts b/packages/ember/src/ember/entity-name/camelize.ts deleted file mode 100644 index d446d592..00000000 --- a/packages/ember/src/ember/entity-name/camelize.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* https://github.com/ember-cli/ember-cli-string-utils/blob/v1.1.0/index.js */ -const STRING_CAMELIZE_REGEXP = /(-|_|\.|\s)+(.)?/g; - -/** - * Returns a string in camel-case. - * - * @param value - * - * A string. - * - * @return - * - * The string in camel case. - * - * @example - * - * ```ts - * const newValue = camelize('css-class-name'); - * - * // 'cssClassName' - * ``` - */ -export function camelize(value: string): string { - return value - .replace( - STRING_CAMELIZE_REGEXP, - function (_match, _separator, character: string) { - return character ? character.toUpperCase() : ''; - }, - ) - .replace(/^([A-Z])/, function (match) { - return match.toLowerCase(); - }); -} diff --git a/packages/ember/src/ember/entity-name/classify.ts b/packages/ember/src/ember/entity-name/classify.ts index 360c1e65..5698d972 100644 --- a/packages/ember/src/ember/entity-name/classify.ts +++ b/packages/ember/src/ember/entity-name/classify.ts @@ -1,6 +1,19 @@ /* https://github.com/ember-cli/ember-cli-string-utils/blob/v1.1.0/index.js */ -/* https://github.com/emberjs/ember.js/blob/v5.3.0/blueprints/component/index.js#L255-L256 */ -import { camelize } from './camelize.js'; +/* https://github.com/emberjs/ember.js/blob/v5.11.0/blueprints/component/index.js#L256-L257 */ +const STRING_CAMELIZE_REGEXP = /(-|_|\.|\s)+(.)?/g; + +function camelize(value: string): string { + return value + .replace( + STRING_CAMELIZE_REGEXP, + function (_match, _separator, character: string) { + return character ? character.toUpperCase() : ''; + }, + ) + .replace(/^([A-Z])/, function (match) { + return match.toLowerCase(); + }); +} /** * Returns a string that can be used to name a JavaScript `class` @@ -28,7 +41,7 @@ export function classify(value: string): string { const tokensTransformed = tokens.map((token) => { const camelized = camelize(token); - return camelized.charAt(0).toUpperCase() + camelized.substring(1); + return `${camelized.charAt(0).toUpperCase()}${camelized.substring(1)}`; }); return tokensTransformed.join('.'); diff --git a/packages/ember/src/ember/entity-name/double-colonize.ts b/packages/ember/src/ember/entity-name/double-colonize.ts index 8eca5650..97c57eda 100644 --- a/packages/ember/src/ember/entity-name/double-colonize.ts +++ b/packages/ember/src/ember/entity-name/double-colonize.ts @@ -1,4 +1,4 @@ -/* https://github.com/emberjs/ember.js/blob/v5.3.0/blueprints/component-test/index.js#L13-L16 */ +/* https://github.com/emberjs/ember.js/blob/v5.11.0/blueprints/component-test/index.js#L13-L16 */ import { classify } from './classify.js'; /** diff --git a/packages/ember/src/index.ts b/packages/ember/src/index.ts index 622d67be..dd10e4c4 100644 --- a/packages/ember/src/index.ts +++ b/packages/ember/src/index.ts @@ -1,3 +1,2 @@ -export * from './ember/entity-name/camelize.js'; export * from './ember/entity-name/classify.js'; export * from './ember/entity-name/double-colonize.js'; diff --git a/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts b/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts deleted file mode 100644 index eeeb956f..00000000 --- a/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { camelize } from '../../../../src/index.js'; - -test('utils | ember | entity-name | camelize > base case', function () { - assert.strictEqual(camelize('innerHTML'), 'innerHTML'); - assert.strictEqual(camelize('action_name'), 'actionName'); - assert.strictEqual(camelize('css-class-name'), 'cssClassName'); -}); diff --git a/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts deleted file mode 100644 index b31c2f2a..00000000 --- a/packages/ember/tests/ember/entity-name/camelize/edge-case-empty-string.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { camelize } from '../../../../src/index.js'; - -test('utils | ember | entity-name | camelize > edge case (empty string)', function () { - assert.strictEqual(camelize(''), ''); -}); diff --git a/packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts deleted file mode 100644 index 0b0c5967..00000000 --- a/packages/ember/tests/ember/entity-name/camelize/edge-case-entity-name.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { camelize } from '../../../../src/index.js'; - -test('utils | ember | entity-name | camelize > edge case (entity name)', function () { - assert.strictEqual(camelize('tracks'), 'tracks'); - assert.strictEqual(camelize('navigation-menu'), 'navigationMenu'); - assert.strictEqual(camelize('ui/page'), 'ui/page'); - assert.strictEqual( - camelize('widgets/widget-3/tour-schedule/responsive-image'), - 'widgets/widget3/tourSchedule/responsiveImage', - ); -}); diff --git a/packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts b/packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts deleted file mode 100644 index 9e3cb169..00000000 --- a/packages/ember/tests/ember/entity-name/camelize/edge-case-spaces.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { camelize } from '../../../../src/index.js'; - -test('utils | ember | entity-name | camelize > edge case (spaces)', function () { - assert.strictEqual(camelize('my favorite items'), 'myFavoriteItems'); - assert.strictEqual(camelize('My favorite items'), 'myFavoriteItems'); -}); From 95cce857c3379f5c718ec701c5adeb53eb78b40b Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 07:52:01 +0200 Subject: [PATCH 3/9] chore: Updated tests to document correct usage --- .../entity-name/classify/base-case.test.ts | 8 ++++--- .../classify/edge-case-empty-string.test.ts | 7 ------- .../classify/edge-case-entity-name.test.ts | 13 ------------ .../classify/edge-case-periods.test.ts | 8 ------- .../classify/edge-case-spaces.test.ts | 8 ------- .../ember/entity-name/classify/nested.test.ts | 16 ++++++++++++++ .../entity-name/classify/wrong-input.test.ts | 21 +++++++++++++++++++ .../double-colonize/base-case.test.ts | 8 ++++--- .../edge-case-empty-string.test.ts | 13 ++++++++++-- .../edge-case-entity-name.test.ts | 13 ------------ .../double-colonize/wrong-input.test.ts | 21 +++++++++++++++++++ 11 files changed, 79 insertions(+), 57 deletions(-) delete mode 100644 packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts create mode 100644 packages/ember/tests/ember/entity-name/classify/nested.test.ts create mode 100644 packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts create mode 100644 packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts diff --git a/packages/ember/tests/ember/entity-name/classify/base-case.test.ts b/packages/ember/tests/ember/entity-name/classify/base-case.test.ts index 98f3c271..9cc62e3a 100644 --- a/packages/ember/tests/ember/entity-name/classify/base-case.test.ts +++ b/packages/ember/tests/ember/entity-name/classify/base-case.test.ts @@ -3,7 +3,9 @@ import { assert, test } from '@codemod-utils/tests'; import { classify } from '../../../../src/index.js'; test('utils | ember | entity-name | classify > base case', function () { - assert.strictEqual(classify('innerHTML'), 'InnerHTML'); - assert.strictEqual(classify('action_name'), 'ActionName'); - assert.strictEqual(classify('css-class-name'), 'CssClassName'); + assert.strictEqual(classify('hello'), 'Hello'); + + assert.strictEqual(classify('hello-world'), 'HelloWorld'); + + assert.strictEqual(classify('hello-world-123'), 'HelloWorld123'); }); diff --git a/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts deleted file mode 100644 index 2491d92d..00000000 --- a/packages/ember/tests/ember/entity-name/classify/edge-case-empty-string.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > edge case (empty string)', function () { - assert.strictEqual(classify(''), ''); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts deleted file mode 100644 index b39129df..00000000 --- a/packages/ember/tests/ember/entity-name/classify/edge-case-entity-name.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > edge case (entity name)', function () { - assert.strictEqual(classify('tracks'), 'Tracks'); - assert.strictEqual(classify('navigation-menu'), 'NavigationMenu'); - assert.strictEqual(classify('ui/page'), 'UiPage'); - assert.strictEqual( - classify('widgets/widget-3/tour-schedule/responsive-image'), - 'WidgetsWidget3TourScheduleResponsiveImage', - ); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts deleted file mode 100644 index ad4b2d6b..00000000 --- a/packages/ember/tests/ember/entity-name/classify/edge-case-periods.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > edge case (periods)', function () { - assert.strictEqual(classify('aa.bb.cc'), 'Aa.Bb.Cc'); - assert.strictEqual(classify('aa.b/b.cc'), 'Aa.BB.Cc'); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts b/packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts deleted file mode 100644 index 3eb48f2e..00000000 --- a/packages/ember/tests/ember/entity-name/classify/edge-case-spaces.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > edge case (spaces)', function () { - assert.strictEqual(classify('my favorite items'), 'MyFavoriteItems'); - assert.strictEqual(classify('My favorite items'), 'MyFavoriteItems'); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/nested.test.ts b/packages/ember/tests/ember/entity-name/classify/nested.test.ts new file mode 100644 index 00000000..e5911bd3 --- /dev/null +++ b/packages/ember/tests/ember/entity-name/classify/nested.test.ts @@ -0,0 +1,16 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { classify } from '../../../../src/index.js'; + +test('utils | ember | entity-name | classify > nested', function () { + assert.strictEqual(classify('ui/form'), 'UiForm'); + + assert.strictEqual(classify('ui/form/input'), 'UiFormInput'); + + assert.strictEqual(classify('ui/form/submit-button'), 'UiFormSubmitButton'); + + assert.strictEqual( + classify('widgets/widget-3/tour-schedule/responsive-image'), + 'WidgetsWidget3TourScheduleResponsiveImage', + ); +}); diff --git a/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts new file mode 100644 index 00000000..577c6c0e --- /dev/null +++ b/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts @@ -0,0 +1,21 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { classify } from '../../../../src/index.js'; + +test('utils | ember | entity-name | classify > wrong input', function () { + assert.strictEqual(classify(''), ''); + + assert.strictEqual(classify('-'), ''); + + assert.strictEqual(classify('/'), ''); + + assert.strictEqual(classify('ui/'), 'Ui'); + + assert.strictEqual(classify('/ui'), 'Ui'); + + assert.strictEqual(classify('ui.form.input'), 'Ui.Form.Input'); + + assert.strictEqual(classify('ui_form_input'), 'UiFormInput'); + + assert.strictEqual(classify('ui form input'), 'UiFormInput'); +}); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts index a3a6ade7..1dc4a105 100644 --- a/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts +++ b/packages/ember/tests/ember/entity-name/double-colonize/base-case.test.ts @@ -3,7 +3,9 @@ import { assert, test } from '@codemod-utils/tests'; import { doubleColonize } from '../../../../src/index.js'; test('utils | ember | entity-name | double-colonize > base case', function () { - assert.strictEqual(doubleColonize('innerHTML'), 'InnerHTML'); - assert.strictEqual(doubleColonize('action_name'), 'ActionName'); - assert.strictEqual(doubleColonize('css-class-name'), 'CssClassName'); + assert.strictEqual(doubleColonize('hello'), 'Hello'); + + assert.strictEqual(doubleColonize('hello-world'), 'HelloWorld'); + + assert.strictEqual(doubleColonize('hello-world-123'), 'HelloWorld123'); }); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts index ba46104f..32ee59d8 100644 --- a/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts +++ b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-empty-string.test.ts @@ -2,6 +2,15 @@ import { assert, test } from '@codemod-utils/tests'; import { doubleColonize } from '../../../../src/index.js'; -test('utils | ember | entity-name | double-colonize > edge case (empty string)', function () { - assert.strictEqual(doubleColonize(''), ''); +test('utils | ember | entity-name | double-colonize > nested', function () { + assert.strictEqual(doubleColonize('ui/form'), 'Ui::Form'); + assert.strictEqual(doubleColonize('ui/form/input'), 'Ui::Form::Input'); + assert.strictEqual( + doubleColonize('ui/form/submit-button'), + 'Ui::Form::SubmitButton', + ); + assert.strictEqual( + doubleColonize('widgets/widget-3/tour-schedule/responsive-image'), + 'Widgets::Widget3::TourSchedule::ResponsiveImage', + ); }); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts deleted file mode 100644 index cb5916be..00000000 --- a/packages/ember/tests/ember/entity-name/double-colonize/edge-case-entity-name.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { doubleColonize } from '../../../../src/index.js'; - -test('utils | ember | entity-name | double-colonize > edge case (entity name)', function () { - assert.strictEqual(doubleColonize('tracks'), 'Tracks'); - assert.strictEqual(doubleColonize('navigation-menu'), 'NavigationMenu'); - assert.strictEqual(doubleColonize('ui/page'), 'Ui::Page'); - assert.strictEqual( - doubleColonize('widgets/widget-3/tour-schedule/responsive-image'), - 'Widgets::Widget3::TourSchedule::ResponsiveImage', - ); -}); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts new file mode 100644 index 00000000..4f4220ac --- /dev/null +++ b/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts @@ -0,0 +1,21 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { doubleColonize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | double-colonize > wrong input', function () { + assert.strictEqual(doubleColonize(''), ''); + + assert.strictEqual(doubleColonize('-'), ''); + + assert.strictEqual(doubleColonize('/'), '::'); + + assert.strictEqual(doubleColonize('ui/'), 'Ui::'); + + assert.strictEqual(doubleColonize('/ui'), '::Ui'); + + assert.strictEqual(doubleColonize('ui.form.input'), 'Ui.Form.Input'); + + assert.strictEqual(doubleColonize('ui_form_input'), 'UiFormInput'); + + assert.strictEqual(doubleColonize('ui form input'), 'UiFormInput'); +}); From 55b1f5a9e57c3f0ed59fd3eff18d16ff3491cbec Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:09:32 +0200 Subject: [PATCH 4/9] refactor: Simplified classify() and renamed it to pascalize() --- packages/ember/README.md | 12 ++--- .../ember/src/ember/entity-name/classify.ts | 48 ------------------- .../src/ember/entity-name/double-colonize.ts | 4 +- .../ember/src/ember/entity-name/pascalize.ts | 33 +++++++++++++ packages/ember/src/index.ts | 2 +- .../entity-name/classify/base-case.test.ts | 11 ----- .../ember/entity-name/classify/nested.test.ts | 16 ------- .../entity-name/classify/wrong-input.test.ts | 21 -------- .../double-colonize/wrong-input.test.ts | 6 +-- .../entity-name/pascalize/base-case.test.ts | 11 +++++ .../entity-name/pascalize/nested.test.ts | 16 +++++++ .../entity-name/pascalize/wrong-input.test.ts | 21 ++++++++ 12 files changed, 93 insertions(+), 108 deletions(-) delete mode 100644 packages/ember/src/ember/entity-name/classify.ts create mode 100644 packages/ember/src/ember/entity-name/pascalize.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/base-case.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/nested.test.ts delete mode 100644 packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts create mode 100644 packages/ember/tests/ember/entity-name/pascalize/base-case.test.ts create mode 100644 packages/ember/tests/ember/entity-name/pascalize/nested.test.ts create mode 100644 packages/ember/tests/ember/entity-name/pascalize/wrong-input.test.ts diff --git a/packages/ember/README.md b/packages/ember/README.md index ebd1d8cb..4cded9c4 100644 --- a/packages/ember/README.md +++ b/packages/ember/README.md @@ -14,19 +14,19 @@ _Utilities for Ember_ The methods are built with the **entity name** in mind, a string (possibly with hyphens and forward slashes) that represents a set of related files in Ember. -(For example, the `` component has the entity name `'ui/button'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) +(For example, the `` component has the entity name `'ui/form/input'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) -### classify +### pascalize -Returns a string that can be used to name a JavaScript `class` (a.k.a. Pascal case). +Converts an entity name to Pascal case. Used for naming the class that is associated with the entity. ```ts -import { classify } from '@codemod-utils/ember'; +import { pascalize } from '@codemod-utils/ember'; -const newValue = classify('ui/button'); +const newValue = pascalize('ui/form/input'); -// 'UiButton' +// 'UiFormInput' ``` diff --git a/packages/ember/src/ember/entity-name/classify.ts b/packages/ember/src/ember/entity-name/classify.ts deleted file mode 100644 index 5698d972..00000000 --- a/packages/ember/src/ember/entity-name/classify.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* https://github.com/ember-cli/ember-cli-string-utils/blob/v1.1.0/index.js */ -/* https://github.com/emberjs/ember.js/blob/v5.11.0/blueprints/component/index.js#L256-L257 */ -const STRING_CAMELIZE_REGEXP = /(-|_|\.|\s)+(.)?/g; - -function camelize(value: string): string { - return value - .replace( - STRING_CAMELIZE_REGEXP, - function (_match, _separator, character: string) { - return character ? character.toUpperCase() : ''; - }, - ) - .replace(/^([A-Z])/, function (match) { - return match.toLowerCase(); - }); -} - -/** - * Returns a string that can be used to name a JavaScript `class` - * (a.k.a. Pascal case). - * - * @param value - * - * A string (an entity name). - * - * @return - * - * The string in Pascal case. - * - * @example - * - * ```ts - * const newValue = classify('ui/button'); - * - * // 'UiButton' - * ``` - */ -export function classify(value: string): string { - const tokens = value.replace(/\//g, '-').split('.'); - - const tokensTransformed = tokens.map((token) => { - const camelized = camelize(token); - - return `${camelized.charAt(0).toUpperCase()}${camelized.substring(1)}`; - }); - - return tokensTransformed.join('.'); -} diff --git a/packages/ember/src/ember/entity-name/double-colonize.ts b/packages/ember/src/ember/entity-name/double-colonize.ts index 97c57eda..44615f83 100644 --- a/packages/ember/src/ember/entity-name/double-colonize.ts +++ b/packages/ember/src/ember/entity-name/double-colonize.ts @@ -1,5 +1,5 @@ /* https://github.com/emberjs/ember.js/blob/v5.11.0/blueprints/component-test/index.js#L13-L16 */ -import { classify } from './classify.js'; +import { pascalize } from './pascalize.js'; /** * Returns a string associated with the angle bracket syntax @@ -24,7 +24,7 @@ import { classify } from './classify.js'; export function doubleColonize(value: string): string { const tokens = value.split('/'); - const tokensTransformed = tokens.map(classify); + const tokensTransformed = tokens.map(pascalize); return tokensTransformed.join('::'); } diff --git a/packages/ember/src/ember/entity-name/pascalize.ts b/packages/ember/src/ember/entity-name/pascalize.ts new file mode 100644 index 00000000..e1903c99 --- /dev/null +++ b/packages/ember/src/ember/entity-name/pascalize.ts @@ -0,0 +1,33 @@ +function _pascalize(value: string): string { + return value + .split('-') + .map((token) => { + return token.charAt(0).toUpperCase() + token.substring(1).toLowerCase(); + }) + .join(''); +} + +/** + * Converts an entity name to Pascal case. Used for naming the + * class that is associated with the entity. + * + * @param entityName + * + * The name of an entity (made up of lowercase letters, hyphen, + * and forward slash). + * + * @return + * + * The name in Pascal case. + * + * @example + * + * ```ts + * const newValue = pascalize('ui/form/input'); + * + * // 'UiFormInput' + * ``` + */ +export function pascalize(entityName: string): string { + return entityName.split('/').map(_pascalize).join(''); +} diff --git a/packages/ember/src/index.ts b/packages/ember/src/index.ts index dd10e4c4..dc594b7d 100644 --- a/packages/ember/src/index.ts +++ b/packages/ember/src/index.ts @@ -1,2 +1,2 @@ -export * from './ember/entity-name/classify.js'; export * from './ember/entity-name/double-colonize.js'; +export * from './ember/entity-name/pascalize.js'; diff --git a/packages/ember/tests/ember/entity-name/classify/base-case.test.ts b/packages/ember/tests/ember/entity-name/classify/base-case.test.ts deleted file mode 100644 index 9cc62e3a..00000000 --- a/packages/ember/tests/ember/entity-name/classify/base-case.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > base case', function () { - assert.strictEqual(classify('hello'), 'Hello'); - - assert.strictEqual(classify('hello-world'), 'HelloWorld'); - - assert.strictEqual(classify('hello-world-123'), 'HelloWorld123'); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/nested.test.ts b/packages/ember/tests/ember/entity-name/classify/nested.test.ts deleted file mode 100644 index e5911bd3..00000000 --- a/packages/ember/tests/ember/entity-name/classify/nested.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > nested', function () { - assert.strictEqual(classify('ui/form'), 'UiForm'); - - assert.strictEqual(classify('ui/form/input'), 'UiFormInput'); - - assert.strictEqual(classify('ui/form/submit-button'), 'UiFormSubmitButton'); - - assert.strictEqual( - classify('widgets/widget-3/tour-schedule/responsive-image'), - 'WidgetsWidget3TourScheduleResponsiveImage', - ); -}); diff --git a/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts deleted file mode 100644 index 577c6c0e..00000000 --- a/packages/ember/tests/ember/entity-name/classify/wrong-input.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { assert, test } from '@codemod-utils/tests'; - -import { classify } from '../../../../src/index.js'; - -test('utils | ember | entity-name | classify > wrong input', function () { - assert.strictEqual(classify(''), ''); - - assert.strictEqual(classify('-'), ''); - - assert.strictEqual(classify('/'), ''); - - assert.strictEqual(classify('ui/'), 'Ui'); - - assert.strictEqual(classify('/ui'), 'Ui'); - - assert.strictEqual(classify('ui.form.input'), 'Ui.Form.Input'); - - assert.strictEqual(classify('ui_form_input'), 'UiFormInput'); - - assert.strictEqual(classify('ui form input'), 'UiFormInput'); -}); diff --git a/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts index 4f4220ac..1783c8ef 100644 --- a/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts +++ b/packages/ember/tests/ember/entity-name/double-colonize/wrong-input.test.ts @@ -13,9 +13,9 @@ test('utils | ember | entity-name | double-colonize > wrong input', function () assert.strictEqual(doubleColonize('/ui'), '::Ui'); - assert.strictEqual(doubleColonize('ui.form.input'), 'Ui.Form.Input'); + assert.strictEqual(doubleColonize('ui.form.input'), 'Ui.form.input'); - assert.strictEqual(doubleColonize('ui_form_input'), 'UiFormInput'); + assert.strictEqual(doubleColonize('ui_form_input'), 'Ui_form_input'); - assert.strictEqual(doubleColonize('ui form input'), 'UiFormInput'); + assert.strictEqual(doubleColonize('ui form input'), 'Ui form input'); }); diff --git a/packages/ember/tests/ember/entity-name/pascalize/base-case.test.ts b/packages/ember/tests/ember/entity-name/pascalize/base-case.test.ts new file mode 100644 index 00000000..64dc8cdf --- /dev/null +++ b/packages/ember/tests/ember/entity-name/pascalize/base-case.test.ts @@ -0,0 +1,11 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { pascalize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | pascalize > base case', function () { + assert.strictEqual(pascalize('hello'), 'Hello'); + + assert.strictEqual(pascalize('hello-world'), 'HelloWorld'); + + assert.strictEqual(pascalize('hello-world-123'), 'HelloWorld123'); +}); diff --git a/packages/ember/tests/ember/entity-name/pascalize/nested.test.ts b/packages/ember/tests/ember/entity-name/pascalize/nested.test.ts new file mode 100644 index 00000000..93951b60 --- /dev/null +++ b/packages/ember/tests/ember/entity-name/pascalize/nested.test.ts @@ -0,0 +1,16 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { pascalize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | pascalize > nested', function () { + assert.strictEqual(pascalize('ui/form'), 'UiForm'); + + assert.strictEqual(pascalize('ui/form/input'), 'UiFormInput'); + + assert.strictEqual(pascalize('ui/form/submit-button'), 'UiFormSubmitButton'); + + assert.strictEqual( + pascalize('widgets/widget-3/tour-schedule/responsive-image'), + 'WidgetsWidget3TourScheduleResponsiveImage', + ); +}); diff --git a/packages/ember/tests/ember/entity-name/pascalize/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/pascalize/wrong-input.test.ts new file mode 100644 index 00000000..b831f2af --- /dev/null +++ b/packages/ember/tests/ember/entity-name/pascalize/wrong-input.test.ts @@ -0,0 +1,21 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { pascalize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | pascalize > wrong input', function () { + assert.strictEqual(pascalize(''), ''); + + assert.strictEqual(pascalize('-'), ''); + + assert.strictEqual(pascalize('/'), ''); + + assert.strictEqual(pascalize('ui/'), 'Ui'); + + assert.strictEqual(pascalize('/ui'), 'Ui'); + + assert.strictEqual(pascalize('ui.form.input'), 'Ui.form.input'); + + assert.strictEqual(pascalize('ui_form_input'), 'Ui_form_input'); + + assert.strictEqual(pascalize('ui form input'), 'Ui form input'); +}); From 0ba4adaf28c4525fd9f57d676d268cdee37efdd4 Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:15:41 +0200 Subject: [PATCH 5/9] refactor: Simplified doubleColonize() --- packages/ember/README.md | 20 +++++------ .../src/ember/entity-name/double-colonize.ts | 33 ++++++++++--------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/packages/ember/README.md b/packages/ember/README.md index 4cded9c4..dbe30b3b 100644 --- a/packages/ember/README.md +++ b/packages/ember/README.md @@ -17,29 +17,29 @@ The methods are built with the **entity name** in mind, a string (possibly with (For example, the `` component has the entity name `'ui/form/input'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) -### pascalize +### doubleColonize -Converts an entity name to Pascal case. Used for naming the class that is associated with the entity. +Converts an entity name to double colon (`::`) case. Used for writing the angle bracket syntax or the signature for a component. ```ts -import { pascalize } from '@codemod-utils/ember'; +import { doubleColonize } from '@codemod-utils/ember'; -const newValue = pascalize('ui/form/input'); +const newValue = doubleColonize('ui/form/input'); -// 'UiFormInput' +// 'Ui::Form::Input' ``` -### doubleColonize +### pascalize -Returns a string associated with the angle bracket syntax for components. +Converts an entity name to Pascal case. Used for naming the class that is associated with the entity. ```ts -import { doubleColonize } from '@codemod-utils/ember'; +import { pascalize } from '@codemod-utils/ember'; -const newValue = doubleColonize('ui/button'); +const newValue = pascalize('ui/form/input'); -// 'Ui::Button' +// 'UiFormInput' ``` diff --git a/packages/ember/src/ember/entity-name/double-colonize.ts b/packages/ember/src/ember/entity-name/double-colonize.ts index 44615f83..51a3b332 100644 --- a/packages/ember/src/ember/entity-name/double-colonize.ts +++ b/packages/ember/src/ember/entity-name/double-colonize.ts @@ -1,30 +1,33 @@ -/* https://github.com/emberjs/ember.js/blob/v5.11.0/blueprints/component-test/index.js#L13-L16 */ -import { pascalize } from './pascalize.js'; +function _pascalize(value: string): string { + return value + .split('-') + .map((token) => { + return token.charAt(0).toUpperCase() + token.substring(1).toLowerCase(); + }) + .join(''); +} /** - * Returns a string associated with the angle bracket syntax - * for components. + * Converts an entity name to double colon (`::`) case. Used for + * writing the angle bracket syntax or the signature for a component. * - * @param value + * @param entityName * - * A string (an entity name). + * The name of an entity (made up of lowercase letters, hyphen, + * and forward slash). * * @return * - * The string with double colon(s) (`::`). + * The name in double colon case. * * @example * * ```ts - * const newValue = doubleColonize('ui/button'); + * const newValue = doubleColonize('ui/form/input'); * - * // 'Ui::Button' + * // 'Ui::Form::Input' * ``` */ -export function doubleColonize(value: string): string { - const tokens = value.split('/'); - - const tokensTransformed = tokens.map(pascalize); - - return tokensTransformed.join('::'); +export function doubleColonize(entityName: string): string { + return entityName.split('/').map(_pascalize).join('::'); } From 0f7847ce6863ed6d3291bec55a39b36a55b69688 Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:52:03 +0200 Subject: [PATCH 6/9] feature: Created camelize() --- packages/ember/README.md | 13 +++++++++ .../ember/src/ember/entity-name/camelize.ts | 28 +++++++++++++++++++ packages/ember/src/index.ts | 1 + .../entity-name/camelize/base-case.test.ts | 11 ++++++++ .../ember/entity-name/camelize/nested.test.ts | 16 +++++++++++ .../entity-name/camelize/wrong-input.test.ts | 21 ++++++++++++++ 6 files changed, 90 insertions(+) create mode 100644 packages/ember/src/ember/entity-name/camelize.ts create mode 100644 packages/ember/tests/ember/entity-name/camelize/base-case.test.ts create mode 100644 packages/ember/tests/ember/entity-name/camelize/nested.test.ts create mode 100644 packages/ember/tests/ember/entity-name/camelize/wrong-input.test.ts diff --git a/packages/ember/README.md b/packages/ember/README.md index dbe30b3b..14420f2f 100644 --- a/packages/ember/README.md +++ b/packages/ember/README.md @@ -17,6 +17,19 @@ The methods are built with the **entity name** in mind, a string (possibly with (For example, the `` component has the entity name `'ui/form/input'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) +### camelize + +Converts an entity name to camel case. Used for naming the function that is associated with the entity. + +```ts +import { camelize } from '@codemod-utils/ember'; + +const newValue = camelize('ui/form/generate-error-message'); + +// 'uiFormGenerateErrorMessage' +``` + + ### doubleColonize Converts an entity name to double colon (`::`) case. Used for writing the angle bracket syntax or the signature for a component. diff --git a/packages/ember/src/ember/entity-name/camelize.ts b/packages/ember/src/ember/entity-name/camelize.ts new file mode 100644 index 00000000..8298f814 --- /dev/null +++ b/packages/ember/src/ember/entity-name/camelize.ts @@ -0,0 +1,28 @@ +import { pascalize } from './pascalize.js'; + +/** + * Converts an entity name to camel case. Used for naming the + * function that is associated with the entity. + * + * @param entityName + * + * The name of an entity (made up of lowercase letters, hyphen, + * and forward slash). + * + * @return + * + * The name in camel case. + * + * @example + * + * ```ts + * const newValue = camelize('ui/form/generate-error-message'); + * + * // 'uiFormGenerateErrorMessage' + * ``` + */ +export function camelize(entityName: string): string { + const pascalizedName = pascalize(entityName); + + return pascalizedName.charAt(0).toLowerCase() + pascalizedName.substring(1); +} diff --git a/packages/ember/src/index.ts b/packages/ember/src/index.ts index dc594b7d..51741f77 100644 --- a/packages/ember/src/index.ts +++ b/packages/ember/src/index.ts @@ -1,2 +1,3 @@ +export * from './ember/entity-name/camelize.js'; export * from './ember/entity-name/double-colonize.js'; export * from './ember/entity-name/pascalize.js'; diff --git a/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts b/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts new file mode 100644 index 00000000..1eaf9f23 --- /dev/null +++ b/packages/ember/tests/ember/entity-name/camelize/base-case.test.ts @@ -0,0 +1,11 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { camelize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | camelize > base case', function () { + assert.strictEqual(camelize('hello'), 'hello'); + + assert.strictEqual(camelize('hello-world'), 'helloWorld'); + + assert.strictEqual(camelize('hello-world-123'), 'helloWorld123'); +}); diff --git a/packages/ember/tests/ember/entity-name/camelize/nested.test.ts b/packages/ember/tests/ember/entity-name/camelize/nested.test.ts new file mode 100644 index 00000000..0b14a020 --- /dev/null +++ b/packages/ember/tests/ember/entity-name/camelize/nested.test.ts @@ -0,0 +1,16 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { camelize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | camelize > nested', function () { + assert.strictEqual(camelize('ui/form'), 'uiForm'); + + assert.strictEqual(camelize('ui/form/input'), 'uiFormInput'); + + assert.strictEqual(camelize('ui/form/submit-button'), 'uiFormSubmitButton'); + + assert.strictEqual( + camelize('widgets/widget-3/tour-schedule/responsive-image'), + 'widgetsWidget3TourScheduleResponsiveImage', + ); +}); diff --git a/packages/ember/tests/ember/entity-name/camelize/wrong-input.test.ts b/packages/ember/tests/ember/entity-name/camelize/wrong-input.test.ts new file mode 100644 index 00000000..0824d08b --- /dev/null +++ b/packages/ember/tests/ember/entity-name/camelize/wrong-input.test.ts @@ -0,0 +1,21 @@ +import { assert, test } from '@codemod-utils/tests'; + +import { camelize } from '../../../../src/index.js'; + +test('utils | ember | entity-name | camelize > wrong input', function () { + assert.strictEqual(camelize(''), ''); + + assert.strictEqual(camelize('-'), ''); + + assert.strictEqual(camelize('/'), ''); + + assert.strictEqual(camelize('ui/'), 'ui'); + + assert.strictEqual(camelize('/ui'), 'ui'); + + assert.strictEqual(camelize('ui.form.input'), 'ui.form.input'); + + assert.strictEqual(camelize('ui_form_input'), 'ui_form_input'); + + assert.strictEqual(camelize('ui form input'), 'ui form input'); +}); From e54e19a7c3d7c2597f5da644642eb5927466ffe4 Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:54:19 +0200 Subject: [PATCH 7/9] refactor: Simplified pascalize() --- .../ember/src/ember/entity-name/double-colonize.ts | 4 ++-- packages/ember/src/ember/entity-name/pascalize.ts | 13 ++++--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/ember/src/ember/entity-name/double-colonize.ts b/packages/ember/src/ember/entity-name/double-colonize.ts index 51a3b332..db02d463 100644 --- a/packages/ember/src/ember/entity-name/double-colonize.ts +++ b/packages/ember/src/ember/entity-name/double-colonize.ts @@ -1,4 +1,4 @@ -function _pascalize(value: string): string { +function pascalize(value: string): string { return value .split('-') .map((token) => { @@ -29,5 +29,5 @@ function _pascalize(value: string): string { * ``` */ export function doubleColonize(entityName: string): string { - return entityName.split('/').map(_pascalize).join('::'); + return entityName.split('/').map(pascalize).join('::'); } diff --git a/packages/ember/src/ember/entity-name/pascalize.ts b/packages/ember/src/ember/entity-name/pascalize.ts index e1903c99..3f9c1adb 100644 --- a/packages/ember/src/ember/entity-name/pascalize.ts +++ b/packages/ember/src/ember/entity-name/pascalize.ts @@ -1,11 +1,4 @@ -function _pascalize(value: string): string { - return value - .split('-') - .map((token) => { - return token.charAt(0).toUpperCase() + token.substring(1).toLowerCase(); - }) - .join(''); -} +import { doubleColonize } from './double-colonize.js'; /** * Converts an entity name to Pascal case. Used for naming the @@ -29,5 +22,7 @@ function _pascalize(value: string): string { * ``` */ export function pascalize(entityName: string): string { - return entityName.split('/').map(_pascalize).join(''); + const doubleColonizedName = doubleColonize(entityName); + + return doubleColonizedName.replaceAll('::', ''); } From c1ddd65e03ae02edd0995ac45ddcab61bb238df5 Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:55:20 +0200 Subject: [PATCH 8/9] chore: Simplified README --- packages/ember/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/ember/README.md b/packages/ember/README.md index 14420f2f..b427cb35 100644 --- a/packages/ember/README.md +++ b/packages/ember/README.md @@ -12,11 +12,6 @@ _Utilities for Ember_ ## API -The methods are built with the **entity name** in mind, a string (possibly with hyphens and forward slashes) that represents a set of related files in Ember. - -(For example, the `` component has the entity name `'ui/form/input'`. In the Ember source code, you may see variable names like `entityName` or `moduleName`.) - - ### camelize Converts an entity name to camel case. Used for naming the function that is associated with the entity. From a1248a20d881ed9b34592f299f09567caa5e533c Mon Sep 17 00:00:00 2001 From: ijlee2 Date: Wed, 28 Aug 2024 08:57:08 +0200 Subject: [PATCH 9/9] chore: Added changeset --- .changeset/dull-donkeys-taste.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/dull-donkeys-taste.md diff --git a/.changeset/dull-donkeys-taste.md b/.changeset/dull-donkeys-taste.md new file mode 100644 index 00000000..4a224fee --- /dev/null +++ b/.changeset/dull-donkeys-taste.md @@ -0,0 +1,5 @@ +--- +"@codemod-utils/ember": major +--- + +Narrowed usage to entity names, in order to remove dependency on ember-cli-string-utils