@openzeppelin/adapters-vite 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -205,6 +205,126 @@ function createOpenZeppelinAdapterResolverPlugin(options) {
205
205
  };
206
206
  }
207
207
 
208
+ //#endregion
209
+ //#region src/integration.ts
210
+ function normalizePluginOptions(plugins) {
211
+ if (!plugins) return [];
212
+ return Array.isArray(plugins) ? plugins : [plugins];
213
+ }
214
+ function normalizeStringValues(value) {
215
+ if (!value) return [];
216
+ return Array.isArray(value) ? value : [value];
217
+ }
218
+ function mergeUniqueStrings(base, extra) {
219
+ const merged = [];
220
+ const seen = /* @__PURE__ */ new Set();
221
+ for (const entry of [...normalizeStringValues(base), ...extra]) {
222
+ if (!entry || seen.has(entry)) continue;
223
+ seen.add(entry);
224
+ merged.push(entry);
225
+ }
226
+ return merged;
227
+ }
228
+ function mergeSsrNoExternal(base, extra) {
229
+ if (base === true || extra === true) return true;
230
+ const merged = [];
231
+ const seenStrings = /* @__PURE__ */ new Set();
232
+ const values = [...base ? Array.isArray(base) ? base : [base] : [], ...Array.isArray(extra) ? extra : [extra]];
233
+ for (const entry of values) {
234
+ if (typeof entry === "string") {
235
+ if (!seenStrings.has(entry)) {
236
+ seenStrings.add(entry);
237
+ merged.push(entry);
238
+ }
239
+ continue;
240
+ }
241
+ if (entry instanceof RegExp) merged.push(entry);
242
+ }
243
+ return merged;
244
+ }
245
+ function mergeResolveAlias(baseAlias, extraAliasEntries) {
246
+ if (Object.keys(extraAliasEntries).length === 0) return baseAlias;
247
+ if (!baseAlias) return extraAliasEntries;
248
+ if (Array.isArray(baseAlias)) return [...baseAlias, ...Object.entries(extraAliasEntries).map(([find, replacement]) => ({
249
+ find,
250
+ replacement
251
+ }))];
252
+ return {
253
+ ...baseAlias,
254
+ ...extraAliasEntries
255
+ };
256
+ }
257
+ function mergeOpenZeppelinAdapterConfig(baseConfig, adapterConfig, options = {}) {
258
+ const extraPlugins = options.extraPlugins ?? [];
259
+ const extraAliasEntries = options.extraAliasEntries ?? {};
260
+ return {
261
+ ...baseConfig,
262
+ plugins: [
263
+ ...adapterConfig.plugins,
264
+ ...normalizePluginOptions(baseConfig.plugins),
265
+ ...extraPlugins
266
+ ],
267
+ resolve: {
268
+ ...baseConfig.resolve,
269
+ alias: mergeResolveAlias(baseConfig.resolve?.alias, extraAliasEntries),
270
+ dedupe: mergeUniqueStrings(baseConfig.resolve?.dedupe, adapterConfig.resolve.dedupe)
271
+ },
272
+ optimizeDeps: {
273
+ ...baseConfig.optimizeDeps,
274
+ include: mergeUniqueStrings(baseConfig.optimizeDeps?.include, adapterConfig.optimizeDeps.include),
275
+ exclude: mergeUniqueStrings(baseConfig.optimizeDeps?.exclude, adapterConfig.optimizeDeps.exclude)
276
+ },
277
+ ssr: {
278
+ ...baseConfig.ssr,
279
+ noExternal: mergeSsrNoExternal(baseConfig.ssr?.noExternal, adapterConfig.ssr.noExternal)
280
+ }
281
+ };
282
+ }
283
+ async function buildOpenZeppelinAdapterViteConfig(options, config = {}) {
284
+ return mergeOpenZeppelinAdapterConfig(config, await loadOpenZeppelinAdapterViteConfig(options));
285
+ }
286
+ async function buildOpenZeppelinAdapterVitestConfig(options, config = {}) {
287
+ if (!options.importMetaUrl) throw new Error("createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve installed adapter exports");
288
+ const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);
289
+ const resolverOptions = {
290
+ ecosystems: options.ecosystems,
291
+ importMetaUrl: options.importMetaUrl,
292
+ exportPaths: options.exportPaths
293
+ };
294
+ return mergeOpenZeppelinAdapterConfig(config, adapterConfig, {
295
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
296
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions)
297
+ });
298
+ }
299
+ function createOpenZeppelinAdapterIntegration(options) {
300
+ const adapterConfigPromise = loadOpenZeppelinAdapterViteConfig(options);
301
+ return {
302
+ async vite(config = {}) {
303
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise);
304
+ },
305
+ async vitest(config = {}) {
306
+ if (!options.importMetaUrl) throw new Error("createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve installed adapter exports");
307
+ const resolverOptions = {
308
+ ecosystems: options.ecosystems,
309
+ importMetaUrl: options.importMetaUrl,
310
+ exportPaths: options.exportPaths
311
+ };
312
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise, {
313
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
314
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions)
315
+ });
316
+ }
317
+ };
318
+ }
319
+ function defineOpenZeppelinAdapterViteConfig(options) {
320
+ const { config = {}, ...integrationOptions } = options;
321
+ return buildOpenZeppelinAdapterViteConfig(integrationOptions, config);
322
+ }
323
+ function defineOpenZeppelinAdapterVitestConfig(options) {
324
+ const { config = {}, ...integrationOptions } = options;
325
+ return buildOpenZeppelinAdapterVitestConfig(integrationOptions, config);
326
+ }
327
+
208
328
  //#endregion
209
329
  //#region src/types.ts
