diff --git a/ts/smartnpm.classes.npmpackage.ts b/ts/smartnpm.classes.npmpackage.ts index 886e25e..9932cd1 100644 --- a/ts/smartnpm.classes.npmpackage.ts +++ b/ts/smartnpm.classes.npmpackage.ts @@ -91,21 +91,22 @@ export class NpmPackage { public async saveToCache() {} /** - * get file from package + * get files from package */ - public async getFileFromPackage( + public async getFilesFromPackage( filePath: string, - optionsArg?: { + optionsArg: { distTag?: string; version?: string; - } - ): Promise { - const done = plugins.smartpromise.defer(); + }, + returnOnFirstArg = false + ): Promise { + const done = plugins.smartpromise.defer(); const smartarchiveInstance = new plugins.smartarchive.SmartArchive(); - let tarballUrl = this.dist.tarball; - if (optionsArg && (optionsArg.version || optionsArg.distTag)) { + let tarballUrl = this.dist?.tarball; + if (optionsArg?.version || optionsArg?.distTag) { if (optionsArg.distTag && optionsArg.version) { - throw new Error('Please either sepcify version OR disttag, not both.'); + throw new Error('Please either specify version OR disttag, not both.'); } let targetVersion: plugins.smartversion.SmartVersion; if (optionsArg.distTag) { @@ -131,27 +132,43 @@ export class NpmPackage { } const fileObservable = await smartarchiveInstance.extractArchiveFromUrlToObservable(tarballUrl); const wantedFilePath = plugins.path.join('package', filePath); + const allMatchingFiles: plugins.smartfile.Smartfile[] = []; const subscription = fileObservable.subscribe( (fileArg) => { - if (fileArg.path === wantedFilePath) { - // lets care about caching - + // returnOnFirstArg requires exact match + if (returnOnFirstArg && fileArg.path === wantedFilePath) { // lets resolve with the wanted file - done.resolve(fileArg); + done.resolve([fileArg]); subscription.unsubscribe(); + } else if(fileArg.path.startsWith(wantedFilePath)) { + allMatchingFiles.push(fileArg); } }, (err) => { console.log(err); }, () => { - done.resolve(null); + done.resolve(allMatchingFiles); subscription.unsubscribe(); } ); return done.promise; } + /** + * get files from package + */ + public async getFileFromPackage( + filePath: string, + optionsArg?: { + distTag?: string; + version?: string; + } + ): Promise { + const result = await this.getFilesFromPackage(filePath, optionsArg, true); + return result[0]; + } + /** * updates the package with information from the registry */ diff --git a/ts/smartnpm.classes.npmregistry.ts b/ts/smartnpm.classes.npmregistry.ts index a66140b..395eb46 100644 --- a/ts/smartnpm.classes.npmregistry.ts +++ b/ts/smartnpm.classes.npmregistry.ts @@ -36,6 +36,9 @@ export class NpmRegistry { const fullMetadata = await plugins.packageJson(packageName, { registryUrl: this.options.npmRegistryUrl, fullMetadata: true, + }).catch(err => { + console.log(err); + return null; }); const versionData = await plugins.packageJson(packageName, { registryUrl: this.options.npmRegistryUrl, @@ -75,6 +78,13 @@ export class NpmRegistry { } } + public async getFilesFromPackage(packageNameArg: string, filePath: string, optionsArg: { + distTag?: string; + version?: string; + }): Promise { + return []; + } + public async getPackageAsSmartfileVirtualDir(packageNameArg: string): Promise { /** * TODO: rewrite as memory only