From 06346a195bb02e34a0cd811cdc62c62e6483b59a Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2023 18:17:12 +0100 Subject: [PATCH 01/17] resolver use package.json, yarn lock --- .../src/lib/compiler-content-imports.ts | 26 +++++++++++++- libs/remix-url-resolver/src/resolve.ts | 36 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 756e7dc22b..8afd4e22b3 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -20,7 +20,31 @@ export class CompilerImports extends Plugin { urlResolver: any constructor () { super(profile) - this.urlResolver = new RemixURLResolver() + this.urlResolver = new RemixURLResolver(async () => { + try { + let yarnLock + if (await this.call('fileManager', 'exists', './yarn.lock')) { + yarnLock = await this.call('fileManager', 'readFile', './yarn.lock') + } + + let packageLock + if (await this.call('fileManager', 'exists', './package-lock.json')) { + packageLock = await this.call('fileManager', 'readFile', './package-lock.json') + packageLock = JSON.parse(packageLock) + } + + if (await this.call('fileManager', 'exists', './package.json')) { + const content = await this.call('fileManager', 'readFile', './package.json') + const pkg = JSON.parse(content) + return { deps: { ...pkg['dependencies'], ...pkg['devDependencies'] }, yarnLock, packageLock } + } else { + return {} + } + } catch (e) { + console.error(e) + return {} + } + }) this.previouslyHandled = {} // cache import so we don't make the request at each compilation. } diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index e3d9c4cf4b..2798943058 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -23,13 +23,17 @@ interface HandlerResponse { cleanUrl: string } +export type getPackages = () => Promise<{ [name: string]: string }> + export class RemixURLResolver { private previouslyHandled: PreviouslyHandledImports gistAccessToken: string protocol: string + getDependencies: getPackages - constructor (gistToken?: string, protocol = 'http:') { + constructor (getDependencies?: getPackages, gistToken?: string, protocol = 'http:') { this.previouslyHandled = {} + this.getDependencies = getDependencies this.setGistToken(gistToken, protocol) } @@ -130,6 +134,36 @@ export class RemixURLResolver { async handleNpmImport (url: string): Promise { // eslint-disable-next-line no-useless-catch try { + if (this.getDependencies) { + try { + const { deps, yarnLock, packageLock } = await this.getDependencies() + for (const pkg of Object.keys(deps)) { + if (url.startsWith(pkg)) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] + } + } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) + break + } + } + } catch (e) { + console.log(e) + } + } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) return { content: response.data, cleanUrl: url } From ec968ee67b0a9f55a2db4d1648b34a2c7769caa7 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 10:28:51 +0100 Subject: [PATCH 02/17] fix import cache --- .../src/lib/compiler-content-imports.ts | 14 +------------- libs/remix-url-resolver/src/resolve.ts | 4 ++-- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 8afd4e22b3..0d199a001f 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -16,7 +16,6 @@ export type ResolvedImport = { } export class CompilerImports extends Plugin { - previouslyHandled: Record urlResolver: any constructor () { super(profile) @@ -45,7 +44,6 @@ export class CompilerImports extends Plugin { return {} } }) - this.previouslyHandled = {} // cache import so we don't make the request at each compilation. } async setToken () { @@ -95,22 +93,12 @@ export class CompilerImports extends Plugin { if (!cb) cb = () => {} const self = this - if (force) delete this.previouslyHandled[url] - const imported = this.previouslyHandled[url] - if (imported) { - return cb(null, imported.content, imported.cleanUrl, imported.type, url) - } let resolved try { await this.setToken() - resolved = await this.urlResolver.resolve(url) + resolved = await this.urlResolver.resolve(url, [], force) const { content, cleanUrl, type } = resolved - self.previouslyHandled[url] = { - content, - cleanUrl, - type - } cb(null, content, cleanUrl, type, url) } catch (e) { return cb(new Error('not found ' + url)) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 2798943058..5afab62519 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -207,9 +207,9 @@ export class RemixURLResolver { ] } - public async resolve (filePath: string, customHandlers?: Handler[]): Promise { + public async resolve (filePath: string, customHandlers?: Handler[], force?: boolean): Promise { let imported: Imported = this.previouslyHandled[filePath] - if (imported) { + if (!force && imported) { return imported } const builtinHandlers: Handler[] = this.getHandlers() From fb4989fa37962886f4bb37b2e66e6f24bba6a631 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 12:05:11 +0100 Subject: [PATCH 03/17] fix using package json dependencies --- libs/remix-url-resolver/src/resolve.ts | 49 +++++++++++++++----------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 5afab62519..135ff05b14 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -137,29 +137,36 @@ export class RemixURLResolver { if (this.getDependencies) { try { const { deps, yarnLock, packageLock } = await this.getDependencies() - for (const pkg of Object.keys(deps)) { - if (url.startsWith(pkg)) { - let version - if (yarnLock) { - // yarn.lock - const regex = new RegExp(`"${pkg}@(.*)"`, 'g') - const yarnVersion = regex.exec(yarnLock) - if (yarnVersion && yarnVersion.length > 1) { - version = yarnVersion[1] - } - } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { - // package-lock.json - version = packageLock['dependencies'][pkg]['version'] - } - if (!version) { - // package.json - version = deps[pkg] + let matchLength = 0 + let pkg + Object.keys(deps).map((dep) => { + const reg = new RegExp(dep, 'g') + const match = url.match(reg) + if (match && match.length > 0 && matchLength < match[0].length) { + matchLength = match[0].length + pkg = dep + } + }) + if (pkg) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] } - if (version) url = url.replace(pkg, `${pkg}@${version}`) - break } - } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) + } } catch (e) { console.log(e) } From a97681c9cd451187d47afe4d9f22f8056153564f Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 12:17:54 +0100 Subject: [PATCH 04/17] clear the import cache --- libs/remix-core-plugin/src/lib/compiler-content-imports.ts | 1 + libs/remix-url-resolver/src/resolve.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 0d199a001f..30d31e054f 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -44,6 +44,7 @@ export class CompilerImports extends Plugin { return {} } }) + this.on('filePanel', 'setWorkspace', () => this.urlResolver.clearCache()) } async setToken () { diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 135ff05b14..4abfd53bcb 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -42,6 +42,10 @@ export class RemixURLResolver { this.protocol = protocol } + clearCache () { + this.previouslyHandled = {} + } + /** * Handle an import statement based on github * @param root The root of the github import statement From 361a9fa118db7d7d7f325fbc1e2454c96a149c97 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 13:07:44 +0100 Subject: [PATCH 05/17] move listener --- libs/remix-core-plugin/src/lib/compiler-content-imports.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 30d31e054f..85c811ef91 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -44,6 +44,10 @@ export class CompilerImports extends Plugin { return {} } }) + + } + + onActivation(): void { this.on('filePanel', 'setWorkspace', () => this.urlResolver.clearCache()) } From 15daf02e789a9da93769554d17fd2f4dfba88d86 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 14:02:57 +0100 Subject: [PATCH 06/17] fix console --- libs/remix-url-resolver/src/resolve.ts | 60 ++++++++++++++------------ 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 4abfd53bcb..0375588112 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -135,48 +135,52 @@ export class RemixURLResolver { * Handle an import statement based on NPM * @param url The url of the NPM import statement */ - async handleNpmImport (url: string): Promise { + async handleNpmImport(url: string): Promise { // eslint-disable-next-line no-useless-catch try { if (this.getDependencies) { try { - const { deps, yarnLock, packageLock } = await this.getDependencies() + const { deps, yarnLock, packageLock } = await this.getDependencies() + console.log('deps', deps, yarnLock, packageLock) let matchLength = 0 let pkg - Object.keys(deps).map((dep) => { - const reg = new RegExp(dep, 'g') - const match = url.match(reg) - if (match && match.length > 0 && matchLength < match[0].length) { - matchLength = match[0].length - pkg = dep - } - }) - if (pkg) { - let version - if (yarnLock) { - // yarn.lock - const regex = new RegExp(`"${pkg}@(.*)"`, 'g') - const yarnVersion = regex.exec(yarnLock) - if (yarnVersion && yarnVersion.length > 1) { - version = yarnVersion[1] + if (deps) { + Object.keys(deps).map((dep) => { + const reg = new RegExp(dep, 'g') + const match = url.match(reg) + if (match && match.length > 0 && matchLength < match[0].length) { + matchLength = match[0].length + pkg = dep } + }) + if (pkg) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] + } + } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { - // package-lock.json - version = packageLock['dependencies'][pkg]['version'] - } - if (!version) { - // package.json - version = deps[pkg] - } - if (version) url = url.replace(pkg, `${pkg}@${version}`) - } + } } catch (e) { console.log(e) } } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + console.log('handleNpmImport', url, response.data, req) return { content: response.data, cleanUrl: url } } catch (e) { throw e From 1bf947d645dddb160de1a6b0f09289de498d1417 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 14:03:17 +0100 Subject: [PATCH 07/17] rm console --- libs/remix-url-resolver/src/resolve.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 0375588112..c358b02968 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -141,7 +141,6 @@ export class RemixURLResolver { if (this.getDependencies) { try { const { deps, yarnLock, packageLock } = await this.getDependencies() - console.log('deps', deps, yarnLock, packageLock) let matchLength = 0 let pkg if (deps) { From b27970c87aadfd9bc16d994ddfd2a6da67b97e0d Mon Sep 17 00:00:00 2001 From: filip mertens Date: Thu, 9 Feb 2023 11:06:55 +0100 Subject: [PATCH 08/17] fix undefined --- libs/remix-url-resolver/src/resolve.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index c358b02968..aba4213bcf 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -162,7 +162,7 @@ export class RemixURLResolver { version = yarnVersion[1] } } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + if (!version && packageLock && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { // package-lock.json version = packageLock['dependencies'][pkg]['version'] } @@ -179,7 +179,7 @@ export class RemixURLResolver { } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) - console.log('handleNpmImport', url, response.data, req) + console.log('handleNpmImport', req) return { content: response.data, cleanUrl: url } } catch (e) { throw e From bec13fb8501c67e322ecd86158d57707a774a099 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 26 Jan 2023 18:17:12 +0100 Subject: [PATCH 09/17] resolver use package.json, yarn lock --- .../src/lib/compiler-content-imports.ts | 26 +++++++++++++- libs/remix-url-resolver/src/resolve.ts | 36 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 756e7dc22b..8afd4e22b3 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -20,7 +20,31 @@ export class CompilerImports extends Plugin { urlResolver: any constructor () { super(profile) - this.urlResolver = new RemixURLResolver() + this.urlResolver = new RemixURLResolver(async () => { + try { + let yarnLock + if (await this.call('fileManager', 'exists', './yarn.lock')) { + yarnLock = await this.call('fileManager', 'readFile', './yarn.lock') + } + + let packageLock + if (await this.call('fileManager', 'exists', './package-lock.json')) { + packageLock = await this.call('fileManager', 'readFile', './package-lock.json') + packageLock = JSON.parse(packageLock) + } + + if (await this.call('fileManager', 'exists', './package.json')) { + const content = await this.call('fileManager', 'readFile', './package.json') + const pkg = JSON.parse(content) + return { deps: { ...pkg['dependencies'], ...pkg['devDependencies'] }, yarnLock, packageLock } + } else { + return {} + } + } catch (e) { + console.error(e) + return {} + } + }) this.previouslyHandled = {} // cache import so we don't make the request at each compilation. } diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index e3d9c4cf4b..2798943058 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -23,13 +23,17 @@ interface HandlerResponse { cleanUrl: string } +export type getPackages = () => Promise<{ [name: string]: string }> + export class RemixURLResolver { private previouslyHandled: PreviouslyHandledImports gistAccessToken: string protocol: string + getDependencies: getPackages - constructor (gistToken?: string, protocol = 'http:') { + constructor (getDependencies?: getPackages, gistToken?: string, protocol = 'http:') { this.previouslyHandled = {} + this.getDependencies = getDependencies this.setGistToken(gistToken, protocol) } @@ -130,6 +134,36 @@ export class RemixURLResolver { async handleNpmImport (url: string): Promise { // eslint-disable-next-line no-useless-catch try { + if (this.getDependencies) { + try { + const { deps, yarnLock, packageLock } = await this.getDependencies() + for (const pkg of Object.keys(deps)) { + if (url.startsWith(pkg)) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] + } + } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) + break + } + } + } catch (e) { + console.log(e) + } + } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) return { content: response.data, cleanUrl: url } From 98be067c0be419cdd36837ba6bd7aa64b598b654 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 10:28:51 +0100 Subject: [PATCH 10/17] fix import cache --- .../src/lib/compiler-content-imports.ts | 14 +------------- libs/remix-url-resolver/src/resolve.ts | 4 ++-- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 8afd4e22b3..0d199a001f 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -16,7 +16,6 @@ export type ResolvedImport = { } export class CompilerImports extends Plugin { - previouslyHandled: Record urlResolver: any constructor () { super(profile) @@ -45,7 +44,6 @@ export class CompilerImports extends Plugin { return {} } }) - this.previouslyHandled = {} // cache import so we don't make the request at each compilation. } async setToken () { @@ -95,22 +93,12 @@ export class CompilerImports extends Plugin { if (!cb) cb = () => {} const self = this - if (force) delete this.previouslyHandled[url] - const imported = this.previouslyHandled[url] - if (imported) { - return cb(null, imported.content, imported.cleanUrl, imported.type, url) - } let resolved try { await this.setToken() - resolved = await this.urlResolver.resolve(url) + resolved = await this.urlResolver.resolve(url, [], force) const { content, cleanUrl, type } = resolved - self.previouslyHandled[url] = { - content, - cleanUrl, - type - } cb(null, content, cleanUrl, type, url) } catch (e) { return cb(new Error('not found ' + url)) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 2798943058..5afab62519 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -207,9 +207,9 @@ export class RemixURLResolver { ] } - public async resolve (filePath: string, customHandlers?: Handler[]): Promise { + public async resolve (filePath: string, customHandlers?: Handler[], force?: boolean): Promise { let imported: Imported = this.previouslyHandled[filePath] - if (imported) { + if (!force && imported) { return imported } const builtinHandlers: Handler[] = this.getHandlers() From 660416427cec79319bd212f3847aa93ab8bb9d7f Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 12:05:11 +0100 Subject: [PATCH 11/17] fix using package json dependencies --- libs/remix-url-resolver/src/resolve.ts | 49 +++++++++++++++----------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 5afab62519..135ff05b14 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -137,29 +137,36 @@ export class RemixURLResolver { if (this.getDependencies) { try { const { deps, yarnLock, packageLock } = await this.getDependencies() - for (const pkg of Object.keys(deps)) { - if (url.startsWith(pkg)) { - let version - if (yarnLock) { - // yarn.lock - const regex = new RegExp(`"${pkg}@(.*)"`, 'g') - const yarnVersion = regex.exec(yarnLock) - if (yarnVersion && yarnVersion.length > 1) { - version = yarnVersion[1] - } - } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { - // package-lock.json - version = packageLock['dependencies'][pkg]['version'] - } - if (!version) { - // package.json - version = deps[pkg] + let matchLength = 0 + let pkg + Object.keys(deps).map((dep) => { + const reg = new RegExp(dep, 'g') + const match = url.match(reg) + if (match && match.length > 0 && matchLength < match[0].length) { + matchLength = match[0].length + pkg = dep + } + }) + if (pkg) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] } - if (version) url = url.replace(pkg, `${pkg}@${version}`) - break } - } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) + } } catch (e) { console.log(e) } From d1660bb4597fc583a9f54bae48aab8588ffec77c Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 31 Jan 2023 12:17:54 +0100 Subject: [PATCH 12/17] clear the import cache --- libs/remix-core-plugin/src/lib/compiler-content-imports.ts | 1 + libs/remix-url-resolver/src/resolve.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 0d199a001f..30d31e054f 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -44,6 +44,7 @@ export class CompilerImports extends Plugin { return {} } }) + this.on('filePanel', 'setWorkspace', () => this.urlResolver.clearCache()) } async setToken () { diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 135ff05b14..4abfd53bcb 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -42,6 +42,10 @@ export class RemixURLResolver { this.protocol = protocol } + clearCache () { + this.previouslyHandled = {} + } + /** * Handle an import statement based on github * @param root The root of the github import statement From 2093682cadad39bd2337a8926796d2e0f3d8ab7f Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 13:07:44 +0100 Subject: [PATCH 13/17] move listener --- libs/remix-core-plugin/src/lib/compiler-content-imports.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 30d31e054f..85c811ef91 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -44,6 +44,10 @@ export class CompilerImports extends Plugin { return {} } }) + + } + + onActivation(): void { this.on('filePanel', 'setWorkspace', () => this.urlResolver.clearCache()) } From 41a754722f96863f51f31ac804abf4b964f11e10 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 14:02:57 +0100 Subject: [PATCH 14/17] fix console --- libs/remix-url-resolver/src/resolve.ts | 60 ++++++++++++++------------ 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 4abfd53bcb..0375588112 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -135,48 +135,52 @@ export class RemixURLResolver { * Handle an import statement based on NPM * @param url The url of the NPM import statement */ - async handleNpmImport (url: string): Promise { + async handleNpmImport(url: string): Promise { // eslint-disable-next-line no-useless-catch try { if (this.getDependencies) { try { - const { deps, yarnLock, packageLock } = await this.getDependencies() + const { deps, yarnLock, packageLock } = await this.getDependencies() + console.log('deps', deps, yarnLock, packageLock) let matchLength = 0 let pkg - Object.keys(deps).map((dep) => { - const reg = new RegExp(dep, 'g') - const match = url.match(reg) - if (match && match.length > 0 && matchLength < match[0].length) { - matchLength = match[0].length - pkg = dep - } - }) - if (pkg) { - let version - if (yarnLock) { - // yarn.lock - const regex = new RegExp(`"${pkg}@(.*)"`, 'g') - const yarnVersion = regex.exec(yarnLock) - if (yarnVersion && yarnVersion.length > 1) { - version = yarnVersion[1] + if (deps) { + Object.keys(deps).map((dep) => { + const reg = new RegExp(dep, 'g') + const match = url.match(reg) + if (match && match.length > 0 && matchLength < match[0].length) { + matchLength = match[0].length + pkg = dep } + }) + if (pkg) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] + } + } + if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) url = url.replace(pkg, `${pkg}@${version}`) } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { - // package-lock.json - version = packageLock['dependencies'][pkg]['version'] - } - if (!version) { - // package.json - version = deps[pkg] - } - if (version) url = url.replace(pkg, `${pkg}@${version}`) - } + } } catch (e) { console.log(e) } } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + console.log('handleNpmImport', url, response.data, req) return { content: response.data, cleanUrl: url } } catch (e) { throw e From ff7e1817bf3634bd4e84cf513cb0220abd963e21 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Wed, 8 Feb 2023 14:03:17 +0100 Subject: [PATCH 15/17] rm console --- libs/remix-url-resolver/src/resolve.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index 0375588112..c358b02968 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -141,7 +141,6 @@ export class RemixURLResolver { if (this.getDependencies) { try { const { deps, yarnLock, packageLock } = await this.getDependencies() - console.log('deps', deps, yarnLock, packageLock) let matchLength = 0 let pkg if (deps) { From 00e3baa70a1d2d009cb26b652e68a4349a106423 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Thu, 9 Feb 2023 11:06:55 +0100 Subject: [PATCH 16/17] fix undefined --- libs/remix-url-resolver/src/resolve.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index c358b02968..aba4213bcf 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -162,7 +162,7 @@ export class RemixURLResolver { version = yarnVersion[1] } } - if (!version && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + if (!version && packageLock && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { // package-lock.json version = packageLock['dependencies'][pkg]['version'] } @@ -179,7 +179,7 @@ export class RemixURLResolver { } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) - console.log('handleNpmImport', url, response.data, req) + console.log('handleNpmImport', req) return { content: response.data, cleanUrl: url } } catch (e) { throw e From 05b7d1aed13335628754eed27b32379482fa34b2 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 20 Feb 2023 16:47:23 +0100 Subject: [PATCH 17/17] clear cache --- .../src/lib/compiler-content-imports.ts | 11 +++++++++++ libs/remix-url-resolver/src/resolve.ts | 1 - 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 85c811ef91..b64308ff34 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -48,7 +48,18 @@ export class CompilerImports extends Plugin { } onActivation(): void { + const packageFiles = ['package.json', 'package-lock.json', 'yarn.lock'] this.on('filePanel', 'setWorkspace', () => this.urlResolver.clearCache()) + this.on('fileManager', 'fileRemoved', (file: string) => { + if (packageFiles.includes(file)) { + this.urlResolver.clearCache() + } + }) + this.on('fileManager', 'fileChanged', (file: string) => { + if (packageFiles.includes(file)) { + this.urlResolver.clearCache() + } + }) } async setToken () { diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index aba4213bcf..850e2015ab 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -179,7 +179,6 @@ export class RemixURLResolver { } const req = 'https://unpkg.com/' + url const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) - console.log('handleNpmImport', req) return { content: response.data, cleanUrl: url } } catch (e) { throw e