@abp/ng.schematics 5.0.1 → 5.0.2
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/README.md +3 -3
- package/collection.json +29 -29
- package/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template +8 -8
- package/commands/api/files-model/proxy/__namespace@dir__/models.ts.template +9 -9
- package/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template +25 -25
- package/commands/api/index.d.ts +2 -2
- package/commands/api/index.js +112 -112
- package/commands/api/schema.json +45 -45
- package/commands/proxy-add/index.d.ts +2 -2
- package/commands/proxy-add/index.js +41 -41
- package/commands/proxy-add/schema.json +45 -45
- package/commands/proxy-index/index.d.ts +4 -4
- package/commands/proxy-index/index.js +14 -14
- package/commands/proxy-index/schema.json +18 -18
- package/commands/proxy-refresh/index.d.ts +3 -3
- package/commands/proxy-refresh/index.js +27 -27
- package/commands/proxy-refresh/schema.json +45 -45
- package/commands/proxy-remove/index.d.ts +3 -3
- package/commands/proxy-remove/index.js +33 -33
- package/commands/proxy-remove/schema.json +45 -45
- package/constants/api.d.ts +1 -1
- package/constants/api.js +4 -4
- package/constants/index.d.ts +4 -4
- package/constants/index.js +16 -16
- package/constants/proxy.d.ts +4 -4
- package/constants/proxy.js +24 -24
- package/constants/system-types.d.ts +1 -1
- package/constants/system-types.js +27 -27
- package/constants/volo.d.ts +1 -1
- package/constants/volo.js +4 -4
- package/enums/binding-source-id.d.ts +6 -6
- package/enums/binding-source-id.js +10 -10
- package/enums/exception.d.ts +16 -16
- package/enums/exception.js +2 -2
- package/enums/import-keyword.d.ts +4 -4
- package/enums/import-keyword.js +8 -8
- package/enums/index.d.ts +4 -4
- package/enums/index.js +16 -16
- package/enums/method-modifier.d.ts +6 -6
- package/enums/method-modifier.js +10 -10
- package/index.d.ts +1 -1
- package/index.js +2 -2
- package/models/api-definition.d.ts +72 -72
- package/models/api-definition.js +2 -2
- package/models/generate-proxy-schema.d.ts +18 -18
- package/models/generate-proxy-schema.js +2 -2
- package/models/import.d.ts +11 -11
- package/models/import.js +13 -13
- package/models/index.d.ts +10 -10
- package/models/index.js +22 -22
- package/models/method.d.ts +31 -31
- package/models/method.js +61 -61
- package/models/model.d.ts +48 -48
- package/models/model.js +71 -71
- package/models/project.d.ts +5 -5
- package/models/project.js +2 -2
- package/models/proxy-config.d.ts +4 -4
- package/models/proxy-config.js +2 -2
- package/models/service.d.ts +21 -21
- package/models/service.js +11 -11
- package/models/tree.d.ts +1 -1
- package/models/tree.js +2 -2
- package/models/util.d.ts +7 -7
- package/models/util.js +2 -2
- package/package.json +1 -1
- package/test-setup.d.ts +1 -1
- package/test-setup.js +3 -3
- package/utils/angular/ast-utils.d.ts +115 -115
- package/utils/angular/ast-utils.js +598 -598
- package/utils/angular/change.d.ts +66 -66
- package/utils/angular/change.js +96 -96
- package/utils/angular/config.d.ts +455 -455
- package/utils/angular/config.js +70 -70
- package/utils/angular/dependencies.d.ts +23 -23
- package/utils/angular/dependencies.js +58 -58
- package/utils/angular/find-module.d.ts +35 -35
- package/utils/angular/find-module.js +105 -105
- package/utils/angular/index.d.ts +17 -17
- package/utils/angular/index.js +29 -29
- package/utils/angular/json-file.d.ts +23 -23
- package/utils/angular/json-file.js +61 -61
- package/utils/angular/json-utils.d.ts +14 -14
- package/utils/angular/json-utils.js +158 -158
- package/utils/angular/latest-versions.d.ts +18 -18
- package/utils/angular/latest-versions.js +26 -26
- package/utils/angular/lint-fix.d.ts +9 -9
- package/utils/angular/lint-fix.js +41 -41
- package/utils/angular/ng-ast-utils.d.ts +5 -5
- package/utils/angular/ng-ast-utils.js +75 -75
- package/utils/angular/parse-name.d.ts +13 -13
- package/utils/angular/parse-name.js +21 -21
- package/utils/angular/paths.d.ts +8 -8
- package/utils/angular/paths.js +21 -21
- package/utils/angular/project-targets.d.ts +9 -9
- package/utils/angular/project-targets.js +15 -15
- package/utils/angular/tsconfig.d.ts +16 -16
- package/utils/angular/tsconfig.js +62 -62
- package/utils/angular/validation.d.ts +4 -4
- package/utils/angular/validation.js +73 -73
- package/utils/angular/workspace-models.d.ts +159 -159
- package/utils/angular/workspace-models.js +29 -29
- package/utils/angular/workspace.d.ts +18 -18
- package/utils/angular/workspace.js +75 -75
- package/utils/api.d.ts +2 -2
- package/utils/api.js +8 -8
- package/utils/ast.d.ts +4 -4
- package/utils/ast.js +23 -23
- package/utils/barrel.d.ts +4 -4
- package/utils/barrel.js +92 -92
- package/utils/common.d.ts +6 -6
- package/utils/common.js +33 -33
- package/utils/enum.d.ts +18 -18
- package/utils/enum.js +40 -40
- package/utils/file.d.ts +2 -2
- package/utils/file.js +9 -9
- package/utils/generics.d.ts +24 -24
- package/utils/generics.js +87 -87
- package/utils/import.d.ts +3 -3
- package/utils/import.js +11 -11
- package/utils/index.d.ts +19 -19
- package/utils/index.js +31 -31
- package/utils/model.d.ts +11 -11
- package/utils/model.js +141 -141
- package/utils/namespace.d.ts +1 -1
- package/utils/namespace.js +18 -18
- package/utils/path.d.ts +2 -2
- package/utils/path.js +36 -36
- package/utils/rule.d.ts +4 -4
- package/utils/rule.js +27 -27
- package/utils/service.d.ts +6 -6
- package/utils/service.js +82 -82
- package/utils/source.d.ts +13 -13
- package/utils/source.js +162 -162
- package/utils/text.d.ts +9 -9
- package/utils/text.js +46 -46
- package/utils/tree.d.ts +13 -13
- package/utils/tree.js +56 -56
- package/utils/type.d.ts +12 -12
- package/utils/type.js +102 -102
- package/utils/workspace.d.ts +8 -8
- package/utils/workspace.js +66 -66
package/utils/service.js
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createActionToSignatureMapper = exports.createActionToBodyMapper = exports.createActionToMethodMapper = exports.createControllerToServiceMapper = exports.serializeParameters = void 0;
|
|
4
|
-
const models_1 = require("../models");
|
|
5
|
-
const import_1 = require("./import");
|
|
6
|
-
const namespace_1 = require("./namespace");
|
|
7
|
-
const tree_1 = require("./tree");
|
|
8
|
-
const type_1 = require("./type");
|
|
9
|
-
function serializeParameters(parameters) {
|
|
10
|
-
return parameters.map(p => p.name + p.optional + ': ' + p.type + p.default, '').join(', ');
|
|
11
|
-
}
|
|
12
|
-
exports.serializeParameters = serializeParameters;
|
|
13
|
-
function createControllerToServiceMapper({ solution, types, apiName, }) {
|
|
14
|
-
const mapActionToMethod = createActionToMethodMapper();
|
|
15
|
-
return (controller) => {
|
|
16
|
-
const name = controller.controllerName;
|
|
17
|
-
const namespace = namespace_1.parseNamespace(solution, controller.type);
|
|
18
|
-
const actions = Object.values(controller.actions);
|
|
19
|
-
const imports = actions.reduce(createActionToImportsReducer(solution, types, namespace), []);
|
|
20
|
-
imports.push(new models_1.Import({ path: '@abp/ng.core', specifiers: ['RestService'] }));
|
|
21
|
-
imports.push(new models_1.Import({ path: '@angular/core', specifiers: ['Injectable'] }));
|
|
22
|
-
import_1.sortImports(imports);
|
|
23
|
-
const methods = actions.map(mapActionToMethod);
|
|
24
|
-
sortMethods(methods);
|
|
25
|
-
return new models_1.Service({ apiName, imports, methods, name, namespace });
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
exports.createControllerToServiceMapper = createControllerToServiceMapper;
|
|
29
|
-
function sortMethods(methods) {
|
|
30
|
-
methods.sort((a, b) => (a.signature.name > b.signature.name ? 1 : -1));
|
|
31
|
-
}
|
|
32
|
-
function createActionToMethodMapper() {
|
|
33
|
-
const mapActionToBody = createActionToBodyMapper();
|
|
34
|
-
const mapActionToSignature = createActionToSignatureMapper();
|
|
35
|
-
return (action) => {
|
|
36
|
-
const body = mapActionToBody(action);
|
|
37
|
-
const signature = mapActionToSignature(action);
|
|
38
|
-
return new models_1.Method({ body, signature });
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
exports.createActionToMethodMapper = createActionToMethodMapper;
|
|
42
|
-
function createActionToBodyMapper() {
|
|
43
|
-
const adaptType = type_1.createTypeAdapter();
|
|
44
|
-
return ({ httpMethod, parameters, returnValue, url }) => {
|
|
45
|
-
const responseType = adaptType(returnValue.typeSimple);
|
|
46
|
-
const body = new models_1.Body({ method: httpMethod, responseType, url });
|
|
47
|
-
parameters.forEach(body.registerActionParameter);
|
|
48
|
-
return body;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
exports.createActionToBodyMapper = createActionToBodyMapper;
|
|
52
|
-
function createActionToSignatureMapper() {
|
|
53
|
-
const adaptType = type_1.createTypeAdapter();
|
|
54
|
-
return (action) => {
|
|
55
|
-
const signature = new models_1.Signature({ name: getMethodNameFromAction(action) });
|
|
56
|
-
signature.parameters = action.parametersOnMethod.map(p => {
|
|
57
|
-
const type = adaptType(p.typeSimple);
|
|
58
|
-
const parameter = new models_1.Property({ name: p.name, type });
|
|
59
|
-
parameter.setDefault(p.defaultValue);
|
|
60
|
-
parameter.setOptional(p.isOptional);
|
|
61
|
-
return parameter;
|
|
62
|
-
});
|
|
63
|
-
return signature;
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
exports.createActionToSignatureMapper = createActionToSignatureMapper;
|
|
67
|
-
function getMethodNameFromAction(action) {
|
|
68
|
-
return action.uniqueName.split('Async')[0];
|
|
69
|
-
}
|
|
70
|
-
function createActionToImportsReducer(solution, types, namespace) {
|
|
71
|
-
const mapTypesToImports = type_1.createTypesToImportsReducer(solution, namespace);
|
|
72
|
-
const parseType = type_1.createTypeParser(type_1.removeTypeModifiers);
|
|
73
|
-
return (imports, { parametersOnMethod, returnValue }) => mapTypesToImports(imports, [returnValue, ...parametersOnMethod].reduce((acc, param) => {
|
|
74
|
-
parseType(param.type).forEach(paramType => tree_1.parseGenerics(paramType)
|
|
75
|
-
.toGenerics()
|
|
76
|
-
.forEach(type => {
|
|
77
|
-
if (types[type])
|
|
78
|
-
acc.push({ type, isEnum: types[type].isEnum });
|
|
79
|
-
}));
|
|
80
|
-
return acc;
|
|
81
|
-
}, []));
|
|
82
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createActionToSignatureMapper = exports.createActionToBodyMapper = exports.createActionToMethodMapper = exports.createControllerToServiceMapper = exports.serializeParameters = void 0;
|
|
4
|
+
const models_1 = require("../models");
|
|
5
|
+
const import_1 = require("./import");
|
|
6
|
+
const namespace_1 = require("./namespace");
|
|
7
|
+
const tree_1 = require("./tree");
|
|
8
|
+
const type_1 = require("./type");
|
|
9
|
+
function serializeParameters(parameters) {
|
|
10
|
+
return parameters.map(p => p.name + p.optional + ': ' + p.type + p.default, '').join(', ');
|
|
11
|
+
}
|
|
12
|
+
exports.serializeParameters = serializeParameters;
|
|
13
|
+
function createControllerToServiceMapper({ solution, types, apiName, }) {
|
|
14
|
+
const mapActionToMethod = createActionToMethodMapper();
|
|
15
|
+
return (controller) => {
|
|
16
|
+
const name = controller.controllerName;
|
|
17
|
+
const namespace = namespace_1.parseNamespace(solution, controller.type);
|
|
18
|
+
const actions = Object.values(controller.actions);
|
|
19
|
+
const imports = actions.reduce(createActionToImportsReducer(solution, types, namespace), []);
|
|
20
|
+
imports.push(new models_1.Import({ path: '@abp/ng.core', specifiers: ['RestService'] }));
|
|
21
|
+
imports.push(new models_1.Import({ path: '@angular/core', specifiers: ['Injectable'] }));
|
|
22
|
+
import_1.sortImports(imports);
|
|
23
|
+
const methods = actions.map(mapActionToMethod);
|
|
24
|
+
sortMethods(methods);
|
|
25
|
+
return new models_1.Service({ apiName, imports, methods, name, namespace });
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.createControllerToServiceMapper = createControllerToServiceMapper;
|
|
29
|
+
function sortMethods(methods) {
|
|
30
|
+
methods.sort((a, b) => (a.signature.name > b.signature.name ? 1 : -1));
|
|
31
|
+
}
|
|
32
|
+
function createActionToMethodMapper() {
|
|
33
|
+
const mapActionToBody = createActionToBodyMapper();
|
|
34
|
+
const mapActionToSignature = createActionToSignatureMapper();
|
|
35
|
+
return (action) => {
|
|
36
|
+
const body = mapActionToBody(action);
|
|
37
|
+
const signature = mapActionToSignature(action);
|
|
38
|
+
return new models_1.Method({ body, signature });
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
exports.createActionToMethodMapper = createActionToMethodMapper;
|
|
42
|
+
function createActionToBodyMapper() {
|
|
43
|
+
const adaptType = type_1.createTypeAdapter();
|
|
44
|
+
return ({ httpMethod, parameters, returnValue, url }) => {
|
|
45
|
+
const responseType = adaptType(returnValue.typeSimple);
|
|
46
|
+
const body = new models_1.Body({ method: httpMethod, responseType, url });
|
|
47
|
+
parameters.forEach(body.registerActionParameter);
|
|
48
|
+
return body;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
exports.createActionToBodyMapper = createActionToBodyMapper;
|
|
52
|
+
function createActionToSignatureMapper() {
|
|
53
|
+
const adaptType = type_1.createTypeAdapter();
|
|
54
|
+
return (action) => {
|
|
55
|
+
const signature = new models_1.Signature({ name: getMethodNameFromAction(action) });
|
|
56
|
+
signature.parameters = action.parametersOnMethod.map(p => {
|
|
57
|
+
const type = adaptType(p.typeSimple);
|
|
58
|
+
const parameter = new models_1.Property({ name: p.name, type });
|
|
59
|
+
parameter.setDefault(p.defaultValue);
|
|
60
|
+
parameter.setOptional(p.isOptional);
|
|
61
|
+
return parameter;
|
|
62
|
+
});
|
|
63
|
+
return signature;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
exports.createActionToSignatureMapper = createActionToSignatureMapper;
|
|
67
|
+
function getMethodNameFromAction(action) {
|
|
68
|
+
return action.uniqueName.split('Async')[0];
|
|
69
|
+
}
|
|
70
|
+
function createActionToImportsReducer(solution, types, namespace) {
|
|
71
|
+
const mapTypesToImports = type_1.createTypesToImportsReducer(solution, namespace);
|
|
72
|
+
const parseType = type_1.createTypeParser(type_1.removeTypeModifiers);
|
|
73
|
+
return (imports, { parametersOnMethod, returnValue }) => mapTypesToImports(imports, [returnValue, ...parametersOnMethod].reduce((acc, param) => {
|
|
74
|
+
parseType(param.type).forEach(paramType => tree_1.parseGenerics(paramType)
|
|
75
|
+
.toGenerics()
|
|
76
|
+
.forEach(type => {
|
|
77
|
+
if (types[type])
|
|
78
|
+
acc.push({ type, isEnum: types[type].isEnum });
|
|
79
|
+
}));
|
|
80
|
+
return acc;
|
|
81
|
+
}, []));
|
|
82
|
+
}
|
|
83
83
|
//# sourceMappingURL=service.js.map
|
package/utils/source.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Tree } from '@angular-devkit/schematics';
|
|
2
|
-
import { ApiDefinition, GenerateProxySchema, Project, ProxyConfig, WriteOp } from '../models';
|
|
3
|
-
export declare function createApiDefinitionGetter(params: GenerateProxySchema): (host: Tree) => Promise<ApiDefinition>;
|
|
4
|
-
export declare function createRootNamespaceGetter(params: GenerateProxySchema): (tree: Tree) => Promise<string>;
|
|
5
|
-
export declare function getSourceUrl(tree: Tree, project: Project, apiName: string): string;
|
|
6
|
-
export declare function createProxyConfigReader(targetPath: string): (tree: Tree) => ProxyConfig;
|
|
7
|
-
export declare function createProxyClearer(targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
8
|
-
export declare function createProxyWarningSaver(targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
9
|
-
export declare function createProxyConfigSaver(apiDefinition: ApiDefinition, targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
10
|
-
export declare function createProxyConfigWriterCreator(targetPath: string): (op: WriteOp, data: string) => (tree: import("@angular-devkit/schematics/src/tree/interface").Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
11
|
-
export declare function createFileWriterCreator(targetPath: string): (op: WriteOp, data: string) => (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
12
|
-
export declare function createProxyConfigJsonCreator(apiDefinition: ApiDefinition): (generated: string[]) => string;
|
|
13
|
-
export declare function generateProxyConfigJson(proxyConfig: ProxyConfig): string;
|
|
1
|
+
import { Tree } from '@angular-devkit/schematics';
|
|
2
|
+
import { ApiDefinition, GenerateProxySchema, Project, ProxyConfig, WriteOp } from '../models';
|
|
3
|
+
export declare function createApiDefinitionGetter(params: GenerateProxySchema): (host: Tree) => Promise<ApiDefinition>;
|
|
4
|
+
export declare function createRootNamespaceGetter(params: GenerateProxySchema): (tree: Tree) => Promise<string>;
|
|
5
|
+
export declare function getSourceUrl(tree: Tree, project: Project, apiName: string): string;
|
|
6
|
+
export declare function createProxyConfigReader(targetPath: string): (tree: Tree) => ProxyConfig;
|
|
7
|
+
export declare function createProxyClearer(targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
8
|
+
export declare function createProxyWarningSaver(targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
9
|
+
export declare function createProxyConfigSaver(apiDefinition: ApiDefinition, targetPath: string): (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
10
|
+
export declare function createProxyConfigWriterCreator(targetPath: string): (op: WriteOp, data: string) => (tree: import("@angular-devkit/schematics/src/tree/interface").Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
11
|
+
export declare function createFileWriterCreator(targetPath: string): (op: WriteOp, data: string) => (tree: Tree) => import("@angular-devkit/schematics/src/tree/interface").Tree;
|
|
12
|
+
export declare function createProxyConfigJsonCreator(apiDefinition: ApiDefinition): (generated: string[]) => string;
|
|
13
|
+
export declare function generateProxyConfigJson(proxyConfig: ProxyConfig): string;
|
package/utils/source.js
CHANGED
|
@@ -1,163 +1,163 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateProxyConfigJson = exports.createProxyConfigJsonCreator = exports.createFileWriterCreator = exports.createProxyConfigWriterCreator = exports.createProxyConfigSaver = exports.createProxyWarningSaver = exports.createProxyClearer = exports.createProxyConfigReader = exports.getSourceUrl = exports.createRootNamespaceGetter = exports.createApiDefinitionGetter = void 0;
|
|
4
|
-
/* eslint-disable no-empty */
|
|
5
|
-
const schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
-
const got_1 = require("got");
|
|
7
|
-
const constants_1 = require("../constants");
|
|
8
|
-
const ast_1 = require("./ast");
|
|
9
|
-
const common_1 = require("./common");
|
|
10
|
-
const workspace_1 = require("./workspace");
|
|
11
|
-
function createApiDefinitionGetter(params) {
|
|
12
|
-
const apiName = params.apiName || 'default';
|
|
13
|
-
return async (host) => {
|
|
14
|
-
const source = await workspace_1.resolveProject(host, params.source);
|
|
15
|
-
const sourceUrl = getSourceUrl(host, source, apiName);
|
|
16
|
-
return await getApiDefinition(sourceUrl);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
exports.createApiDefinitionGetter = createApiDefinitionGetter;
|
|
20
|
-
async function getApiDefinition(sourceUrl) {
|
|
21
|
-
const url = sourceUrl + constants_1.API_DEFINITION_ENDPOINT;
|
|
22
|
-
let body;
|
|
23
|
-
try {
|
|
24
|
-
({ body } = await got_1.default(url, {
|
|
25
|
-
responseType: 'json',
|
|
26
|
-
searchParams: { includeTypes: true },
|
|
27
|
-
https: { rejectUnauthorized: false },
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
catch ({ response }) {
|
|
31
|
-
// handle redirects
|
|
32
|
-
if (!(response === null || response === void 0 ? void 0 : response.body) || response.statusCode >= 400)
|
|
33
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[API Not Available] Request to {0} is unsuccessful. Please double-check the URL in the source project environment and make sure your application is up and running." /* NoApi */, url));
|
|
34
|
-
body = response.body;
|
|
35
|
-
}
|
|
36
|
-
return body;
|
|
37
|
-
}
|
|
38
|
-
function createRootNamespaceGetter(params) {
|
|
39
|
-
const apiName = params.apiName || 'default';
|
|
40
|
-
return async (tree) => {
|
|
41
|
-
const project = await workspace_1.resolveProject(tree, params.source);
|
|
42
|
-
const environmentExpr = workspace_1.readEnvironment(tree, project.definition);
|
|
43
|
-
if (!environmentExpr)
|
|
44
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[Environment Not Found] An environment file cannot be located in \"{0}\" project." /* NoEnvironment */, project.name));
|
|
45
|
-
let assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, [
|
|
46
|
-
'apis',
|
|
47
|
-
apiName,
|
|
48
|
-
'rootNamespace',
|
|
49
|
-
]);
|
|
50
|
-
if (!assignment)
|
|
51
|
-
assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, [
|
|
52
|
-
'apis',
|
|
53
|
-
'default',
|
|
54
|
-
'rootNamespace',
|
|
55
|
-
]);
|
|
56
|
-
if (!assignment)
|
|
57
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[Root Namespace Not Found] Cannot resolve root namespace for \"{1}\" api from \"{0}\" project." /* NoRootNamespace */, project.name, apiName));
|
|
58
|
-
return assignment.replace(/[`'"]/g, '');
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
exports.createRootNamespaceGetter = createRootNamespaceGetter;
|
|
62
|
-
function getSourceUrl(tree, project, apiName) {
|
|
63
|
-
const environmentExpr = workspace_1.readEnvironment(tree, project.definition);
|
|
64
|
-
if (!environmentExpr)
|
|
65
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[Environment Not Found] An environment file cannot be located in \"{0}\" project." /* NoEnvironment */, project.name));
|
|
66
|
-
let assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', apiName, 'url']);
|
|
67
|
-
if (!assignment)
|
|
68
|
-
assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', 'default', 'url']);
|
|
69
|
-
if (!assignment)
|
|
70
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[API URL Not Found] Cannot resolve API URL for \"{1}\" remote service name from \"{0}\" project." /* NoApiUrl */, project.name, apiName));
|
|
71
|
-
return assignment.replace(/[`'"]/g, '');
|
|
72
|
-
}
|
|
73
|
-
exports.getSourceUrl = getSourceUrl;
|
|
74
|
-
function createProxyConfigReader(targetPath) {
|
|
75
|
-
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
76
|
-
return (tree) => {
|
|
77
|
-
try {
|
|
78
|
-
const buffer = tree.read(targetPath);
|
|
79
|
-
return JSON.parse(buffer.toString());
|
|
80
|
-
}
|
|
81
|
-
catch (_) { }
|
|
82
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[Proxy Config Not Found] There is no JSON file at \"{0}\"." /* NoProxyConfig */, targetPath));
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
exports.createProxyConfigReader = createProxyConfigReader;
|
|
86
|
-
function createProxyClearer(targetPath) {
|
|
87
|
-
targetPath += constants_1.PROXY_PATH;
|
|
88
|
-
const proxyIndexPath = `${targetPath}/index.ts`;
|
|
89
|
-
return (tree) => {
|
|
90
|
-
try {
|
|
91
|
-
tree.getDir(targetPath).subdirs.forEach(dirName => {
|
|
92
|
-
const dirPath = `${targetPath}/${dirName}`;
|
|
93
|
-
tree.getDir(dirPath).visit(filePath => tree.delete(filePath));
|
|
94
|
-
tree.delete(dirPath);
|
|
95
|
-
});
|
|
96
|
-
if (tree.exists(proxyIndexPath))
|
|
97
|
-
tree.delete(proxyIndexPath);
|
|
98
|
-
return tree;
|
|
99
|
-
}
|
|
100
|
-
catch (_) {
|
|
101
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[Directory Remove Failed] Cannot remove \"{0}\"." /* DirRemoveFailed */, targetPath));
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
exports.createProxyClearer = createProxyClearer;
|
|
106
|
-
function createProxyWarningSaver(targetPath) {
|
|
107
|
-
targetPath += constants_1.PROXY_WARNING_PATH;
|
|
108
|
-
const createFileWriter = createFileWriterCreator(targetPath);
|
|
109
|
-
return (tree) => {
|
|
110
|
-
const op = tree.exists(targetPath) ? 'overwrite' : 'create';
|
|
111
|
-
const writeWarningMD = createFileWriter(op, constants_1.PROXY_WARNING);
|
|
112
|
-
writeWarningMD(tree);
|
|
113
|
-
return tree;
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
exports.createProxyWarningSaver = createProxyWarningSaver;
|
|
117
|
-
function createProxyConfigSaver(apiDefinition, targetPath) {
|
|
118
|
-
const createProxyConfigJson = createProxyConfigJsonCreator(apiDefinition);
|
|
119
|
-
const readPreviousConfig = createProxyConfigReader(targetPath);
|
|
120
|
-
const createProxyConfigWriter = createProxyConfigWriterCreator(targetPath);
|
|
121
|
-
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
122
|
-
return (tree) => {
|
|
123
|
-
const generated = [];
|
|
124
|
-
let op = 'create';
|
|
125
|
-
if (tree.exists(targetPath)) {
|
|
126
|
-
op = 'overwrite';
|
|
127
|
-
try {
|
|
128
|
-
readPreviousConfig(tree).generated.forEach(m => generated.push(m));
|
|
129
|
-
}
|
|
130
|
-
catch (_) { }
|
|
131
|
-
}
|
|
132
|
-
const json = createProxyConfigJson(generated);
|
|
133
|
-
const writeProxyConfig = createProxyConfigWriter(op, json);
|
|
134
|
-
writeProxyConfig(tree);
|
|
135
|
-
return tree;
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
exports.createProxyConfigSaver = createProxyConfigSaver;
|
|
139
|
-
function createProxyConfigWriterCreator(targetPath) {
|
|
140
|
-
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
141
|
-
return createFileWriterCreator(targetPath);
|
|
142
|
-
}
|
|
143
|
-
exports.createProxyConfigWriterCreator = createProxyConfigWriterCreator;
|
|
144
|
-
function createFileWriterCreator(targetPath) {
|
|
145
|
-
return (op, data) => (tree) => {
|
|
146
|
-
try {
|
|
147
|
-
tree[op](targetPath, data);
|
|
148
|
-
return tree;
|
|
149
|
-
}
|
|
150
|
-
catch (_) { }
|
|
151
|
-
throw new schematics_1.SchematicsException(common_1.interpolate("[File Write Failed] Cannot write file at \"{0}\"." /* FileWriteFailed */, targetPath));
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
exports.createFileWriterCreator = createFileWriterCreator;
|
|
155
|
-
function createProxyConfigJsonCreator(apiDefinition) {
|
|
156
|
-
return (generated) => generateProxyConfigJson(Object.assign({ generated }, apiDefinition));
|
|
157
|
-
}
|
|
158
|
-
exports.createProxyConfigJsonCreator = createProxyConfigJsonCreator;
|
|
159
|
-
function generateProxyConfigJson(proxyConfig) {
|
|
160
|
-
return JSON.stringify(proxyConfig, null, 2);
|
|
161
|
-
}
|
|
162
|
-
exports.generateProxyConfigJson = generateProxyConfigJson;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateProxyConfigJson = exports.createProxyConfigJsonCreator = exports.createFileWriterCreator = exports.createProxyConfigWriterCreator = exports.createProxyConfigSaver = exports.createProxyWarningSaver = exports.createProxyClearer = exports.createProxyConfigReader = exports.getSourceUrl = exports.createRootNamespaceGetter = exports.createApiDefinitionGetter = void 0;
|
|
4
|
+
/* eslint-disable no-empty */
|
|
5
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
+
const got_1 = require("got");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const ast_1 = require("./ast");
|
|
9
|
+
const common_1 = require("./common");
|
|
10
|
+
const workspace_1 = require("./workspace");
|
|
11
|
+
function createApiDefinitionGetter(params) {
|
|
12
|
+
const apiName = params.apiName || 'default';
|
|
13
|
+
return async (host) => {
|
|
14
|
+
const source = await workspace_1.resolveProject(host, params.source);
|
|
15
|
+
const sourceUrl = getSourceUrl(host, source, apiName);
|
|
16
|
+
return await getApiDefinition(sourceUrl);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
exports.createApiDefinitionGetter = createApiDefinitionGetter;
|
|
20
|
+
async function getApiDefinition(sourceUrl) {
|
|
21
|
+
const url = sourceUrl + constants_1.API_DEFINITION_ENDPOINT;
|
|
22
|
+
let body;
|
|
23
|
+
try {
|
|
24
|
+
({ body } = await got_1.default(url, {
|
|
25
|
+
responseType: 'json',
|
|
26
|
+
searchParams: { includeTypes: true },
|
|
27
|
+
https: { rejectUnauthorized: false },
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
catch ({ response }) {
|
|
31
|
+
// handle redirects
|
|
32
|
+
if (!(response === null || response === void 0 ? void 0 : response.body) || response.statusCode >= 400)
|
|
33
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[API Not Available] Request to {0} is unsuccessful. Please double-check the URL in the source project environment and make sure your application is up and running." /* NoApi */, url));
|
|
34
|
+
body = response.body;
|
|
35
|
+
}
|
|
36
|
+
return body;
|
|
37
|
+
}
|
|
38
|
+
function createRootNamespaceGetter(params) {
|
|
39
|
+
const apiName = params.apiName || 'default';
|
|
40
|
+
return async (tree) => {
|
|
41
|
+
const project = await workspace_1.resolveProject(tree, params.source);
|
|
42
|
+
const environmentExpr = workspace_1.readEnvironment(tree, project.definition);
|
|
43
|
+
if (!environmentExpr)
|
|
44
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[Environment Not Found] An environment file cannot be located in \"{0}\" project." /* NoEnvironment */, project.name));
|
|
45
|
+
let assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, [
|
|
46
|
+
'apis',
|
|
47
|
+
apiName,
|
|
48
|
+
'rootNamespace',
|
|
49
|
+
]);
|
|
50
|
+
if (!assignment)
|
|
51
|
+
assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, [
|
|
52
|
+
'apis',
|
|
53
|
+
'default',
|
|
54
|
+
'rootNamespace',
|
|
55
|
+
]);
|
|
56
|
+
if (!assignment)
|
|
57
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[Root Namespace Not Found] Cannot resolve root namespace for \"{1}\" api from \"{0}\" project." /* NoRootNamespace */, project.name, apiName));
|
|
58
|
+
return assignment.replace(/[`'"]/g, '');
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.createRootNamespaceGetter = createRootNamespaceGetter;
|
|
62
|
+
function getSourceUrl(tree, project, apiName) {
|
|
63
|
+
const environmentExpr = workspace_1.readEnvironment(tree, project.definition);
|
|
64
|
+
if (!environmentExpr)
|
|
65
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[Environment Not Found] An environment file cannot be located in \"{0}\" project." /* NoEnvironment */, project.name));
|
|
66
|
+
let assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', apiName, 'url']);
|
|
67
|
+
if (!assignment)
|
|
68
|
+
assignment = ast_1.getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', 'default', 'url']);
|
|
69
|
+
if (!assignment)
|
|
70
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[API URL Not Found] Cannot resolve API URL for \"{1}\" remote service name from \"{0}\" project." /* NoApiUrl */, project.name, apiName));
|
|
71
|
+
return assignment.replace(/[`'"]/g, '');
|
|
72
|
+
}
|
|
73
|
+
exports.getSourceUrl = getSourceUrl;
|
|
74
|
+
function createProxyConfigReader(targetPath) {
|
|
75
|
+
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
76
|
+
return (tree) => {
|
|
77
|
+
try {
|
|
78
|
+
const buffer = tree.read(targetPath);
|
|
79
|
+
return JSON.parse(buffer.toString());
|
|
80
|
+
}
|
|
81
|
+
catch (_) { }
|
|
82
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[Proxy Config Not Found] There is no JSON file at \"{0}\"." /* NoProxyConfig */, targetPath));
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
exports.createProxyConfigReader = createProxyConfigReader;
|
|
86
|
+
function createProxyClearer(targetPath) {
|
|
87
|
+
targetPath += constants_1.PROXY_PATH;
|
|
88
|
+
const proxyIndexPath = `${targetPath}/index.ts`;
|
|
89
|
+
return (tree) => {
|
|
90
|
+
try {
|
|
91
|
+
tree.getDir(targetPath).subdirs.forEach(dirName => {
|
|
92
|
+
const dirPath = `${targetPath}/${dirName}`;
|
|
93
|
+
tree.getDir(dirPath).visit(filePath => tree.delete(filePath));
|
|
94
|
+
tree.delete(dirPath);
|
|
95
|
+
});
|
|
96
|
+
if (tree.exists(proxyIndexPath))
|
|
97
|
+
tree.delete(proxyIndexPath);
|
|
98
|
+
return tree;
|
|
99
|
+
}
|
|
100
|
+
catch (_) {
|
|
101
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[Directory Remove Failed] Cannot remove \"{0}\"." /* DirRemoveFailed */, targetPath));
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
exports.createProxyClearer = createProxyClearer;
|
|
106
|
+
function createProxyWarningSaver(targetPath) {
|
|
107
|
+
targetPath += constants_1.PROXY_WARNING_PATH;
|
|
108
|
+
const createFileWriter = createFileWriterCreator(targetPath);
|
|
109
|
+
return (tree) => {
|
|
110
|
+
const op = tree.exists(targetPath) ? 'overwrite' : 'create';
|
|
111
|
+
const writeWarningMD = createFileWriter(op, constants_1.PROXY_WARNING);
|
|
112
|
+
writeWarningMD(tree);
|
|
113
|
+
return tree;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
exports.createProxyWarningSaver = createProxyWarningSaver;
|
|
117
|
+
function createProxyConfigSaver(apiDefinition, targetPath) {
|
|
118
|
+
const createProxyConfigJson = createProxyConfigJsonCreator(apiDefinition);
|
|
119
|
+
const readPreviousConfig = createProxyConfigReader(targetPath);
|
|
120
|
+
const createProxyConfigWriter = createProxyConfigWriterCreator(targetPath);
|
|
121
|
+
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
122
|
+
return (tree) => {
|
|
123
|
+
const generated = [];
|
|
124
|
+
let op = 'create';
|
|
125
|
+
if (tree.exists(targetPath)) {
|
|
126
|
+
op = 'overwrite';
|
|
127
|
+
try {
|
|
128
|
+
readPreviousConfig(tree).generated.forEach(m => generated.push(m));
|
|
129
|
+
}
|
|
130
|
+
catch (_) { }
|
|
131
|
+
}
|
|
132
|
+
const json = createProxyConfigJson(generated);
|
|
133
|
+
const writeProxyConfig = createProxyConfigWriter(op, json);
|
|
134
|
+
writeProxyConfig(tree);
|
|
135
|
+
return tree;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
exports.createProxyConfigSaver = createProxyConfigSaver;
|
|
139
|
+
function createProxyConfigWriterCreator(targetPath) {
|
|
140
|
+
targetPath += constants_1.PROXY_CONFIG_PATH;
|
|
141
|
+
return createFileWriterCreator(targetPath);
|
|
142
|
+
}
|
|
143
|
+
exports.createProxyConfigWriterCreator = createProxyConfigWriterCreator;
|
|
144
|
+
function createFileWriterCreator(targetPath) {
|
|
145
|
+
return (op, data) => (tree) => {
|
|
146
|
+
try {
|
|
147
|
+
tree[op](targetPath, data);
|
|
148
|
+
return tree;
|
|
149
|
+
}
|
|
150
|
+
catch (_) { }
|
|
151
|
+
throw new schematics_1.SchematicsException(common_1.interpolate("[File Write Failed] Cannot write file at \"{0}\"." /* FileWriteFailed */, targetPath));
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
exports.createFileWriterCreator = createFileWriterCreator;
|
|
155
|
+
function createProxyConfigJsonCreator(apiDefinition) {
|
|
156
|
+
return (generated) => generateProxyConfigJson(Object.assign({ generated }, apiDefinition));
|
|
157
|
+
}
|
|
158
|
+
exports.createProxyConfigJsonCreator = createProxyConfigJsonCreator;
|
|
159
|
+
function generateProxyConfigJson(proxyConfig) {
|
|
160
|
+
return JSON.stringify(proxyConfig, null, 2);
|
|
161
|
+
}
|
|
162
|
+
exports.generateProxyConfigJson = generateProxyConfigJson;
|
|
163
163
|
//# sourceMappingURL=source.js.map
|
package/utils/text.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export declare const lower: (text: string) => string;
|
|
2
|
-
export declare const upper: (text: string) => string;
|
|
3
|
-
export declare const camel: (text: string) => string;
|
|
4
|
-
export declare const pascal: (text: string) => string;
|
|
5
|
-
export declare const kebab: (text: string) => string;
|
|
6
|
-
export declare const snake: (text: string) => string;
|
|
7
|
-
export declare const macro: (text: string) => string;
|
|
8
|
-
export declare const dir: (text: string) => string;
|
|
9
|
-
export declare const quote: (value: number | string) => string | number;
|
|
1
|
+
export declare const lower: (text: string) => string;
|
|
2
|
+
export declare const upper: (text: string) => string;
|
|
3
|
+
export declare const camel: (text: string) => string;
|
|
4
|
+
export declare const pascal: (text: string) => string;
|
|
5
|
+
export declare const kebab: (text: string) => string;
|
|
6
|
+
export declare const snake: (text: string) => string;
|
|
7
|
+
export declare const macro: (text: string) => string;
|
|
8
|
+
export declare const dir: (text: string) => string;
|
|
9
|
+
export declare const quote: (value: number | string) => string | number;
|
package/utils/text.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.quote = exports.dir = exports.macro = exports.snake = exports.kebab = exports.pascal = exports.camel = exports.upper = exports.lower = void 0;
|
|
4
|
-
/* eslint-disable no-useless-escape */
|
|
5
|
-
const core_1 = require("@angular-devkit/core");
|
|
6
|
-
exports.lower = (text) => text.toLowerCase();
|
|
7
|
-
exports.upper = (text) => text.toUpperCase();
|
|
8
|
-
exports.camel = (text) => toCamelCase(_(text));
|
|
9
|
-
exports.pascal = (text) => core_1.strings.classify(_(text));
|
|
10
|
-
exports.kebab = (text) => core_1.strings.dasherize(_(text));
|
|
11
|
-
exports.snake = (text) => core_1.strings.underscore(_(text));
|
|
12
|
-
exports.macro = (text) => exports.upper(exports.snake(text));
|
|
13
|
-
exports.dir = (text) => core_1.strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/'));
|
|
14
|
-
exports.quote = (value) => typeof value === 'string' ? `'${value.replace(/'/g, "\\'")}'` : value;
|
|
15
|
-
function _(text) {
|
|
16
|
-
return text.replace(/\./g, '_');
|
|
17
|
-
}
|
|
18
|
-
// https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/StringUtils.cs#L155
|
|
19
|
-
function toCamelCase(str) {
|
|
20
|
-
if (!str || !isUpperCase(str[0]))
|
|
21
|
-
return str;
|
|
22
|
-
const chars = str.split('');
|
|
23
|
-
const { length } = chars;
|
|
24
|
-
for (let i = 0; i < length; i++) {
|
|
25
|
-
if (i === 1 && !isUpperCase(chars[i]))
|
|
26
|
-
break;
|
|
27
|
-
const hasNext = i + 1 < length;
|
|
28
|
-
if (i > 0 && hasNext && !isUpperCase(chars[i + 1])) {
|
|
29
|
-
if (isSeparator(chars[i + 1])) {
|
|
30
|
-
chars[i] = toLowerCase(chars[i]);
|
|
31
|
-
}
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
chars[i] = toLowerCase(chars[i]);
|
|
35
|
-
}
|
|
36
|
-
return chars.join('');
|
|
37
|
-
}
|
|
38
|
-
function isSeparator(str = '') {
|
|
39
|
-
return /[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]+/.test(str);
|
|
40
|
-
}
|
|
41
|
-
function isUpperCase(str = '') {
|
|
42
|
-
return /[A-Z]+/.test(str);
|
|
43
|
-
}
|
|
44
|
-
function toLowerCase(str = '') {
|
|
45
|
-
return str.toLowerCase();
|
|
46
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.quote = exports.dir = exports.macro = exports.snake = exports.kebab = exports.pascal = exports.camel = exports.upper = exports.lower = void 0;
|
|
4
|
+
/* eslint-disable no-useless-escape */
|
|
5
|
+
const core_1 = require("@angular-devkit/core");
|
|
6
|
+
exports.lower = (text) => text.toLowerCase();
|
|
7
|
+
exports.upper = (text) => text.toUpperCase();
|
|
8
|
+
exports.camel = (text) => toCamelCase(_(text));
|
|
9
|
+
exports.pascal = (text) => core_1.strings.classify(_(text));
|
|
10
|
+
exports.kebab = (text) => core_1.strings.dasherize(_(text));
|
|
11
|
+
exports.snake = (text) => core_1.strings.underscore(_(text));
|
|
12
|
+
exports.macro = (text) => exports.upper(exports.snake(text));
|
|
13
|
+
exports.dir = (text) => core_1.strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/'));
|
|
14
|
+
exports.quote = (value) => typeof value === 'string' ? `'${value.replace(/'/g, "\\'")}'` : value;
|
|
15
|
+
function _(text) {
|
|
16
|
+
return text.replace(/\./g, '_');
|
|
17
|
+
}
|
|
18
|
+
// https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/StringUtils.cs#L155
|
|
19
|
+
function toCamelCase(str) {
|
|
20
|
+
if (!str || !isUpperCase(str[0]))
|
|
21
|
+
return str;
|
|
22
|
+
const chars = str.split('');
|
|
23
|
+
const { length } = chars;
|
|
24
|
+
for (let i = 0; i < length; i++) {
|
|
25
|
+
if (i === 1 && !isUpperCase(chars[i]))
|
|
26
|
+
break;
|
|
27
|
+
const hasNext = i + 1 < length;
|
|
28
|
+
if (i > 0 && hasNext && !isUpperCase(chars[i + 1])) {
|
|
29
|
+
if (isSeparator(chars[i + 1])) {
|
|
30
|
+
chars[i] = toLowerCase(chars[i]);
|
|
31
|
+
}
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
chars[i] = toLowerCase(chars[i]);
|
|
35
|
+
}
|
|
36
|
+
return chars.join('');
|
|
37
|
+
}
|
|
38
|
+
function isSeparator(str = '') {
|
|
39
|
+
return /[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]+/.test(str);
|
|
40
|
+
}
|
|
41
|
+
function isUpperCase(str = '') {
|
|
42
|
+
return /[A-Z]+/.test(str);
|
|
43
|
+
}
|
|
44
|
+
function toLowerCase(str = '') {
|
|
45
|
+
return str.toLowerCase();
|
|
46
|
+
}
|
|
47
47
|
//# sourceMappingURL=text.js.map
|