210
330
  const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [
@@ -217,7 +337,10 @@ const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [
217
337
 
218
338
  //#endregion
219
339
  exports.SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS;
340
+ exports.createOpenZeppelinAdapterIntegration = createOpenZeppelinAdapterIntegration;
220
341
  exports.createOpenZeppelinAdapterResolverPlugin = createOpenZeppelinAdapterResolverPlugin;
342
+ exports.defineOpenZeppelinAdapterViteConfig = defineOpenZeppelinAdapterViteConfig;
343
+ exports.defineOpenZeppelinAdapterVitestConfig = defineOpenZeppelinAdapterVitestConfig;
221
344
  exports.getOpenZeppelinAdapterImportSpecifier = getOpenZeppelinAdapterImportSpecifier;
222
345
  exports.getOpenZeppelinAdapterImportSpecifiers = getOpenZeppelinAdapterImportSpecifiers;
223
346
  exports.getOpenZeppelinAdapterPackageNames = getOpenZeppelinAdapterPackageNames;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["fs","path"],"sources":["../src/registry.ts","../src/config.ts","../src/resolver.ts","../src/types.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\n\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterEcosystem,\n OpenZeppelinAdapterExportPath,\n} from './types';\n\ninterface AdapterRegistryEntry {\n packageName: string;\n extraOptimizeDepsExclude?: string[];\n loadConfig: (\n options: LoadOpenZeppelinAdapterViteConfigOptions\n ) => Promise<AdapterViteConfigFragment>;\n}\n\nconst ADAPTER_REGISTRY: Record<OpenZeppelinAdapterEcosystem, AdapterRegistryEntry> = {\n evm: {\n packageName: '@openzeppelin/adapter-evm',\n extraOptimizeDepsExclude: ['@openzeppelin/adapter-evm-core'],\n async loadConfig() {\n const { getEvmViteConfig } = await import('@openzeppelin/adapter-evm/vite-config');\n return getEvmViteConfig() as Partial<UserConfig>;\n },\n },\n midnight: {\n packageName: '@openzeppelin/adapter-midnight',\n async loadConfig(options) {\n const midnightPlugins = options.pluginFactories?.midnight;\n if (!midnightPlugins) {\n throw new Error(\n 'Midnight adapter Vite configuration requires `pluginFactories.midnight` with `wasm` and `topLevelAwait`.'\n );\n }\n\n const { getMidnightViteConfig } = await import('@openzeppelin/adapter-midnight/vite-config');\n return getMidnightViteConfig(midnightPlugins) as Partial<UserConfig>;\n },\n },\n polkadot: {\n packageName: '@openzeppelin/adapter-polkadot',\n async loadConfig() {\n const { getPolkadotViteConfig } = await import('@openzeppelin/adapter-polkadot/vite-config');\n return getPolkadotViteConfig() as Partial<UserConfig>;\n },\n },\n solana: {\n packageName: '@openzeppelin/adapter-solana',\n async loadConfig() {\n const { getSolanaViteConfig } = await import('@openzeppelin/adapter-solana/vite-config');\n return getSolanaViteConfig() as Partial<UserConfig>;\n },\n },\n stellar: {\n packageName: '@openzeppelin/adapter-stellar',\n async loadConfig() {\n const { getStellarViteConfig } = await import('@openzeppelin/adapter-stellar/vite-config');\n return getStellarViteConfig() as Partial<UserConfig>;\n },\n },\n};\n\nexport function normalizeEcosystems(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): OpenZeppelinAdapterEcosystem[] {\n return [...new Set(ecosystems)];\n}\n\nexport function getAdapterRegistryEntry(\n ecosystem: OpenZeppelinAdapterEcosystem\n): AdapterRegistryEntry {\n return ADAPTER_REGISTRY[ecosystem];\n}\n\nexport function getOpenZeppelinAdapterPackageNames(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): string[] {\n return normalizeEcosystems(ecosystems).map(\n (ecosystem) => ADAPTER_REGISTRY[ecosystem].packageName\n );\n}\n\nexport function getOpenZeppelinAdapterImportSpecifier(\n packageName: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n if (exportPath === '.') {\n return packageName;\n }\n\n return `${packageName}/${exportPath.slice(2)}`;\n}\n\nexport function getOpenZeppelinAdapterImportSpecifiers(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[],\n exportPaths: readonly OpenZeppelinAdapterExportPath[]\n): string[] {\n const specifiers = new Set<string>();\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(ecosystems)) {\n for (const exportPath of exportPaths) {\n specifiers.add(getOpenZeppelinAdapterImportSpecifier(packageName, exportPath));\n }\n }\n\n return [...specifiers];\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport {\n getAdapterRegistryEntry,\n getOpenZeppelinAdapterPackageNames,\n normalizeEcosystems,\n} from './registry';\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction appendPlugins(target: PluginOption[], plugins: AdapterViteConfigFragment['plugins']) {\n if (!plugins) {\n return;\n }\n\n target.push(...(Array.isArray(plugins) ? plugins : [plugins]));\n}\n\nfunction appendStringValues(target: Set<string>, value: string | string[] | undefined) {\n if (!value) {\n return;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry) {\n target.add(entry);\n }\n }\n}\n\nfunction appendNoExternalValues(\n target: Array<string | RegExp>,\n seenStrings: Set<string>,\n value: SsrNoExternalValue | undefined\n): boolean {\n if (!value) {\n return false;\n }\n\n if (value === true) {\n return true;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n target.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n target.push(entry);\n }\n }\n\n return false;\n}\n\nexport async function loadOpenZeppelinAdapterViteConfig(\n options: LoadOpenZeppelinAdapterViteConfigOptions\n): Promise<OpenZeppelinAdapterViteConfig> {\n const ecosystems = normalizeEcosystems(options.ecosystems);\n const plugins: PluginOption[] = [];\n const dedupe = new Set<string>();\n const optimizeDepsInclude = new Set<string>();\n const optimizeDepsExclude = new Set<string>();\n const ssrNoExternal: Array<string | RegExp> = [];\n const seenSsrNoExternalStrings = new Set<string>();\n let ssrNoExternalAll = false;\n const packageNames = getOpenZeppelinAdapterPackageNames(ecosystems);\n\n for (const packageName of packageNames) {\n optimizeDepsExclude.add(packageName);\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, packageName) ||\n ssrNoExternalAll;\n }\n\n for (const ecosystem of ecosystems) {\n const entry = getAdapterRegistryEntry(ecosystem);\n\n let fragment: AdapterViteConfigFragment;\n try {\n fragment = await entry.loadConfig(options);\n } catch (error) {\n throw new Error(\n `Failed to load ${entry.packageName} Vite configuration. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n appendPlugins(plugins, fragment.plugins);\n appendStringValues(dedupe, fragment.resolve?.dedupe);\n appendStringValues(optimizeDepsInclude, fragment.optimizeDeps?.include);\n appendStringValues(optimizeDepsExclude, fragment.optimizeDeps?.exclude);\n appendStringValues(optimizeDepsExclude, entry.extraOptimizeDepsExclude);\n\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, fragment.ssr?.noExternal) ||\n ssrNoExternalAll;\n }\n\n return {\n plugins,\n resolve: {\n dedupe: [...dedupe],\n },\n optimizeDeps: {\n include: [...optimizeDepsInclude],\n exclude: [...optimizeDepsExclude],\n },\n ssr: {\n noExternal: ssrNoExternalAll ? true : ssrNoExternal,\n },\n packageNames,\n };\n}\n","import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport type { Plugin } from 'vite';\n\nimport {\n getOpenZeppelinAdapterImportSpecifier,\n getOpenZeppelinAdapterPackageNames,\n} from './registry';\nimport type {\n OpenZeppelinAdapterExportPath,\n ResolveInstalledOpenZeppelinAdapterEntriesOptions,\n} from './types';\n\ntype PackageExportEntry =\n | string\n | {\n import?: string | { default?: string };\n default?: string;\n };\n\nfunction readPackageJson(packageDirectory: string): {\n exports?: Record<string, PackageExportEntry>;\n} {\n return JSON.parse(fs.readFileSync(path.join(packageDirectory, 'package.json'), 'utf8')) as {\n exports?: Record<string, PackageExportEntry>;\n };\n}\n\nfunction getImportTarget(entry: PackageExportEntry | undefined): string | null {\n if (!entry) {\n return null;\n }\n\n if (typeof entry === 'string') {\n return entry;\n }\n\n if (typeof entry.import === 'string') {\n return entry.import;\n }\n\n if (\n entry.import &&\n typeof entry.import === 'object' &&\n typeof entry.import.default === 'string'\n ) {\n return entry.import.default;\n }\n\n if (typeof entry.default === 'string') {\n return entry.default;\n }\n\n return null;\n}\n\nfunction resolveInstalledPackageDirectory(packageName: string, importMetaUrl: string): string {\n const require = createRequire(importMetaUrl);\n const installedEntryPath = require.resolve(packageName);\n return path.resolve(path.dirname(installedEntryPath), '..');\n}\n\nfunction resolveInstalledExportEntry(\n packageName: string,\n packageDirectory: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n const packageJson = readPackageJson(packageDirectory);\n const target = getImportTarget(packageJson.exports?.[exportPath]);\n\n if (!target) {\n throw new Error(\n `Missing export \"${exportPath}\" in ${packageName}/package.json (required \"import\" condition)`\n );\n }\n\n return path.resolve(packageDirectory, target);\n}\n\nexport function resolveInstalledOpenZeppelinAdapterEntries(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Record<string, string> {\n const exportPaths = options.exportPaths ?? ['.', './metadata', './networks'];\n const entries: Record<string, string> = {};\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(options.ecosystems)) {\n const packageDirectory = resolveInstalledPackageDirectory(packageName, options.importMetaUrl);\n\n for (const exportPath of exportPaths) {\n entries[getOpenZeppelinAdapterImportSpecifier(packageName, exportPath)] =\n resolveInstalledExportEntry(packageName, packageDirectory, exportPath);\n }\n }\n\n return entries;\n}\n\nexport function createOpenZeppelinAdapterResolverPlugin(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Plugin {\n const entries = resolveInstalledOpenZeppelinAdapterEntries(options);\n\n return {\n name: 'openzeppelin-adapter-package-resolver',\n enforce: 'pre',\n resolveId(id) {\n return entries[id] ?? null;\n },\n };\n}\n","import type { Plugin, PluginOption, UserConfig } from 'vite';\n\nexport const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [\n 'evm',\n 'midnight',\n 'polkadot',\n 'solana',\n 'stellar',\n] as const;\n\nexport type OpenZeppelinAdapterEcosystem =\n (typeof SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS)[number];\n\nexport type OpenZeppelinAdapterExportPath = '.' | './metadata' | './networks';\n\nexport interface MidnightAdapterPluginFactories {\n wasm: () => Plugin;\n topLevelAwait: () => Plugin;\n}\n\nexport interface OpenZeppelinAdapterPluginFactories {\n midnight?: MidnightAdapterPluginFactories;\n}\n\nexport interface LoadOpenZeppelinAdapterViteConfigOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n pluginFactories?: OpenZeppelinAdapterPluginFactories;\n}\n\nexport interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n importMetaUrl: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface OpenZeppelinAdapterViteConfig {\n plugins: PluginOption[];\n resolve: NonNullable<UserConfig['resolve']>;\n optimizeDeps: NonNullable<UserConfig['optimizeDeps']>;\n ssr: NonNullable<UserConfig['ssr']>;\n packageNames: string[];\n}\n\nexport type AdapterViteConfigFragment = Partial<\n Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>\n>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["fs","path"],"sources":["../src/registry.ts","../src/config.ts","../src/resolver.ts","../src/integration.ts","../src/types.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\n\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterEcosystem,\n OpenZeppelinAdapterExportPath,\n} from './types';\n\ninterface AdapterRegistryEntry {\n packageName: string;\n extraOptimizeDepsExclude?: string[];\n loadConfig: (\n options: LoadOpenZeppelinAdapterViteConfigOptions\n ) => Promise<AdapterViteConfigFragment>;\n}\n\nconst ADAPTER_REGISTRY: Record<OpenZeppelinAdapterEcosystem, AdapterRegistryEntry> = {\n evm: {\n packageName: '@openzeppelin/adapter-evm',\n extraOptimizeDepsExclude: ['@openzeppelin/adapter-evm-core'],\n async loadConfig() {\n const { getEvmViteConfig } = await import('@openzeppelin/adapter-evm/vite-config');\n return getEvmViteConfig() as Partial<UserConfig>;\n },\n },\n midnight: {\n packageName: '@openzeppelin/adapter-midnight',\n async loadConfig(options) {\n const midnightPlugins = options.pluginFactories?.midnight;\n if (!midnightPlugins) {\n throw new Error(\n 'Midnight adapter Vite configuration requires `pluginFactories.midnight` with `wasm` and `topLevelAwait`.'\n );\n }\n\n const { getMidnightViteConfig } = await import('@openzeppelin/adapter-midnight/vite-config');\n return getMidnightViteConfig(midnightPlugins) as Partial<UserConfig>;\n },\n },\n polkadot: {\n packageName: '@openzeppelin/adapter-polkadot',\n async loadConfig() {\n const { getPolkadotViteConfig } = await import('@openzeppelin/adapter-polkadot/vite-config');\n return getPolkadotViteConfig() as Partial<UserConfig>;\n },\n },\n solana: {\n packageName: '@openzeppelin/adapter-solana',\n async loadConfig() {\n const { getSolanaViteConfig } = await import('@openzeppelin/adapter-solana/vite-config');\n return getSolanaViteConfig() as Partial<UserConfig>;\n },\n },\n stellar: {\n packageName: '@openzeppelin/adapter-stellar',\n async loadConfig() {\n const { getStellarViteConfig } = await import('@openzeppelin/adapter-stellar/vite-config');\n return getStellarViteConfig() as Partial<UserConfig>;\n },\n },\n};\n\nexport function normalizeEcosystems(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): OpenZeppelinAdapterEcosystem[] {\n return [...new Set(ecosystems)];\n}\n\nexport function getAdapterRegistryEntry(\n ecosystem: OpenZeppelinAdapterEcosystem\n): AdapterRegistryEntry {\n return ADAPTER_REGISTRY[ecosystem];\n}\n\nexport function getOpenZeppelinAdapterPackageNames(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): string[] {\n return normalizeEcosystems(ecosystems).map(\n (ecosystem) => ADAPTER_REGISTRY[ecosystem].packageName\n );\n}\n\nexport function getOpenZeppelinAdapterImportSpecifier(\n packageName: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n if (exportPath === '.') {\n return packageName;\n }\n\n return `${packageName}/${exportPath.slice(2)}`;\n}\n\nexport function getOpenZeppelinAdapterImportSpecifiers(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[],\n exportPaths: readonly OpenZeppelinAdapterExportPath[]\n): string[] {\n const specifiers = new Set<string>();\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(ecosystems)) {\n for (const exportPath of exportPaths) {\n specifiers.add(getOpenZeppelinAdapterImportSpecifier(packageName, exportPath));\n }\n }\n\n return [...specifiers];\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport {\n getAdapterRegistryEntry,\n getOpenZeppelinAdapterPackageNames,\n normalizeEcosystems,\n} from './registry';\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction appendPlugins(target: PluginOption[], plugins: AdapterViteConfigFragment['plugins']) {\n if (!plugins) {\n return;\n }\n\n target.push(...(Array.isArray(plugins) ? plugins : [plugins]));\n}\n\nfunction appendStringValues(target: Set<string>, value: string | string[] | undefined) {\n if (!value) {\n return;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry) {\n target.add(entry);\n }\n }\n}\n\nfunction appendNoExternalValues(\n target: Array<string | RegExp>,\n seenStrings: Set<string>,\n value: SsrNoExternalValue | undefined\n): boolean {\n if (!value) {\n return false;\n }\n\n if (value === true) {\n return true;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n target.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n target.push(entry);\n }\n }\n\n return false;\n}\n\nexport async function loadOpenZeppelinAdapterViteConfig(\n options: LoadOpenZeppelinAdapterViteConfigOptions\n): Promise<OpenZeppelinAdapterViteConfig> {\n const ecosystems = normalizeEcosystems(options.ecosystems);\n const plugins: PluginOption[] = [];\n const dedupe = new Set<string>();\n const optimizeDepsInclude = new Set<string>();\n const optimizeDepsExclude = new Set<string>();\n const ssrNoExternal: Array<string | RegExp> = [];\n const seenSsrNoExternalStrings = new Set<string>();\n let ssrNoExternalAll = false;\n const packageNames = getOpenZeppelinAdapterPackageNames(ecosystems);\n\n for (const packageName of packageNames) {\n optimizeDepsExclude.add(packageName);\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, packageName) ||\n ssrNoExternalAll;\n }\n\n for (const ecosystem of ecosystems) {\n const entry = getAdapterRegistryEntry(ecosystem);\n\n let fragment: AdapterViteConfigFragment;\n try {\n fragment = await entry.loadConfig(options);\n } catch (error) {\n throw new Error(\n `Failed to load ${entry.packageName} Vite configuration. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n appendPlugins(plugins, fragment.plugins);\n appendStringValues(dedupe, fragment.resolve?.dedupe);\n appendStringValues(optimizeDepsInclude, fragment.optimizeDeps?.include);\n appendStringValues(optimizeDepsExclude, fragment.optimizeDeps?.exclude);\n appendStringValues(optimizeDepsExclude, entry.extraOptimizeDepsExclude);\n\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, fragment.ssr?.noExternal) ||\n ssrNoExternalAll;\n }\n\n return {\n plugins,\n resolve: {\n dedupe: [...dedupe],\n },\n optimizeDeps: {\n include: [...optimizeDepsInclude],\n exclude: [...optimizeDepsExclude],\n },\n ssr: {\n noExternal: ssrNoExternalAll ? true : ssrNoExternal,\n },\n packageNames,\n };\n}\n","import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport type { Plugin } from 'vite';\n\nimport {\n getOpenZeppelinAdapterImportSpecifier,\n getOpenZeppelinAdapterPackageNames,\n} from './registry';\nimport type {\n OpenZeppelinAdapterExportPath,\n ResolveInstalledOpenZeppelinAdapterEntriesOptions,\n} from './types';\n\ntype PackageExportEntry =\n | string\n | {\n import?: string | { default?: string };\n default?: string;\n };\n\nfunction readPackageJson(packageDirectory: string): {\n exports?: Record<string, PackageExportEntry>;\n} {\n return JSON.parse(fs.readFileSync(path.join(packageDirectory, 'package.json'), 'utf8')) as {\n exports?: Record<string, PackageExportEntry>;\n };\n}\n\nfunction getImportTarget(entry: PackageExportEntry | undefined): string | null {\n if (!entry) {\n return null;\n }\n\n if (typeof entry === 'string') {\n return entry;\n }\n\n if (typeof entry.import === 'string') {\n return entry.import;\n }\n\n if (\n entry.import &&\n typeof entry.import === 'object' &&\n typeof entry.import.default === 'string'\n ) {\n return entry.import.default;\n }\n\n if (typeof entry.default === 'string') {\n return entry.default;\n }\n\n return null;\n}\n\nfunction resolveInstalledPackageDirectory(packageName: string, importMetaUrl: string): string {\n const require = createRequire(importMetaUrl);\n const installedEntryPath = require.resolve(packageName);\n return path.resolve(path.dirname(installedEntryPath), '..');\n}\n\nfunction resolveInstalledExportEntry(\n packageName: string,\n packageDirectory: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n const packageJson = readPackageJson(packageDirectory);\n const target = getImportTarget(packageJson.exports?.[exportPath]);\n\n if (!target) {\n throw new Error(\n `Missing export \"${exportPath}\" in ${packageName}/package.json (required \"import\" condition)`\n );\n }\n\n return path.resolve(packageDirectory, target);\n}\n\nexport function resolveInstalledOpenZeppelinAdapterEntries(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Record<string, string> {\n const exportPaths = options.exportPaths ?? ['.', './metadata', './networks'];\n const entries: Record<string, string> = {};\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(options.ecosystems)) {\n const packageDirectory = resolveInstalledPackageDirectory(packageName, options.importMetaUrl);\n\n for (const exportPath of exportPaths) {\n entries[getOpenZeppelinAdapterImportSpecifier(packageName, exportPath)] =\n resolveInstalledExportEntry(packageName, packageDirectory, exportPath);\n }\n }\n\n return entries;\n}\n\nexport function createOpenZeppelinAdapterResolverPlugin(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Plugin {\n const entries = resolveInstalledOpenZeppelinAdapterEntries(options);\n\n return {\n name: 'openzeppelin-adapter-package-resolver',\n enforce: 'pre',\n resolveId(id) {\n return entries[id] ?? null;\n },\n };\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport { loadOpenZeppelinAdapterViteConfig } from './config';\nimport {\n createOpenZeppelinAdapterResolverPlugin,\n resolveInstalledOpenZeppelinAdapterEntries,\n} from './resolver';\nimport type {\n DefineOpenZeppelinAdapterViteConfigOptions,\n DefineOpenZeppelinAdapterVitestConfigOptions,\n OpenZeppelinAdapterIntegration,\n OpenZeppelinAdapterIntegrationOptions,\n OpenZeppelinAdapterSsrConfig,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction normalizePluginOptions(plugins: UserConfig['plugins']): PluginOption[] {\n if (!plugins) {\n return [];\n }\n\n return Array.isArray(plugins) ? plugins : [plugins];\n}\n\nfunction normalizeStringValues(value: string | string[] | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction mergeUniqueStrings(\n base: string | string[] | undefined,\n extra: readonly string[]\n): string[] {\n const merged: string[] = [];\n const seen = new Set<string>();\n\n for (const entry of [...normalizeStringValues(base), ...extra]) {\n if (!entry || seen.has(entry)) {\n continue;\n }\n\n seen.add(entry);\n merged.push(entry);\n }\n\n return merged;\n}\n\nfunction mergeSsrNoExternal(\n base: SsrNoExternalValue | undefined,\n extra: OpenZeppelinAdapterSsrConfig['noExternal']\n): true | Array<string | RegExp> {\n if (base === true || extra === true) {\n return true;\n }\n\n const merged: Array<string | RegExp> = [];\n const seenStrings = new Set<string>();\n const values = [\n ...(base ? (Array.isArray(base) ? base : [base]) : []),\n ...(Array.isArray(extra) ? extra : [extra]),\n ];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n merged.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n merged.push(entry);\n }\n }\n\n return merged;\n}\n\nfunction mergeResolveAlias(\n baseAlias: NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined,\n extraAliasEntries: Record<string, string>\n): NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined {\n if (Object.keys(extraAliasEntries).length === 0) {\n return baseAlias;\n }\n\n if (!baseAlias) {\n return extraAliasEntries;\n }\n\n if (Array.isArray(baseAlias)) {\n return [\n ...baseAlias,\n ...Object.entries(extraAliasEntries).map(([find, replacement]) => ({\n find,\n replacement,\n })),\n ];\n }\n\n return {\n ...baseAlias,\n ...extraAliasEntries,\n };\n}\n\nfunction mergeOpenZeppelinAdapterConfig(\n baseConfig: UserConfig,\n adapterConfig: OpenZeppelinAdapterViteConfig,\n options: {\n extraPlugins?: PluginOption[];\n extraAliasEntries?: Record<string, string>;\n } = {}\n): UserConfig {\n const extraPlugins = options.extraPlugins ?? [];\n const extraAliasEntries = options.extraAliasEntries ?? {};\n\n return {\n ...baseConfig,\n plugins: [\n ...adapterConfig.plugins,\n ...normalizePluginOptions(baseConfig.plugins),\n ...extraPlugins,\n ],\n resolve: {\n ...baseConfig.resolve,\n alias: mergeResolveAlias(baseConfig.resolve?.alias, extraAliasEntries),\n dedupe: mergeUniqueStrings(baseConfig.resolve?.dedupe, adapterConfig.resolve.dedupe),\n },\n optimizeDeps: {\n ...baseConfig.optimizeDeps,\n include: mergeUniqueStrings(\n baseConfig.optimizeDeps?.include,\n adapterConfig.optimizeDeps.include\n ),\n exclude: mergeUniqueStrings(\n baseConfig.optimizeDeps?.exclude,\n adapterConfig.optimizeDeps.exclude\n ),\n },\n ssr: {\n ...baseConfig.ssr,\n noExternal: mergeSsrNoExternal(baseConfig.ssr?.noExternal, adapterConfig.ssr.noExternal),\n },\n };\n}\n\nasync function buildOpenZeppelinAdapterViteConfig(\n options: OpenZeppelinAdapterIntegrationOptions,\n config: UserConfig = {}\n): Promise<UserConfig> {\n const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);\n return mergeOpenZeppelinAdapterConfig(config, adapterConfig);\n}\n\nasync function buildOpenZeppelinAdapterVitestConfig(\n options: OpenZeppelinAdapterIntegrationOptions,\n config: UserConfig = {}\n): Promise<UserConfig> {\n if (!options.importMetaUrl) {\n throw new Error(\n 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +\n 'installed adapter exports'\n );\n }\n\n const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);\n const resolverOptions = {\n ecosystems: options.ecosystems,\n importMetaUrl: options.importMetaUrl,\n exportPaths: options.exportPaths,\n };\n\n return mergeOpenZeppelinAdapterConfig(config, adapterConfig, {\n extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],\n extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),\n });\n}\n\nexport function createOpenZeppelinAdapterIntegration(\n options: OpenZeppelinAdapterIntegrationOptions\n): OpenZeppelinAdapterIntegration {\n const adapterConfigPromise = loadOpenZeppelinAdapterViteConfig(options);\n\n return {\n async vite(config: UserConfig = {}) {\n return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise);\n },\n async vitest(config: UserConfig = {}) {\n if (!options.importMetaUrl) {\n throw new Error(\n 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +\n 'installed adapter exports'\n );\n }\n\n const resolverOptions = {\n ecosystems: options.ecosystems,\n importMetaUrl: options.importMetaUrl,\n exportPaths: options.exportPaths,\n };\n\n return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise, {\n extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],\n extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),\n });\n },\n };\n}\n\nexport function defineOpenZeppelinAdapterViteConfig(\n options: DefineOpenZeppelinAdapterViteConfigOptions\n): Promise<UserConfig> {\n const { config = {}, ...integrationOptions } = options;\n return buildOpenZeppelinAdapterViteConfig(integrationOptions, config);\n}\n\nexport function defineOpenZeppelinAdapterVitestConfig(\n options: DefineOpenZeppelinAdapterVitestConfigOptions\n): Promise<UserConfig> {\n const { config = {}, ...integrationOptions } = options;\n return buildOpenZeppelinAdapterVitestConfig(integrationOptions, config);\n}\n","import type { Plugin, PluginOption, UserConfig } from 'vite';\n\nexport const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [\n 'evm',\n 'midnight',\n 'polkadot',\n 'solana',\n 'stellar',\n] as const;\n\nexport type OpenZeppelinAdapterEcosystem =\n (typeof SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS)[number];\n\nexport type OpenZeppelinAdapterExportPath = '.' | './metadata' | './networks';\n\nexport interface MidnightAdapterPluginFactories {\n wasm: () => Plugin;\n topLevelAwait: () => Plugin;\n}\n\nexport interface OpenZeppelinAdapterPluginFactories {\n midnight?: MidnightAdapterPluginFactories;\n}\n\nexport interface LoadOpenZeppelinAdapterViteConfigOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n pluginFactories?: OpenZeppelinAdapterPluginFactories;\n}\n\nexport interface OpenZeppelinAdapterIntegrationOptions extends LoadOpenZeppelinAdapterViteConfigOptions {\n importMetaUrl?: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface DefineOpenZeppelinAdapterViteConfigOptions extends LoadOpenZeppelinAdapterViteConfigOptions {\n config?: UserConfig;\n}\n\nexport interface DefineOpenZeppelinAdapterVitestConfigOptions extends OpenZeppelinAdapterIntegrationOptions {\n config?: UserConfig;\n importMetaUrl: string;\n}\n\nexport interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n importMetaUrl: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface OpenZeppelinAdapterResolvedConfig {\n dedupe: string[];\n}\n\nexport interface OpenZeppelinAdapterOptimizeDepsConfig {\n include: string[];\n exclude: string[];\n}\n\nexport interface OpenZeppelinAdapterSsrConfig {\n noExternal: true | Array<string | RegExp>;\n}\n\nexport interface OpenZeppelinAdapterViteConfig {\n plugins: PluginOption[];\n resolve: OpenZeppelinAdapterResolvedConfig;\n optimizeDeps: OpenZeppelinAdapterOptimizeDepsConfig;\n ssr: OpenZeppelinAdapterSsrConfig;\n packageNames: string[];\n}\n\nexport interface OpenZeppelinAdapterIntegration {\n vite(config?: UserConfig): Promise<UserConfig>;\n vitest(config?: UserConfig): Promise<UserConfig>;\n}\n\nexport type AdapterViteConfigFragment = Partial<\n Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>\n>;\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -15,23 +15,53 @@ interface LoadOpenZeppelinAdapterViteConfigOptions {
15
15
  ecosystems: readonly OpenZeppelinAdapterEcosystem[];
16
16
  pluginFactories?: OpenZeppelinAdapterPluginFactories;
17
17
  }
18
+ interface OpenZeppelinAdapterIntegrationOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
19
+ importMetaUrl?: string;
20
+ exportPaths?: readonly OpenZeppelinAdapterExportPath[];
21
+ }
22
+ interface DefineOpenZeppelinAdapterViteConfigOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
23
+ config?: UserConfig;
24
+ }
25
+ interface DefineOpenZeppelinAdapterVitestConfigOptions extends OpenZeppelinAdapterIntegrationOptions {
26
+ config?: UserConfig;
27
+ importMetaUrl: string;
28
+ }
18
29
  interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {
19
30
  ecosystems: readonly OpenZeppelinAdapterEcosystem[];
20
31
  importMetaUrl: string;
21
32
  exportPaths?: readonly OpenZeppelinAdapterExportPath[];
22
33
  }
