Skip to content

Commit

Permalink
fix(compilation): catch engine from source files instead of package n…
Browse files Browse the repository at this point in the history
…ames
  • Loading branch information
EmileRolley committed May 29, 2024
1 parent 060335c commit 3751814
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 30 deletions.
2 changes: 1 addition & 1 deletion src/commons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import yaml from 'yaml'
*/

/**
* Represents a rule name, i.e. 'rule . A. B'
* Represents a rule name, i.e. 'rule . A . B'
*/
export type RuleName = string

Expand Down
39 changes: 19 additions & 20 deletions src/compilation/resolveImports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ function getEngine(

if (packageName === undefined) {
throw new Error(
`[Erreur dans la macro 'importer!']
`[ Erreur dans la macro 'importer!' ]
Le nom du package est manquant dans la macro 'importer!' dans le fichier: ${basename(filePath)}.
[Solution]
[ Solution ]
Ajoutez le nom du package dans la macro 'importer!'.
[Exemple]
[ Exemple ]
importer!:
depuis:
nom: package-name
Expand All @@ -64,13 +64,13 @@ importer!:
)
}

if (!enginesCache[packageName]) {
let modelPath = ''
const modelPath =
depuis.source !== undefined
? join(fileDirPath, depuis.source)
: packageModelPath(packageName)

if (!enginesCache[modelPath]) {
try {
modelPath =
depuis.source !== undefined
? join(fileDirPath, depuis.source)
: packageModelPath(packageName)
const model = JSON.parse(readFileSync(modelPath, 'utf-8'))
const engine = new Engine(model, {
logger: {
Expand All @@ -83,17 +83,17 @@ importer!:
if (verbose) {
console.debug(`📦 ${packageName} loaded`)
}
enginesCache[packageName] = engine
enginesCache[modelPath] = engine
} catch (e) {
throw new Error(`[Erreur dans la macro 'importer!']
throw new Error(`[ Erreur dans la macro 'importer!' ]
Le package '${packageName}' n'a pas pu être trouvé. (Le fichier '${modelPath}' est introuvable).
[Solution]
[ Solution ]
- Assurez-vous que le package existe et qu'il est correctement installé dans vos 'node_modules'.
- Assurez-vous que le fichier '${packageName}.model.json' existe à la racine du package. Sinon,
précisez le chemin du fichier dans la macro 'importer!' grâce à l'attribut 'source'.
[Exemple]
[ Exemple ]
importer!:
depuis:
nom: package-name
Expand All @@ -102,7 +102,7 @@ importer!:
}
}

return enginesCache[packageName]
return enginesCache[modelPath]
}

function getDependencies(engine: Engine, rule: RuleNode, acc = []) {
Expand Down Expand Up @@ -242,10 +242,10 @@ export function resolveImports(
rulesToImport?.forEach(({ ruleName, attrs }) => {
if (appearsMoreThanOnce(rulesToImport, ruleName)) {
throw new Error(
`[Erreur dans la macro 'importer!']
`[ Erreur dans la macro 'importer!' ]
La règle '${ruleName}' est définie deux fois dans ${importMacro.depuis.nom}
[Solution]
[ Solution ]
Supprimez une des deux définitions de la règle '${ruleName}' dans la macro 'importer!'`,
)
}
Expand All @@ -257,13 +257,12 @@ Supprimez une des deux définitions de la règle '${ruleName}' dans la macro 'im
try {
rule = engine.getRule(ruleName)
} catch (e) {
throw new Error(`[Erreur dans la macro 'importer!']
throw new Error(`[ Erreur dans la macro 'importer!' ]
La règle '${ruleName}' n'existe pas dans '${importMacro.depuis.nom}'.
[Solution]
[ Solution ]
- Vérifiez que le nom de la règle est correct.
- Assurez-vous que la règle '${ruleName}' existe dans '${importMacro.depuis.nom}'.
`)
- Assurez-vous que la règle '${ruleName}' existe dans '${importMacro.depuis.nom}'.`)
}

const getUpdatedRule = (ruleName: RuleName, rule: Rule) => {
Expand Down
16 changes: 7 additions & 9 deletions test/compilation/getModelFromSource.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,13 +158,12 @@ Ajout d'une description`,
expect(() => {
getModelFromSource(join(testDataDir, 'unknown-import.publicodes'))
}).toThrow(
`[Erreur dans la macro 'importer!']
`[ Erreur dans la macro 'importer!' ]
La règle 'root . unknown' n'existe pas dans 'my-external-package'.
[Solution]
[ Solution ]
- Vérifiez que le nom de la règle est correct.
- Assurez-vous que la règle 'root . unknown' existe dans 'my-external-package'.
`,
- Assurez-vous que la règle 'root . unknown' existe dans 'my-external-package'.`,
)
})

Expand All @@ -173,21 +172,20 @@ La règle 'root . unknown' n'existe pas dans 'my-external-package'.
expect(() => {
getModelFromSource(path)
}).toThrow(
`[Erreur dans la macro 'importer!']
`[ Erreur dans la macro 'importer!' ]
Le nom du package est manquant dans la macro 'importer!' dans le fichier: no-name-import.publicodes.
[Solution]
[ Solution ]
Ajoutez le nom du package dans la macro 'importer!'.
[Exemple]
[ Exemple ]
importer!:
depuis:
nom: package-name
les règles:
- ruleA
- ruleB
...
`,
...`,
)
})

Expand Down

0 comments on commit 3751814

Please sign in to comment.