@@ -6,6 +6,7 @@ import commonjsPlugin from '@rollup/plugin-commonjs'
66import jsonPlugin from '@rollup/plugin-json'
77import { nodeResolve } from '@rollup/plugin-node-resolve'
88import replacePlugin from '@rollup/plugin-replace'
9+ import MagicString from 'magic-string'
910import { readPackageUpSync } from 'read-package-up'
1011import rangesIntersect from 'semver/ranges/intersects.js'
1112import { purgePolyfills } from 'unplugin-purge-polyfills'
@@ -16,6 +17,7 @@ import {
1617 readPackageJsonSync
1718} from '@socketsecurity/registry/lib/packages'
1819import { isRelative } from '@socketsecurity/registry/lib/path'
20+ import { escapeRegExp } from '@socketsecurity/registry/lib/regexps'
1921import { spawnSync } from '@socketsecurity/registry/lib/spawn'
2022
2123import constants from '../scripts/constants.js'
@@ -53,12 +55,13 @@ const {
5355 VITEST
5456} = constants
5557
58+ export const EXTERNAL_PACKAGES = [ 'blessed' ]
59+
5660export const INLINED_PACKAGES = [
5761 '@babel/runtime' ,
58- // 'blessed' package dependencies.
62+ // 'blessed-contrib ' package dependencies.
5963 'ansi-escapes' ,
6064 'ansi-regex' ,
61- 'blessed' ,
6265 'blessed-contrib' ,
6366 'bresenham' ,
6467 'buffers' ,
@@ -98,6 +101,7 @@ const checkRequireAssignmentRegExp = new RegExp(
98101 requireAssignmentsRegExp . source ,
99102 ''
100103)
104+
101105const checkSocketInteropUseRegExp = new RegExp ( `\\b${ SOCKET_INTEROP } \\b` )
102106
103107const danglingRequiresRegExp = / ^ \s * r e q u i r e \( [ " ' ] .+ ?[ " ' ] \) ; ? \r ? \n / gm
@@ -106,8 +110,11 @@ const firstUseStrictRegExp = /'use strict';?/
106110
107111const requireTinyColorsRegExp = / r e q u i r e \( [ " ' ] t i n y - c o l o r s [ " ' ] \) / g
108112
113+ const requireBlessedAssignmentRegExp =
114+ / (?< = v a r + ) [ $ \w ] + (? = * = * r e q u i r e \( [ " ' ] b l e s s e d [ " ' ] \) ) /
115+
109116const requireUrlAssignmentRegExp =
110- / (?< = v a r + ) [ $ \w ] + (? = * = * r e q u i r e \( ' n o d e : u r l ' \) ) /
117+ / (?< = v a r + ) [ $ \w ] + (? = * = * r e q u i r e \( [ " ' ] n o d e : u r l [ " ' ] \) ) /
111118
112119const splitUrlRequiresRegExp = / r e q u i r e \( [ " ' ] u [ " ' ] \s * \+ \s * [ " ' ] r l [ " ' ] \) / g
113120
@@ -217,7 +224,11 @@ export default function baseConfig(extendConfig = {}) {
217224 }
218225 const id = normalizeId ( id_ )
219226 const name = getPackageName ( id )
220- if ( pkgOverrides [ name ] || isBlessedPackageName ( name ) ) {
227+ if (
228+ pkgOverrides [ name ] ||
229+ isBlessedPackageName ( name ) ||
230+ EXTERNAL_PACKAGES . includes ( name )
231+ ) {
221232 return true
222233 }
223234 if (
@@ -404,13 +415,47 @@ export default function baseConfig(extendConfig = {}) {
404415 find : danglingRequiresRegExp ,
405416 replace : ''
406417 } ) ,
418+ // Replace hoisted requires of ./dist/blessed modules with lazily loaded
419+ // variants.
420+ {
421+ name : 'modify-blessed-requires' ,
422+ renderChunk ( code ) {
423+ const s = new MagicString ( code )
424+ const varName = requireBlessedAssignmentRegExp . exec ( code ) ?. [ 0 ]
425+ if ( varName ) {
426+ const varNameAssignmentRegExp = new RegExp (
427+ `var\\s+${ escapeRegExp ( varName ) } \\s*=.+` ,
428+ 'g'
429+ )
430+ let match
431+ while ( ( match = varNameAssignmentRegExp . exec ( code ) ) !== null ) {
432+ s . overwrite ( match . index , match . index + match [ 0 ] . length , '' )
433+ }
434+ const varNameRegExp = new RegExp (
435+ `(?<!var\\s+)\\b${ escapeRegExp ( varName ) } \\b` ,
436+ 'g'
437+ )
438+ while ( ( match = varNameRegExp . exec ( code ) ) !== null ) {
439+ s . overwrite (
440+ match . index ,
441+ match . index + match [ 0 ] . length ,
442+ "require('../blessed/lib/blessed')"
443+ )
444+ }
445+ }
446+ return {
447+ code : s . toString ( ) ,
448+ map : s . generateMap ( )
449+ }
450+ }
451+ } ,
407452 commonjsPlugin ( {
408453 defaultIsModuleExports : true ,
409454 extensions : [ '.cjs' , '.js' , '.ts' , `.ts${ ROLLUP_ENTRY_SUFFIX } ` ] ,
410455 ignoreDynamicRequires : true ,
411456 ignoreGlobal : true ,
412457 ignoreTryCatch : true ,
413- strictRequires : 'auto'
458+ strictRequires : true
414459 } ) ,
415460 // Wrap require calls with SOCKET_INTEROP helper.
416461 socketModifyPlugin ( {
0 commit comments