Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit 0e7b1f3

Browse files
authored
Handle error if invalid json, print in std if no --in (#278)
1 parent 0c9c038 commit 0e7b1f3

File tree

7 files changed

+57
-6
lines changed

7 files changed

+57
-6
lines changed

packages/lu/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@
6767
},
6868
"nyc": {
6969
"exclude": [
70-
"**/lufile/generated/**"
70+
"**/lufile/generated/**",
71+
"test/**"
7172
]
7273
}
7374
}

packages/lu/src/commands/luis/generate/cs.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ export default class LuisGenerateCs extends Command {
5858
this.reorderEntities(app, 'patternAnyEntities')
5959
this.reorderEntities(app, 'composites')
6060

61-
const outputPath = file.validatePath(flags.out, flags.className + '.cs', flags.force)
61+
const outputPath = flags.out ? file.validatePath(flags.out, flags.className + '.cs', flags.force) : flags.out
6262

6363
this.log(
64-
`Generating file at ${outputPath || ''} that contains class ${space}.${flags.className}.`
64+
`Generating file at ${outputPath || 'stdout'} that contains class ${space}.${flags.className}.`
6565
)
6666

6767
await LuisToCsConverter.writeFromLuisJson(app, flags.className, space, outputPath)

packages/lu/src/commands/luis/generate/ts.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ export default class LuisGenerateTs extends Command {
5151
this.reorderEntities(app, 'patternAnyEntities')
5252
this.reorderEntities(app, 'composites')
5353

54-
const outputPath = file.validatePath(flags.out, kebabCase(flags.className) + '.ts', flags.force)
54+
const outputPath = flags.out ? file.validatePath(flags.out, kebabCase(flags.className) + '.ts', flags.force) : flags.out
5555

5656
this.log(
57-
`Generating file at ${outputPath || ''} that contains class ${flags.className}.`
57+
`Generating file at ${outputPath || 'stdout'} that contains class ${flags.className}.`
5858
)
5959

6060
await LuisToTsConverter.writeFromLuisJson(app, flags.className, outputPath)

packages/lu/src/parser/luisfile/parseMultiPlatform.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const {CLIError} = require('@microsoft/bf-cli-command')
2+
13
module.exports = {
24
Composite: class {
35
constructor() {
@@ -38,6 +40,7 @@ module.exports = {
3840
}
3941
},
4042
fromLuisApp: function(luisApp) {
43+
try {
4144
const classData = new this.MultiPlatformLuis();
4245
classData.intents = this.processIntents(luisApp.intents);
4346
classData.simpleEntities = this.extractEntities(luisApp.entities);
@@ -47,6 +50,9 @@ module.exports = {
4750
classData.patternEntities = this.extractEntities(luisApp.patternAnyEntities);
4851
classData.composites = this.extractComposites(luisApp.composites);
4952
return classData;
53+
} catch (err) {
54+
throw new CLIError("Invalid LUIS JSON file content.")
55+
}
5056
},
5157
normalizeName: function(name) {
5258
return name.replace(/\./g, '_').replace(/ /g, '_');

packages/lu/test/commands/luis/generate/cs.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,25 @@ describe('luis:generate:cs', () => {
9595
.it('Generates prebuilt entities correctly', async () => {
9696
await compareSourceFiles('../../../fixtures/generate/PrebuiltEntities.cs', '../../../fixtures/generate/results/PrebuiltEntities.cs')
9797
})
98+
99+
test
100+
.stderr()
101+
.command(['luis:generate:cs',
102+
'--in',
103+
`${path.join(__dirname, '../../../fixtures/generate/invalid.json')}`,
104+
'--out',
105+
`${path.join(__dirname, '../../../fixtures/generate/results/invalid.cs')}`])
106+
.it('Throws expected error if invalid JSON', async ctx => {
107+
expect(ctx.stderr).to.include('Invalid LUIS JSON file content.')
108+
})
109+
110+
test
111+
.stdout()
112+
.command(['luis:generate:cs',
113+
'--in',
114+
`${path.join(__dirname, '../../../fixtures/generate/Intents.json')}`])
115+
.it('Prints to console if no --out', async ctx => {
116+
expect(ctx.stdout).to.include('Generating file at stdout')
117+
expect(ctx.stdout).to.include('// <auto-generated>')
118+
})
98119
})

packages/lu/test/commands/luis/generate/ts.test.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ describe('luis:generate:ts', () => {
1919
await fs.emptyDir(path.join(__dirname, '../../../fixtures/generate/results'))
2020
})
2121

22-
2322
test
2423
.stdout()
2524
.command(['luis:generate:ts',
@@ -97,4 +96,25 @@ describe('luis:generate:ts', () => {
9796
await compareSourceFiles('../../../fixtures/generate/prebuilt-entities.ts', '../../../fixtures/generate/results/prebuilt-entities.ts')
9897
})
9998

99+
test
100+
.stderr()
101+
.command(['luis:generate:ts',
102+
'--in',
103+
`${path.join(__dirname, '../../../fixtures/generate/invalid.json')}`,
104+
'--out',
105+
`${path.join(__dirname, '../../../fixtures/generate/results/invalid.ts')}`])
106+
.it('Throws expected error if invalid JSON', async ctx => {
107+
expect(ctx.stderr).to.include('Invalid LUIS JSON file content.')
108+
})
109+
110+
test
111+
.stdout()
112+
.command(['luis:generate:ts',
113+
'--in',
114+
`${path.join(__dirname, '../../../fixtures/generate/Intents.json')}`])
115+
.it('Prints to console if no --out', async ctx => {
116+
expect(ctx.stdout).to.include('Generating file at stdout')
117+
expect(ctx.stdout).to.include('* <auto-generated>')
118+
})
119+
100120
})
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"name": "invalid"
3+
}

0 commit comments

Comments
 (0)