2020-08-25 23:57:08 +00:00
'use strict' ; var _slicedToArray = function ( ) { function sliceIterator ( arr , i ) { var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } return function ( arr , i ) { if ( Array . isArray ( arr ) ) { return arr ; } else if ( Symbol . iterator in Object ( arr ) ) { return sliceIterator ( arr , i ) ; } else { throw new TypeError ( "Invalid attempt to destructure non-iterable instance" ) ; } } ; } ( ) ; var _resolve = require ( 'eslint-module-utils/resolve' ) ; var _resolve2 = _interopRequireDefault ( _resolve ) ;
2024-03-28 02:25:32 +00:00
var _semver = require ( 'semver' ) ; var _semver2 = _interopRequireDefault ( _semver ) ;
var _arrayPrototype = require ( 'array.prototype.flatmap' ) ; var _arrayPrototype2 = _interopRequireDefault ( _arrayPrototype ) ;
var _docsUrl = require ( '../docsUrl' ) ; var _docsUrl2 = _interopRequireDefault ( _docsUrl ) ; function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { 'default' : obj } ; } function _toArray ( arr ) { return Array . isArray ( arr ) ? arr : Array . from ( arr ) ; }
var typescriptPkg = void 0 ;
try {
typescriptPkg = require ( 'typescript/package.json' ) ; // eslint-disable-line import/no-extraneous-dependencies
} catch ( e ) { /**/ }
2022-11-10 10:43:16 +00:00
function checkImports ( imported , context ) { var _iteratorNormalCompletion = true ; var _didIteratorError = false ; var _iteratorError = undefined ; try {
for ( var _iterator = imported . entries ( ) [ Symbol . iterator ] ( ) , _step ; ! ( _iteratorNormalCompletion = ( _step = _iterator . next ( ) ) . done ) ; _iteratorNormalCompletion = true ) { var _ref = _step . value ; var _ref2 = _slicedToArray ( _ref , 2 ) ; var _module = _ref2 [ 0 ] ; var nodes = _ref2 [ 1 ] ;
if ( nodes . length > 1 ) {
var message = '\'' + String ( _module ) + '\' imported multiple times.' ; var _nodes = _toArray (
nodes ) , first = _nodes [ 0 ] , rest = _nodes . slice ( 1 ) ;
var sourceCode = context . getSourceCode ( ) ;
2024-03-28 02:25:32 +00:00
var fix = getFix ( first , rest , sourceCode , context ) ;
2022-11-10 10:43:16 +00:00
2020-08-25 23:57:08 +00:00
context . report ( {
2022-11-10 10:43:16 +00:00
node : first . source ,
message : message ,
fix : fix // Attach the autofix (if any) to the first import.
} ) ; var _iteratorNormalCompletion2 = true ; var _didIteratorError2 = false ; var _iteratorError2 = undefined ; try {
for ( var _iterator2 = rest [ Symbol . iterator ] ( ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) { var node = _step2 . value ;
context . report ( {
node : node . source ,
message : message } ) ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
} } catch ( err ) { _didIteratorError2 = true ; _iteratorError2 = err ; } finally { try { if ( ! _iteratorNormalCompletion2 && _iterator2 [ 'return' ] ) { _iterator2 [ 'return' ] ( ) ; } } finally { if ( _didIteratorError2 ) { throw _iteratorError2 ; } } }
2020-08-25 23:57:08 +00:00
}
2022-11-10 10:43:16 +00:00
} } catch ( err ) { _didIteratorError = true ; _iteratorError = err ; } finally { try { if ( ! _iteratorNormalCompletion && _iterator [ 'return' ] ) { _iterator [ 'return' ] ( ) ; } } finally { if ( _didIteratorError ) { throw _iteratorError ; } } }
2020-08-25 23:57:08 +00:00
}
2024-03-28 02:25:32 +00:00
function getFix ( first , rest , sourceCode , context ) {
2020-08-25 23:57:08 +00:00
// Sorry ESLint <= 3 users, no autofix for you. Autofixing duplicate imports
// requires multiple `fixer.whatever()` calls in the `fix`: We both need to
// update the first one, and remove the rest. Support for multiple
// `fixer.whatever()` in a single `fix` was added in ESLint 4.1.
// `sourceCode.getCommentsBefore` was added in 4.0, so that's an easy thing to
// check for.
if ( typeof sourceCode . getCommentsBefore !== 'function' ) {
return undefined ;
}
// Adjusting the first import might make it multiline, which could break
// `eslint-disable-next-line` comments and similar, so bail if the first
// import has comments. Also, if the first import is `import * as ns from
// './foo'` there's nothing we can do.
if ( hasProblematicComments ( first , sourceCode ) || hasNamespace ( first ) ) {
return undefined ;
}
2022-11-10 10:43:16 +00:00
var defaultImportNames = new Set (
2024-03-28 02:25:32 +00:00
( 0 , _arrayPrototype2 [ 'default' ] ) ( [ ] . concat ( first , rest || [ ] ) , function ( x ) { return getDefaultImportName ( x ) || [ ] ; } ) ) ;
2020-08-25 23:57:08 +00:00
// Bail if there are multiple different default import names – it's up to the
// user to choose which one to keep.
if ( defaultImportNames . size > 1 ) {
return undefined ;
}
// Leave it to the user to handle comments. Also skip `import * as ns from
// './foo'` imports, since they cannot be merged into another import.
2024-03-28 02:25:32 +00:00
var restWithoutComments = rest . filter ( function ( node ) { return ! hasProblematicComments ( node , sourceCode ) && ! hasNamespace ( node ) ; } ) ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var specifiers = restWithoutComments .
map ( function ( node ) {
var tokens = sourceCode . getTokens ( node ) ;
var openBrace = tokens . find ( function ( token ) { return isPunctuator ( token , '{' ) ; } ) ;
var closeBrace = tokens . find ( function ( token ) { return isPunctuator ( token , '}' ) ; } ) ;
2020-08-25 23:57:08 +00:00
if ( openBrace == null || closeBrace == null ) {
return undefined ;
}
return {
importNode : node ,
2024-03-28 02:25:32 +00:00
identifiers : sourceCode . text . slice ( openBrace . range [ 1 ] , closeBrace . range [ 0 ] ) . split ( ',' ) , // Split the text into separate identifiers (retaining any whitespace before or after)
2020-08-25 23:57:08 +00:00
isEmpty : ! hasSpecifiers ( node ) } ;
} ) .
filter ( Boolean ) ;
2024-03-28 02:25:32 +00:00
var unnecessaryImports = restWithoutComments . filter ( function ( node ) { return ! hasSpecifiers ( node ) &&
! hasNamespace ( node ) &&
! specifiers . some ( function ( specifier ) { return specifier . importNode === node ; } ) ; } ) ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var shouldAddDefault = getDefaultImportName ( first ) == null && defaultImportNames . size === 1 ;
var shouldAddSpecifiers = specifiers . length > 0 ;
var shouldRemoveUnnecessary = unnecessaryImports . length > 0 ;
2020-08-25 23:57:08 +00:00
if ( ! ( shouldAddDefault || shouldAddSpecifiers || shouldRemoveUnnecessary ) ) {
return undefined ;
}
2022-11-10 10:43:16 +00:00
return function ( fixer ) {
var tokens = sourceCode . getTokens ( first ) ;
var openBrace = tokens . find ( function ( token ) { return isPunctuator ( token , '{' ) ; } ) ;
var closeBrace = tokens . find ( function ( token ) { return isPunctuator ( token , '}' ) ; } ) ;
var firstToken = sourceCode . getFirstToken ( first ) ; var _defaultImportNames = _slicedToArray (
defaultImportNames , 1 ) , defaultImportName = _defaultImportNames [ 0 ] ;
2020-08-25 23:57:08 +00:00
2024-03-28 02:25:32 +00:00
var firstHasTrailingComma = closeBrace != null && isPunctuator ( sourceCode . getTokenBefore ( closeBrace ) , ',' ) ;
var firstIsEmpty = ! hasSpecifiers ( first ) ;
var firstExistingIdentifiers = firstIsEmpty ?
new Set ( ) :
new Set ( sourceCode . text . slice ( openBrace . range [ 1 ] , closeBrace . range [ 0 ] ) .
split ( ',' ) .
map ( function ( x ) { return x . trim ( ) ; } ) ) ; var _specifiers$reduce =
2020-08-25 23:57:08 +00:00
specifiers . reduce (
2024-03-28 02:25:32 +00:00
function ( _ref3 , specifier ) { var _ref4 = _slicedToArray ( _ref3 , 3 ) , result = _ref4 [ 0 ] , needsComma = _ref4 [ 1 ] , existingIdentifiers = _ref4 [ 2 ] ;
var isTypeSpecifier = specifier . importNode . importKind === 'type' ;
var preferInline = context . options [ 0 ] && context . options [ 0 ] [ 'prefer-inline' ] ;
// a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well.
if ( preferInline && ( ! typescriptPkg || ! _semver2 [ 'default' ] . satisfies ( typescriptPkg . version , '>= 4.5' ) ) ) {
throw new Error ( 'Your version of TypeScript does not support inline type imports.' ) ;
}
// Add *only* the new identifiers that don't already exist, and track any new identifiers so we don't add them again in the next loop
var _specifier$identifier = specifier . identifiers . reduce ( function ( _ref5 , cur ) { var _ref6 = _slicedToArray ( _ref5 , 2 ) , text = _ref6 [ 0 ] , set = _ref6 [ 1 ] ;
var trimmed = cur . trim ( ) ; // Trim whitespace before/after to compare to our set of existing identifiers
var curWithType = trimmed . length > 0 && preferInline && isTypeSpecifier ? 'type ' + String ( cur ) : cur ;
if ( existingIdentifiers . has ( trimmed ) ) {
return [ text , set ] ;
}
return [ text . length > 0 ? String ( text ) + ',' + String ( curWithType ) : curWithType , set . add ( trimmed ) ] ;
} , [ '' , existingIdentifiers ] ) , _specifier$identifier2 = _slicedToArray ( _specifier$identifier , 2 ) , specifierText = _specifier$identifier2 [ 0 ] , updatedExistingIdentifiers = _specifier$identifier2 [ 1 ] ;
2020-08-25 23:57:08 +00:00
return [
2024-03-28 02:25:32 +00:00
needsComma && ! specifier . isEmpty && specifierText . length > 0 ? String (
result ) + ',' + String ( specifierText ) : '' + String (
result ) + String ( specifierText ) ,
specifier . isEmpty ? needsComma : true ,
updatedExistingIdentifiers ] ;
2020-08-25 23:57:08 +00:00
} ,
2024-03-28 02:25:32 +00:00
[ '' , ! firstHasTrailingComma && ! firstIsEmpty , firstExistingIdentifiers ] ) , _specifiers$reduce2 = _slicedToArray ( _specifiers$reduce , 1 ) , specifiersText = _specifiers$reduce2 [ 0 ] ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var fixes = [ ] ;
2020-08-25 23:57:08 +00:00
if ( shouldAddDefault && openBrace == null && shouldAddSpecifiers ) {
// `import './foo'` → `import def, {...} from './foo'`
fixes . push (
2022-11-10 10:43:16 +00:00
fixer . insertTextAfter ( firstToken , ' ' + String ( defaultImportName ) + ', {' + String ( specifiersText ) + '} from' ) ) ;
2020-08-25 23:57:08 +00:00
} else if ( shouldAddDefault && openBrace == null && ! shouldAddSpecifiers ) {
// `import './foo'` → `import def from './foo'`
2022-11-10 10:43:16 +00:00
fixes . push ( fixer . insertTextAfter ( firstToken , ' ' + String ( defaultImportName ) + ' from' ) ) ;
2020-08-25 23:57:08 +00:00
} else if ( shouldAddDefault && openBrace != null && closeBrace != null ) {
// `import {...} from './foo'` → `import def, {...} from './foo'`
2022-11-10 10:43:16 +00:00
fixes . push ( fixer . insertTextAfter ( firstToken , ' ' + String ( defaultImportName ) + ',' ) ) ;
2020-08-25 23:57:08 +00:00
if ( shouldAddSpecifiers ) {
// `import def, {...} from './foo'` → `import def, {..., ...} from './foo'`
fixes . push ( fixer . insertTextBefore ( closeBrace , specifiersText ) ) ;
}
} else if ( ! shouldAddDefault && openBrace == null && shouldAddSpecifiers ) {
if ( first . specifiers . length === 0 ) {
// `import './foo'` → `import {...} from './foo'`
2022-11-10 10:43:16 +00:00
fixes . push ( fixer . insertTextAfter ( firstToken , ' {' + String ( specifiersText ) + '} from' ) ) ;
2020-08-25 23:57:08 +00:00
} else {
// `import def from './foo'` → `import def, {...} from './foo'`
2022-11-10 10:43:16 +00:00
fixes . push ( fixer . insertTextAfter ( first . specifiers [ 0 ] , ', {' + String ( specifiersText ) + '}' ) ) ;
2020-08-25 23:57:08 +00:00
}
} else if ( ! shouldAddDefault && openBrace != null && closeBrace != null ) {
// `import {...} './foo'` → `import {..., ...} from './foo'`
fixes . push ( fixer . insertTextBefore ( closeBrace , specifiersText ) ) ;
}
// Remove imports whose specifiers have been moved into the first import.
2022-11-10 10:43:16 +00:00
var _iteratorNormalCompletion3 = true ; var _didIteratorError3 = false ; var _iteratorError3 = undefined ; try { for ( var _iterator3 = specifiers [ Symbol . iterator ] ( ) , _step3 ; ! ( _iteratorNormalCompletion3 = ( _step3 = _iterator3 . next ( ) ) . done ) ; _iteratorNormalCompletion3 = true ) { var specifier = _step3 . value ;
var importNode = specifier . importNode ;
fixes . push ( fixer . remove ( importNode ) ) ;
var charAfterImportRange = [ importNode . range [ 1 ] , importNode . range [ 1 ] + 1 ] ;
var charAfterImport = sourceCode . text . substring ( charAfterImportRange [ 0 ] , charAfterImportRange [ 1 ] ) ;
if ( charAfterImport === '\n' ) {
fixes . push ( fixer . removeRange ( charAfterImportRange ) ) ;
}
}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
// Remove imports whose default import has been moved to the first import,
// and side-effect-only imports that are unnecessary due to the first
// import.
} catch ( err ) { _didIteratorError3 = true ; _iteratorError3 = err ; } finally { try { if ( ! _iteratorNormalCompletion3 && _iterator3 [ 'return' ] ) { _iterator3 [ 'return' ] ( ) ; } } finally { if ( _didIteratorError3 ) { throw _iteratorError3 ; } } } var _iteratorNormalCompletion4 = true ; var _didIteratorError4 = false ; var _iteratorError4 = undefined ; try { for ( var _iterator4 = unnecessaryImports [ Symbol . iterator ] ( ) , _step4 ; ! ( _iteratorNormalCompletion4 = ( _step4 = _iterator4 . next ( ) ) . done ) ; _iteratorNormalCompletion4 = true ) { var node = _step4 . value ;
fixes . push ( fixer . remove ( node ) ) ;
var charAfterImportRange = [ node . range [ 1 ] , node . range [ 1 ] + 1 ] ;
var charAfterImport = sourceCode . text . substring ( charAfterImportRange [ 0 ] , charAfterImportRange [ 1 ] ) ;
if ( charAfterImport === '\n' ) {
fixes . push ( fixer . removeRange ( charAfterImportRange ) ) ;
}
} } catch ( err ) { _didIteratorError4 = true ; _iteratorError4 = err ; } finally { try { if ( ! _iteratorNormalCompletion4 && _iterator4 [ 'return' ] ) { _iterator4 [ 'return' ] ( ) ; } } finally { if ( _didIteratorError4 ) { throw _iteratorError4 ; } } }
2020-08-25 23:57:08 +00:00
return fixes ;
} ;
}
function isPunctuator ( node , value ) {
return node . type === 'Punctuator' && node . value === value ;
}
// Get the name of the default import of `node`, if any.
function getDefaultImportName ( node ) {
2022-11-10 10:43:16 +00:00
var defaultSpecifier = node . specifiers .
find ( function ( specifier ) { return specifier . type === 'ImportDefaultSpecifier' ; } ) ;
2020-08-25 23:57:08 +00:00
return defaultSpecifier != null ? defaultSpecifier . local . name : undefined ;
}
// Checks whether `node` has a namespace import.
function hasNamespace ( node ) {
2022-11-10 10:43:16 +00:00
var specifiers = node . specifiers .
filter ( function ( specifier ) { return specifier . type === 'ImportNamespaceSpecifier' ; } ) ;
2020-08-25 23:57:08 +00:00
return specifiers . length > 0 ;
}
// Checks whether `node` has any non-default specifiers.
function hasSpecifiers ( node ) {
2022-11-10 10:43:16 +00:00
var specifiers = node . specifiers .
filter ( function ( specifier ) { return specifier . type === 'ImportSpecifier' ; } ) ;
2020-08-25 23:57:08 +00:00
return specifiers . length > 0 ;
}
// It's not obvious what the user wants to do with comments associated with
// duplicate imports, so skip imports with comments when autofixing.
function hasProblematicComments ( node , sourceCode ) {
return (
hasCommentBefore ( node , sourceCode ) ||
hasCommentAfter ( node , sourceCode ) ||
hasCommentInsideNonSpecifiers ( node , sourceCode ) ) ;
}
// Checks whether `node` has a comment (that ends) on the previous line or on
// the same line as `node` (starts).
function hasCommentBefore ( node , sourceCode ) {
return sourceCode . getCommentsBefore ( node ) .
2022-11-10 10:43:16 +00:00
some ( function ( comment ) { return comment . loc . end . line >= node . loc . start . line - 1 ; } ) ;
2020-08-25 23:57:08 +00:00
}
// Checks whether `node` has a comment (that starts) on the same line as `node`
// (ends).
function hasCommentAfter ( node , sourceCode ) {
return sourceCode . getCommentsAfter ( node ) .
2022-11-10 10:43:16 +00:00
some ( function ( comment ) { return comment . loc . start . line === node . loc . end . line ; } ) ;
2020-08-25 23:57:08 +00:00
}
// Checks whether `node` has any comments _inside,_ except inside the `{...}`
// part (if any).
function hasCommentInsideNonSpecifiers ( node , sourceCode ) {
2022-11-10 10:43:16 +00:00
var tokens = sourceCode . getTokens ( node ) ;
var openBraceIndex = tokens . findIndex ( function ( token ) { return isPunctuator ( token , '{' ) ; } ) ;
var closeBraceIndex = tokens . findIndex ( function ( token ) { return isPunctuator ( token , '}' ) ; } ) ;
2020-08-25 23:57:08 +00:00
// Slice away the first token, since we're no looking for comments _before_
// `node` (only inside). If there's a `{...}` part, look for comments before
// the `{`, but not before the `}` (hence the `+1`s).
2022-11-10 10:43:16 +00:00
var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ?
2020-08-25 23:57:08 +00:00
tokens . slice ( 1 , openBraceIndex + 1 ) . concat ( tokens . slice ( closeBraceIndex + 1 ) ) :
tokens . slice ( 1 ) ;
2022-11-10 10:43:16 +00:00
return someTokens . some ( function ( token ) { return sourceCode . getCommentsBefore ( token ) . length > 0 ; } ) ;
2020-08-25 23:57:08 +00:00
}
module . exports = {
meta : {
type : 'problem' ,
docs : {
2024-03-28 02:25:32 +00:00
category : 'Style guide' ,
description : 'Forbid repeated import of the same module in multiple places.' ,
2022-11-10 10:43:16 +00:00
url : ( 0 , _docsUrl2 [ 'default' ] ) ( 'no-duplicates' ) } ,
2020-08-25 23:57:08 +00:00
fixable : 'code' ,
schema : [
{
type : 'object' ,
properties : {
considerQueryString : {
2024-03-28 02:25:32 +00:00
type : 'boolean' } ,
'prefer-inline' : {
2020-08-25 23:57:08 +00:00
type : 'boolean' } } ,
additionalProperties : false } ] } ,
2022-11-10 10:43:16 +00:00
create : function ( ) { function create ( context ) {
// Prepare the resolver from options.
var considerQueryStringOption = context . options [ 0 ] &&
2024-03-28 02:25:32 +00:00
context . options [ 0 ] . considerQueryString ;
2022-11-10 10:43:16 +00:00
var defaultResolver = function ( ) { function defaultResolver ( sourcePath ) { return ( 0 , _resolve2 [ 'default' ] ) ( sourcePath , context ) || sourcePath ; } return defaultResolver ; } ( ) ;
var resolver = considerQueryStringOption ? function ( sourcePath ) {
var parts = sourcePath . match ( /^([^?]*)\?(.*)$/ ) ;
if ( ! parts ) {
return defaultResolver ( sourcePath ) ;
}
2024-03-28 02:25:32 +00:00
return String ( defaultResolver ( parts [ 1 ] ) ) + '?' + String ( parts [ 2 ] ) ;
2022-11-10 10:43:16 +00:00
} : defaultResolver ;
var moduleMaps = new Map ( ) ;
function getImportMap ( n ) {
if ( ! moduleMaps . has ( n . parent ) ) {
moduleMaps . set ( n . parent , {
imported : new Map ( ) ,
nsImported : new Map ( ) ,
defaultTypesImported : new Map ( ) ,
namedTypesImported : new Map ( ) } ) ;
2020-08-25 23:57:08 +00:00
}
2022-11-10 10:43:16 +00:00
var map = moduleMaps . get ( n . parent ) ;
2024-03-28 02:25:32 +00:00
var preferInline = context . options [ 0 ] && context . options [ 0 ] [ 'prefer-inline' ] ;
if ( ! preferInline && n . importKind === 'type' ) {
2022-11-10 10:43:16 +00:00
return n . specifiers . length > 0 && n . specifiers [ 0 ] . type === 'ImportDefaultSpecifier' ? map . defaultTypesImported : map . namedTypesImported ;
}
2024-03-28 02:25:32 +00:00
if ( ! preferInline && n . specifiers . some ( function ( spec ) { return spec . importKind === 'type' ; } ) ) {
return map . namedTypesImported ;
}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
return hasNamespace ( n ) ? map . nsImported : map . imported ;
}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
return {
ImportDeclaration : function ( ) { function ImportDeclaration ( n ) {
// resolved path will cover aliased duplicates
var resolvedPath = resolver ( n . source . value ) ;
var importMap = getImportMap ( n ) ;
if ( importMap . has ( resolvedPath ) ) {
importMap . get ( resolvedPath ) . push ( n ) ;
} else {
importMap . set ( resolvedPath , [ n ] ) ;
}
} return ImportDeclaration ; } ( ) ,
'Program:exit' : function ( ) { function ProgramExit ( ) { var _iteratorNormalCompletion5 = true ; var _didIteratorError5 = false ; var _iteratorError5 = undefined ; try {
for ( var _iterator5 = moduleMaps . values ( ) [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) { var map = _step5 . value ;
checkImports ( map . imported , context ) ;
checkImports ( map . nsImported , context ) ;
checkImports ( map . defaultTypesImported , context ) ;
checkImports ( map . namedTypesImported , context ) ;
} } catch ( err ) { _didIteratorError5 = true ; _iteratorError5 = err ; } finally { try { if ( ! _iteratorNormalCompletion5 && _iterator5 [ 'return' ] ) { _iterator5 [ 'return' ] ( ) ; } } finally { if ( _didIteratorError5 ) { throw _iteratorError5 ; } } }
} return ProgramExit ; } ( ) } ;
} return create ; } ( ) } ;
2024-03-28 02:25:32 +00:00
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJjb25jYXQiLCJ4IiwiZ2V0RGVmYXVsdEltcG9ydE5hbWUiLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsImZpbHRlciIsInNwZWNpZmllcnMiLCJtYXAiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwidG9rZW4iLCJpc1B1bmN0dWF0b3IiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInNsaWNlIiwicmFuZ2UiLCJzcGxpdCIsImlzRW1wdHkiLCJoYXNTcGVjaWZpZXJzIiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNvbWUiLCJzcGVjaWZpZXIiLCJzaG91bGRBZGREZWZhdWx0Iiwic2hvdWxkQWRkU3BlY2lmaWVycyIsInNob3VsZFJlbW92ZVVubmVjZXNzYXJ5IiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwicHJlZmVySW5saW5lIiwib3B0aW9ucyIsInNlbXZlciIsInNhdGlzZmllcyIsInZlcnNpb24iLCJFcnJvciIsImN1ciIsInNldCIsInRyaW1tZWQiLCJjdXJXaXRoVHlwZSIsImhhcyIsImFkZCIsInNwZWNpZmllclRleHQiLCJ1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVycyIsInNwZWNpZmllcnNUZXh0IiwiZml4ZXMiLCJwdXNoIiwiaW5zZXJ0VGV4dEFmdGVyIiwiaW5zZXJ0VGV4dEJlZm9yZSIsInJlbW92ZSIsImNoYXJBZnRlckltcG9ydFJhbmdlIiwiY2hhckFmdGVySW1wb3J0Iiwic3Vic3RyaW5nIiwicmVtb3ZlUmFuZ2UiLCJ2YWx1ZSIsInR5cGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwibG9jYWwiLCJuYW1lIiwiaGFzQ29tbWVudEJlZm9yZSIsImhhc0NvbW1lbnRBZnRlciIsImhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzIiwiY29tbWVudCIsImxvYyIsImVuZCIsImxpbmUiLCJzdGFydCIsImdldENvbW1lbnRzQWZ0ZXIiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsImNsb3NlQnJhY2VJbmRleCIsInNvbWVUb2tlbnMiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwiZGVmYXVsdFJlc29sdmVyIiwic291cmNlUGF0aCIsInJlc29sdmVyIiwicGFydHMiLCJtYXRjaCIsIm1vZHVsZU1hcHMiLCJNYXAiLCJnZXRJbXBvcnRNYXAiLCJuIiwicGFyZW50IiwibnNJbXBvcnRlZCIsImRlZmF1bHRUeXBlc0ltcG9ydGVkIiwibmFtZWRUeXBlc0ltcG9ydGVkIiwiZ2V0Iiwic3BlYyIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EsZ0M7QUFDQSx5RDs7QUFFQSxxQzs7QUFFQSxJQUFJQSxzQkFBSjtBQUNBLElBQUk7QUFDRkEsa0JBQWdCQyxRQUFRLHlCQUFSLENBQWhCLENBREUsQ0FDa0Q7QUFDckQsQ0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVSxDQUFFLElBQU07O0FBRXBCLFNBQVNDLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUN2Qyx5QkFBOEJELFNBQVNFLE9BQVQsRUFBOUIsOEhBQWtELGdFQUF0Q0MsT0FBc0MsZ0JBQTlCQyxLQUE4QjtBQUNoRCxVQUFJQSxNQUFNQyxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsWUFBTUMsd0JBQWNILE9BQWQsaUNBQU4sQ0FEb0I7QUFFS0MsYUFGTCxFQUViRyxLQUZhLGFBRUhDLElBRkc7QUFHcEIsWUFBTUMsYUFBYVIsUUFBUVMsYUFBUixFQUFuQjtBQUNBLFlBQU1DLE1BQU1DLE9BQU9MLEtBQVAsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsRUFBZ0NSLE9BQWhDLENBQVo7O0FBRUFBLGdCQUFRWSxNQUFSLENBQWU7QUFDYkMsZ0JBQU1QLE1BQU1RLE1BREM7QUFFYlQsMEJBRmE7QUFHYkssa0JBSGEsQ0FHUjtBQUhRLFNBQWYsRUFOb0I7O0FBWXBCLGdDQUFtQkgsSUFBbkIsbUlBQXlCLEtBQWRNLElBQWM7QUFDdkJiLG9CQUFRWSxNQUFSLENBQWU7QUFDYkMsb0JBQU1BLEtBQUtDLE1BREU7QUFFYlQsOEJBRmEsRUFBZjs7QUFJRCxXQWpCbUI7QUFrQnJCO0FBQ0YsS0FyQnNDO0FBc0J4Qzs7QUFFRCxTQUFTTSxNQUFULENBQWdCTCxLQUFoQixFQUF1QkMsSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDUixPQUF6QyxFQUFrRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJLE9BQU9RLFdBQVdPLGlCQUFsQixLQUF3QyxVQUE1QyxFQUF3RDtBQUN0RCxXQUFPQyxTQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJQyx1QkFBdUJYLEtBQXZCLEVBQThCRSxVQUE5QixLQUE2Q1UsYUFBYVosS0FBYixDQUFqRCxFQUFzRTtBQUNwRSxXQUFPVSxTQUFQO0FBQ0Q7O0FBRUQsTUFBTUcscUJBQXFCLElBQUlDLEdBQUo7QUFDekIsbUNBQVEsR0FBR0MsTUFBSCxDQUFVZixLQUFWLEVBQWlCQyxRQUFRLEVBQXpCLENBQVIsRUFBc0MsVUFBQ2UsQ0FBRCxVQUFPQyx