diff --git a/packages/apidom-playground/scripts/build.js b/packages/apidom-playground/scripts/build.js index c3d2c6cca4..f176c404c4 100644 --- a/packages/apidom-playground/scripts/build.js +++ b/packages/apidom-playground/scripts/build.js @@ -6,13 +6,6 @@ process.chdir(path.join(__dirname, '..')); const build = rewire('react-scripts/scripts/build.js'); const config = build.__get__('config'); -// externals -config.externals = { - ...config.externals, - 'node:fs': '{}', - 'node:util': '{}', -}; - // fallbacks config.resolve.fallback = { ...config.resolve.fallback, diff --git a/packages/apidom-playground/scripts/start.js b/packages/apidom-playground/scripts/start.js index 20acc1eca3..49e91e5b85 100644 --- a/packages/apidom-playground/scripts/start.js +++ b/packages/apidom-playground/scripts/start.js @@ -8,13 +8,6 @@ const configFactory = start.__get__('configFactory'); const configFactoryMock = (webpackEnv) => { const config = configFactory(webpackEnv); - // externals - config.externals = { - ...config.externals, - 'node:fs': '{}', - 'node:util': '{}', - }; - // fallbacks config.resolve.fallback = { ...config.resolve.fallback, diff --git a/packages/apidom-reference/config/webpack/browser.config.js b/packages/apidom-reference/config/webpack/browser.config.js index d4198c52a4..817a350cbd 100644 --- a/packages/apidom-reference/config/webpack/browser.config.js +++ b/packages/apidom-reference/config/webpack/browser.config.js @@ -17,10 +17,6 @@ const browser = { libraryTarget: 'umd', library: 'apidomReference', }, - externals: { - 'node:fs': '{}', - 'node:util': '{}', - }, resolve: { extensions: ['.ts', '.mjs', '.js', '.json'], fallback: { @@ -61,16 +57,11 @@ const browserMin = { libraryTarget: 'umd', library: 'apidomReference', }, - externals: { - 'node:fs': '{}', - 'node:util': '{}', - }, resolve: { extensions: ['.ts', '.mjs', '.js', '.json'], fallback: { fs: false, path: false, - util: false, }, }, module: { @@ -110,7 +101,21 @@ const binaryParserReplacer = new webpack.NormalModuleReplacementPlugin( ), ); -browser.plugins.push(binaryParserReplacer); -browserMin.plugins.push(binaryParserReplacer); +const fileResolverReplacer = new webpack.NormalModuleReplacementPlugin( + /resolve\/resolvers\/FileResolver\/index-node\.ts/, + path.join( + path.dirname(fileURLToPath(import.meta.url)), + '..', + '..', + 'src', + 'resolve', + 'resolvers', + 'FileResolver', + 'index-browser.ts', + ), +); + +browser.plugins.push(binaryParserReplacer, fileResolverReplacer); +browserMin.plugins.push(binaryParserReplacer, fileResolverReplacer); export default [browser]; diff --git a/packages/apidom-reference/package.json b/packages/apidom-reference/package.json index e67060d6ac..32e5cb66e0 100644 --- a/packages/apidom-reference/package.json +++ b/packages/apidom-reference/package.json @@ -11,7 +11,9 @@ "main": "./cjs/index.cjs", "browser": { "./es/parse/parsers/apidom-reference-parser-binary/index-node.js": "./es/parse/parsers/apidom-reference-parser-binary/index-browser.js", - "./cjs/parse/parsers/apidom-reference-parser-binary/index-node.cjs": "./cjs/parse/parsers/apidom-reference-parser-binary/index-browser.cjs" + "./cjs/parse/parsers/apidom-reference-parser-binary/index-node.cjs": "./cjs/parse/parsers/apidom-reference-parser-binary/index-browser.cjs", + "./cjs/resolve/resolvers/FileResolver/index-node.cjs": "./cjs/resolve/resolvers/FileResolver/index-browser.cjs", + "./es/resolve/resolvers/FileResolver/index-node.js": "./es/resolve/resolvers/FileResolver/index-browser.js" }, "exports": { "import": "./es/index.js", diff --git a/packages/apidom-reference/src/index.ts b/packages/apidom-reference/src/index.ts index 7168e8e617..da2d49d352 100644 --- a/packages/apidom-reference/src/index.ts +++ b/packages/apidom-reference/src/index.ts @@ -21,7 +21,7 @@ export { default as JsonParser } from './parse/parsers/apidom-reference-parser-j export { default as YamlParser } from './parse/parsers/apidom-reference-parser-yaml-1-2'; export { default as BinaryParser } from './parse/parsers/apidom-reference-parser-binary/index-node'; -export { default as FileResolver } from './resolve/resolvers/FileResolver'; +export { default as FileResolver } from './resolve/resolvers/FileResolver/index-node'; export { default as HttpResolverAxios } from './resolve/resolvers/HttpResolverAxios'; export { default as HttpResolver } from './resolve/resolvers/HttpResolver'; export { default as Resolver } from './resolve/resolvers/Resolver'; diff --git a/packages/apidom-reference/src/options/index.ts b/packages/apidom-reference/src/options/index.ts index bb0e0d8257..f1b6cfa346 100644 --- a/packages/apidom-reference/src/options/index.ts +++ b/packages/apidom-reference/src/options/index.ts @@ -1,4 +1,4 @@ -import FileResolver from '../resolve/resolvers/FileResolver'; +import FileResolver from '../resolve/resolvers/FileResolver/index-node'; import HttpResolverAxios from '../resolve/resolvers/HttpResolverAxios'; import OpenApi3_1ResolveStrategy from '../resolve/strategies/openapi-3-1'; import AsyncApi2ResolveStrategy from '../resolve/strategies/asyncapi-2'; diff --git a/packages/apidom-reference/src/resolve/resolvers/FileResolver/index-browser.ts b/packages/apidom-reference/src/resolve/resolvers/FileResolver/index-browser.ts new file mode 100644 index 0000000000..8e24682cec --- /dev/null +++ b/packages/apidom-reference/src/resolve/resolvers/FileResolver/index-browser.ts @@ -0,0 +1,21 @@ +import stampit from 'stampit'; + +import { Resolver as IResolver } from '../../../types'; +import Resolver from '../Resolver'; +import { ResolverError } from '../../../util/errors'; + +const FileResolver: stampit.Stamp = stampit(Resolver, { + init() { + this.name = 'file'; + }, + methods: { + canRead(): boolean { + return false; + }, + async read(): Promise { + throw new ResolverError('FileResolver is not intended to be used in browser context.'); + }, + }, +}); + +export default FileResolver; diff --git a/packages/apidom-reference/src/resolve/resolvers/FileResolver.ts b/packages/apidom-reference/src/resolve/resolvers/FileResolver/index-node.ts similarity index 74% rename from packages/apidom-reference/src/resolve/resolvers/FileResolver.ts rename to packages/apidom-reference/src/resolve/resolvers/FileResolver/index-node.ts index fafbbe9736..cf159c18f8 100644 --- a/packages/apidom-reference/src/resolve/resolvers/FileResolver.ts +++ b/packages/apidom-reference/src/resolve/resolvers/FileResolver/index-node.ts @@ -2,10 +2,10 @@ import { readFile } from 'node:fs'; import { promisify } from 'node:util'; import stampit from 'stampit'; -import { Resolver as IResolver, File as IFile } from '../../types'; -import Resolver from './Resolver'; -import { isFileSystemPath, toFileSystemPath } from '../../util/url'; -import { ResolverError } from '../../util/errors'; +import { Resolver as IResolver, File as IFile } from '../../../types'; +import Resolver from '../Resolver'; +import { isFileSystemPath, toFileSystemPath } from '../../../util/url'; +import { ResolverError } from '../../../util/errors'; const FileResolver: stampit.Stamp = stampit(Resolver, { init() { diff --git a/packages/apidom-reference/test/resolve/resolvers/FileResolver.ts b/packages/apidom-reference/test/resolve/resolvers/FileResolver.ts index 36b0010287..1cc6257ebd 100644 --- a/packages/apidom-reference/test/resolve/resolvers/FileResolver.ts +++ b/packages/apidom-reference/test/resolve/resolvers/FileResolver.ts @@ -1,7 +1,7 @@ import path from 'node:path'; import { assert } from 'chai'; -import FileResolver from '../../../src/resolve/resolvers/FileResolver'; +import FileResolver from '../../../src/resolve/resolvers/FileResolver/index-node'; import { ResolverError } from '../../../src/util/errors'; import File from '../../../src/util/File';