@luvio/compiler 0.142.3 → 0.143.0
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 +11 -0
- package/dist/codegen/graphql/constants.d.ts +1 -0
- package/dist/codegen/graphql/constants.js +2 -1
- package/dist/codegen/graphql/constants.js.map +1 -1
- package/dist/codegen/resource/graphql/key-builder.d.ts +0 -2
- package/dist/codegen/resource/graphql/key-builder.js +31 -35
- package/dist/codegen/resource/graphql/key-builder.js.map +1 -1
- package/package.json +5 -5
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @luvio/compiler
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The Luvio Compiler package is the main code generator for API clients. It uses a two-phased approach to code generation.
|
|
6
|
+
|
|
7
|
+
1. Parsing
|
|
8
|
+
- We take a RAML file and [parse it](./src/parser/main.ts) using [AMF](https://a.ml/docs/amf/using-amf/amf_parsing/) and our own custom annotations into an intermediate representation called [ModelInfo](./src/intermediate/model-info.ts);
|
|
9
|
+
2. Code Generation
|
|
10
|
+
- We take the `ModelInfo` and we use it to inform generation of Typescript Api Clients. The code generator is designed to be somewhat composable, so the caller can decide which pieces of the `ModelInfo` they'd like to have generated by providing different "Source Writers" to the compiler. This is all coordinated by the [LuvioRamlCompiler](./src/compiler/raml-compiler.ts).
|
|
11
|
+
- The main transformation from pieces of `ModelInfo` to the actual Typescript code happens in [codegen](./src/codegen/).
|
|
@@ -5,3 +5,4 @@ export declare const CREATE_FRAGMENT_MAP_IMPORT: string;
|
|
|
5
5
|
export declare const BUILD_QUERY_TYPE_STRING_KEY_IMPORT: string;
|
|
6
6
|
export declare const BUILD_QUERY_TYPE_STRUCTURED_KEY_IMPORT: string;
|
|
7
7
|
export declare const GET_OPERATION_FROM_DOCUMENT_IMPORT: string;
|
|
8
|
+
export declare const INVALID_OPERATION_CONFIGURATION = "InvalidOperation";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET_OPERATION_FROM_DOCUMENT_IMPORT = exports.BUILD_QUERY_TYPE_STRUCTURED_KEY_IMPORT = exports.BUILD_QUERY_TYPE_STRING_KEY_IMPORT = exports.CREATE_FRAGMENT_MAP_IMPORT = exports.GRAPHQL_FRAGMENT_MAP_IMPORT = exports.SERIALIZE_FIELD_ARGUMENTS_IMPORT = exports.GRAPHQL_VARIABLES_TYPE_IMPORT = void 0;
|
|
3
|
+
exports.INVALID_OPERATION_CONFIGURATION = exports.GET_OPERATION_FROM_DOCUMENT_IMPORT = exports.BUILD_QUERY_TYPE_STRUCTURED_KEY_IMPORT = exports.BUILD_QUERY_TYPE_STRING_KEY_IMPORT = exports.CREATE_FRAGMENT_MAP_IMPORT = exports.GRAPHQL_FRAGMENT_MAP_IMPORT = exports.SERIALIZE_FIELD_ARGUMENTS_IMPORT = exports.GRAPHQL_VARIABLES_TYPE_IMPORT = void 0;
|
|
4
4
|
// Shared constants from the @luvio/graphql package
|
|
5
5
|
const imports_1 = require("../../utils/imports");
|
|
6
6
|
exports.GRAPHQL_VARIABLES_TYPE_IMPORT = (0, imports_1.namedImport)('@luvio/graphql', 'GraphQLVariables');
|
|
@@ -10,4 +10,5 @@ exports.CREATE_FRAGMENT_MAP_IMPORT = (0, imports_1.namedImport)('@luvio/graphql'
|
|
|
10
10
|
exports.BUILD_QUERY_TYPE_STRING_KEY_IMPORT = (0, imports_1.namedImport)('@luvio/graphql', 'buildQueryTypeStringKey');
|
|
11
11
|
exports.BUILD_QUERY_TYPE_STRUCTURED_KEY_IMPORT = (0, imports_1.namedImport)('@luvio/graphql', 'buildQueryTypeStructuredKey');
|
|
12
12
|
exports.GET_OPERATION_FROM_DOCUMENT_IMPORT = (0, imports_1.namedImport)('@luvio/graphql', 'getOperationFromDocument');
|
|
13
|
+
exports.INVALID_OPERATION_CONFIGURATION = 'InvalidOperation';
|
|
13
14
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/codegen/graphql/constants.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,iDAAkD;AAErC,QAAA,6BAA6B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAClF,QAAA,gCAAgC,GAAG,IAAA,qBAAW,EACvD,gBAAgB,EAChB,yBAAyB,CAC5B,CAAC;AACW,QAAA,2BAA2B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AAClF,QAAA,0BAA0B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAChF,QAAA,kCAAkC,GAAG,IAAA,qBAAW,EACzD,gBAAgB,EAChB,yBAAyB,CAC5B,CAAC;AACW,QAAA,sCAAsC,GAAG,IAAA,qBAAW,EAC7D,gBAAgB,EAChB,6BAA6B,CAChC,CAAC;AAEW,QAAA,kCAAkC,GAAG,IAAA,qBAAW,EACzD,gBAAgB,EAChB,0BAA0B,CAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/codegen/graphql/constants.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,iDAAkD;AAErC,QAAA,6BAA6B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAClF,QAAA,gCAAgC,GAAG,IAAA,qBAAW,EACvD,gBAAgB,EAChB,yBAAyB,CAC5B,CAAC;AACW,QAAA,2BAA2B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AAClF,QAAA,0BAA0B,GAAG,IAAA,qBAAW,EAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAChF,QAAA,kCAAkC,GAAG,IAAA,qBAAW,EACzD,gBAAgB,EAChB,yBAAyB,CAC5B,CAAC;AACW,QAAA,sCAAsC,GAAG,IAAA,qBAAW,EAC7D,gBAAgB,EAChB,6BAA6B,CAChC,CAAC;AAEW,QAAA,kCAAkC,GAAG,IAAA,qBAAW,EACzD,gBAAgB,EAChB,0BAA0B,CAC7B,CAAC;AAEW,QAAA,+BAA+B,GAAG,kBAAkB,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
import type { ImportContext } from '../../../utils/imports';
|
|
2
2
|
import type { GraphQLResource } from '../../../intermediate/resource';
|
|
3
3
|
export declare function generateGraphQLKeyBuilder(importContext: ImportContext, resource: GraphQLResource): string;
|
|
4
|
-
export declare function generateGraphQLKey(importContext: ImportContext, returnShapeName: string): string;
|
|
5
|
-
export declare function generateGraphQLStructuredKey(importContext: ImportContext, returnShapeName: string): string;
|
|
@@ -3,54 +3,50 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.generateGraphQLKeyBuilder = void 0;
|
|
7
7
|
const deindent_1 = __importDefault(require("../../../utils/deindent"));
|
|
8
8
|
const resource_params_1 = require("./resource-params");
|
|
9
9
|
const key_builder_1 = require("../key-builder");
|
|
10
10
|
const constants_1 = require("../../shared/constants");
|
|
11
|
+
const constants_2 = require("../../graphql/constants");
|
|
12
|
+
const constants_3 = require("../../graphql/type/constants");
|
|
11
13
|
function generateGraphQLKeyBuilder(importContext, resource) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const { id: resourceId, returnShape } = resource;
|
|
14
|
+
const { id: resourceId, graphqlDSL, returnShape } = resource;
|
|
15
|
+
const namespaceImport = importContext.importAdapterUtil('keyPrefix');
|
|
15
16
|
const resourceRequestConfig = importContext.importRamlArtifact(resourceId, resource_params_1.RESOURCE_PARAMS_INTERFACE);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
: '';
|
|
20
|
-
structuredKeyCode =
|
|
21
|
-
returnShape !== undefined //TODO: cleanup in W-11069204
|
|
22
|
-
? generateGraphQLStructuredKey(importContext, returnShape === null || returnShape === void 0 ? void 0 : returnShape.name)
|
|
23
|
-
: '';
|
|
17
|
+
const queryType = graphqlDSL.schema.getQueryType();
|
|
18
|
+
const GRAPHQL_QUERY_TYPE_KEYBUILDER_IMPORT = importContext.importGraphQLArtifact('types', queryType.name, constants_3.KEY_BUILDER_IDENTIFIER);
|
|
19
|
+
const GRAPHQL_QUERY_TYPE_STRUCTURED_KEYBUILDER_IMPORT = importContext.importGraphQLArtifact('types', queryType.name, constants_3.STRUCTURED_KEY_BUILDER_IDENTIFIER);
|
|
24
20
|
return (0, deindent_1.default) `
|
|
25
21
|
export function ${key_builder_1.RESOURCE_KEY_BUILDER_IDENTIFIER}(${constants_1.LUVIO_IDENTIFIER}: ${constants_1.LUVIO_IMPORT}, params: ${resourceRequestConfig}): string {
|
|
26
|
-
|
|
22
|
+
const { query, operationName, variables } = params.body;
|
|
23
|
+
const operationToExecute = ${constants_2.GET_OPERATION_FROM_DOCUMENT_IMPORT}(query, operationName);
|
|
24
|
+
if(operationToExecute !== undefined) {
|
|
25
|
+
const fragments: ${constants_2.GRAPHQL_FRAGMENT_MAP_IMPORT} = ${constants_2.CREATE_FRAGMENT_MAP_IMPORT}(query);
|
|
26
|
+
return ${GRAPHQL_QUERY_TYPE_KEYBUILDER_IMPORT}(${constants_1.LUVIO_IDENTIFIER}, operationToExecute, variables || {}, fragments)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return \`${namespaceImport}${constants_1.CACHE_KEY_NAMESPACE_DELIMITER}${returnShape.name}${constants_1.CACHE_KEY_NAMESPACE_DELIMITER}${constants_2.INVALID_OPERATION_CONFIGURATION}\`;
|
|
30
|
+
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
export function ${key_builder_1.RESOURCE_STRUCTURED_KEY_BUILDER_IDENTIFIER}(${constants_1.LUVIO_IDENTIFIER}: ${constants_1.LUVIO_IMPORT}, params: ${resourceRequestConfig}): ${constants_1.LUVIO_NORMALIZED_KEY_METADATA_IMPORT} {
|
|
30
|
-
|
|
34
|
+
const { query, operationName, variables } = params.body;
|
|
35
|
+
const operationToExecute = ${constants_2.GET_OPERATION_FROM_DOCUMENT_IMPORT}(query, operationName);
|
|
36
|
+
if(operationToExecute !== undefined) {
|
|
37
|
+
const fragments: ${constants_2.GRAPHQL_FRAGMENT_MAP_IMPORT} = ${constants_2.CREATE_FRAGMENT_MAP_IMPORT}(query);
|
|
38
|
+
return ${GRAPHQL_QUERY_TYPE_STRUCTURED_KEYBUILDER_IMPORT}(${constants_1.LUVIO_IDENTIFIER}, operationToExecute, variables || {}, fragments)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return ${constants_1.LUVIO_IDENTIFIER}.${constants_1.LUVIO_BUILD_STRUCTURED_KEY_METHOD_IDENTIFIER}(
|
|
42
|
+
${namespaceImport},
|
|
43
|
+
'${returnShape.name}',
|
|
44
|
+
{
|
|
45
|
+
operation: '${constants_2.INVALID_OPERATION_CONFIGURATION}'
|
|
46
|
+
}
|
|
47
|
+
);
|
|
31
48
|
}
|
|
32
49
|
`;
|
|
33
50
|
}
|
|
34
51
|
exports.generateGraphQLKeyBuilder = generateGraphQLKeyBuilder;
|
|
35
|
-
// TODO: what is the proper shape and resource key for gql queries?
|
|
36
|
-
function generateGraphQLKey(importContext, returnShapeName) {
|
|
37
|
-
const { importAdapterUtil } = importContext;
|
|
38
|
-
const KEY_PREFIX = importAdapterUtil('keyPrefix');
|
|
39
|
-
return (0, deindent_1.default) `
|
|
40
|
-
${KEY_PREFIX} + '${constants_1.CACHE_KEY_NAMESPACE_DELIMITER}' + '${returnShapeName}';
|
|
41
|
-
`;
|
|
42
|
-
}
|
|
43
|
-
exports.generateGraphQLKey = generateGraphQLKey;
|
|
44
|
-
function generateGraphQLStructuredKey(importContext, returnShapeName) {
|
|
45
|
-
const { importAdapterUtil } = importContext;
|
|
46
|
-
const KEY_PREFIX = importAdapterUtil('keyPrefix');
|
|
47
|
-
return (0, deindent_1.default) `
|
|
48
|
-
${constants_1.LUVIO_IDENTIFIER}.${constants_1.LUVIO_BUILD_STRUCTURED_KEY_METHOD_IDENTIFIER}(
|
|
49
|
-
${KEY_PREFIX},
|
|
50
|
-
'${returnShapeName}',
|
|
51
|
-
{}
|
|
52
|
-
)
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
exports.generateGraphQLStructuredKey = generateGraphQLStructuredKey;
|
|
56
52
|
//# sourceMappingURL=key-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-builder.js","sourceRoot":"","sources":["../../../../src/codegen/resource/graphql/key-builder.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA+C;AAE/C,uDAA8D;AAC9D,gDAGwB;AAGxB,sDAMgC;
|
|
1
|
+
{"version":3,"file":"key-builder.js","sourceRoot":"","sources":["../../../../src/codegen/resource/graphql/key-builder.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA+C;AAE/C,uDAA8D;AAC9D,gDAGwB;AAGxB,sDAMgC;AAChC,uDAKiC;AACjC,4DAGsC;AAEtC,SAAgB,yBAAyB,CACrC,aAA4B,EAC5B,QAAyB;IAEzB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAE7D,MAAM,eAAe,GAAG,aAAa,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,qBAAqB,GAAG,aAAa,CAAC,kBAAkB,CAC1D,UAAU,EACV,2CAAyB,CAC5B,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAG,CAAC;IACpD,MAAM,oCAAoC,GAAG,aAAa,CAAC,qBAAqB,CAC5E,OAAO,EACP,SAAS,CAAC,IAAI,EACd,kCAAsB,CACzB,CAAC;IACF,MAAM,+CAA+C,GAAG,aAAa,CAAC,qBAAqB,CACvF,OAAO,EACP,SAAS,CAAC,IAAI,EACd,6CAAiC,CACpC,CAAC;IAEF,OAAO,IAAA,kBAAQ,EAAA;8BACW,6CAA+B,IAAI,4BAAgB,KAAK,wBAAY,aAAa,qBAAqB;;6CAEvF,8CAAkC;;uCAExC,uCAA2B,MAAM,sCAA0B;6BACrE,oCAAoC,IAAI,4BAAgB;;;2BAG1D,eAAe,GAAG,yCAA6B,GAClE,WAAY,CAAC,IACjB,GAAG,yCAA6B,GAAG,2CAA+B;;;;8BAIxC,wDAA0C,IAAI,4BAAgB,KAAK,wBAAY,aAAa,qBAAqB,MAAM,gDAAoC;;6CAE5I,8CAAkC;;uCAExC,uCAA2B,MAAM,sCAA0B;6BACrE,+CAA+C,IAAI,4BAAgB;;;yBAGvE,4BAAgB,IAAI,wDAA4C;sBACnE,eAAe;uBACd,WAAY,CAAC,IAAI;;sCAEF,2CAA+B;;;;SAI5D,CAAC;AACV,CAAC;AAvDD,8DAuDC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luvio/compiler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.143.0",
|
|
4
4
|
"description": "Luvio Compiler",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"test:debug": "node --inspect-brk ../../../node_modules/jest/bin/jest.js --config ./jest.config.js --runInBand"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@luvio/graphql-parser": "^0.
|
|
26
|
+
"@luvio/graphql-parser": "^0.143.0",
|
|
27
27
|
"amf-client-js": "4.2.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@luvio/adapter-test-library": "^0.
|
|
31
|
-
"@luvio/engine": "^0.
|
|
32
|
-
"@luvio/graphql": "^0.
|
|
30
|
+
"@luvio/adapter-test-library": "^0.143.0",
|
|
31
|
+
"@luvio/engine": "^0.143.0",
|
|
32
|
+
"@luvio/graphql": "^0.143.0"
|
|
33
33
|
},
|
|
34
34
|
"volta": {
|
|
35
35
|
"extends": "../../../package.json"
|