Skip to content

Commit e63d51b

Browse files
Merge branch 'build/6.6.38' of github.com:mulesoft/api-console into build/6.6.38
2 parents c2a5ece + ea621a4 commit e63d51b

File tree

6 files changed

+611
-379
lines changed

6 files changed

+611
-379
lines changed

.eslintrc.js

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,68 @@
11
// eslint-disable-next-line no-undef
22
module.exports = {
3-
'env': {
4-
'browser': true,
5-
'es2021': true,
6-
'mocha': true,
3+
env: {
4+
browser: true,
5+
es2021: true,
6+
mocha: true,
77
},
8-
'extends': 'eslint:recommended',
9-
'parserOptions': {
10-
'ecmaVersion': 12,
11-
'sourceType': 'module',
8+
extends: 'eslint:recommended',
9+
parserOptions: {
10+
ecmaVersion: 12,
11+
sourceType: 'module',
1212
},
13-
'rules': {
13+
rules: {
1414
'accessor-pairs': 'error',
1515
'array-bracket-newline': 'error',
1616
'array-bracket-spacing': ['error', 'never'],
1717
'array-callback-return': 'error',
1818
'array-element-newline': [
19-
'error', {
20-
'ArrayExpression': 'consistent',
21-
'ArrayPattern': { 'multiline': true },
19+
'error',
20+
{
21+
ArrayExpression: 'consistent',
22+
ArrayPattern: { multiline: true },
2223
},
2324
],
2425
'arrow-body-style': 'error',
2526
'arrow-parens': 'error',
2627
'arrow-spacing': [
27-
'error', {
28-
'after': true,
29-
'before': true,
28+
'error',
29+
{
30+
after: true,
31+
before: true,
3032
},
3133
],
3234
'block-scoped-var': 'error',
3335
'block-spacing': 'error',
3436
'brace-style': ['error', '1tbs'],
35-
'camelcase': 'error',
37+
camelcase: 'error',
3638
'capitalized-comments': 'off',
3739
'class-methods-use-this': 'error',
3840
'comma-dangle': 'off',
3941
'comma-spacing': [
40-
'error', {
41-
'after': true,
42-
'before': false,
42+
'error',
43+
{
44+
after: true,
45+
before: false,
4346
},
4447
],
4548
'comma-style': ['error', 'last'],
46-
'complexity': 'error',
49+
complexity: 'error',
4750
'computed-property-spacing': ['error', 'never'],
4851
'consistent-return': [
49-
'error', {
50-
'treatUndefinedAsUnspecified': false,
52+
'error',
53+
{
54+
treatUndefinedAsUnspecified: false,
5155
},
5256
],
5357
'consistent-this': 'error',
54-
'curly': 'error',
58+
curly: 'error',
5559
'default-case': 'error',
5660
'default-case-last': 'error',
5761
'default-param-last': 'error',
5862
'dot-location': 'error',
5963
'dot-notation': 'error',
6064
'eol-last': 'error',
61-
'eqeqeq': 'error',
65+
eqeqeq: 'error',
6266
'func-call-spacing': 'error',
6367
'func-name-matching': 'error',
6468
'func-names': 'error',
@@ -71,14 +75,15 @@ module.exports = {
7175
'id-length': 'off',
7276
'id-match': 'error',
7377
'implicit-arrow-linebreak': ['error', 'beside'],
74-
'indent': 'off',
78+
indent: 'off',
7579
'init-declarations': 'off',
7680
'jsx-quotes': 'error',
7781
'key-spacing': 'error',
7882
'keyword-spacing': [
79-
'error', {
80-
'after': true,
81-
'before': true,
83+
'error',
84+
{
85+
after: true,
86+
before: true,
8287
},
8388
],
8489
'line-comment-position': 'error',
@@ -204,13 +209,13 @@ module.exports = {
204209
'prefer-spread': 'error',
205210
'prefer-template': 'error',
206211
'quote-props': 'off',
207-
'quotes': ['error', 'single'],
208-
'radix': 'error',
212+
quotes: ['error', 'single'],
213+
radix: 'error',
209214
'require-atomic-updates': 'error',
210215
'require-await': 'error',
211216
'require-unicode-regexp': 'off',
212217
'rest-spread-spacing': 'error',
213-
'semi': 'error',
218+
semi: 'error',
214219
'semi-spacing': 'error',
215220
'semi-style': ['error', 'last'],
216221
'sort-keys': 'off',
@@ -221,11 +226,12 @@ module.exports = {
221226
'space-infix-ops': 'off',
222227
'space-unary-ops': 'error',
223228
'spaced-comment': ['error', 'always'],
224-
'strict': 'error',
229+
strict: 'error',
225230
'switch-colon-spacing': [
226-
'error', {
227-
'after': true,
228-
'before': false,
231+
'error',
232+
{
233+
after: true,
234+
before: false,
229235
},
230236
],
231237
'symbol-description': 'error',
@@ -236,6 +242,18 @@ module.exports = {
236242
'wrap-iife': 'error',
237243
'wrap-regex': 'off',
238244
'yield-star-spacing': 'error',
239-
'yoda': ['error', 'never'],
245+
yoda: ['error', 'never'],
240246
},
247+
overrides: [
248+
{
249+
files: ['demo/demo-server/api/amf-service/*.js'],
250+
env: {
251+
node: true,
252+
browser: false,
253+
},
254+
globals: {
255+
process: true,
256+
},
257+
},
258+
],
241259
};

demo/demo-server/api/amf-service/amf-parser.js

Lines changed: 56 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,80 @@
1+
// eslint-disable-next-line no-undef
12
const amf = require('amf-client-js');
2-
// import amf from 'amf-client-js';
3-
amf.plugins.document.WebApi.register();
4-
amf.plugins.document.Vocabularies.register();
5-
amf.plugins.features.AMFValidation.register();
6-
let initied = false;
73

8-
async function validateDoc(type, doc) {
9-
let validateProfile;
10-
switch (type) {
11-
case 'RAML 1.0': validateProfile = amf.ProfileNames.RAML; break;
12-
case 'RAML 0.8': validateProfile = amf.ProfileNames.RAML08; break;
13-
case 'OAS 1.0':
4+
/** @typedef {import('amf-client-js').AMFConfiguration} AMFConfiguration */
5+
6+
/**
7+
* @typedef ApiSearchResult
8+
* @property {string} type
9+
*/
10+
11+
/**
12+
* @typedef ParserApiConfiguration
13+
* @property {string} source
14+
* @property {ApiSearchResult} from
15+
*/
16+
17+
const {
18+
RAMLConfiguration,
19+
OASConfiguration,
20+
AsyncAPIConfiguration,
21+
RenderOptions,
22+
PipelineId,
23+
} = amf;
24+
25+
/**
26+
* @param {string} vendor
27+
* @returns {AMFConfiguration}
28+
*/
29+
const getConfiguration = (vendor) => {
30+
switch (vendor) {
31+
case 'RAML 0.8': return RAMLConfiguration.RAML08();
32+
case 'RAML 1.0': return RAMLConfiguration.RAML10();
1433
case 'OAS 2.0':
34+
case 'OAS 2':
35+
return OASConfiguration.OAS20();
1536
case 'OAS 3.0':
16-
validateProfile = amf.ProfileNames.OAS;
17-
break;
37+
case 'OAS 3':
38+
return OASConfiguration.OAS30();
39+
case 'ASYNC 2.0': return AsyncAPIConfiguration.Async20();
40+
default: throw new Error(`Unknown vendor: ${vendor}`);
1841
}
19-
const result = await amf.AMF.validate(doc, validateProfile);
20-
process.send({ validation: result.toString() });
21-
}
42+
};
43+
2244
/**
2345
* AMF parser to be called in a child process.
2446
*
2547
* AMF can in extreme cases takes forever to parse API data if, for example,
26-
* RAML type us defined as a number of union types. It may sometimes cause
27-
* the process to crash. To protect the renderer proces this is run as forked
48+
* RAML type is defined as a number of union types. It may sometimes cause
49+
* the process to crash. To protect the renderer process this is run as forked
2850
* process.
2951
*
30-
* @param {Object} data
52+
* @param {ParserApiConfiguration} data
3153
*/
32-
async function processData(data) {
54+
const processData = async (data) => {
3355
const sourceFile = data.source;
34-
const type = data.from.type;
35-
const contentType = data.from.contentType;
36-
const validate = data.validate;
37-
if (!initied) {
38-
await amf.Core.init();
39-
}
40-
/* eslint-disable-next-line require-atomic-updates */
41-
initied = true;
42-
const file = `file://${sourceFile}`;
43-
const parser = amf.Core.parser(type, contentType);
44-
let doc = await parser.parseFileAsync(file);
45-
if (validate) {
46-
await validateDoc(type, doc);
47-
}
56+
const { type } = data.from;
4857

49-
const resolver = amf.Core.resolver(type);
50-
doc = resolver.resolve(doc, 'editing');
51-
const generator = amf.Core.generator('AMF Graph', 'application/ld+json');
52-
const opts = amf.render.RenderOptions().withSourceMaps.withCompactUris;
53-
return await generator.generateString(doc, opts);
54-
}
58+
const ro = new RenderOptions().
59+
withSourceMaps().
60+
withCompactUris();
61+
const apiConfiguration = getConfiguration(type).withRenderOptions(ro);
62+
const client = apiConfiguration.baseUnitClient();
63+
const file = `file://${sourceFile}`;
64+
const result = await client.parse(file);
65+
const transformed = client.transform(result.baseUnit, PipelineId.Editing);
66+
return client.render(transformed.baseUnit, 'application/ld+json');
67+
};
5568

5669
process.on('message', async (data) => {
70+
const typed = /** @type ParserApiConfiguration */ (data);
5771
try {
58-
const api = await processData(data);
72+
const api = await processData(typed);
5973
process.send({
6074
api
6175
});
6276
} catch (cause) {
63-
let m = `AMF parser: Unable to parse API ${data.source}.\n`;
77+
let m = `AMF parser: Unable to parse API ${typed.source}.\n`;
6478
m += cause.s$1 || cause.message;
6579
process.send({ error: m });
6680
}

0 commit comments

Comments
 (0)