34
+ interface OpenZeppelinAdapterResolvedConfig {
35
+ dedupe: string[];
36
+ }
37
+ interface OpenZeppelinAdapterOptimizeDepsConfig {
38
+ include: string[];
39
+ exclude: string[];
40
+ }
41
+ interface OpenZeppelinAdapterSsrConfig {
42
+ noExternal: true | Array<string | RegExp>;
43
+ }
23
44
  interface OpenZeppelinAdapterViteConfig {
24
45
  plugins: PluginOption[];
25
- resolve: NonNullable<UserConfig['resolve']>;
26
- optimizeDeps: NonNullable<UserConfig['optimizeDeps']>;
27
- ssr: NonNullable<UserConfig['ssr']>;
46
+ resolve: OpenZeppelinAdapterResolvedConfig;
47
+ optimizeDeps: OpenZeppelinAdapterOptimizeDepsConfig;
48
+ ssr: OpenZeppelinAdapterSsrConfig;
28
49
  packageNames: string[];
29
50
  }
51
+ interface OpenZeppelinAdapterIntegration {
52
+ vite(config?: UserConfig): Promise<UserConfig>;
53
+ vitest(config?: UserConfig): Promise<UserConfig>;
54
+ }
30
55
  type AdapterViteConfigFragment = Partial<Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>>;
31
56
  //#endregion
32
57
  //#region src/config.d.ts
33
58
  declare function loadOpenZeppelinAdapterViteConfig(options: LoadOpenZeppelinAdapterViteConfigOptions): Promise<OpenZeppelinAdapterViteConfig>;
34
59
  //#endregion
60
+ //#region src/integration.d.ts
61
+ declare function createOpenZeppelinAdapterIntegration(options: OpenZeppelinAdapterIntegrationOptions): OpenZeppelinAdapterIntegration;
62
+ declare function defineOpenZeppelinAdapterViteConfig(options: DefineOpenZeppelinAdapterViteConfigOptions): Promise<UserConfig>;
63
+ declare function defineOpenZeppelinAdapterVitestConfig(options: DefineOpenZeppelinAdapterVitestConfigOptions): Promise<UserConfig>;
64
+ //#endregion
35
65
  //#region src/registry.d.ts
36
66
  declare function getOpenZeppelinAdapterPackageNames(ecosystems: readonly OpenZeppelinAdapterEcosystem[]): string[];
37
67
  declare function getOpenZeppelinAdapterImportSpecifier(packageName: string, exportPath: OpenZeppelinAdapterExportPath): string;
@@ -41,5 +71,5 @@ declare function getOpenZeppelinAdapterImportSpecifiers(ecosystems: readonly Ope
41
71
  declare function resolveInstalledOpenZeppelinAdapterEntries(options: ResolveInstalledOpenZeppelinAdapterEntriesOptions): Record<string, string>;
42
72
  declare function createOpenZeppelinAdapterResolverPlugin(options: ResolveInstalledOpenZeppelinAdapterEntriesOptions): Plugin;
43
73
  //#endregion
44
- export { type AdapterViteConfigFragment, type LoadOpenZeppelinAdapterViteConfigOptions, type MidnightAdapterPluginFactories, type OpenZeppelinAdapterEcosystem, type OpenZeppelinAdapterExportPath, type OpenZeppelinAdapterPluginFactories, type OpenZeppelinAdapterViteConfig, type ResolveInstalledOpenZeppelinAdapterEntriesOptions, SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterResolverPlugin, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
74
+ export { type AdapterViteConfigFragment, type DefineOpenZeppelinAdapterViteConfigOptions, type DefineOpenZeppelinAdapterVitestConfigOptions, type LoadOpenZeppelinAdapterViteConfigOptions, type MidnightAdapterPluginFactories, type OpenZeppelinAdapterEcosystem, type OpenZeppelinAdapterExportPath, type OpenZeppelinAdapterIntegration, type OpenZeppelinAdapterIntegrationOptions, type OpenZeppelinAdapterPluginFactories, type OpenZeppelinAdapterViteConfig, type ResolveInstalledOpenZeppelinAdapterEntriesOptions, SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterIntegration, createOpenZeppelinAdapterResolverPlugin, defineOpenZeppelinAdapterViteConfig, defineOpenZeppelinAdapterVitestConfig, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
45
75
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/registry.ts","../src/resolver.ts"],"sourcesContent":[],"mappings":";;;cAEa;KAQD,4BAAA,WACF;AATG,KAWD,6BAAA,GAXC,GAAA,GAMH,YAAA,GAAA,YAAA;AAEE,UAKK,8BAAA,CAJP;EAEE,IAAA,EAAA,GAAA,GAGE,MAHF;EAEK,aAAA,EAAA,GAAA,GAEM,MAFN;AAKjB;AAIiB,UAJA,kCAAA,CAIwC;EAKxC,QAAA,CAAA,EARJ,8BAQI;AAMjB;AACW,UAZM,wCAAA,CAYN;EACY,UAAA,EAAA,SAZA,4BAYA,EAAA;EAAZ,eAAA,CAAA,EAXS,kCAWT;;AACK,UATC,iDAAA,CASD;EACG,UAAA,EAAA,SATI,4BASJ,EAAA;EAAZ,aAAA,EAAA,MAAA;EAAW,WAAA,CAAA,EAAA,SAPO,6BAOP,EAAA;AAIlB;AACO,UATU,6BAAA,CASV;EAAL,OAAA,EARS,YAQT,EAAA;EADsC,OAAA,EAN7B,WAM6B,CANjB,UAMiB,CAAA,SAAA,CAAA,CAAA;EAAO,YAAA,EAL/B,WAK+B,CALnB,UAKmB,CAAA,cAAA,CAAA,CAAA;OAJxC,YAAY;;;AC8BG,KD1BV,yBAAA,GAA4B,OC0Be,CDzBrD,ICyBqD,CDzBhD,UCyBgD,EAAA,SAAA,GAAA,SAAA,GAAA,cAAA,GAAA,KAAA,CAAA,CAAA;;;iBAAjC,iCAAA,UACX,2CACR,QAAQ;;;AD/CM,iBEmDD,kCAAA,CFlDO,UAAA,EAAA,SEmDA,4BFlDH,EAAA,CAAA,EAAA,MAAA,EAAA;AAGH,iBEsDD,qCAAA,CFtDkD,WAC3C,EAAA,MAAA,EAAA,UAAA,EEuDT,6BFrDW,CAAA,EAA6B,MAAA;AAGrC,iBE2DD,sCAAA,CF3D8B,UAAA,EAAA,SE4DvB,4BF5DuB,EAAA,EAAA,WAAA,EAAA,SE6DtB,6BF7DsB,EAAA,CAAA,EAAA,MAAA,EAAA;;;iBG6C9B,0CAAA,UACL,oDACR;AHhFU,iBGgGG,uCAAA,CH1FN,OAAA,EG2FC,iDH3FD,CAAA,EG4FP,MH5FO"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/integration.ts","../src/registry.ts","../src/resolver.ts"],"sourcesContent":[],"mappings":";;;cAEa;KAQD,4BAAA,WACF;AATG,KAWD,6BAAA,GAXC,GAAA,GAMH,YAAA,GAAA,YAAA;AAEE,UAKK,8BAAA,CAJP;EAEE,IAAA,EAAA,GAAA,GAGE,MAHF;EAEK,aAAA,EAAA,GAAA,GAEM,MAFN;AAKjB;AAIiB,UAJA,kCAAA,CAIwC;EAKxC,QAAA,CAAA,EARJ,8BAQ0C;AAKvD;AAIiB,UAdA,wCAAA,CAc6C;EAK7C,UAAA,EAAA,SAlBM,4BAkBN,EAAA;EAMA,eAAA,CAAA,EAvBG,kCAuB8B;AAIlD;AAKiB,UA7BA,qCAAA,SAA8C,wCA8BrC,CAAA;EAGT,aAAA,CAAA,EAAA,MAAA;EACN,WAAA,CAAA,EAAA,SAhCc,6BAgCd,EAAA;;AAEK,UA/BC,0CAAA,SAAmD,wCA+BpD,CAAA;EACT,MAAA,CAAA,EA/BI,UA+BJ;;AAIU,UAhCA,4CAAA,SAAqD,qCAgCvB,CAAA;EAC/B,MAAA,CAAA,EAhCL,UAgCK;EAAqB,aAAA,EAAA,MAAA;;AACnB,UA7BD,iDAAA,CA6BC;EAAqB,UAAA,EAAA,SA5BhB,4BA4BgB,EAAA;EAAR,aAAA,EAAA,MAAA;EAAO,WAAA,CAAA,EAAA,SA1Bb,6BA0Ba,EAAA;AAGtC;AACO,UA3BU,iCAAA,CA2BV;EAAL,MAAA,EAAA,MAAA,EAAA;;AAD6C,UAtB9B,qCAAA,CAsB8B;;;;ACNzB,UDXL,4BAAA,CCWsC;EAC5C,UAAA,EAAA,IAAA,GDXU,KCWV,CAAA,MAAA,GDXyB,MCWzB,CAAA;;AACR,UDTc,6BAAA,CCSd;EAAO,OAAA,EDRC,YCQD,EAAA;WDPC;gBACK;OACT;EEwHS,YAAA,EAAA,MAAA,EAAA;AA+BhB;AACW,UFpJM,8BAAA,CEoJN;EACA,IAAA,CAAA,MAAA,CAAA,EFpJK,UEoJL,CAAA,EFpJkB,OEoJlB,CFpJ0B,UEoJ1B,CAAA;EAAR,MAAA,CAAA,MAAA,CAAA,EFnJe,UEmJf,CAAA,EFnJ4B,OEmJ5B,CFnJoC,UEmJpC,CAAA;;AAKa,KFrJJ,yBAAA,GAA4B,OEqJa,CFpJnD,IEoJmD,CFpJ9C,UEoJ8C,EAAA,SAAA,GAAA,SAAA,GAAA,cAAA,GAAA,KAAA,CAAA,CAAA;;;iBD3J/B,iCAAA,UACX,2CACR,QAAQ;;;iBCmHK,oCAAA,UACL,wCACR;AF1LU,iBEuNG,mCAAA,CFjNN,OAAA,EEkNC,0CFlND,CAAA,EEmNP,OFnNO,CEmNC,UFnND,CAAA;AAEE,iBEsNI,qCAAA,CFrNN,OAAA,EEsNC,4CFtNwC,CAAA,EEuNhD,OFvNgD,CEuNxC,UFvNwC,CAAA;;;AAalC,iBGmDD,kCAAA,CHlDO,UAAA,EAAA,SGmDA,4BHlDH,EAAA,CAAA,EAAA,MAAA,EAAA;AAGH,iBGsDD,qCAAA,CHpDS,WAAA,EAAA,MAAA,EAAA,UAFsC,EGwDjD,6BHxDiD,CAAA,EAAwC,MAAA;AAKtF,iBG4DD,sCAAA,CH3DL,UADyD,EAAA,SG6D7C,4BH7D6C,EAAwC,EAAA,WAAA,EAAA,SG8DpF,6BH9DoF,EAAA,CAAA,EAAA,MAAA,EAAA;;;iBI8C5F,0CAAA,UACL,oDACR;AJhFU,iBIgGG,uCAAA,CJ1FN,OAAA,EI2FC,iDJ3FD,CAAA,EI4FP,MJ5FO"}
package/dist/index.d.mts CHANGED
@@ -15,23 +15,53 @@ interface LoadOpenZeppelinAdapterViteConfigOptions {
15
15
  ecosystems: readonly OpenZeppelinAdapterEcosystem[];
16
16
  pluginFactories?: OpenZeppelinAdapterPluginFactories;
17
17
  }
18
+ interface OpenZeppelinAdapterIntegrationOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
19
+ importMetaUrl?: string;
20
+ exportPaths?: readonly OpenZeppelinAdapterExportPath[];
21
+ }
22
+ interface DefineOpenZeppelinAdapterViteConfigOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
23
+ config?: UserConfig;
24
+ }
25
+ interface DefineOpenZeppelinAdapterVitestConfigOptions extends OpenZeppelinAdapterIntegrationOptions {
26
+ config?: UserConfig;
27
+ importMetaUrl: string;
28
+ }
18
29
  interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {
19
30
  ecosystems: readonly OpenZeppelinAdapterEcosystem[];
20
31
  importMetaUrl: string;
21
32
  exportPaths?: readonly OpenZeppelinAdapterExportPath[];
22
33
  }
