diff --git a/src/model/contract.ts b/src/model/contract.ts index 5015277..0e91ec2 100644 --- a/src/model/contract.ts +++ b/src/model/contract.ts @@ -1,12 +1,13 @@ 'use strict'; import * as path from 'path'; +import * as fs from 'fs'; import { formatPath } from '../util'; export class Contract { public code: string; - // TODO: Import needs to be a class including if is local, absolutePath, module etc public imports: Array; public absolutePath: string; + constructor(absoulePath: string, code: string) { this.absolutePath = this.formatContractPath(absoulePath); this.code = code; @@ -24,12 +25,21 @@ export class Contract { public resolveImports() { const importRegEx = /^\s?import\s+[^'"]*['"](.*)['"]\s*/gm; let foundImport = importRegEx.exec(this.code); + while (foundImport != null) { const importPath = foundImport[1]; - + if (this.isImportLocal(importPath)) { const importFullPath = this.formatContractPath(path.resolve(path.dirname(this.absolutePath), foundImport[1])); this.imports.push(importFullPath); + } else if (importPath.startsWith('@stdlib/')) { + const stdlibPath = path.resolve(path.dirname(this.absolutePath), "../node_modules/@tact-lang/compiler/stdlib"); + const contractFileName = importPath.replace('@stdlib/', '') + '.tact'; + const contractFullPath = path.join(stdlibPath, 'libs', contractFileName); + + if (fs.existsSync(contractFullPath)) { + this.imports.push(contractFullPath); + } } else { this.imports.push(importPath); }