@e22m4u/ts-rest-router 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +19 -58
- package/dist/esm/debuggable-service.d.ts +3 -17
- package/dist/esm/debuggable-service.js +7 -24
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/utils/index.d.ts +0 -2
- package/dist/esm/utils/index.js +0 -2
- package/package.json +10 -10
- package/src/debuggable-service.spec.ts +0 -8
- package/src/debuggable-service.ts +7 -28
- package/src/index.ts +2 -1
- package/src/utils/index.ts +0 -2
- package/dist/esm/utils/create-error.d.ts +0 -10
- package/dist/esm/utils/create-error.js +0 -13
- package/dist/esm/utils/create-error.spec.d.ts +0 -1
- package/dist/esm/utils/create-error.spec.js +0 -8
- package/dist/esm/utils/to-camel-case.d.ts +0 -6
- package/dist/esm/utils/to-camel-case.js +0 -11
- package/dist/esm/utils/to-camel-case.spec.d.ts +0 -1
- package/dist/esm/utils/to-camel-case.spec.js +0 -10
- package/src/utils/create-error.spec.ts +0 -9
- package/src/utils/create-error.ts +0 -19
- package/src/utils/to-camel-case.spec.ts +0 -11
- package/src/utils/to-camel-case.ts +0 -11
package/dist/cjs/index.cjs
CHANGED
@@ -16,6 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
16
16
|
}
|
17
17
|
return to;
|
18
18
|
};
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
19
20
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
20
21
|
|
21
22
|
// dist/esm/index.js
|
@@ -41,8 +42,6 @@ __export(index_exports, {
|
|
41
42
|
RestRouter: () => RestRouter,
|
42
43
|
afterAction: () => afterAction,
|
43
44
|
beforeAction: () => beforeAction,
|
44
|
-
capitalize: () => capitalize,
|
45
|
-
createError: () => createError,
|
46
45
|
deleteAction: () => deleteAction,
|
47
46
|
getAction: () => getAction,
|
48
47
|
httpRequest: () => httpRequest,
|
@@ -65,77 +64,41 @@ __export(index_exports, {
|
|
65
64
|
requestQuery: () => requestQuery,
|
66
65
|
responseBody: () => responseBody,
|
67
66
|
restAction: () => restAction,
|
68
|
-
restController: () => restController
|
69
|
-
toCamelCase: () => toCamelCase
|
67
|
+
restController: () => restController
|
70
68
|
});
|
71
69
|
module.exports = __toCommonJS(index_exports);
|
72
|
-
|
73
|
-
// dist/esm/utils/capitalize.js
|
74
|
-
function capitalize(input) {
|
75
|
-
return input.charAt(0).toUpperCase() + input.slice(1);
|
76
|
-
}
|
77
|
-
__name(capitalize, "capitalize");
|
78
|
-
|
79
|
-
// dist/esm/utils/create-error.js
|
80
|
-
var import_js_format = require("@e22m4u/js-format");
|
81
|
-
function createError(errorCtor, message, ...args) {
|
82
|
-
const interpolatedMessage = (0, import_js_format.format)(message, ...args);
|
83
|
-
return new errorCtor(interpolatedMessage);
|
84
|
-
}
|
85
|
-
__name(createError, "createError");
|
86
|
-
|
87
|
-
// dist/esm/utils/to-camel-case.js
|
88
|
-
function toCamelCase(input) {
|
89
|
-
return input.replace(/(^\w|[A-Z]|\b\w)/g, (c) => c.toUpperCase()).replace(/\W+/g, "").replace(/(^\w)/g, (c) => c.toLowerCase());
|
90
|
-
}
|
91
|
-
__name(toCamelCase, "toCamelCase");
|
70
|
+
__reExport(index_exports, require("@e22m4u/js-trie-router"), module.exports);
|
92
71
|
|
93
72
|
// dist/esm/rest-router.js
|
94
73
|
var import_js_trie_router3 = require("@e22m4u/js-trie-router");
|
95
74
|
|
96
75
|
// dist/esm/debuggable-service.js
|
97
76
|
var import_js_service = require("@e22m4u/js-service");
|
98
|
-
var
|
99
|
-
var _DebuggableService = class _DebuggableService extends import_js_service.Service {
|
100
|
-
/**
|
101
|
-
* Debug.
|
102
|
-
*/
|
103
|
-
debug;
|
104
|
-
/**
|
105
|
-
* Возвращает функцию-отладчик с сегментом пространства имен
|
106
|
-
* указанного в параметре метода.
|
107
|
-
*
|
108
|
-
* @param method
|
109
|
-
* @protected
|
110
|
-
*/
|
111
|
-
getDebuggerFor(method) {
|
112
|
-
return this.debug.withHash().withNs(method.name);
|
113
|
-
}
|
77
|
+
var _DebuggableService = class _DebuggableService extends import_js_service.DebuggableService {
|
114
78
|
/**
|
115
79
|
* Constructor.
|
116
80
|
*
|
117
81
|
* @param container
|
118
82
|
*/
|
119
83
|
constructor(container) {
|
120
|
-
super(container
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
debug("Service created.");
|
84
|
+
super(container, {
|
85
|
+
namespace: "tsRestRouter",
|
86
|
+
noEnvironmentNamespace: true
|
87
|
+
});
|
125
88
|
}
|
126
89
|
};
|
127
90
|
__name(_DebuggableService, "DebuggableService");
|
128
91
|
var DebuggableService = _DebuggableService;
|
129
92
|
|
130
93
|
// dist/esm/controller-registry.js
|
131
|
-
var
|
94
|
+
var import_js_format2 = require("@e22m4u/js-format");
|
132
95
|
var import_js_trie_router2 = require("@e22m4u/js-trie-router");
|
133
96
|
var import_ts_data_schema2 = require("@e22m4u/ts-data-schema");
|
134
97
|
var import_ts_data_schema3 = require("@e22m4u/ts-data-schema");
|
135
98
|
|
136
99
|
// dist/esm/errors/not-a-controller-error.js
|
137
|
-
var
|
138
|
-
var _NotAControllerError = class _NotAControllerError extends
|
100
|
+
var import_js_format = require("@e22m4u/js-format");
|
101
|
+
var _NotAControllerError = class _NotAControllerError extends import_js_format.Errorf {
|
139
102
|
/**
|
140
103
|
* Constructor.
|
141
104
|
*
|
@@ -631,7 +594,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
631
594
|
addController(ctor, options) {
|
632
595
|
const debug = this.getDebuggerFor(this.addController);
|
633
596
|
if (this.hasController(ctor))
|
634
|
-
throw new
|
597
|
+
throw new import_js_format2.Errorf("The controller %v is already registered.", ctor.name);
|
635
598
|
const controllerMd = RestControllerReflector.getMetadata(ctor);
|
636
599
|
if (!controllerMd)
|
637
600
|
throw new NotAControllerError(ctor);
|
@@ -718,7 +681,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
718
681
|
debug("Metadata target is %s.", ctor.name);
|
719
682
|
const md = RestControllerReflector.getMetadata(ctor);
|
720
683
|
if (!md)
|
721
|
-
throw new
|
684
|
+
throw new import_js_format2.Errorf("Controller %v has no metadata.", ctor);
|
722
685
|
const res = md.path || "";
|
723
686
|
debug("Controller path prefix is %v.", res);
|
724
687
|
return md.path || "";
|
@@ -822,7 +785,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
822
785
|
debug("Target is %s.", ctor.name);
|
823
786
|
const md = RestControllerReflector.getMetadata(ctor);
|
824
787
|
if (!md)
|
825
|
-
throw new
|
788
|
+
throw new import_js_format2.Errorf("Controller %v has no metadata.", ctor);
|
826
789
|
let res = [];
|
827
790
|
if (md.before)
|
828
791
|
res = Array.isArray(md.before) ? md.before : [md.before];
|
@@ -839,7 +802,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
839
802
|
debug("Getting post-handlers from @restController metadata.");
|
840
803
|
const md = RestControllerReflector.getMetadata(ctor);
|
841
804
|
if (!md)
|
842
|
-
throw new
|
805
|
+
throw new import_js_format2.Errorf("Controller %v has no metadata.", ctor);
|
843
806
|
let res = [];
|
844
807
|
if (md.after)
|
845
808
|
res = Array.isArray(md.after) ? md.after : [md.after];
|
@@ -858,7 +821,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
858
821
|
const actionsMd = RestActionReflector.getMetadata(ctor);
|
859
822
|
const actionMd = actionsMd.get(actionName);
|
860
823
|
if (!actionMd)
|
861
|
-
throw new
|
824
|
+
throw new import_js_format2.Errorf("Action %s.%s has no metadata.", ctor.name, actionName);
|
862
825
|
let res = [];
|
863
826
|
if (actionMd.before)
|
864
827
|
res = Array.isArray(actionMd.before) ? actionMd.before : [actionMd.before];
|
@@ -877,7 +840,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
877
840
|
const actionsMd = RestActionReflector.getMetadata(ctor);
|
878
841
|
const actionMd = actionsMd.get(actionName);
|
879
842
|
if (!actionMd)
|
880
|
-
throw new
|
843
|
+
throw new import_js_format2.Errorf("Action %s.%s has no metadata.", ctor.name, actionName);
|
881
844
|
let res = [];
|
882
845
|
if (actionMd.after)
|
883
846
|
res = Array.isArray(actionMd.after) ? actionMd.after : [actionMd.after];
|
@@ -975,7 +938,7 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
975
938
|
}
|
976
939
|
});
|
977
940
|
if (requestContext2.container.has(controllerCtor))
|
978
|
-
throw new
|
941
|
+
throw new import_js_format2.Errorf("The controller %v is already registered, which breaks controller isolation per request.", controllerCtor.name);
|
979
942
|
const controller = requestContext2.container.get(controllerCtor);
|
980
943
|
return controller[actionName](...args);
|
981
944
|
};
|
@@ -1027,8 +990,6 @@ var RestRouter = _RestRouter;
|
|
1027
990
|
RestRouter,
|
1028
991
|
afterAction,
|
1029
992
|
beforeAction,
|
1030
|
-
capitalize,
|
1031
|
-
createError,
|
1032
993
|
deleteAction,
|
1033
994
|
getAction,
|
1034
995
|
httpRequest,
|
@@ -1052,5 +1013,5 @@ var RestRouter = _RestRouter;
|
|
1052
1013
|
responseBody,
|
1053
1014
|
restAction,
|
1054
1015
|
restController,
|
1055
|
-
|
1016
|
+
...require("@e22m4u/js-trie-router")
|
1056
1017
|
});
|
@@ -1,23 +1,9 @@
|
|
1
|
-
import { Callable } from './types.js';
|
2
|
-
import { Debugger } from '@e22m4u/js-debug';
|
3
|
-
import { Service } from '@e22m4u/js-service';
|
4
1
|
import { ServiceContainer } from '@e22m4u/js-service';
|
2
|
+
import { DebuggableService as BaseDebuggableService } from '@e22m4u/js-service';
|
5
3
|
/**
|
6
|
-
*
|
4
|
+
* Base debuggable service.
|
7
5
|
*/
|
8
|
-
export declare class DebuggableService extends
|
9
|
-
/**
|
10
|
-
* Debug.
|
11
|
-
*/
|
12
|
-
debug: Debugger;
|
13
|
-
/**
|
14
|
-
* Возвращает функцию-отладчик с сегментом пространства имен
|
15
|
-
* указанного в параметре метода.
|
16
|
-
*
|
17
|
-
* @param method
|
18
|
-
* @protected
|
19
|
-
*/
|
20
|
-
protected getDebuggerFor(method: Callable): Debugger;
|
6
|
+
export declare class DebuggableService extends BaseDebuggableService {
|
21
7
|
/**
|
22
8
|
* Constructor.
|
23
9
|
*
|
@@ -1,34 +1,17 @@
|
|
1
|
-
import {
|
2
|
-
import { toCamelCase } from './utils/index.js';
|
3
|
-
import { createDebugger } from '@e22m4u/js-debug';
|
1
|
+
import { DebuggableService as BaseDebuggableService } from '@e22m4u/js-service';
|
4
2
|
/**
|
5
|
-
*
|
3
|
+
* Base debuggable service.
|
6
4
|
*/
|
7
|
-
export class DebuggableService extends
|
8
|
-
/**
|
9
|
-
* Debug.
|
10
|
-
*/
|
11
|
-
debug;
|
12
|
-
/**
|
13
|
-
* Возвращает функцию-отладчик с сегментом пространства имен
|
14
|
-
* указанного в параметре метода.
|
15
|
-
*
|
16
|
-
* @param method
|
17
|
-
* @protected
|
18
|
-
*/
|
19
|
-
getDebuggerFor(method) {
|
20
|
-
return this.debug.withHash().withNs(method.name);
|
21
|
-
}
|
5
|
+
export class DebuggableService extends BaseDebuggableService {
|
22
6
|
/**
|
23
7
|
* Constructor.
|
24
8
|
*
|
25
9
|
* @param container
|
26
10
|
*/
|
27
11
|
constructor(container) {
|
28
|
-
super(container
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
debug('Service created.');
|
12
|
+
super(container, {
|
13
|
+
namespace: 'tsRestRouter',
|
14
|
+
noEnvironmentNamespace: true,
|
15
|
+
});
|
33
16
|
}
|
34
17
|
}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/utils/index.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@e22m4u/ts-rest-router",
|
3
|
-
"version": "0.6.
|
3
|
+
"version": "0.6.1",
|
4
4
|
"description": "Декларативный REST-маршрутизатор на основе контроллеров для TypeScript",
|
5
5
|
"author": "Mikhail Evstropov <e22m4u@yandex.ru>",
|
6
6
|
"license": "MIT",
|
@@ -43,34 +43,34 @@
|
|
43
43
|
"dependencies": {
|
44
44
|
"@e22m4u/js-debug": "~0.3.1",
|
45
45
|
"@e22m4u/js-format": "~0.2.0",
|
46
|
-
"@e22m4u/js-service": "~0.4.
|
46
|
+
"@e22m4u/js-service": "~0.4.2",
|
47
47
|
"@e22m4u/js-trie-router": "~0.3.1",
|
48
|
-
"@e22m4u/ts-data-schema": "~0.4.
|
49
|
-
"@e22m4u/ts-reflector": "~0.1.
|
48
|
+
"@e22m4u/ts-data-schema": "~0.4.4",
|
49
|
+
"@e22m4u/ts-reflector": "~0.1.8",
|
50
50
|
"http-errors": "~2.0.0"
|
51
51
|
},
|
52
52
|
"devDependencies": {
|
53
53
|
"@commitlint/cli": "~20.1.0",
|
54
54
|
"@commitlint/config-conventional": "~20.0.0",
|
55
|
-
"@eslint/js": "~9.
|
55
|
+
"@eslint/js": "~9.37.0",
|
56
56
|
"@types/chai": "~5.2.2",
|
57
57
|
"@types/debug": "~4.1.12",
|
58
58
|
"@types/http-errors": "~2.0.5",
|
59
59
|
"@types/mocha": "~10.0.10",
|
60
|
-
"@types/node": "~24.
|
60
|
+
"@types/node": "~24.7.0",
|
61
61
|
"c8": "~10.1.3",
|
62
62
|
"chai": "~6.2.0",
|
63
63
|
"esbuild": "~0.25.10",
|
64
|
-
"eslint": "~9.
|
64
|
+
"eslint": "~9.37.0",
|
65
65
|
"eslint-config-prettier": "~10.1.8",
|
66
66
|
"eslint-plugin-chai-expect": "~3.1.0",
|
67
|
-
"eslint-plugin-mocha": "~11.
|
67
|
+
"eslint-plugin-mocha": "~11.2.0",
|
68
68
|
"husky": "~9.1.7",
|
69
|
-
"mocha": "~11.7.
|
69
|
+
"mocha": "~11.7.4",
|
70
70
|
"prettier": "~3.6.2",
|
71
71
|
"rimraf": "~6.0.1",
|
72
72
|
"tsx": "~4.20.6",
|
73
73
|
"typescript": "~5.9.3",
|
74
|
-
"typescript-eslint": "~8.
|
74
|
+
"typescript-eslint": "~8.46.0"
|
75
75
|
}
|
76
76
|
}
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import {expect} from 'chai';
|
2
|
-
import {Service} from '@e22m4u/js-service';
|
3
2
|
import {DebuggableService} from './debuggable-service.js';
|
4
3
|
|
5
4
|
describe('DebuggableService', function () {
|
@@ -7,11 +6,4 @@ describe('DebuggableService', function () {
|
|
7
6
|
const res = new DebuggableService();
|
8
7
|
expect(typeof res.debug).to.be.eq('function');
|
9
8
|
});
|
10
|
-
|
11
|
-
describe('constructor', function () {
|
12
|
-
it('extends the Service class', function () {
|
13
|
-
const res = new DebuggableService();
|
14
|
-
expect(res).to.be.instanceof(Service);
|
15
|
-
});
|
16
|
-
});
|
17
9
|
});
|
@@ -1,40 +1,19 @@
|
|
1
|
-
import {Callable} from './types.js';
|
2
|
-
import {Debugger} from '@e22m4u/js-debug';
|
3
|
-
import {Service} from '@e22m4u/js-service';
|
4
|
-
import {toCamelCase} from './utils/index.js';
|
5
|
-
import {createDebugger} from '@e22m4u/js-debug';
|
6
1
|
import {ServiceContainer} from '@e22m4u/js-service';
|
2
|
+
import {DebuggableService as BaseDebuggableService} from '@e22m4u/js-service';
|
7
3
|
|
8
4
|
/**
|
9
|
-
*
|
5
|
+
* Base debuggable service.
|
10
6
|
*/
|
11
|
-
export class DebuggableService extends
|
12
|
-
/**
|
13
|
-
* Debug.
|
14
|
-
*/
|
15
|
-
debug: Debugger;
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Возвращает функцию-отладчик с сегментом пространства имен
|
19
|
-
* указанного в параметре метода.
|
20
|
-
*
|
21
|
-
* @param method
|
22
|
-
* @protected
|
23
|
-
*/
|
24
|
-
protected getDebuggerFor(method: Callable) {
|
25
|
-
return this.debug.withHash().withNs(method.name);
|
26
|
-
}
|
27
|
-
|
7
|
+
export class DebuggableService extends BaseDebuggableService {
|
28
8
|
/**
|
29
9
|
* Constructor.
|
30
10
|
*
|
31
11
|
* @param container
|
32
12
|
*/
|
33
13
|
constructor(container?: ServiceContainer) {
|
34
|
-
super(container
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
debug('Service created.');
|
14
|
+
super(container, {
|
15
|
+
namespace: 'tsRestRouter',
|
16
|
+
noEnvironmentNamespace: true,
|
17
|
+
});
|
39
18
|
}
|
40
19
|
}
|
package/src/index.ts
CHANGED
package/src/utils/index.ts
CHANGED
@@ -1,10 +0,0 @@
|
|
1
|
-
import { Constructor } from '../types.js';
|
2
|
-
/**
|
3
|
-
* Create error.
|
4
|
-
*
|
5
|
-
* @param {Function} errorCtor
|
6
|
-
* @param {string} message
|
7
|
-
* @param {*[]|undefined} args
|
8
|
-
* @returns {object}
|
9
|
-
*/
|
10
|
-
export declare function createError<T>(errorCtor: Constructor<T>, message: string, ...args: unknown[]): T;
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import { format } from '@e22m4u/js-format';
|
2
|
-
/**
|
3
|
-
* Create error.
|
4
|
-
*
|
5
|
-
* @param {Function} errorCtor
|
6
|
-
* @param {string} message
|
7
|
-
* @param {*[]|undefined} args
|
8
|
-
* @returns {object}
|
9
|
-
*/
|
10
|
-
export function createError(errorCtor, message, ...args) {
|
11
|
-
const interpolatedMessage = format(message, ...args);
|
12
|
-
return new errorCtor(interpolatedMessage);
|
13
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,8 +0,0 @@
|
|
1
|
-
import { expect } from 'chai';
|
2
|
-
import { createError } from './create-error.js';
|
3
|
-
describe('createError', function () {
|
4
|
-
it('interpolates the given message with arguments', function () {
|
5
|
-
const res = createError(Error, 'My %s', 'message');
|
6
|
-
expect(res.message).to.be.eq('My message');
|
7
|
-
});
|
8
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,10 +0,0 @@
|
|
1
|
-
import { expect } from 'chai';
|
2
|
-
import { toCamelCase } from './to-camel-case.js';
|
3
|
-
describe('toCamelCase', function () {
|
4
|
-
it('returns a camelCase string', function () {
|
5
|
-
expect(toCamelCase('TestString')).to.be.eq('testString');
|
6
|
-
expect(toCamelCase('test-string')).to.be.eq('testString');
|
7
|
-
expect(toCamelCase('test string')).to.be.eq('testString');
|
8
|
-
expect(toCamelCase('Test string')).to.be.eq('testString');
|
9
|
-
});
|
10
|
-
});
|
@@ -1,9 +0,0 @@
|
|
1
|
-
import {expect} from 'chai';
|
2
|
-
import {createError} from './create-error.js';
|
3
|
-
|
4
|
-
describe('createError', function () {
|
5
|
-
it('interpolates the given message with arguments', function () {
|
6
|
-
const res = createError(Error, 'My %s', 'message');
|
7
|
-
expect(res.message).to.be.eq('My message');
|
8
|
-
});
|
9
|
-
});
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import {Constructor} from '../types.js';
|
2
|
-
import {format} from '@e22m4u/js-format';
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Create error.
|
6
|
-
*
|
7
|
-
* @param {Function} errorCtor
|
8
|
-
* @param {string} message
|
9
|
-
* @param {*[]|undefined} args
|
10
|
-
* @returns {object}
|
11
|
-
*/
|
12
|
-
export function createError<T>(
|
13
|
-
errorCtor: Constructor<T>,
|
14
|
-
message: string,
|
15
|
-
...args: unknown[]
|
16
|
-
): T {
|
17
|
-
const interpolatedMessage = format(message, ...args);
|
18
|
-
return new errorCtor(interpolatedMessage);
|
19
|
-
}
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import {expect} from 'chai';
|
2
|
-
import {toCamelCase} from './to-camel-case.js';
|
3
|
-
|
4
|
-
describe('toCamelCase', function () {
|
5
|
-
it('returns a camelCase string', function () {
|
6
|
-
expect(toCamelCase('TestString')).to.be.eq('testString');
|
7
|
-
expect(toCamelCase('test-string')).to.be.eq('testString');
|
8
|
-
expect(toCamelCase('test string')).to.be.eq('testString');
|
9
|
-
expect(toCamelCase('Test string')).to.be.eq('testString');
|
10
|
-
});
|
11
|
-
});
|