Skip to content

Commit f22a636

Browse files
committed
deprecate String prototype extensions
1 parent 05e278a commit f22a636

File tree

1 file changed

+28
-21
lines changed

1 file changed

+28
-21
lines changed

packages/@ember/string/index.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export { getStrings as _getStrings, setStrings as _setStrings } from './lib/stri
66

77
import { ENV } from '@ember/-internals/environment';
88
import { Cache } from '@ember/-internals/utils';
9+
import { deprecate } from '@ember/debug';
910
import { getString } from './lib/string_registry';
1011

1112
const STRING_DASHERIZE_REGEXP = /[ _]/g;
@@ -279,6 +280,26 @@ export function capitalize(str: string): string {
279280
}
280281

281282
if (ENV.EXTEND_PROTOTYPES.String) {
283+
let deprecateEmberStringPrototypeExtension = function (
284+
name: string,
285+
fn: (utility: string, ...options: any) => string | string[],
286+
message = `String prototype extensions are deprecated. Please, us ${name} from '@ember/string' instead.`
287+
) {
288+
return function (this: string) {
289+
deprecate(message, false, {
290+
id: 'ember-string.prototype-extensions',
291+
for: '@ember/string',
292+
since: {
293+
available: '3.24',
294+
},
295+
until: '4.0.0',
296+
url: 'https://deprecations.emberjs.com/v3.x/#toc_ember-string-prototype_extensions',
297+
});
298+
299+
return fn(this, ...arguments);
300+
};
301+
};
302+
282303
Object.defineProperties(String.prototype, {
283304
/**
284305
See [String.w](/ember/release/classes/String/methods/w?anchor=w).
@@ -292,9 +313,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
292313
configurable: true,
293314
enumerable: false,
294315
writeable: true,
295-
value() {
296-
return w(this);
297-
},
316+
value: deprecateEmberStringPrototypeExtension('w', w),
298317
},
299318

300319
/**
@@ -326,9 +345,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
326345
configurable: true,
327346
enumerable: false,
328347
writeable: true,
329-
value() {
330-
return camelize(this);
331-
},
348+
value: deprecateEmberStringPrototypeExtension('camelize', camelize),
332349
},
333350

334351
/**
@@ -343,9 +360,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
343360
configurable: true,
344361
enumerable: false,
345362
writeable: true,
346-
value() {
347-
return decamelize(this);
348-
},
363+
value: deprecateEmberStringPrototypeExtension('decamelize', decamelize),
349364
},
350365

351366
/**
@@ -360,9 +375,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
360375
configurable: true,
361376
enumerable: false,
362377
writeable: true,
363-
value() {
364-
return dasherize(this);
365-
},
378+
value: deprecateEmberStringPrototypeExtension('dasherize', dasherize),
366379
},
367380

368381
/**
@@ -377,9 +390,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
377390
configurable: true,
378391
enumerable: false,
379392
writeable: true,
380-
value() {
381-
return underscore(this);
382-
},
393+
value: deprecateEmberStringPrototypeExtension('underscore', underscore),
383394
},
384395

385396
/**
@@ -394,9 +405,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
394405
configurable: true,
395406
enumerable: false,
396407
writeable: true,
397-
value() {
398-
return classify(this);
399-
},
408+
value: deprecateEmberStringPrototypeExtension('classify', classify),
400409
},
401410

402411
/**
@@ -411,9 +420,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
411420
configurable: true,
412421
enumerable: false,
413422
writeable: true,
414-
value() {
415-
return capitalize(this);
416-
},
423+
value: deprecateEmberStringPrototypeExtension('capitalize', capitalize),
417424
},
418425
});
419426
}

0 commit comments

Comments
 (0)