34
+ interface OpenZeppelinAdapterResolvedConfig {
35
+ dedupe: string[];
36
+ }
37
+ interface OpenZeppelinAdapterOptimizeDepsConfig {
38
+ include: string[];
39
+ exclude: string[];
40
+ }
41
+ interface OpenZeppelinAdapterSsrConfig {
42
+ noExternal: true | Array<string | RegExp>;
43
+ }
23
44
  interface OpenZeppelinAdapterViteConfig {
24
45
  plugins: PluginOption[];
25
- resolve: NonNullable<UserConfig['resolve']>;
26
- optimizeDeps: NonNullable<UserConfig['optimizeDeps']>;
27
- ssr: NonNullable<UserConfig['ssr']>;
46
+ resolve: OpenZeppelinAdapterResolvedConfig;
47
+ optimizeDeps: OpenZeppelinAdapterOptimizeDepsConfig;
48
+ ssr: OpenZeppelinAdapterSsrConfig;
28
49
  packageNames: string[];
29
50
  }
51
+ interface OpenZeppelinAdapterIntegration {
52
+ vite(config?: UserConfig): Promise<UserConfig>;
53
+ vitest(config?: UserConfig): Promise<UserConfig>;
54
+ }
30
55
  type AdapterViteConfigFragment = Partial<Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>>;
31
56
  //#endregion
32
57
  //#region src/config.d.ts
33
58
  declare function loadOpenZeppelinAdapterViteConfig(options: LoadOpenZeppelinAdapterViteConfigOptions): Promise<OpenZeppelinAdapterViteConfig>;
34
59
  //#endregion
60
+ //#region src/integration.d.ts
61
+ declare function createOpenZeppelinAdapterIntegration(options: OpenZeppelinAdapterIntegrationOptions): OpenZeppelinAdapterIntegration;
62
+ declare function defineOpenZeppelinAdapterViteConfig(options: DefineOpenZeppelinAdapterViteConfigOptions): Promise<UserConfig>;
63
+ declare function defineOpenZeppelinAdapterVitestConfig(options: DefineOpenZeppelinAdapterVitestConfigOptions): Promise<UserConfig>;
64
+ //#endregion
35
65
  //#region src/registry.d.ts
36
66
  declare function getOpenZeppelinAdapterPackageNames(ecosystems: readonly OpenZeppelinAdapterEcosystem[]): string[];
37
67
  declare function getOpenZeppelinAdapterImportSpecifier(packageName: string, exportPath: OpenZeppelinAdapterExportPath): string;
@@ -41,5 +71,5 @@ declare function getOpenZeppelinAdapterImportSpecifiers(ecosystems: readonly Ope
41
71
  declare function resolveInstalledOpenZeppelinAdapterEntries(options: ResolveInstalledOpenZeppelinAdapterEntriesOptions): Record<string, string>;
42
72
  declare function createOpenZeppelinAdapterResolverPlugin(options: ResolveInstalledOpenZeppelinAdapterEntriesOptions): Plugin;
43
73
  //#endregion
44
- export { type AdapterViteConfigFragment, type LoadOpenZeppelinAdapterViteConfigOptions, type MidnightAdapterPluginFactories, type OpenZeppelinAdapterEcosystem, type OpenZeppelinAdapterExportPath, type OpenZeppelinAdapterPluginFactories, type OpenZeppelinAdapterViteConfig, type ResolveInstalledOpenZeppelinAdapterEntriesOptions, SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterResolverPlugin, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
74
+ export { type AdapterViteConfigFragment, type DefineOpenZeppelinAdapterViteConfigOptions, type DefineOpenZeppelinAdapterVitestConfigOptions, type LoadOpenZeppelinAdapterViteConfigOptions, type MidnightAdapterPluginFactories, type OpenZeppelinAdapterEcosystem, type OpenZeppelinAdapterExportPath, type OpenZeppelinAdapterIntegration, type OpenZeppelinAdapterIntegrationOptions, type OpenZeppelinAdapterPluginFactories, type OpenZeppelinAdapterViteConfig, type ResolveInstalledOpenZeppelinAdapterEntriesOptions, SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterIntegration, createOpenZeppelinAdapterResolverPlugin, defineOpenZeppelinAdapterViteConfig, defineOpenZeppelinAdapterVitestConfig, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
45
75
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/registry.ts","../src/resolver.ts"],"sourcesContent":[],"mappings":";;;cAEa;KAQD,4BAAA,WACF;AATG,KAWD,6BAAA,GAXC,GAAA,GAMH,YAAA,GAAA,YAAA;AAEE,UAKK,8BAAA,CAJP;EAEE,IAAA,EAAA,GAAA,GAGE,MAHF;EAEK,aAAA,EAAA,GAAA,GAEM,MAFN;AAKjB;AAIiB,UAJA,kCAAA,CAIwC;EAKxC,QAAA,CAAA,EARJ,8BAQI;AAMjB;AACW,UAZM,wCAAA,CAYN;EACY,UAAA,EAAA,SAZA,4BAYA,EAAA;EAAZ,eAAA,CAAA,EAXS,kCAWT;;AACK,UATC,iDAAA,CASD;EACG,UAAA,EAAA,SATI,4BASJ,EAAA;EAAZ,aAAA,EAAA,MAAA;EAAW,WAAA,CAAA,EAAA,SAPO,6BAOP,EAAA;AAIlB;AACO,UATU,6BAAA,CASV;EAAL,OAAA,EARS,YAQT,EAAA;EADsC,OAAA,EAN7B,WAM6B,CANjB,UAMiB,CAAA,SAAA,CAAA,CAAA;EAAO,YAAA,EAL/B,WAK+B,CALnB,UAKmB,CAAA,cAAA,CAAA,CAAA;OAJxC,YAAY;;;AC8BG,KD1BV,yBAAA,GAA4B,OC0Be,CDzBrD,ICyBqD,CDzBhD,UCyBgD,EAAA,SAAA,GAAA,SAAA,GAAA,cAAA,GAAA,KAAA,CAAA,CAAA;;;iBAAjC,iCAAA,UACX,2CACR,QAAQ;;;AD/CM,iBEmDD,kCAAA,CFlDO,UAAA,EAAA,SEmDA,4BFlDH,EAAA,CAAA,EAAA,MAAA,EAAA;AAGH,iBEsDD,qCAAA,CFtDkD,WAC3C,EAAA,MAAA,EAAA,UAAA,EEuDT,6BFrDW,CAAA,EAA6B,MAAA;AAGrC,iBE2DD,sCAAA,CF3D8B,UAAA,EAAA,SE4DvB,4BF5DuB,EAAA,EAAA,WAAA,EAAA,SE6DtB,6BF7DsB,EAAA,CAAA,EAAA,MAAA,EAAA;;;iBG6C9B,0CAAA,UACL,oDACR;AHhFU,iBGgGG,uCAAA,CH1FN,OAAA,EG2FC,iDH3FD,CAAA,EG4FP,MH5FO"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/integration.ts","../src/registry.ts","../src/resolver.ts"],"sourcesContent":[],"mappings":";;;cAEa;KAQD,4BAAA,WACF;AATG,KAWD,6BAAA,GAXC,GAAA,GAMH,YAAA,GAAA,YAAA;AAEE,UAKK,8BAAA,CAJP;EAEE,IAAA,EAAA,GAAA,GAGE,MAHF;EAEK,aAAA,EAAA,GAAA,GAEM,MAFN;AAKjB;AAIiB,UAJA,kCAAA,CAIwC;EAKxC,QAAA,CAAA,EARJ,8BAQ0C;AAKvD;AAIiB,UAdA,wCAAA,CAc6C;EAK7C,UAAA,EAAA,SAlBM,4BAkBN,EAAA;EAMA,eAAA,CAAA,EAvBG,kCAuB8B;AAIlD;AAKiB,UA7BA,qCAAA,SAA8C,wCA8BrC,CAAA;EAGT,aAAA,CAAA,EAAA,MAAA;EACN,WAAA,CAAA,EAAA,SAhCc,6BAgCd,EAAA;;AAEK,UA/BC,0CAAA,SAAmD,wCA+BpD,CAAA;EACT,MAAA,CAAA,EA/BI,UA+BJ;;AAIU,UAhCA,4CAAA,SAAqD,qCAgCvB,CAAA;EAC/B,MAAA,CAAA,EAhCL,UAgCK;EAAqB,aAAA,EAAA,MAAA;;AACnB,UA7BD,iDAAA,CA6BC;EAAqB,UAAA,EAAA,SA5BhB,4BA4BgB,EAAA;EAAR,aAAA,EAAA,MAAA;EAAO,WAAA,CAAA,EAAA,SA1Bb,6BA0Ba,EAAA;AAGtC;AACO,UA3BU,iCAAA,CA2BV;EAAL,MAAA,EAAA,MAAA,EAAA;;AAD6C,UAtB9B,qCAAA,CAsB8B;;;;ACNzB,UDXL,4BAAA,CCWsC;EAC5C,UAAA,EAAA,IAAA,GDXU,KCWV,CAAA,MAAA,GDXyB,MCWzB,CAAA;;AACR,UDTc,6BAAA,CCSd;EAAO,OAAA,EDRC,YCQD,EAAA;WDPC;gBACK;OACT;EEwHS,YAAA,EAAA,MAAA,EAAA;AA+BhB;AACW,UFpJM,8BAAA,CEoJN;EACA,IAAA,CAAA,MAAA,CAAA,EFpJK,UEoJL,CAAA,EFpJkB,OEoJlB,CFpJ0B,UEoJ1B,CAAA;EAAR,MAAA,CAAA,MAAA,CAAA,EFnJe,UEmJf,CAAA,EFnJ4B,OEmJ5B,CFnJoC,UEmJpC,CAAA;;AAKa,KFrJJ,yBAAA,GAA4B,OEqJa,CFpJnD,IEoJmD,CFpJ9C,UEoJ8C,EAAA,SAAA,GAAA,SAAA,GAAA,cAAA,GAAA,KAAA,CAAA,CAAA;;;iBD3J/B,iCAAA,UACX,2CACR,QAAQ;;;iBCmHK,oCAAA,UACL,wCACR;AF1LU,iBEuNG,mCAAA,CFjNN,OAAA,EEkNC,0CFlND,CAAA,EEmNP,OFnNO,CEmNC,UFnND,CAAA;AAEE,iBEsNI,qCAAA,CFrNN,OAAA,EEsNC,4CFtNwC,CAAA,EEuNhD,OFvNgD,CEuNxC,UFvNwC,CAAA;;;AAalC,iBGmDD,kCAAA,CHlDO,UAAA,EAAA,SGmDA,4BHlDH,EAAA,CAAA,EAAA,MAAA,EAAA;AAGH,iBGsDD,qCAAA,CHpDS,WAAA,EAAA,MAAA,EAAA,UAFsC,EGwDjD,6BHxDiD,CAAA,EAAwC,MAAA;AAKtF,iBG4DD,sCAAA,CH3DL,UADyD,EAAA,SG6D7C,4BH7D6C,EAAwC,EAAA,WAAA,EAAA,SG8DpF,6BH9DoF,EAAA,CAAA,EAAA,MAAA,EAAA;;;iBI8C5F,0CAAA,UACL,oDACR;AJhFU,iBIgGG,uCAAA,CJ1FN,OAAA,EI2FC,iDJ3FD,CAAA,EI4FP,MJ5FO"}
package/dist/index.mjs CHANGED
@@ -176,6 +176,126 @@ function createOpenZeppelinAdapterResolverPlugin(options) {
176
176
  };
177
177
  }
178
178
 
179
+ //#endregion
180
+ //#region src/integration.ts
181
+ function normalizePluginOptions(plugins) {
182
+ if (!plugins) return [];
183
+ return Array.isArray(plugins) ? plugins : [plugins];
184
+ }
185
+ function normalizeStringValues(value) {
186
+ if (!value) return [];
187
+ return Array.isArray(value) ? value : [value];
188
+ }
189
+ function mergeUniqueStrings(base, extra) {
190
+ const merged = [];
191
+ const seen = /* @__PURE__ */ new Set();
192
+ for (const entry of [...normalizeStringValues(base), ...extra]) {
193
+ if (!entry || seen.has(entry)) continue;
194
+ seen.add(entry);
195
+ merged.push(entry);
196
+ }
197
+ return merged;
198
+ }
199
+ function mergeSsrNoExternal(base, extra) {
200
+ if (base === true || extra === true) return true;
201
+ const merged = [];
202
+ const seenStrings = /* @__PURE__ */ new Set();
203
+ const values = [...base ? Array.isArray(base) ? base : [base] : [], ...Array.isArray(extra) ? extra : [extra]];
204
+ for (const entry of values) {
205
+ if (typeof entry === "string") {
206
+ if (!seenStrings.has(entry)) {
207
+ seenStrings.add(entry);
208
+ merged.push(entry);
209
+ }
210
+ continue;
211
+ }
212
+ if (entry instanceof RegExp) merged.push(entry);
213
+ }
214
+ return merged;
215
+ }
216
+ function mergeResolveAlias(baseAlias, extraAliasEntries) {
217
+ if (Object.keys(extraAliasEntries).length === 0) return baseAlias;
218
+ if (!baseAlias) return extraAliasEntries;
219
+ if (Array.isArray(baseAlias)) return [...baseAlias, ...Object.entries(extraAliasEntries).map(([find, replacement]) => ({
220
+ find,
221
+ replacement
222
+ }))];
223
+ return {
224
+ ...baseAlias,
225
+ ...extraAliasEntries
226
+ };
227
+ }
228
+ function mergeOpenZeppelinAdapterConfig(baseConfig, adapterConfig, options = {}) {
229
+ const extraPlugins = options.extraPlugins ?? [];
230
+ const extraAliasEntries = options.extraAliasEntries ?? {};
231
+ return {
232
+ ...baseConfig,
233
+ plugins: [
234
+ ...adapterConfig.plugins,
235
+ ...normalizePluginOptions(baseConfig.plugins),
236
+ ...extraPlugins
237
+ ],
238
+ resolve: {
239
+ ...baseConfig.resolve,
240
+ alias: mergeResolveAlias(baseConfig.resolve?.alias, extraAliasEntries),
241
+ dedupe: mergeUniqueStrings(baseConfig.resolve?.dedupe, adapterConfig.resolve.dedupe)
242
+ },
243
+ optimizeDeps: {
244
+ ...baseConfig.optimizeDeps,
245
+ include: mergeUniqueStrings(baseConfig.optimizeDeps?.include, adapterConfig.optimizeDeps.include),
246
+ exclude: mergeUniqueStrings(baseConfig.optimizeDeps?.exclude, adapterConfig.optimizeDeps.exclude)
247
+ },
248
+ ssr: {
249
+ ...baseConfig.ssr,
250
+ noExternal: mergeSsrNoExternal(baseConfig.ssr?.noExternal, adapterConfig.ssr.noExternal)
251
+ }
252
+ };
253
+ }
254
+ async function buildOpenZeppelinAdapterViteConfig(options, config = {}) {
255
+ return mergeOpenZeppelinAdapterConfig(config, await loadOpenZeppelinAdapterViteConfig(options));
256
+ }
257
+ async function buildOpenZeppelinAdapterVitestConfig(options, config = {}) {
258
+ if (!options.importMetaUrl) throw new Error("createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve installed adapter exports");
259
+ const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);
260
+ const resolverOptions = {
261
+ ecosystems: options.ecosystems,
262
+ importMetaUrl: options.importMetaUrl,
263
+ exportPaths: options.exportPaths
264
+ };
265
+ return mergeOpenZeppelinAdapterConfig(config, adapterConfig, {
266
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
267
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions)
268
+ });
269
+ }
270
+ function createOpenZeppelinAdapterIntegration(options) {
271
+ const adapterConfigPromise = loadOpenZeppelinAdapterViteConfig(options);
272
+ return {
273
+ async vite(config = {}) {
274
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise);
275
+ },
276
+ async vitest(config = {}) {
277
+ if (!options.importMetaUrl) throw new Error("createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve installed adapter exports");
278
+ const resolverOptions = {
279
+ ecosystems: options.ecosystems,
280
+ importMetaUrl: options.importMetaUrl,
281
+ exportPaths: options.exportPaths
282
+ };
283
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise, {
284
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
285
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions)
286
+ });
287
+ }
288
+ };
289
+ }
290
+ function defineOpenZeppelinAdapterViteConfig(options) {
291
+ const { config = {}, ...integrationOptions } = options;
292
+ return buildOpenZeppelinAdapterViteConfig(integrationOptions, config);
293
+ }
294
+ function defineOpenZeppelinAdapterVitestConfig(options) {
295
+ const { config = {}, ...integrationOptions } = options;
296
+ return buildOpenZeppelinAdapterVitestConfig(integrationOptions, config);
297
+ }
298
+
179
299
  //#endregion
180
300
  //#region src/types.ts
181
301
  const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [
@@ -187,5 +307,5 @@ const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [
187
307
  ];
188
308
 
189
309
  //#endregion
190
- export { SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterResolverPlugin, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
310
+ export { SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS, createOpenZeppelinAdapterIntegration, createOpenZeppelinAdapterResolverPlugin, defineOpenZeppelinAdapterViteConfig, defineOpenZeppelinAdapterVitestConfig, getOpenZeppelinAdapterImportSpecifier, getOpenZeppelinAdapterImportSpecifiers, getOpenZeppelinAdapterPackageNames, loadOpenZeppelinAdapterViteConfig, resolveInstalledOpenZeppelinAdapterEntries };
191
311
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/registry.ts","../src/config.ts","../src/resolver.ts","../src/types.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\n\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterEcosystem,\n OpenZeppelinAdapterExportPath,\n} from './types';\n\ninterface AdapterRegistryEntry {\n packageName: string;\n extraOptimizeDepsExclude?: string[];\n loadConfig: (\n options: LoadOpenZeppelinAdapterViteConfigOptions\n ) => Promise<AdapterViteConfigFragment>;\n}\n\nconst ADAPTER_REGISTRY: Record<OpenZeppelinAdapterEcosystem, AdapterRegistryEntry> = {\n evm: {\n packageName: '@openzeppelin/adapter-evm',\n extraOptimizeDepsExclude: ['@openzeppelin/adapter-evm-core'],\n async loadConfig() {\n const { getEvmViteConfig } = await import('@openzeppelin/adapter-evm/vite-config');\n return getEvmViteConfig() as Partial<UserConfig>;\n },\n },\n midnight: {\n packageName: '@openzeppelin/adapter-midnight',\n async loadConfig(options) {\n const midnightPlugins = options.pluginFactories?.midnight;\n if (!midnightPlugins) {\n throw new Error(\n 'Midnight adapter Vite configuration requires `pluginFactories.midnight` with `wasm` and `topLevelAwait`.'\n );\n }\n\n const { getMidnightViteConfig } = await import('@openzeppelin/adapter-midnight/vite-config');\n return getMidnightViteConfig(midnightPlugins) as Partial<UserConfig>;\n },\n },\n polkadot: {\n packageName: '@openzeppelin/adapter-polkadot',\n async loadConfig() {\n const { getPolkadotViteConfig } = await import('@openzeppelin/adapter-polkadot/vite-config');\n return getPolkadotViteConfig() as Partial<UserConfig>;\n },\n },\n solana: {\n packageName: '@openzeppelin/adapter-solana',\n async loadConfig() {\n const { getSolanaViteConfig } = await import('@openzeppelin/adapter-solana/vite-config');\n return getSolanaViteConfig() as Partial<UserConfig>;\n },\n },\n stellar: {\n packageName: '@openzeppelin/adapter-stellar',\n async loadConfig() {\n const { getStellarViteConfig } = await import('@openzeppelin/adapter-stellar/vite-config');\n return getStellarViteConfig() as Partial<UserConfig>;\n },\n },\n};\n\nexport function normalizeEcosystems(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): OpenZeppelinAdapterEcosystem[] {\n return [...new Set(ecosystems)];\n}\n\nexport function getAdapterRegistryEntry(\n ecosystem: OpenZeppelinAdapterEcosystem\n): AdapterRegistryEntry {\n return ADAPTER_REGISTRY[ecosystem];\n}\n\nexport function getOpenZeppelinAdapterPackageNames(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): string[] {\n return normalizeEcosystems(ecosystems).map(\n (ecosystem) => ADAPTER_REGISTRY[ecosystem].packageName\n );\n}\n\nexport function getOpenZeppelinAdapterImportSpecifier(\n packageName: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n if (exportPath === '.') {\n return packageName;\n }\n\n return `${packageName}/${exportPath.slice(2)}`;\n}\n\nexport function getOpenZeppelinAdapterImportSpecifiers(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[],\n exportPaths: readonly OpenZeppelinAdapterExportPath[]\n): string[] {\n const specifiers = new Set<string>();\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(ecosystems)) {\n for (const exportPath of exportPaths) {\n specifiers.add(getOpenZeppelinAdapterImportSpecifier(packageName, exportPath));\n }\n }\n\n return [...specifiers];\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport {\n getAdapterRegistryEntry,\n getOpenZeppelinAdapterPackageNames,\n normalizeEcosystems,\n} from './registry';\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction appendPlugins(target: PluginOption[], plugins: AdapterViteConfigFragment['plugins']) {\n if (!plugins) {\n return;\n }\n\n target.push(...(Array.isArray(plugins) ? plugins : [plugins]));\n}\n\nfunction appendStringValues(target: Set<string>, value: string | string[] | undefined) {\n if (!value) {\n return;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry) {\n target.add(entry);\n }\n }\n}\n\nfunction appendNoExternalValues(\n target: Array<string | RegExp>,\n seenStrings: Set<string>,\n value: SsrNoExternalValue | undefined\n): boolean {\n if (!value) {\n return false;\n }\n\n if (value === true) {\n return true;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n target.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n target.push(entry);\n }\n }\n\n return false;\n}\n\nexport async function loadOpenZeppelinAdapterViteConfig(\n options: LoadOpenZeppelinAdapterViteConfigOptions\n): Promise<OpenZeppelinAdapterViteConfig> {\n const ecosystems = normalizeEcosystems(options.ecosystems);\n const plugins: PluginOption[] = [];\n const dedupe = new Set<string>();\n const optimizeDepsInclude = new Set<string>();\n const optimizeDepsExclude = new Set<string>();\n const ssrNoExternal: Array<string | RegExp> = [];\n const seenSsrNoExternalStrings = new Set<string>();\n let ssrNoExternalAll = false;\n const packageNames = getOpenZeppelinAdapterPackageNames(ecosystems);\n\n for (const packageName of packageNames) {\n optimizeDepsExclude.add(packageName);\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, packageName) ||\n ssrNoExternalAll;\n }\n\n for (const ecosystem of ecosystems) {\n const entry = getAdapterRegistryEntry(ecosystem);\n\n let fragment: AdapterViteConfigFragment;\n try {\n fragment = await entry.loadConfig(options);\n } catch (error) {\n throw new Error(\n `Failed to load ${entry.packageName} Vite configuration. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n appendPlugins(plugins, fragment.plugins);\n appendStringValues(dedupe, fragment.resolve?.dedupe);\n appendStringValues(optimizeDepsInclude, fragment.optimizeDeps?.include);\n appendStringValues(optimizeDepsExclude, fragment.optimizeDeps?.exclude);\n appendStringValues(optimizeDepsExclude, entry.extraOptimizeDepsExclude);\n\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, fragment.ssr?.noExternal) ||\n ssrNoExternalAll;\n }\n\n return {\n plugins,\n resolve: {\n dedupe: [...dedupe],\n },\n optimizeDeps: {\n include: [...optimizeDepsInclude],\n exclude: [...optimizeDepsExclude],\n },\n ssr: {\n noExternal: ssrNoExternalAll ? true : ssrNoExternal,\n },\n packageNames,\n };\n}\n","import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport type { Plugin } from 'vite';\n\nimport {\n getOpenZeppelinAdapterImportSpecifier,\n getOpenZeppelinAdapterPackageNames,\n} from './registry';\nimport type {\n OpenZeppelinAdapterExportPath,\n ResolveInstalledOpenZeppelinAdapterEntriesOptions,\n} from './types';\n\ntype PackageExportEntry =\n | string\n | {\n import?: string | { default?: string };\n default?: string;\n };\n\nfunction readPackageJson(packageDirectory: string): {\n exports?: Record<string, PackageExportEntry>;\n} {\n return JSON.parse(fs.readFileSync(path.join(packageDirectory, 'package.json'), 'utf8')) as {\n exports?: Record<string, PackageExportEntry>;\n };\n}\n\nfunction getImportTarget(entry: PackageExportEntry | undefined): string | null {\n if (!entry) {\n return null;\n }\n\n if (typeof entry === 'string') {\n return entry;\n }\n\n if (typeof entry.import === 'string') {\n return entry.import;\n }\n\n if (\n entry.import &&\n typeof entry.import === 'object' &&\n typeof entry.import.default === 'string'\n ) {\n return entry.import.default;\n }\n\n if (typeof entry.default === 'string') {\n return entry.default;\n }\n\n return null;\n}\n\nfunction resolveInstalledPackageDirectory(packageName: string, importMetaUrl: string): string {\n const require = createRequire(importMetaUrl);\n const installedEntryPath = require.resolve(packageName);\n return path.resolve(path.dirname(installedEntryPath), '..');\n}\n\nfunction resolveInstalledExportEntry(\n packageName: string,\n packageDirectory: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n const packageJson = readPackageJson(packageDirectory);\n const target = getImportTarget(packageJson.exports?.[exportPath]);\n\n if (!target) {\n throw new Error(\n `Missing export \"${exportPath}\" in ${packageName}/package.json (required \"import\" condition)`\n );\n }\n\n return path.resolve(packageDirectory, target);\n}\n\nexport function resolveInstalledOpenZeppelinAdapterEntries(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Record<string, string> {\n const exportPaths = options.exportPaths ?? ['.', './metadata', './networks'];\n const entries: Record<string, string> = {};\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(options.ecosystems)) {\n const packageDirectory = resolveInstalledPackageDirectory(packageName, options.importMetaUrl);\n\n for (const exportPath of exportPaths) {\n entries[getOpenZeppelinAdapterImportSpecifier(packageName, exportPath)] =\n resolveInstalledExportEntry(packageName, packageDirectory, exportPath);\n }\n }\n\n return entries;\n}\n\nexport function createOpenZeppelinAdapterResolverPlugin(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Plugin {\n const entries = resolveInstalledOpenZeppelinAdapterEntries(options);\n\n return {\n name: 'openzeppelin-adapter-package-resolver',\n enforce: 'pre',\n resolveId(id) {\n return entries[id] ?? null;\n },\n };\n}\n","import type { Plugin, PluginOption, UserConfig } from 'vite';\n\nexport const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [\n 'evm',\n 'midnight',\n 'polkadot',\n 'solana',\n 'stellar',\n] as const;\n\nexport type OpenZeppelinAdapterEcosystem =\n (typeof SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS)[number];\n\nexport type OpenZeppelinAdapterExportPath = '.' | './metadata' | './networks';\n\nexport interface MidnightAdapterPluginFactories {\n wasm: () => Plugin;\n topLevelAwait: () => Plugin;\n}\n\nexport interface OpenZeppelinAdapterPluginFactories {\n midnight?: MidnightAdapterPluginFactories;\n}\n\nexport interface LoadOpenZeppelinAdapterViteConfigOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n pluginFactories?: OpenZeppelinAdapterPluginFactories;\n}\n\nexport interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n importMetaUrl: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface OpenZeppelinAdapterViteConfig {\n plugins: PluginOption[];\n resolve: NonNullable<UserConfig['resolve']>;\n optimizeDeps: NonNullable<UserConfig['optimizeDeps']>;\n ssr: NonNullable<UserConfig['ssr']>;\n packageNames: string[];\n}\n\nexport type AdapterViteConfigFragment = Partial<\n Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>\n>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/registry.ts","../src/config.ts","../src/resolver.ts","../src/integration.ts","../src/types.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\n\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterEcosystem,\n OpenZeppelinAdapterExportPath,\n} from './types';\n\ninterface AdapterRegistryEntry {\n packageName: string;\n extraOptimizeDepsExclude?: string[];\n loadConfig: (\n options: LoadOpenZeppelinAdapterViteConfigOptions\n ) => Promise<AdapterViteConfigFragment>;\n}\n\nconst ADAPTER_REGISTRY: Record<OpenZeppelinAdapterEcosystem, AdapterRegistryEntry> = {\n evm: {\n packageName: '@openzeppelin/adapter-evm',\n extraOptimizeDepsExclude: ['@openzeppelin/adapter-evm-core'],\n async loadConfig() {\n const { getEvmViteConfig } = await import('@openzeppelin/adapter-evm/vite-config');\n return getEvmViteConfig() as Partial<UserConfig>;\n },\n },\n midnight: {\n packageName: '@openzeppelin/adapter-midnight',\n async loadConfig(options) {\n const midnightPlugins = options.pluginFactories?.midnight;\n if (!midnightPlugins) {\n throw new Error(\n 'Midnight adapter Vite configuration requires `pluginFactories.midnight` with `wasm` and `topLevelAwait`.'\n );\n }\n\n const { getMidnightViteConfig } = await import('@openzeppelin/adapter-midnight/vite-config');\n return getMidnightViteConfig(midnightPlugins) as Partial<UserConfig>;\n },\n },\n polkadot: {\n packageName: '@openzeppelin/adapter-polkadot',\n async loadConfig() {\n const { getPolkadotViteConfig } = await import('@openzeppelin/adapter-polkadot/vite-config');\n return getPolkadotViteConfig() as Partial<UserConfig>;\n },\n },\n solana: {\n packageName: '@openzeppelin/adapter-solana',\n async loadConfig() {\n const { getSolanaViteConfig } = await import('@openzeppelin/adapter-solana/vite-config');\n return getSolanaViteConfig() as Partial<UserConfig>;\n },\n },\n stellar: {\n packageName: '@openzeppelin/adapter-stellar',\n async loadConfig() {\n const { getStellarViteConfig } = await import('@openzeppelin/adapter-stellar/vite-config');\n return getStellarViteConfig() as Partial<UserConfig>;\n },\n },\n};\n\nexport function normalizeEcosystems(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): OpenZeppelinAdapterEcosystem[] {\n return [...new Set(ecosystems)];\n}\n\nexport function getAdapterRegistryEntry(\n ecosystem: OpenZeppelinAdapterEcosystem\n): AdapterRegistryEntry {\n return ADAPTER_REGISTRY[ecosystem];\n}\n\nexport function getOpenZeppelinAdapterPackageNames(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[]\n): string[] {\n return normalizeEcosystems(ecosystems).map(\n (ecosystem) => ADAPTER_REGISTRY[ecosystem].packageName\n );\n}\n\nexport function getOpenZeppelinAdapterImportSpecifier(\n packageName: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n if (exportPath === '.') {\n return packageName;\n }\n\n return `${packageName}/${exportPath.slice(2)}`;\n}\n\nexport function getOpenZeppelinAdapterImportSpecifiers(\n ecosystems: readonly OpenZeppelinAdapterEcosystem[],\n exportPaths: readonly OpenZeppelinAdapterExportPath[]\n): string[] {\n const specifiers = new Set<string>();\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(ecosystems)) {\n for (const exportPath of exportPaths) {\n specifiers.add(getOpenZeppelinAdapterImportSpecifier(packageName, exportPath));\n }\n }\n\n return [...specifiers];\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport {\n getAdapterRegistryEntry,\n getOpenZeppelinAdapterPackageNames,\n normalizeEcosystems,\n} from './registry';\nimport type {\n AdapterViteConfigFragment,\n LoadOpenZeppelinAdapterViteConfigOptions,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction appendPlugins(target: PluginOption[], plugins: AdapterViteConfigFragment['plugins']) {\n if (!plugins) {\n return;\n }\n\n target.push(...(Array.isArray(plugins) ? plugins : [plugins]));\n}\n\nfunction appendStringValues(target: Set<string>, value: string | string[] | undefined) {\n if (!value) {\n return;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (entry) {\n target.add(entry);\n }\n }\n}\n\nfunction appendNoExternalValues(\n target: Array<string | RegExp>,\n seenStrings: Set<string>,\n value: SsrNoExternalValue | undefined\n): boolean {\n if (!value) {\n return false;\n }\n\n if (value === true) {\n return true;\n }\n\n const values = Array.isArray(value) ? value : [value];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n target.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n target.push(entry);\n }\n }\n\n return false;\n}\n\nexport async function loadOpenZeppelinAdapterViteConfig(\n options: LoadOpenZeppelinAdapterViteConfigOptions\n): Promise<OpenZeppelinAdapterViteConfig> {\n const ecosystems = normalizeEcosystems(options.ecosystems);\n const plugins: PluginOption[] = [];\n const dedupe = new Set<string>();\n const optimizeDepsInclude = new Set<string>();\n const optimizeDepsExclude = new Set<string>();\n const ssrNoExternal: Array<string | RegExp> = [];\n const seenSsrNoExternalStrings = new Set<string>();\n let ssrNoExternalAll = false;\n const packageNames = getOpenZeppelinAdapterPackageNames(ecosystems);\n\n for (const packageName of packageNames) {\n optimizeDepsExclude.add(packageName);\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, packageName) ||\n ssrNoExternalAll;\n }\n\n for (const ecosystem of ecosystems) {\n const entry = getAdapterRegistryEntry(ecosystem);\n\n let fragment: AdapterViteConfigFragment;\n try {\n fragment = await entry.loadConfig(options);\n } catch (error) {\n throw new Error(\n `Failed to load ${entry.packageName} Vite configuration. ` +\n `Original error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n appendPlugins(plugins, fragment.plugins);\n appendStringValues(dedupe, fragment.resolve?.dedupe);\n appendStringValues(optimizeDepsInclude, fragment.optimizeDeps?.include);\n appendStringValues(optimizeDepsExclude, fragment.optimizeDeps?.exclude);\n appendStringValues(optimizeDepsExclude, entry.extraOptimizeDepsExclude);\n\n ssrNoExternalAll =\n appendNoExternalValues(ssrNoExternal, seenSsrNoExternalStrings, fragment.ssr?.noExternal) ||\n ssrNoExternalAll;\n }\n\n return {\n plugins,\n resolve: {\n dedupe: [...dedupe],\n },\n optimizeDeps: {\n include: [...optimizeDepsInclude],\n exclude: [...optimizeDepsExclude],\n },\n ssr: {\n noExternal: ssrNoExternalAll ? true : ssrNoExternal,\n },\n packageNames,\n };\n}\n","import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport type { Plugin } from 'vite';\n\nimport {\n getOpenZeppelinAdapterImportSpecifier,\n getOpenZeppelinAdapterPackageNames,\n} from './registry';\nimport type {\n OpenZeppelinAdapterExportPath,\n ResolveInstalledOpenZeppelinAdapterEntriesOptions,\n} from './types';\n\ntype PackageExportEntry =\n | string\n | {\n import?: string | { default?: string };\n default?: string;\n };\n\nfunction readPackageJson(packageDirectory: string): {\n exports?: Record<string, PackageExportEntry>;\n} {\n return JSON.parse(fs.readFileSync(path.join(packageDirectory, 'package.json'), 'utf8')) as {\n exports?: Record<string, PackageExportEntry>;\n };\n}\n\nfunction getImportTarget(entry: PackageExportEntry | undefined): string | null {\n if (!entry) {\n return null;\n }\n\n if (typeof entry === 'string') {\n return entry;\n }\n\n if (typeof entry.import === 'string') {\n return entry.import;\n }\n\n if (\n entry.import &&\n typeof entry.import === 'object' &&\n typeof entry.import.default === 'string'\n ) {\n return entry.import.default;\n }\n\n if (typeof entry.default === 'string') {\n return entry.default;\n }\n\n return null;\n}\n\nfunction resolveInstalledPackageDirectory(packageName: string, importMetaUrl: string): string {\n const require = createRequire(importMetaUrl);\n const installedEntryPath = require.resolve(packageName);\n return path.resolve(path.dirname(installedEntryPath), '..');\n}\n\nfunction resolveInstalledExportEntry(\n packageName: string,\n packageDirectory: string,\n exportPath: OpenZeppelinAdapterExportPath\n): string {\n const packageJson = readPackageJson(packageDirectory);\n const target = getImportTarget(packageJson.exports?.[exportPath]);\n\n if (!target) {\n throw new Error(\n `Missing export \"${exportPath}\" in ${packageName}/package.json (required \"import\" condition)`\n );\n }\n\n return path.resolve(packageDirectory, target);\n}\n\nexport function resolveInstalledOpenZeppelinAdapterEntries(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Record<string, string> {\n const exportPaths = options.exportPaths ?? ['.', './metadata', './networks'];\n const entries: Record<string, string> = {};\n\n for (const packageName of getOpenZeppelinAdapterPackageNames(options.ecosystems)) {\n const packageDirectory = resolveInstalledPackageDirectory(packageName, options.importMetaUrl);\n\n for (const exportPath of exportPaths) {\n entries[getOpenZeppelinAdapterImportSpecifier(packageName, exportPath)] =\n resolveInstalledExportEntry(packageName, packageDirectory, exportPath);\n }\n }\n\n return entries;\n}\n\nexport function createOpenZeppelinAdapterResolverPlugin(\n options: ResolveInstalledOpenZeppelinAdapterEntriesOptions\n): Plugin {\n const entries = resolveInstalledOpenZeppelinAdapterEntries(options);\n\n return {\n name: 'openzeppelin-adapter-package-resolver',\n enforce: 'pre',\n resolveId(id) {\n return entries[id] ?? null;\n },\n };\n}\n","import type { PluginOption, UserConfig } from 'vite';\n\nimport { loadOpenZeppelinAdapterViteConfig } from './config';\nimport {\n createOpenZeppelinAdapterResolverPlugin,\n resolveInstalledOpenZeppelinAdapterEntries,\n} from './resolver';\nimport type {\n DefineOpenZeppelinAdapterViteConfigOptions,\n DefineOpenZeppelinAdapterVitestConfigOptions,\n OpenZeppelinAdapterIntegration,\n OpenZeppelinAdapterIntegrationOptions,\n OpenZeppelinAdapterSsrConfig,\n OpenZeppelinAdapterViteConfig,\n} from './types';\n\ntype SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;\n\nfunction normalizePluginOptions(plugins: UserConfig['plugins']): PluginOption[] {\n if (!plugins) {\n return [];\n }\n\n return Array.isArray(plugins) ? plugins : [plugins];\n}\n\nfunction normalizeStringValues(value: string | string[] | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction mergeUniqueStrings(\n base: string | string[] | undefined,\n extra: readonly string[]\n): string[] {\n const merged: string[] = [];\n const seen = new Set<string>();\n\n for (const entry of [...normalizeStringValues(base), ...extra]) {\n if (!entry || seen.has(entry)) {\n continue;\n }\n\n seen.add(entry);\n merged.push(entry);\n }\n\n return merged;\n}\n\nfunction mergeSsrNoExternal(\n base: SsrNoExternalValue | undefined,\n extra: OpenZeppelinAdapterSsrConfig['noExternal']\n): true | Array<string | RegExp> {\n if (base === true || extra === true) {\n return true;\n }\n\n const merged: Array<string | RegExp> = [];\n const seenStrings = new Set<string>();\n const values = [\n ...(base ? (Array.isArray(base) ? base : [base]) : []),\n ...(Array.isArray(extra) ? extra : [extra]),\n ];\n\n for (const entry of values) {\n if (typeof entry === 'string') {\n if (!seenStrings.has(entry)) {\n seenStrings.add(entry);\n merged.push(entry);\n }\n continue;\n }\n\n if (entry instanceof RegExp) {\n merged.push(entry);\n }\n }\n\n return merged;\n}\n\nfunction mergeResolveAlias(\n baseAlias: NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined,\n extraAliasEntries: Record<string, string>\n): NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined {\n if (Object.keys(extraAliasEntries).length === 0) {\n return baseAlias;\n }\n\n if (!baseAlias) {\n return extraAliasEntries;\n }\n\n if (Array.isArray(baseAlias)) {\n return [\n ...baseAlias,\n ...Object.entries(extraAliasEntries).map(([find, replacement]) => ({\n find,\n replacement,\n })),\n ];\n }\n\n return {\n ...baseAlias,\n ...extraAliasEntries,\n };\n}\n\nfunction mergeOpenZeppelinAdapterConfig(\n baseConfig: UserConfig,\n adapterConfig: OpenZeppelinAdapterViteConfig,\n options: {\n extraPlugins?: PluginOption[];\n extraAliasEntries?: Record<string, string>;\n } = {}\n): UserConfig {\n const extraPlugins = options.extraPlugins ?? [];\n const extraAliasEntries = options.extraAliasEntries ?? {};\n\n return {\n ...baseConfig,\n plugins: [\n ...adapterConfig.plugins,\n ...normalizePluginOptions(baseConfig.plugins),\n ...extraPlugins,\n ],\n resolve: {\n ...baseConfig.resolve,\n alias: mergeResolveAlias(baseConfig.resolve?.alias, extraAliasEntries),\n dedupe: mergeUniqueStrings(baseConfig.resolve?.dedupe, adapterConfig.resolve.dedupe),\n },\n optimizeDeps: {\n ...baseConfig.optimizeDeps,\n include: mergeUniqueStrings(\n baseConfig.optimizeDeps?.include,\n adapterConfig.optimizeDeps.include\n ),\n exclude: mergeUniqueStrings(\n baseConfig.optimizeDeps?.exclude,\n adapterConfig.optimizeDeps.exclude\n ),\n },\n ssr: {\n ...baseConfig.ssr,\n noExternal: mergeSsrNoExternal(baseConfig.ssr?.noExternal, adapterConfig.ssr.noExternal),\n },\n };\n}\n\nasync function buildOpenZeppelinAdapterViteConfig(\n options: OpenZeppelinAdapterIntegrationOptions,\n config: UserConfig = {}\n): Promise<UserConfig> {\n const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);\n return mergeOpenZeppelinAdapterConfig(config, adapterConfig);\n}\n\nasync function buildOpenZeppelinAdapterVitestConfig(\n options: OpenZeppelinAdapterIntegrationOptions,\n config: UserConfig = {}\n): Promise<UserConfig> {\n if (!options.importMetaUrl) {\n throw new Error(\n 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +\n 'installed adapter exports'\n );\n }\n\n const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);\n const resolverOptions = {\n ecosystems: options.ecosystems,\n importMetaUrl: options.importMetaUrl,\n exportPaths: options.exportPaths,\n };\n\n return mergeOpenZeppelinAdapterConfig(config, adapterConfig, {\n extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],\n extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),\n });\n}\n\nexport function createOpenZeppelinAdapterIntegration(\n options: OpenZeppelinAdapterIntegrationOptions\n): OpenZeppelinAdapterIntegration {\n const adapterConfigPromise = loadOpenZeppelinAdapterViteConfig(options);\n\n return {\n async vite(config: UserConfig = {}) {\n return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise);\n },\n async vitest(config: UserConfig = {}) {\n if (!options.importMetaUrl) {\n throw new Error(\n 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +\n 'installed adapter exports'\n );\n }\n\n const resolverOptions = {\n ecosystems: options.ecosystems,\n importMetaUrl: options.importMetaUrl,\n exportPaths: options.exportPaths,\n };\n\n return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise, {\n extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],\n extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),\n });\n },\n };\n}\n\nexport function defineOpenZeppelinAdapterViteConfig(\n options: DefineOpenZeppelinAdapterViteConfigOptions\n): Promise<UserConfig> {\n const { config = {}, ...integrationOptions } = options;\n return buildOpenZeppelinAdapterViteConfig(integrationOptions, config);\n}\n\nexport function defineOpenZeppelinAdapterVitestConfig(\n options: DefineOpenZeppelinAdapterVitestConfigOptions\n): Promise<UserConfig> {\n const { config = {}, ...integrationOptions } = options;\n return buildOpenZeppelinAdapterVitestConfig(integrationOptions, config);\n}\n","import type { Plugin, PluginOption, UserConfig } from 'vite';\n\nexport const SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS = [\n 'evm',\n 'midnight',\n 'polkadot',\n 'solana',\n 'stellar',\n] as const;\n\nexport type OpenZeppelinAdapterEcosystem =\n (typeof SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS)[number];\n\nexport type OpenZeppelinAdapterExportPath = '.' | './metadata' | './networks';\n\nexport interface MidnightAdapterPluginFactories {\n wasm: () => Plugin;\n topLevelAwait: () => Plugin;\n}\n\nexport interface OpenZeppelinAdapterPluginFactories {\n midnight?: MidnightAdapterPluginFactories;\n}\n\nexport interface LoadOpenZeppelinAdapterViteConfigOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n pluginFactories?: OpenZeppelinAdapterPluginFactories;\n}\n\nexport interface OpenZeppelinAdapterIntegrationOptions extends LoadOpenZeppelinAdapterViteConfigOptions {\n importMetaUrl?: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface DefineOpenZeppelinAdapterViteConfigOptions extends LoadOpenZeppelinAdapterViteConfigOptions {\n config?: UserConfig;\n}\n\nexport interface DefineOpenZeppelinAdapterVitestConfigOptions extends OpenZeppelinAdapterIntegrationOptions {\n config?: UserConfig;\n importMetaUrl: string;\n}\n\nexport interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {\n ecosystems: readonly OpenZeppelinAdapterEcosystem[];\n importMetaUrl: string;\n exportPaths?: readonly OpenZeppelinAdapterExportPath[];\n}\n\nexport interface OpenZeppelinAdapterResolvedConfig {\n dedupe: string[];\n}\n\nexport interface OpenZeppelinAdapterOptimizeDepsConfig {\n include: string[];\n exclude: string[];\n}\n\nexport interface OpenZeppelinAdapterSsrConfig {\n noExternal: true | Array<string | RegExp>;\n}\n\nexport interface OpenZeppelinAdapterViteConfig {\n plugins: PluginOption[];\n resolve: OpenZeppelinAdapterResolvedConfig;\n optimizeDeps: OpenZeppelinAdapterOptimizeDepsConfig;\n ssr: OpenZeppelinAdapterSsrConfig;\n packageNames: string[];\n}\n\nexport interface OpenZeppelinAdapterIntegration {\n vite(config?: UserConfig): Promise<UserConfig>;\n vitest(config?: UserConfig): Promise<UserConfig>;\n}\n\nexport type AdapterViteConfigFragment = Partial<\n Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>\n>;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/adapters-vite",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "private": false,
5
5
  "description": "Shared Vite and Vitest integration helpers for OpenZeppelin adapter packages",
6
6
  "keywords": [
@@ -62,10 +62,10 @@
62
62
  "vite": "^7.2.2",
63
63
  "vitest": "^3.2.4",
64
64
  "@openzeppelin/adapter-evm": "1.1.0",
65
- "@openzeppelin/adapter-polkadot": "1.1.0",
66
65
  "@openzeppelin/adapter-midnight": "1.1.0",
67
- "@openzeppelin/adapter-stellar": "1.1.0",
68
- "@openzeppelin/adapter-solana": "1.1.0"
66
+ "@openzeppelin/adapter-polkadot": "1.1.0",
67
+ "@openzeppelin/adapter-solana": "1.1.0",
68
+ "@openzeppelin/adapter-stellar": "1.1.0"
69
69
  },
70
70
  "exports": {
71
71
  ".": {
@@ -0,0 +1,150 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+
3
+ import {
4
+ createOpenZeppelinAdapterIntegration,
5
+ defineOpenZeppelinAdapterViteConfig,
6
+ defineOpenZeppelinAdapterVitestConfig,
7
+ } from '../index';
8
+ import type { OpenZeppelinAdapterViteConfig } from '../types';
9
+
10
+ const {
11
+ mockLoadOpenZeppelinAdapterViteConfig,
12
+ mockCreateOpenZeppelinAdapterResolverPlugin,
13
+ mockResolveInstalledOpenZeppelinAdapterEntries,
14
+ } = vi.hoisted(() => ({
15
+ mockLoadOpenZeppelinAdapterViteConfig: vi.fn<() => Promise<OpenZeppelinAdapterViteConfig>>(
16
+ async () => ({
17
+ plugins: [{ name: 'adapter-plugin' }],
18
+ resolve: {
19
+ dedupe: ['viem', 'react'],
20
+ },
21
+ optimizeDeps: {
22
+ include: ['viem'],
23
+ exclude: ['@openzeppelin/adapter-evm'],
24
+ },
25
+ ssr: {
26
+ noExternal: ['viem'],
27
+ },
28
+ packageNames: ['@openzeppelin/adapter-evm'],
29
+ })
30
+ ),
31
+ mockCreateOpenZeppelinAdapterResolverPlugin: vi.fn(() => ({
32
+ name: 'resolver-plugin',
33
+ })),
34
+ mockResolveInstalledOpenZeppelinAdapterEntries: vi.fn(() => ({
35
+ '@openzeppelin/adapter-evm': '/virtual/adapter-evm/index.mjs',
36
+ '@openzeppelin/adapter-evm/metadata': '/virtual/adapter-evm/metadata.mjs',
37
+ })),
38
+ }));
39
+
40
+ vi.mock('../config', () => ({
41
+ loadOpenZeppelinAdapterViteConfig: mockLoadOpenZeppelinAdapterViteConfig,
42
+ }));
43
+
44
+ vi.mock('../resolver', () => ({
45
+ createOpenZeppelinAdapterResolverPlugin: mockCreateOpenZeppelinAdapterResolverPlugin,
46
+ resolveInstalledOpenZeppelinAdapterEntries: mockResolveInstalledOpenZeppelinAdapterEntries,
47
+ }));
48
+
49
+ describe('high-level adapters-vite integration helpers', () => {
50
+ it('merges adapter Vite config into app config without consumer boilerplate', async () => {
51
+ const config = await defineOpenZeppelinAdapterViteConfig({
52
+ ecosystems: ['evm'],
53
+ config: {
54
+ plugins: [{ name: 'app-plugin' }],
55
+ resolve: {
56
+ dedupe: ['react', 'react-dom'],
57
+ },
58
+ optimizeDeps: {
59
+ include: ['react'],
60
+ exclude: ['legacy-dep'],
61
+ },
62
+ ssr: {
63
+ noExternal: ['react'],
64
+ },
65
+ },
66
+ });
67
+
68
+ expect(config.plugins).toEqual([{ name: 'adapter-plugin' }, { name: 'app-plugin' }]);
69
+ expect(config.resolve?.dedupe).toEqual(['react', 'react-dom', 'viem']);
70
+ expect(config.optimizeDeps?.include).toEqual(['react', 'viem']);
71
+ expect(config.optimizeDeps?.exclude).toEqual(['legacy-dep', '@openzeppelin/adapter-evm']);
72
+ expect(config.ssr?.noExternal).toEqual(['react', 'viem']);
73
+ });
74
+
75
+ it('adds resolver wiring and installed-export aliases for Vitest configs', async () => {
76
+ const config = await defineOpenZeppelinAdapterVitestConfig({
77
+ ecosystems: ['evm'],
78
+ importMetaUrl: 'file:///workspace/apps/builder/vitest.config.ts',
79
+ config: {
80
+ plugins: [{ name: 'app-plugin' }],
81
+ resolve: {
82
+ alias: {
83
+ '@': '/workspace/apps/builder/src',
84
+ },
85
+ },
86
+ },
87
+ });
88
+
89
+ expect(config.plugins).toEqual([
90
+ { name: 'adapter-plugin' },
91
+ { name: 'app-plugin' },
92
+ { name: 'resolver-plugin' },
93
+ ]);
94
+ expect(config.resolve?.alias).toEqual({
95
+ '@': '/workspace/apps/builder/src',
96
+ '@openzeppelin/adapter-evm': '/virtual/adapter-evm/index.mjs',
97
+ '@openzeppelin/adapter-evm/metadata': '/virtual/adapter-evm/metadata.mjs',
98
+ });
99
+ expect(mockCreateOpenZeppelinAdapterResolverPlugin).toHaveBeenCalledWith({
100
+ ecosystems: ['evm'],
101
+ importMetaUrl: 'file:///workspace/apps/builder/vitest.config.ts',
102
+ exportPaths: undefined,
103
+ });
104
+ });
105
+
106
+ it('caches adapter config loading across vite and vitest builders', async () => {
107
+ mockLoadOpenZeppelinAdapterViteConfig.mockClear();
108
+
109
+ const integration = createOpenZeppelinAdapterIntegration({
110
+ ecosystems: ['evm'],
111
+ importMetaUrl: 'file:///workspace/apps/builder/vitest.config.ts',
112
+ });
113
+
114
+ await integration.vite({
115
+ optimizeDeps: {
116
+ include: ['react'],
117
+ },
118
+ });
119
+ await integration.vitest({
120
+ resolve: {
121
+ alias: {
122
+ '@': '/workspace/apps/builder/src',
123
+ },
124
+ },
125
+ });
126
+
127
+ expect(mockLoadOpenZeppelinAdapterViteConfig).toHaveBeenCalledTimes(1);
128
+ });
129
+
130
+ it('requires importMetaUrl before building Vitest integration from the shared builder', async () => {
131
+ const integration = createOpenZeppelinAdapterIntegration({
132
+ ecosystems: ['evm'],
133
+ });
134
+
135
+ await expect(integration.vitest()).rejects.toThrow(/requires importMetaUrl/);
136
+ });
137
+
138
+ it('preserves ssr.noExternal true when either side requires full bundling', async () => {
139
+ const config = await defineOpenZeppelinAdapterViteConfig({
140
+ ecosystems: ['evm'],
141
+ config: {
142
+ ssr: {
143
+ noExternal: true,
144
+ },
145
+ },
146
+ });
147
+
148
+ expect(config.ssr?.noExternal).toBe(true);
149
+ });
150
+ });
package/src/index.ts CHANGED
@@ -1,4 +1,9 @@
1
1
  export { loadOpenZeppelinAdapterViteConfig } from './config';
2
+ export {
3
+ createOpenZeppelinAdapterIntegration,
4
+ defineOpenZeppelinAdapterViteConfig,
5
+ defineOpenZeppelinAdapterVitestConfig,
6
+ } from './integration';
2
7
  export {
3
8
  getOpenZeppelinAdapterImportSpecifier,
4
9
  getOpenZeppelinAdapterImportSpecifiers,
@@ -11,10 +16,14 @@ export {
11
16
  export {
12
17
  SUPPORTED_OPENZEPPELIN_ADAPTER_ECOSYSTEMS,
13
18
  type AdapterViteConfigFragment,
19
+ type DefineOpenZeppelinAdapterViteConfigOptions,
20
+ type DefineOpenZeppelinAdapterVitestConfigOptions,
14
21
  type LoadOpenZeppelinAdapterViteConfigOptions,
15
22
  type MidnightAdapterPluginFactories,
16
23
  type OpenZeppelinAdapterEcosystem,
17
24
  type OpenZeppelinAdapterExportPath,
25
+ type OpenZeppelinAdapterIntegration,
26
+ type OpenZeppelinAdapterIntegrationOptions,
18
27
  type OpenZeppelinAdapterPluginFactories,
19
28
  type OpenZeppelinAdapterViteConfig,
20
29
  type ResolveInstalledOpenZeppelinAdapterEntriesOptions,
@@ -0,0 +1,230 @@
1
+ import type { PluginOption, UserConfig } from 'vite';
2
+
3
+ import { loadOpenZeppelinAdapterViteConfig } from './config';
4
+ import {
5
+ createOpenZeppelinAdapterResolverPlugin,
6
+ resolveInstalledOpenZeppelinAdapterEntries,
7
+ } from './resolver';
8
+ import type {
9
+ DefineOpenZeppelinAdapterViteConfigOptions,
10
+ DefineOpenZeppelinAdapterVitestConfigOptions,
11
+ OpenZeppelinAdapterIntegration,
12
+ OpenZeppelinAdapterIntegrationOptions,
13
+ OpenZeppelinAdapterSsrConfig,
14
+ OpenZeppelinAdapterViteConfig,
15
+ } from './types';
16
+
17
+ type SsrNoExternalValue = NonNullable<NonNullable<UserConfig['ssr']>['noExternal']>;
18
+
19
+ function normalizePluginOptions(plugins: UserConfig['plugins']): PluginOption[] {
20
+ if (!plugins) {
21
+ return [];
22
+ }
23
+
24
+ return Array.isArray(plugins) ? plugins : [plugins];
25
+ }
26
+
27
+ function normalizeStringValues(value: string | string[] | undefined): string[] {
28
+ if (!value) {
29
+ return [];
30
+ }
31
+
32
+ return Array.isArray(value) ? value : [value];
33
+ }
34
+
35
+ function mergeUniqueStrings(
36
+ base: string | string[] | undefined,
37
+ extra: readonly string[]
38
+ ): string[] {
39
+ const merged: string[] = [];
40
+ const seen = new Set<string>();
41
+
42
+ for (const entry of [...normalizeStringValues(base), ...extra]) {
43
+ if (!entry || seen.has(entry)) {
44
+ continue;
45
+ }
46
+
47
+ seen.add(entry);
48
+ merged.push(entry);
49
+ }
50
+
51
+ return merged;
52
+ }
53
+
54
+ function mergeSsrNoExternal(
55
+ base: SsrNoExternalValue | undefined,
56
+ extra: OpenZeppelinAdapterSsrConfig['noExternal']
57
+ ): true | Array<string | RegExp> {
58
+ if (base === true || extra === true) {
59
+ return true;
60
+ }
61
+
62
+ const merged: Array<string | RegExp> = [];
63
+ const seenStrings = new Set<string>();
64
+ const values = [
65
+ ...(base ? (Array.isArray(base) ? base : [base]) : []),
66
+ ...(Array.isArray(extra) ? extra : [extra]),
67
+ ];
68
+
69
+ for (const entry of values) {
70
+ if (typeof entry === 'string') {
71
+ if (!seenStrings.has(entry)) {
72
+ seenStrings.add(entry);
73
+ merged.push(entry);
74
+ }
75
+ continue;
76
+ }
77
+
78
+ if (entry instanceof RegExp) {
79
+ merged.push(entry);
80
+ }
81
+ }
82
+
83
+ return merged;
84
+ }
85
+
86
+ function mergeResolveAlias(
87
+ baseAlias: NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined,
88
+ extraAliasEntries: Record<string, string>
89
+ ): NonNullable<NonNullable<UserConfig['resolve']>['alias']> | undefined {
90
+ if (Object.keys(extraAliasEntries).length === 0) {
91
+ return baseAlias;
92
+ }
93
+
94
+ if (!baseAlias) {
95
+ return extraAliasEntries;
96
+ }
97
+
98
+ if (Array.isArray(baseAlias)) {
99
+ return [
100
+ ...baseAlias,
101
+ ...Object.entries(extraAliasEntries).map(([find, replacement]) => ({
102
+ find,
103
+ replacement,
104
+ })),
105
+ ];
106
+ }
107
+
108
+ return {
109
+ ...baseAlias,
110
+ ...extraAliasEntries,
111
+ };
112
+ }
113
+
114
+ function mergeOpenZeppelinAdapterConfig(
115
+ baseConfig: UserConfig,
116
+ adapterConfig: OpenZeppelinAdapterViteConfig,
117
+ options: {
118
+ extraPlugins?: PluginOption[];
119
+ extraAliasEntries?: Record<string, string>;
120
+ } = {}
121
+ ): UserConfig {
122
+ const extraPlugins = options.extraPlugins ?? [];
123
+ const extraAliasEntries = options.extraAliasEntries ?? {};
124
+
125
+ return {
126
+ ...baseConfig,
127
+ plugins: [
128
+ ...adapterConfig.plugins,
129
+ ...normalizePluginOptions(baseConfig.plugins),
130
+ ...extraPlugins,
131
+ ],
132
+ resolve: {
133
+ ...baseConfig.resolve,
134
+ alias: mergeResolveAlias(baseConfig.resolve?.alias, extraAliasEntries),
135
+ dedupe: mergeUniqueStrings(baseConfig.resolve?.dedupe, adapterConfig.resolve.dedupe),
136
+ },
137
+ optimizeDeps: {
138
+ ...baseConfig.optimizeDeps,
139
+ include: mergeUniqueStrings(
140
+ baseConfig.optimizeDeps?.include,
141
+ adapterConfig.optimizeDeps.include
142
+ ),
143
+ exclude: mergeUniqueStrings(
144
+ baseConfig.optimizeDeps?.exclude,
145
+ adapterConfig.optimizeDeps.exclude
146
+ ),
147
+ },
148
+ ssr: {
149
+ ...baseConfig.ssr,
150
+ noExternal: mergeSsrNoExternal(baseConfig.ssr?.noExternal, adapterConfig.ssr.noExternal),
151
+ },
152
+ };
153
+ }
154
+
155
+ async function buildOpenZeppelinAdapterViteConfig(
156
+ options: OpenZeppelinAdapterIntegrationOptions,
157
+ config: UserConfig = {}
158
+ ): Promise<UserConfig> {
159
+ const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);
160
+ return mergeOpenZeppelinAdapterConfig(config, adapterConfig);
161
+ }
162
+
163
+ async function buildOpenZeppelinAdapterVitestConfig(
164
+ options: OpenZeppelinAdapterIntegrationOptions,
165
+ config: UserConfig = {}
166
+ ): Promise<UserConfig> {
167
+ if (!options.importMetaUrl) {
168
+ throw new Error(
169
+ 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +
170
+ 'installed adapter exports'
171
+ );
172
+ }
173
+
174
+ const adapterConfig = await loadOpenZeppelinAdapterViteConfig(options);
175
+ const resolverOptions = {
176
+ ecosystems: options.ecosystems,
177
+ importMetaUrl: options.importMetaUrl,
178
+ exportPaths: options.exportPaths,
179
+ };
180
+
181
+ return mergeOpenZeppelinAdapterConfig(config, adapterConfig, {
182
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
183
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),
184
+ });
185
+ }
186
+
187
+ export function createOpenZeppelinAdapterIntegration(
188
+ options: OpenZeppelinAdapterIntegrationOptions
189
+ ): OpenZeppelinAdapterIntegration {
190
+ const adapterConfigPromise = loadOpenZeppelinAdapterViteConfig(options);
191
+
192
+ return {
193
+ async vite(config: UserConfig = {}) {
194
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise);
195
+ },
196
+ async vitest(config: UserConfig = {}) {
197
+ if (!options.importMetaUrl) {
198
+ throw new Error(
199
+ 'createOpenZeppelinAdapterIntegration(...).vitest() requires importMetaUrl to resolve ' +
200
+ 'installed adapter exports'
201
+ );
202
+ }
203
+
204
+ const resolverOptions = {
205
+ ecosystems: options.ecosystems,
206
+ importMetaUrl: options.importMetaUrl,
207
+ exportPaths: options.exportPaths,
208
+ };
209
+
210
+ return mergeOpenZeppelinAdapterConfig(config, await adapterConfigPromise, {
211
+ extraPlugins: [createOpenZeppelinAdapterResolverPlugin(resolverOptions)],
212
+ extraAliasEntries: resolveInstalledOpenZeppelinAdapterEntries(resolverOptions),
213
+ });
214
+ },
215
+ };
216
+ }
217
+
218
+ export function defineOpenZeppelinAdapterViteConfig(
219
+ options: DefineOpenZeppelinAdapterViteConfigOptions
220
+ ): Promise<UserConfig> {
221
+ const { config = {}, ...integrationOptions } = options;
222
+ return buildOpenZeppelinAdapterViteConfig(integrationOptions, config);
223
+ }
224
+
225
+ export function defineOpenZeppelinAdapterVitestConfig(
226
+ options: DefineOpenZeppelinAdapterVitestConfigOptions
227
+ ): Promise<UserConfig> {
228
+ const { config = {}, ...integrationOptions } = options;
229
+ return buildOpenZeppelinAdapterVitestConfig(integrationOptions, config);
230
+ }
package/src/types.ts CHANGED
@@ -27,20 +27,52 @@ export interface LoadOpenZeppelinAdapterViteConfigOptions {
27
27
  pluginFactories?: OpenZeppelinAdapterPluginFactories;
28
28
  }
29
29
 
30
+ export interface OpenZeppelinAdapterIntegrationOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
31
+ importMetaUrl?: string;
32
+ exportPaths?: readonly OpenZeppelinAdapterExportPath[];
33
+ }
34
+
35
+ export interface DefineOpenZeppelinAdapterViteConfigOptions extends LoadOpenZeppelinAdapterViteConfigOptions {
36
+ config?: UserConfig;
37
+ }
38
+
39
+ export interface DefineOpenZeppelinAdapterVitestConfigOptions extends OpenZeppelinAdapterIntegrationOptions {
40
+ config?: UserConfig;
41
+ importMetaUrl: string;
42
+ }
43
+
30
44
  export interface ResolveInstalledOpenZeppelinAdapterEntriesOptions {
31
45
  ecosystems: readonly OpenZeppelinAdapterEcosystem[];
32
46
  importMetaUrl: string;
33
47
  exportPaths?: readonly OpenZeppelinAdapterExportPath[];
34
48
  }
35
49
 
50
+ export interface OpenZeppelinAdapterResolvedConfig {
51
+ dedupe: string[];
52
+ }
53
+
54
+ export interface OpenZeppelinAdapterOptimizeDepsConfig {
55
+ include: string[];
56
+ exclude: string[];
57
+ }
58
+
59
+ export interface OpenZeppelinAdapterSsrConfig {
60
+ noExternal: true | Array<string | RegExp>;
61
+ }
62
+
36
63
  export interface OpenZeppelinAdapterViteConfig {
37
64
  plugins: PluginOption[];
38
- resolve: NonNullable<UserConfig['resolve']>;
39
- optimizeDeps: NonNullable<UserConfig['optimizeDeps']>;
40
- ssr: NonNullable<UserConfig['ssr']>;
65
+ resolve: OpenZeppelinAdapterResolvedConfig;
66
+ optimizeDeps: OpenZeppelinAdapterOptimizeDepsConfig;
67
+ ssr: OpenZeppelinAdapterSsrConfig;
41
68
  packageNames: string[];
42
69
  }
43
70
 
71
+ export interface OpenZeppelinAdapterIntegration {
72
+ vite(config?: UserConfig): Promise<UserConfig>;
73
+ vitest(config?: UserConfig): Promise<UserConfig>;
74
+ }
75
+
44
76
  export type AdapterViteConfigFragment = Partial<
45
77
  Pick<UserConfig, 'plugins' | 'resolve' | 'optimizeDeps' | 'ssr'>
46
78
  >;