mirror of
				https://github.com/docker/login-action.git
				synced 2025-10-31 14:20:54 +00:00 
			
		
		
		
	
				commit
				
					
						4e3c9375bb
					
				
			
		
					 17 changed files with 2541 additions and 56040 deletions
				
			
		|  | @ -1,3 +1,4 @@ | |||
| import {beforeEach, describe, expect, jest, test} from '@jest/globals'; | ||||
| import {AuthorizationData} from '@aws-sdk/client-ecr'; | ||||
| import * as aws from '../src/aws'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import {expect, test} from '@jest/globals'; | ||||
| import {getInputs} from '../src/context'; | ||||
| 
 | ||||
| test('with password and username getInputs does not throw error', async () => { | ||||
|  |  | |||
|  | @ -1,20 +1,19 @@ | |||
| import {expect, jest, test} from '@jest/globals'; | ||||
| import {loginStandard, logout} from '../src/docker'; | ||||
| 
 | ||||
| import * as path from 'path'; | ||||
| 
 | ||||
| import * as exec from '@actions/exec'; | ||||
| 
 | ||||
| process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner'); | ||||
| 
 | ||||
| test('loginStandard calls exec', async () => { | ||||
|   const execSpy: jest.SpyInstance = jest.spyOn(exec, 'getExecOutput'); | ||||
|   execSpy.mockImplementation(() => | ||||
|     Promise.resolve({ | ||||
|   // @ts-ignore
 | ||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { | ||||
|     return { | ||||
|       exitCode: expect.any(Number), | ||||
|       stdout: expect.any(Function), | ||||
|       stderr: expect.any(Function) | ||||
|     }) | ||||
|   ); | ||||
|     }; | ||||
|   }); | ||||
| 
 | ||||
|   const username: string = 'dbowie'; | ||||
|   const password: string = 'groundcontrol'; | ||||
|  | @ -30,14 +29,14 @@ test('loginStandard calls exec', async () => { | |||
| }); | ||||
| 
 | ||||
| test('logout calls exec', async () => { | ||||
|   const execSpy: jest.SpyInstance = jest.spyOn(exec, 'getExecOutput'); | ||||
|   execSpy.mockImplementation(() => | ||||
|     Promise.resolve({ | ||||
|   // @ts-ignore
 | ||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { | ||||
|     return { | ||||
|       exitCode: expect.any(Number), | ||||
|       stdout: expect.any(Function), | ||||
|       stderr: expect.any(Function) | ||||
|     }) | ||||
|   ); | ||||
|     }; | ||||
|   }); | ||||
| 
 | ||||
|   const registry: string = 'https://ghcr.io'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| import {expect, jest, test} from '@jest/globals'; | ||||
| import osm = require('os'); | ||||
| 
 | ||||
| import {run} from '../src/main'; | ||||
|  | @ -7,26 +8,20 @@ import * as stateHelper from '../src/state-helper'; | |||
| import * as core from '@actions/core'; | ||||
| 
 | ||||
| test('errors without username and password', async () => { | ||||
|   const platSpy = jest.spyOn(osm, 'platform'); | ||||
|   platSpy.mockImplementation(() => 'linux'); | ||||
|   const platSpy = jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); | ||||
| 
 | ||||
|   process.env['INPUT_LOGOUT'] = 'true'; // default value
 | ||||
| 
 | ||||
|   const coreSpy: jest.SpyInstance = jest.spyOn(core, 'setFailed'); | ||||
|   const coreSpy = jest.spyOn(core, 'setFailed'); | ||||
| 
 | ||||
|   await run(); | ||||
| 
 | ||||
|   expect(coreSpy).toHaveBeenCalledWith('Username and password required'); | ||||
| }); | ||||
| 
 | ||||
| test('successful with username and password', async () => { | ||||
|   const platSpy = jest.spyOn(osm, 'platform'); | ||||
|   platSpy.mockImplementation(() => 'linux'); | ||||
| 
 | ||||
|   const setRegistrySpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setRegistry'); | ||||
|   const setLogoutSpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setLogout'); | ||||
|   const dockerSpy: jest.SpyInstance = jest.spyOn(docker, 'login'); | ||||
|   dockerSpy.mockImplementation(() => {}); | ||||
|   const platSpy = jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); | ||||
|   const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry'); | ||||
|   const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout'); | ||||
|   const dockerSpy = jest.spyOn(docker, 'login').mockImplementation(jest.fn()); | ||||
| 
 | ||||
|   const username: string = 'dbowie'; | ||||
|   process.env[`INPUT_USERNAME`] = username; | ||||
|  | @ -48,13 +43,11 @@ test('successful with username and password', async () => { | |||
| }); | ||||
| 
 | ||||
| test('calls docker login', async () => { | ||||
|   const platSpy = jest.spyOn(osm, 'platform'); | ||||
|   platSpy.mockImplementation(() => 'linux'); | ||||
| 
 | ||||
|   const setRegistrySpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setRegistry'); | ||||
|   const setLogoutSpy: jest.SpyInstance = jest.spyOn(stateHelper, 'setLogout'); | ||||
|   const dockerSpy: jest.SpyInstance = jest.spyOn(docker, 'login'); | ||||
|   dockerSpy.mockImplementation(() => {}); | ||||
|   const platSpy = jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); | ||||
|   const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry'); | ||||
|   const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout'); | ||||
|   const dockerSpy = jest.spyOn(docker, 'login'); | ||||
|   dockerSpy.mockImplementation(jest.fn()); | ||||
| 
 | ||||
|   const username: string = 'dbowie'; | ||||
|   process.env[`INPUT_USERNAME`] = username; | ||||
|  |  | |||
|  | @ -26,6 +26,6 @@ inputs: | |||
|     required: false | ||||
| 
 | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   using: 'node16' | ||||
|   main: 'dist/index.js' | ||||
|   post: 'dist/index.js' | ||||
|  |  | |||
							
								
								
									
										984
									
								
								dist/bridge.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										984
									
								
								dist/bridge.js
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,984 +0,0 @@ | |||
| /******/ (() => { // webpackBootstrap
 | ||||
| /******/ 	"use strict"; | ||||
| /******/ 	var __webpack_modules__ = ({ | ||||
| 
 | ||||
| /***/ 989: | ||||
| /***/ ((__unused_webpack_module, exports) => { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * __        ___    ____  _   _ ___ _   _  ____ | ||||
|  * \ \      / / \  |  _ \| \ | |_ _| \ | |/ ___| | ||||
|  *  \ \ /\ / / _ \ | |_) |  \| || ||  \| | |  _ | ||||
|  *   \ V  V / ___ \|  _ <| |\  || || |\  | |_| | | ||||
|  *    \_/\_/_/   \_\_| \_\_| \_|___|_| \_|\____| | ||||
|  * | ||||
|  * This file is critical for vm2. It implements the bridge between the host and the sandbox. | ||||
|  * If you do not know exactly what you are doing, you should NOT edit this file. | ||||
|  * | ||||
|  * The file is loaded in the host and sandbox to handle objects in both directions. | ||||
|  * This is done to ensure that RangeErrors are from the correct context. | ||||
|  * The boundary between the sandbox and host might throw RangeErrors from both contexts. | ||||
|  * Therefore, thisFromOther and friends can handle objects from both domains. | ||||
|  * | ||||
|  * Method parameters have comments to tell from which context they came. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| const globalsList = [ | ||||
| 	'Number', | ||||
| 	'String', | ||||
| 	'Boolean', | ||||
| 	'Date', | ||||
| 	'RegExp', | ||||
| 	'Map', | ||||
| 	'WeakMap', | ||||
| 	'Set', | ||||
| 	'WeakSet', | ||||
| 	'Promise', | ||||
| 	'Function' | ||||
| ]; | ||||
| 
 | ||||
| const errorsList = [ | ||||
| 	'RangeError', | ||||
| 	'ReferenceError', | ||||
| 	'SyntaxError', | ||||
| 	'TypeError', | ||||
| 	'EvalError', | ||||
| 	'URIError', | ||||
| 	'Error' | ||||
| ]; | ||||
| 
 | ||||
| const OPNA = 'Operation not allowed on contextified object.'; | ||||
| 
 | ||||
| const thisGlobalPrototypes = { | ||||
| 	__proto__: null, | ||||
| 	Object: Object.prototype, | ||||
| 	Array: Array.prototype | ||||
| }; | ||||
| 
 | ||||
| for (let i = 0; i < globalsList.length; i++) { | ||||
| 	const key = globalsList[i]; | ||||
| 	const g = global[key]; | ||||
| 	if (g) thisGlobalPrototypes[key] = g.prototype; | ||||
| } | ||||
| 
 | ||||
| for (let i = 0; i < errorsList.length; i++) { | ||||
| 	const key = errorsList[i]; | ||||
| 	const g = global[key]; | ||||
| 	if (g) thisGlobalPrototypes[key] = g.prototype; | ||||
| } | ||||
| 
 | ||||
| const { | ||||
| 	getPrototypeOf: thisReflectGetPrototypeOf, | ||||
| 	setPrototypeOf: thisReflectSetPrototypeOf, | ||||
| 	defineProperty: thisReflectDefineProperty, | ||||
| 	deleteProperty: thisReflectDeleteProperty, | ||||
| 	getOwnPropertyDescriptor: thisReflectGetOwnPropertyDescriptor, | ||||
| 	isExtensible: thisReflectIsExtensible, | ||||
| 	preventExtensions: thisReflectPreventExtensions, | ||||
| 	apply: thisReflectApply, | ||||
| 	construct: thisReflectConstruct, | ||||
| 	set: thisReflectSet, | ||||
| 	get: thisReflectGet, | ||||
| 	has: thisReflectHas, | ||||
| 	ownKeys: thisReflectOwnKeys, | ||||
| 	enumerate: thisReflectEnumerate, | ||||
| } = Reflect; | ||||
| 
 | ||||
| const thisObject = Object; | ||||
| const { | ||||
| 	freeze: thisObjectFreeze, | ||||
| 	prototype: thisObjectPrototype | ||||
| } = thisObject; | ||||
| const thisObjectHasOwnProperty = thisObjectPrototype.hasOwnProperty; | ||||
| const ThisProxy = Proxy; | ||||
| const ThisWeakMap = WeakMap; | ||||
| const { | ||||
| 	get: thisWeakMapGet, | ||||
| 	set: thisWeakMapSet | ||||
| } = ThisWeakMap.prototype; | ||||
| const ThisMap = Map; | ||||
| const thisMapGet = ThisMap.prototype.get; | ||||
| const thisMapSet = ThisMap.prototype.set; | ||||
| const thisFunction = Function; | ||||
| const thisFunctionBind = thisFunction.prototype.bind; | ||||
| const thisArrayIsArray = Array.isArray; | ||||
| const thisErrorCaptureStackTrace = Error.captureStackTrace; | ||||
| 
 | ||||
| const thisSymbolToString = Symbol.prototype.toString; | ||||
| const thisSymbolToStringTag = Symbol.toStringTag; | ||||
| 
 | ||||
| /** | ||||
|  * VMError. | ||||
|  * | ||||
|  * @public | ||||
|  * @extends {Error} | ||||
|  */ | ||||
| class VMError extends Error { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Create VMError instance. | ||||
| 	 * | ||||
| 	 * @public | ||||
| 	 * @param {string} message - Error message. | ||||
| 	 * @param {string} code - Error code. | ||||
| 	 */ | ||||
| 	constructor(message, code) { | ||||
| 		super(message); | ||||
| 
 | ||||
| 		this.name = 'VMError'; | ||||
| 		this.code = code; | ||||
| 
 | ||||
| 		thisErrorCaptureStackTrace(this, this.constructor); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| thisGlobalPrototypes['VMError'] = VMError.prototype; | ||||
| 
 | ||||
| function thisUnexpected() { | ||||
| 	return new VMError('Unexpected'); | ||||
| } | ||||
| 
 | ||||
| if (!thisReflectSetPrototypeOf(exports, null)) throw thisUnexpected(); | ||||
| 
 | ||||
| function thisSafeGetOwnPropertyDescriptor(obj, key) { | ||||
| 	const desc = thisReflectGetOwnPropertyDescriptor(obj, key); | ||||
| 	if (!desc) return desc; | ||||
| 	if (!thisReflectSetPrototypeOf(desc, null)) throw thisUnexpected(); | ||||
| 	return desc; | ||||
| } | ||||
| 
 | ||||
| function thisThrowCallerCalleeArgumentsAccess(key) { | ||||
| 	'use strict'; | ||||
| 	thisThrowCallerCalleeArgumentsAccess[key]; | ||||
| 	return thisUnexpected(); | ||||
| } | ||||
| 
 | ||||
| function thisIdMapping(factory, other) { | ||||
| 	return other; | ||||
| } | ||||
| 
 | ||||
| const thisThrowOnKeyAccessHandler = thisObjectFreeze({ | ||||
| 	__proto__: null, | ||||
| 	get(target, key, receiver) { | ||||
| 		if (typeof key === 'symbol') { | ||||
| 			key = thisReflectApply(thisSymbolToString, key, []); | ||||
| 		} | ||||
| 		throw new VMError(`Unexpected access to key '${key}'`); | ||||
| 	} | ||||
| }); | ||||
| 
 | ||||
| const emptyForzenObject = thisObjectFreeze({ | ||||
| 	__proto__: null | ||||
| }); | ||||
| 
 | ||||
| const thisThrowOnKeyAccess = new ThisProxy(emptyForzenObject, thisThrowOnKeyAccessHandler); | ||||
| 
 | ||||
| function SafeBase() {} | ||||
| 
 | ||||
| if (!thisReflectDefineProperty(SafeBase, 'prototype', { | ||||
| 	__proto__: null, | ||||
| 	value: thisThrowOnKeyAccess | ||||
| })) throw thisUnexpected(); | ||||
| 
 | ||||
| function SHARED_FUNCTION() {} | ||||
| 
 | ||||
| const TEST_PROXY_HANDLER = thisObjectFreeze({ | ||||
| 	__proto__: thisThrowOnKeyAccess, | ||||
| 	construct() { | ||||
| 		return this; | ||||
| 	} | ||||
| }); | ||||
| 
 | ||||
| function thisIsConstructor(obj) { | ||||
| 	// Note: obj@any(unsafe)
 | ||||
| 	const Func = new ThisProxy(obj, TEST_PROXY_HANDLER); | ||||
| 	try { | ||||
| 		// eslint-disable-next-line no-new
 | ||||
| 		new Func(); | ||||
| 		return true; | ||||
| 	} catch (e) { | ||||
| 		return false; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function thisCreateTargetObject(obj, proto) { | ||||
| 	// Note: obj@any(unsafe) proto@any(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 	let base; | ||||
| 	if (typeof obj === 'function') { | ||||
| 		if (thisIsConstructor(obj)) { | ||||
| 			// Bind the function since bound functions do not have a prototype property.
 | ||||
| 			base = thisReflectApply(thisFunctionBind, SHARED_FUNCTION, [null]); | ||||
| 		} else { | ||||
| 			base = () => {}; | ||||
| 		} | ||||
| 	} else if (thisArrayIsArray(obj)) { | ||||
| 		base = []; | ||||
| 	} else { | ||||
| 		return {__proto__: proto}; | ||||
| 	} | ||||
| 	if (!thisReflectSetPrototypeOf(base, proto)) throw thisUnexpected(); | ||||
| 	return base; | ||||
| } | ||||
| 
 | ||||
| function createBridge(otherInit, registerProxy) { | ||||
| 
 | ||||
| 	const mappingOtherToThis = new ThisWeakMap(); | ||||
| 	const protoMappings = new ThisMap(); | ||||
| 	const protoName = new ThisMap(); | ||||
| 
 | ||||
| 	function thisAddProtoMapping(proto, other, name) { | ||||
| 		// Note: proto@this(unsafe) other@other(unsafe) name@this(unsafe) throws@this(unsafe)
 | ||||
| 		thisReflectApply(thisMapSet, protoMappings, [proto, thisIdMapping]); | ||||
| 		thisReflectApply(thisMapSet, protoMappings, [other, | ||||
| 			(factory, object) => thisProxyOther(factory, object, proto)]); | ||||
| 		if (name) thisReflectApply(thisMapSet, protoName, [proto, name]); | ||||
| 	} | ||||
| 
 | ||||
| 	function thisAddProtoMappingFactory(protoFactory, other, name) { | ||||
| 		// Note: protoFactory@this(unsafe) other@other(unsafe) name@this(unsafe) throws@this(unsafe)
 | ||||
| 		let proto; | ||||
| 		thisReflectApply(thisMapSet, protoMappings, [other, | ||||
| 			(factory, object) => { | ||||
| 				if (!proto) { | ||||
| 					proto = protoFactory(); | ||||
| 					thisReflectApply(thisMapSet, protoMappings, [proto, thisIdMapping]); | ||||
| 					if (name) thisReflectApply(thisMapSet, protoName, [proto, name]); | ||||
| 				} | ||||
| 				return thisProxyOther(factory, object, proto); | ||||
| 			}]); | ||||
| 	} | ||||
| 
 | ||||
| 	const result = { | ||||
| 		__proto__: null, | ||||
| 		globalPrototypes: thisGlobalPrototypes, | ||||
| 		safeGetOwnPropertyDescriptor: thisSafeGetOwnPropertyDescriptor, | ||||
| 		fromArguments: thisFromOtherArguments, | ||||
| 		from: thisFromOther, | ||||
| 		fromWithFactory: thisFromOtherWithFactory, | ||||
| 		ensureThis: thisEnsureThis, | ||||
| 		mapping: mappingOtherToThis, | ||||
| 		connect: thisConnect, | ||||
| 		reflectSet: thisReflectSet, | ||||
| 		reflectGet: thisReflectGet, | ||||
| 		reflectDefineProperty: thisReflectDefineProperty, | ||||
| 		reflectDeleteProperty: thisReflectDeleteProperty, | ||||
| 		reflectApply: thisReflectApply, | ||||
| 		reflectConstruct: thisReflectConstruct, | ||||
| 		reflectHas: thisReflectHas, | ||||
| 		reflectOwnKeys: thisReflectOwnKeys, | ||||
| 		reflectEnumerate: thisReflectEnumerate, | ||||
| 		reflectGetPrototypeOf: thisReflectGetPrototypeOf, | ||||
| 		reflectIsExtensible: thisReflectIsExtensible, | ||||
| 		reflectPreventExtensions: thisReflectPreventExtensions, | ||||
| 		objectHasOwnProperty: thisObjectHasOwnProperty, | ||||
| 		weakMapSet: thisWeakMapSet, | ||||
| 		addProtoMapping: thisAddProtoMapping, | ||||
| 		addProtoMappingFactory: thisAddProtoMappingFactory, | ||||
| 		defaultFactory, | ||||
| 		protectedFactory, | ||||
| 		readonlyFactory, | ||||
| 		VMError | ||||
| 	}; | ||||
| 
 | ||||
| 	const isHost = typeof otherInit !== 'object'; | ||||
| 
 | ||||
| 	if (isHost) { | ||||
| 		otherInit = otherInit(result, registerProxy); | ||||
| 	} | ||||
| 
 | ||||
| 	result.other = otherInit; | ||||
| 
 | ||||
| 	const { | ||||
| 		globalPrototypes: otherGlobalPrototypes, | ||||
| 		safeGetOwnPropertyDescriptor: otherSafeGetOwnPropertyDescriptor, | ||||
| 		fromArguments: otherFromThisArguments, | ||||
| 		from: otherFromThis, | ||||
| 		mapping: mappingThisToOther, | ||||
| 		reflectSet: otherReflectSet, | ||||
| 		reflectGet: otherReflectGet, | ||||
| 		reflectDefineProperty: otherReflectDefineProperty, | ||||
| 		reflectDeleteProperty: otherReflectDeleteProperty, | ||||
| 		reflectApply: otherReflectApply, | ||||
| 		reflectConstruct: otherReflectConstruct, | ||||
| 		reflectHas: otherReflectHas, | ||||
| 		reflectOwnKeys: otherReflectOwnKeys, | ||||
| 		reflectEnumerate: otherReflectEnumerate, | ||||
| 		reflectGetPrototypeOf: otherReflectGetPrototypeOf, | ||||
| 		reflectIsExtensible: otherReflectIsExtensible, | ||||
| 		reflectPreventExtensions: otherReflectPreventExtensions, | ||||
| 		objectHasOwnProperty: otherObjectHasOwnProperty, | ||||
| 		weakMapSet: otherWeakMapSet | ||||
| 	} = otherInit; | ||||
| 
 | ||||
| 	function thisOtherHasOwnProperty(object, key) { | ||||
| 		// Note: object@other(safe) key@prim throws@this(unsafe)
 | ||||
| 		try { | ||||
| 			return otherReflectApply(otherObjectHasOwnProperty, object, [key]) === true; | ||||
| 		} catch (e) { // @other(unsafe)
 | ||||
| 			throw thisFromOther(e); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function thisDefaultGet(handler, object, key, desc) { | ||||
| 		// Note: object@other(unsafe) key@prim desc@other(safe)
 | ||||
| 		let ret; // @other(unsafe)
 | ||||
| 		if (desc.get || desc.set) { | ||||
| 			const getter = desc.get; | ||||
| 			if (!getter) return undefined; | ||||
| 			try { | ||||
| 				ret = otherReflectApply(getter, object, [key]); | ||||
| 			} catch (e) { | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 		} else { | ||||
| 			ret = desc.value; | ||||
| 		} | ||||
| 		return handler.fromOtherWithContext(ret); | ||||
| 	} | ||||
| 
 | ||||
| 	function otherFromThisIfAvailable(to, from, key) { | ||||
| 		// Note: to@other(safe) from@this(safe) key@prim throws@this(unsafe)
 | ||||
| 		if (!thisReflectApply(thisObjectHasOwnProperty, from, [key])) return false; | ||||
| 		try { | ||||
| 			to[key] = otherFromThis(from[key]); | ||||
| 		} catch (e) { // @other(unsafe)
 | ||||
| 			throw thisFromOther(e); | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	class BaseHandler extends SafeBase { | ||||
| 
 | ||||
| 		constructor(object) { | ||||
| 			// Note: object@other(unsafe) throws@this(unsafe)
 | ||||
| 			super(); | ||||
| 			this.object = object; | ||||
| 		} | ||||
| 
 | ||||
| 		getFactory() { | ||||
| 			return defaultFactory; | ||||
| 		} | ||||
| 
 | ||||
| 		fromOtherWithContext(other) { | ||||
| 			// Note: other@other(unsafe) throws@this(unsafe)
 | ||||
| 			return thisFromOtherWithFactory(this.getFactory(), other); | ||||
| 		} | ||||
| 
 | ||||
| 		doPreventExtensions(target, object, factory) { | ||||
| 			// Note: target@this(unsafe) object@other(unsafe) throws@this(unsafe)
 | ||||
| 			let keys; // @other(safe-array-of-prim)
 | ||||
| 			try { | ||||
| 				keys = otherReflectOwnKeys(object); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			for (let i = 0; i < keys.length; i++) { | ||||
| 				const key = keys[i]; // @prim
 | ||||
| 				let desc; | ||||
| 				try { | ||||
| 					desc = otherSafeGetOwnPropertyDescriptor(object, key); | ||||
| 				} catch (e) { // @other(unsafe)
 | ||||
| 					throw thisFromOther(e); | ||||
| 				} | ||||
| 				if (!desc) continue; | ||||
| 				if (!desc.configurable) { | ||||
| 					const current = thisSafeGetOwnPropertyDescriptor(target, key); | ||||
| 					if (current && !current.configurable) continue; | ||||
| 					if (desc.get || desc.set) { | ||||
| 						desc.get = this.fromOtherWithContext(desc.get); | ||||
| 						desc.set = this.fromOtherWithContext(desc.set); | ||||
| 					} else if (typeof object === 'function' && (key === 'caller' || key === 'callee' || key === 'arguments')) { | ||||
| 						desc.value = null; | ||||
| 					} else { | ||||
| 						desc.value = this.fromOtherWithContext(desc.value); | ||||
| 					} | ||||
| 				} else { | ||||
| 					if (desc.get || desc.set) { | ||||
| 						desc = { | ||||
| 							__proto__: null, | ||||
| 							configurable: true, | ||||
| 							enumerable: desc.enumerable, | ||||
| 							writable: true, | ||||
| 							value: null | ||||
| 						}; | ||||
| 					} else { | ||||
| 						desc.value = null; | ||||
| 					} | ||||
| 				} | ||||
| 				if (!thisReflectDefineProperty(target, key, desc)) throw thisUnexpected(); | ||||
| 			} | ||||
| 			if (!thisReflectPreventExtensions(target)) throw thisUnexpected(); | ||||
| 		} | ||||
| 
 | ||||
| 		get(target, key, receiver) { | ||||
| 			// Note: target@this(unsafe) key@prim receiver@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			switch (key) { | ||||
| 				case 'constructor': { | ||||
| 					const desc = otherSafeGetOwnPropertyDescriptor(object, key); | ||||
| 					if (desc) return thisDefaultGet(this, object, key, desc); | ||||
| 					const proto = thisReflectGetPrototypeOf(target); | ||||
| 					return proto === null ? undefined : proto.constructor; | ||||
| 				} | ||||
| 				case '__proto__': { | ||||
| 					const desc = otherSafeGetOwnPropertyDescriptor(object, key); | ||||
| 					if (desc) return thisDefaultGet(this, object, key, desc); | ||||
| 					return thisReflectGetPrototypeOf(target); | ||||
| 				} | ||||
| 				case thisSymbolToStringTag: | ||||
| 					if (!thisOtherHasOwnProperty(object, thisSymbolToStringTag)) { | ||||
| 						const proto = thisReflectGetPrototypeOf(target); | ||||
| 						const name = thisReflectApply(thisMapGet, protoName, [proto]); | ||||
| 						if (name) return name; | ||||
| 					} | ||||
| 					break; | ||||
| 				case 'arguments': | ||||
| 				case 'caller': | ||||
| 				case 'callee': | ||||
| 					if (thisOtherHasOwnProperty(object, key)) throw thisThrowCallerCalleeArgumentsAccess(key); | ||||
| 					break; | ||||
| 			} | ||||
| 			let ret; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				ret = otherReflectGet(object, key); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			return this.fromOtherWithContext(ret); | ||||
| 		} | ||||
| 
 | ||||
| 		set(target, key, value, receiver) { | ||||
| 			// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			if (key === '__proto__' && !thisOtherHasOwnProperty(object, key)) { | ||||
| 				return this.setPrototypeOf(target, value); | ||||
| 			} | ||||
| 			try { | ||||
| 				value = otherFromThis(value); | ||||
| 				return otherReflectSet(object, key, value) === true; | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		getPrototypeOf(target) { | ||||
| 			// Note: target@this(unsafe)
 | ||||
| 			return thisReflectGetPrototypeOf(target); | ||||
| 		} | ||||
| 
 | ||||
| 		setPrototypeOf(target, value) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			throw new VMError(OPNA); | ||||
| 		} | ||||
| 
 | ||||
| 		apply(target, context, args) { | ||||
| 			// Note: target@this(unsafe) context@this(unsafe) args@this(safe-array) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			let ret; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				context = otherFromThis(context); | ||||
| 				args = otherFromThisArguments(args); | ||||
| 				ret = otherReflectApply(object, context, args); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			return thisFromOther(ret); | ||||
| 		} | ||||
| 
 | ||||
| 		construct(target, args, newTarget) { | ||||
| 			// Note: target@this(unsafe) args@this(safe-array) newTarget@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			let ret; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				args = otherFromThisArguments(args); | ||||
| 				ret = otherReflectConstruct(object, args); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			return thisFromOtherWithFactory(this.getFactory(), ret, thisFromOther(object)); | ||||
| 		} | ||||
| 
 | ||||
| 		getOwnPropertyDescriptorDesc(target, prop, desc) { | ||||
| 			// Note: target@this(unsafe) prop@prim desc@other{safe} throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			if (desc && typeof object === 'function' && (prop === 'arguments' || prop === 'caller' || prop === 'callee')) desc.value = null; | ||||
| 			return desc; | ||||
| 		} | ||||
| 
 | ||||
| 		getOwnPropertyDescriptor(target, prop) { | ||||
| 			// Note: target@this(unsafe) prop@prim throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			let desc; // @other(safe)
 | ||||
| 			try { | ||||
| 				desc = otherSafeGetOwnPropertyDescriptor(object, prop); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 
 | ||||
| 			desc = this.getOwnPropertyDescriptorDesc(target, prop, desc); | ||||
| 
 | ||||
| 			if (!desc) return undefined; | ||||
| 
 | ||||
| 			let thisDesc; | ||||
| 			if (desc.get || desc.set) { | ||||
| 				thisDesc = { | ||||
| 					__proto__: null, | ||||
| 					get: this.fromOtherWithContext(desc.get), | ||||
| 					set: this.fromOtherWithContext(desc.set), | ||||
| 					enumerable: desc.enumerable === true, | ||||
| 					configurable: desc.configurable === true | ||||
| 				}; | ||||
| 			} else { | ||||
| 				thisDesc = { | ||||
| 					__proto__: null, | ||||
| 					value: this.fromOtherWithContext(desc.value), | ||||
| 					writable: desc.writable === true, | ||||
| 					enumerable: desc.enumerable === true, | ||||
| 					configurable: desc.configurable === true | ||||
| 				}; | ||||
| 			} | ||||
| 			if (!thisDesc.configurable) { | ||||
| 				const oldDesc = thisSafeGetOwnPropertyDescriptor(target, prop); | ||||
| 				if (!oldDesc || oldDesc.configurable || oldDesc.writable !== thisDesc.writable) { | ||||
| 					if (!thisReflectDefineProperty(target, prop, thisDesc)) throw thisUnexpected(); | ||||
| 				} | ||||
| 			} | ||||
| 			return thisDesc; | ||||
| 		} | ||||
| 
 | ||||
| 		definePropertyDesc(target, prop, desc) { | ||||
| 			// Note: target@this(unsafe) prop@prim desc@this(safe) throws@this(unsafe)
 | ||||
| 			return desc; | ||||
| 		} | ||||
| 
 | ||||
| 		defineProperty(target, prop, desc) { | ||||
| 			// Note: target@this(unsafe) prop@prim desc@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			if (!thisReflectSetPrototypeOf(desc, null)) throw thisUnexpected(); | ||||
| 
 | ||||
| 			desc = this.definePropertyDesc(target, prop, desc); | ||||
| 
 | ||||
| 			if (!desc) return false; | ||||
| 
 | ||||
| 			let otherDesc = {__proto__: null}; | ||||
| 			let hasFunc = true; | ||||
| 			let hasValue = true; | ||||
| 			let hasBasic = true; | ||||
| 			hasFunc &= otherFromThisIfAvailable(otherDesc, desc, 'get'); | ||||
| 			hasFunc &= otherFromThisIfAvailable(otherDesc, desc, 'set'); | ||||
| 			hasValue &= otherFromThisIfAvailable(otherDesc, desc, 'value'); | ||||
| 			hasValue &= otherFromThisIfAvailable(otherDesc, desc, 'writable'); | ||||
| 			hasBasic &= otherFromThisIfAvailable(otherDesc, desc, 'enumerable'); | ||||
| 			hasBasic &= otherFromThisIfAvailable(otherDesc, desc, 'configurable'); | ||||
| 
 | ||||
| 			try { | ||||
| 				if (!otherReflectDefineProperty(object, prop, otherDesc)) return false; | ||||
| 				if (otherDesc.configurable !== true && (!hasBasic || !(hasFunc || hasValue))) { | ||||
| 					otherDesc = otherSafeGetOwnPropertyDescriptor(object, prop); | ||||
| 				} | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 
 | ||||
| 			if (!otherDesc.configurable) { | ||||
| 				let thisDesc; | ||||
| 				if (otherDesc.get || otherDesc.set) { | ||||
| 					thisDesc = { | ||||
| 						__proto__: null, | ||||
| 						get: this.fromOtherWithContext(otherDesc.get), | ||||
| 						set: this.fromOtherWithContext(otherDesc.set), | ||||
| 						enumerable: otherDesc.enumerable, | ||||
| 						configurable: otherDesc.configurable | ||||
| 					}; | ||||
| 				} else { | ||||
| 					thisDesc = { | ||||
| 						__proto__: null, | ||||
| 						value: this.fromOtherWithContext(otherDesc.value), | ||||
| 						writable: otherDesc.writable, | ||||
| 						enumerable: otherDesc.enumerable, | ||||
| 						configurable: otherDesc.configurable | ||||
| 					}; | ||||
| 				} | ||||
| 				if (!thisReflectDefineProperty(target, prop, thisDesc)) throw thisUnexpected(); | ||||
| 			} | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		deleteProperty(target, prop) { | ||||
| 			// Note: target@this(unsafe) prop@prim throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				return otherReflectDeleteProperty(object, prop) === true; | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		has(target, key) { | ||||
| 			// Note: target@this(unsafe) key@prim throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				return otherReflectHas(object, key) === true; | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		isExtensible(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				if (otherReflectIsExtensible(object)) return true; | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			if (thisReflectIsExtensible(target)) { | ||||
| 				this.doPreventExtensions(target, object, this); | ||||
| 			} | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		ownKeys(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			let res; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				res = otherReflectOwnKeys(object); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			return thisFromOther(res); | ||||
| 		} | ||||
| 
 | ||||
| 		preventExtensions(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				if (!otherReflectPreventExtensions(object)) return false; | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			if (thisReflectIsExtensible(target)) { | ||||
| 				this.doPreventExtensions(target, object, this); | ||||
| 			} | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		enumerate(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			let res; // @other(unsafe)
 | ||||
| 			try { | ||||
| 				res = otherReflectEnumerate(object); | ||||
| 			} catch (e) { // @other(unsafe)
 | ||||
| 				throw thisFromOther(e); | ||||
| 			} | ||||
| 			return this.fromOtherWithContext(res); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	function defaultFactory(object) { | ||||
| 		// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 		return new BaseHandler(object); | ||||
| 	} | ||||
| 
 | ||||
| 	class ProtectedHandler extends BaseHandler { | ||||
| 
 | ||||
| 		getFactory() { | ||||
| 			return protectedFactory; | ||||
| 		} | ||||
| 
 | ||||
| 		set(target, key, value, receiver) { | ||||
| 			// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
 | ||||
| 			if (typeof value === 'function') { | ||||
| 				return thisReflectDefineProperty(receiver, key, { | ||||
| 					__proto__: null, | ||||
| 					value: value, | ||||
| 					writable: true, | ||||
| 					enumerable: true, | ||||
| 					configurable: true | ||||
| 				}) === true; | ||||
| 			} | ||||
| 			return super.set(target, key, value, receiver); | ||||
| 		} | ||||
| 
 | ||||
| 		definePropertyDesc(target, prop, desc) { | ||||
| 			// Note: target@this(unsafe) prop@prim desc@this(safe) throws@this(unsafe)
 | ||||
| 			if (desc && (desc.set || desc.get || typeof desc.value === 'function')) return undefined; | ||||
| 			return desc; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	function protectedFactory(object) { | ||||
| 		// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 		return new ProtectedHandler(object); | ||||
| 	} | ||||
| 
 | ||||
| 	class ReadOnlyHandler extends BaseHandler { | ||||
| 
 | ||||
| 		getFactory() { | ||||
| 			return readonlyFactory; | ||||
| 		} | ||||
| 
 | ||||
| 		set(target, key, value, receiver) { | ||||
| 			// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
 | ||||
| 			return thisReflectDefineProperty(receiver, key, { | ||||
| 				__proto__: null, | ||||
| 				value: value, | ||||
| 				writable: true, | ||||
| 				enumerable: true, | ||||
| 				configurable: true | ||||
| 			}); | ||||
| 		} | ||||
| 
 | ||||
| 		setPrototypeOf(target, value) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		defineProperty(target, prop, desc) { | ||||
| 			// Note: target@this(unsafe) prop@prim desc@this(unsafe) throws@this(unsafe)
 | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		deleteProperty(target, prop) { | ||||
| 			// Note: target@this(unsafe) prop@prim throws@this(unsafe)
 | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		isExtensible(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		preventExtensions(target) { | ||||
| 			// Note: target@this(unsafe) throws@this(unsafe)
 | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	function readonlyFactory(object) { | ||||
| 		// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 		return new ReadOnlyHandler(object); | ||||
| 	} | ||||
| 
 | ||||
| 	class ReadOnlyMockHandler extends ReadOnlyHandler { | ||||
| 
 | ||||
| 		constructor(object, mock) { | ||||
| 			// Note: object@other(unsafe) mock:this(unsafe) throws@this(unsafe)
 | ||||
| 			super(object); | ||||
| 			this.mock = mock; | ||||
| 		} | ||||
| 
 | ||||
| 		get(target, key, receiver) { | ||||
| 			// Note: target@this(unsafe) key@prim receiver@this(unsafe) throws@this(unsafe)
 | ||||
| 			const object = this.object; // @other(unsafe)
 | ||||
| 			const mock = this.mock; | ||||
| 			if (thisReflectApply(thisObjectHasOwnProperty, mock, key) && !thisOtherHasOwnProperty(object, key)) { | ||||
| 				return mock[key]; | ||||
| 			} | ||||
| 			return super.get(target, key, receiver); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	function thisFromOther(other) { | ||||
| 		// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 		return thisFromOtherWithFactory(defaultFactory, other); | ||||
| 	} | ||||
| 
 | ||||
| 	function thisProxyOther(factory, other, proto) { | ||||
| 		const target = thisCreateTargetObject(other, proto); | ||||
| 		const handler = factory(other); | ||||
| 		const proxy = new ThisProxy(target, handler); | ||||
| 		try { | ||||
| 			otherReflectApply(otherWeakMapSet, mappingThisToOther, [proxy, other]); | ||||
| 			registerProxy(proxy, handler); | ||||
| 		} catch (e) { | ||||
| 			throw new VMError('Unexpected error'); | ||||
| 		} | ||||
| 		if (!isHost) { | ||||
| 			thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, proxy]); | ||||
| 			return proxy; | ||||
| 		} | ||||
| 		const proxy2 = new ThisProxy(proxy, emptyForzenObject); | ||||
| 		try { | ||||
| 			otherReflectApply(otherWeakMapSet, mappingThisToOther, [proxy2, other]); | ||||
| 			registerProxy(proxy2, handler); | ||||
| 		} catch (e) { | ||||
| 			throw new VMError('Unexpected error'); | ||||
| 		} | ||||
| 		thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, proxy2]); | ||||
| 		return proxy2; | ||||
| 	} | ||||
| 
 | ||||
| 	function thisEnsureThis(other) { | ||||
| 		const type = typeof other; | ||||
| 		switch (type) { | ||||
| 			case 'object': | ||||
| 			case 'function': | ||||
| 				if (other === null) { | ||||
| 					return null; | ||||
| 				} else { | ||||
| 					let proto = thisReflectGetPrototypeOf(other); | ||||
| 					if (!proto) { | ||||
| 						return other; | ||||
| 					} | ||||
| 					while (proto) { | ||||
| 						const mapping = thisReflectApply(thisMapGet, protoMappings, [proto]); | ||||
| 						if (mapping) { | ||||
| 							const mapped = thisReflectApply(thisWeakMapGet, mappingOtherToThis, [other]); | ||||
| 							if (mapped) return mapped; | ||||
| 							return mapping(defaultFactory, other); | ||||
| 						} | ||||
| 						proto = thisReflectGetPrototypeOf(proto); | ||||
| 					} | ||||
| 					return other; | ||||
| 				} | ||||
| 
 | ||||
| 			case 'undefined': | ||||
| 			case 'string': | ||||
| 			case 'number': | ||||
| 			case 'boolean': | ||||
| 			case 'symbol': | ||||
| 			case 'bigint': | ||||
| 				return other; | ||||
| 
 | ||||
| 			default: // new, unknown types can be dangerous
 | ||||
| 				throw new VMError(`Unknown type '${type}'`); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function thisFromOtherWithFactory(factory, other, proto) { | ||||
| 		for (let loop = 0; loop < 10; loop++) { | ||||
| 			const type = typeof other; | ||||
| 			switch (type) { | ||||
| 				case 'object': | ||||
| 				case 'function': | ||||
| 					if (other === null) { | ||||
| 						return null; | ||||
| 					} else { | ||||
| 						const mapped = thisReflectApply(thisWeakMapGet, mappingOtherToThis, [other]); | ||||
| 						if (mapped) return mapped; | ||||
| 						if (proto) { | ||||
| 							return thisProxyOther(factory, other, proto); | ||||
| 						} | ||||
| 						try { | ||||
| 							proto = otherReflectGetPrototypeOf(other); | ||||
| 						} catch (e) { // @other(unsafe)
 | ||||
| 							other = e; | ||||
| 							break; | ||||
| 						} | ||||
| 						if (!proto) { | ||||
| 							return thisProxyOther(factory, other, null); | ||||
| 						} | ||||
| 						while (proto) { | ||||
| 							const mapping = thisReflectApply(thisMapGet, protoMappings, [proto]); | ||||
| 							if (mapping) return mapping(factory, other); | ||||
| 							try { | ||||
| 								proto = otherReflectGetPrototypeOf(proto); | ||||
| 							} catch (e) { // @other(unsafe)
 | ||||
| 								other = e; | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 						return thisProxyOther(factory, other, thisObjectPrototype); | ||||
| 					} | ||||
| 
 | ||||
| 				case 'undefined': | ||||
| 				case 'string': | ||||
| 				case 'number': | ||||
| 				case 'boolean': | ||||
| 				case 'symbol': | ||||
| 				case 'bigint': | ||||
| 					return other; | ||||
| 
 | ||||
| 				default: // new, unknown types can be dangerous
 | ||||
| 					throw new VMError(`Unknown type '${type}'`); | ||||
| 			} | ||||
| 			factory = defaultFactory; | ||||
| 			proto = undefined; | ||||
| 		} | ||||
| 		throw new VMError('Exception recursion depth'); | ||||
| 	} | ||||
| 
 | ||||
| 	function thisFromOtherArguments(args) { | ||||
| 		// Note: args@other(safe-array) returns@this(safe-array) throws@this(unsafe)
 | ||||
| 		const arr = []; | ||||
| 		for (let i = 0; i < args.length; i++) { | ||||
| 			const value = thisFromOther(args[i]); | ||||
| 			thisReflectDefineProperty(arr, i, { | ||||
| 				__proto__: null, | ||||
| 				value: value, | ||||
| 				writable: true, | ||||
| 				enumerable: true, | ||||
| 				configurable: true | ||||
| 			}); | ||||
| 		} | ||||
| 		return arr; | ||||
| 	} | ||||
| 
 | ||||
| 	function thisConnect(obj, other) { | ||||
| 		// Note: obj@this(unsafe) other@other(unsafe) throws@this(unsafe)
 | ||||
| 		try { | ||||
| 			otherReflectApply(otherWeakMapSet, mappingThisToOther, [obj, other]); | ||||
| 		} catch (e) { | ||||
| 			throw new VMError('Unexpected error'); | ||||
| 		} | ||||
| 		thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, obj]); | ||||
| 	} | ||||
| 
 | ||||
| 	thisAddProtoMapping(thisGlobalPrototypes.Object, otherGlobalPrototypes.Object); | ||||
| 	thisAddProtoMapping(thisGlobalPrototypes.Array, otherGlobalPrototypes.Array); | ||||
| 
 | ||||
| 	for (let i = 0; i < globalsList.length; i++) { | ||||
| 		const key = globalsList[i]; | ||||
| 		const tp = thisGlobalPrototypes[key]; | ||||
| 		const op = otherGlobalPrototypes[key]; | ||||
| 		if (tp && op) thisAddProtoMapping(tp, op, key); | ||||
| 	} | ||||
| 
 | ||||
| 	for (let i = 0; i < errorsList.length; i++) { | ||||
| 		const key = errorsList[i]; | ||||
| 		const tp = thisGlobalPrototypes[key]; | ||||
| 		const op = otherGlobalPrototypes[key]; | ||||
| 		if (tp && op) thisAddProtoMapping(tp, op, 'Error'); | ||||
| 	} | ||||
| 
 | ||||
| 	thisAddProtoMapping(thisGlobalPrototypes.VMError, otherGlobalPrototypes.VMError, 'Error'); | ||||
| 
 | ||||
| 	result.BaseHandler = BaseHandler; | ||||
| 	result.ProtectedHandler = ProtectedHandler; | ||||
| 	result.ReadOnlyHandler = ReadOnlyHandler; | ||||
| 	result.ReadOnlyMockHandler = ReadOnlyMockHandler; | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| exports.createBridge = createBridge; | ||||
| exports.VMError = VMError; | ||||
| 
 | ||||
| 
 | ||||
| /***/ }) | ||||
| 
 | ||||
| /******/ 	}); | ||||
| /************************************************************************/ | ||||
| /******/ 	/* webpack/runtime/compat */ | ||||
| /******/ 	 | ||||
| /******/ 	if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ | ||||
| /******/ 	 | ||||
| /******/ 	// startup
 | ||||
| /******/ 	// Load entry module and return exports
 | ||||
| /******/ 	// This entry module is referenced by other modules so it can't be inlined
 | ||||
| /******/ 	var __webpack_exports__ = {}; | ||||
| /******/ 	__webpack_modules__[989](0, __webpack_exports__); | ||||
| /******/ 	module.exports = __webpack_exports__; | ||||
| /******/ 	 | ||||
| /******/ })() | ||||
| ; | ||||
							
								
								
									
										1033
									
								
								dist/events.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1033
									
								
								dist/events.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										52593
									
								
								dist/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52593
									
								
								dist/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										473
									
								
								dist/setup-node-sandbox.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										473
									
								
								dist/setup-node-sandbox.js
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,473 +0,0 @@ | |||
| /******/ (() => { // webpackBootstrap
 | ||||
| /******/ 	"use strict"; | ||||
| /******/ 	/* webpack/runtime/compat */ | ||||
| /******/ 	 | ||||
| /******/ 	if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ | ||||
| var __webpack_exports__ = {}; | ||||
| /* global host, data, VMError */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| const LocalError = Error; | ||||
| const LocalTypeError = TypeError; | ||||
| const LocalWeakMap = WeakMap; | ||||
| 
 | ||||
| const { | ||||
| 	apply: localReflectApply, | ||||
| 	defineProperty: localReflectDefineProperty | ||||
| } = Reflect; | ||||
| 
 | ||||
| const { | ||||
| 	set: localWeakMapSet, | ||||
| 	get: localWeakMapGet | ||||
| } = LocalWeakMap.prototype; | ||||
| 
 | ||||
| const { | ||||
| 	isArray: localArrayIsArray | ||||
| } = Array; | ||||
| 
 | ||||
| function uncurryThis(func) { | ||||
| 	return (thiz, ...args) => localReflectApply(func, thiz, args); | ||||
| } | ||||
| 
 | ||||
| const localArrayPrototypeSlice = uncurryThis(Array.prototype.slice); | ||||
| const localArrayPrototypeIncludes = uncurryThis(Array.prototype.includes); | ||||
| const localArrayPrototypePush = uncurryThis(Array.prototype.push); | ||||
| const localArrayPrototypeIndexOf = uncurryThis(Array.prototype.indexOf); | ||||
| const localArrayPrototypeSplice = uncurryThis(Array.prototype.splice); | ||||
| const localStringPrototypeStartsWith = uncurryThis(String.prototype.startsWith); | ||||
| const localStringPrototypeSlice = uncurryThis(String.prototype.slice); | ||||
| const localStringPrototypeIndexOf = uncurryThis(String.prototype.indexOf); | ||||
| 
 | ||||
| const { | ||||
| 	argv: optionArgv, | ||||
| 	env: optionEnv, | ||||
| 	console: optionConsole, | ||||
| 	vm, | ||||
| 	resolver, | ||||
| 	extensions | ||||
| } = data; | ||||
| 
 | ||||
| function ensureSandboxArray(a) { | ||||
| 	return localArrayPrototypeSlice(a); | ||||
| } | ||||
| 
 | ||||
| const globalPaths = ensureSandboxArray(resolver.globalPaths); | ||||
| 
 | ||||
| class Module { | ||||
| 
 | ||||
| 	constructor(id, path, parent) { | ||||
| 		this.id = id; | ||||
| 		this.filename = id; | ||||
| 		this.path = path; | ||||
| 		this.parent = parent; | ||||
| 		this.loaded = false; | ||||
| 		this.paths = path ? ensureSandboxArray(resolver.genLookupPaths(path)) : []; | ||||
| 		this.children = []; | ||||
| 		this.exports = {}; | ||||
| 	} | ||||
| 
 | ||||
| 	_updateChildren(child, isNew) { | ||||
| 		const children = this.children; | ||||
| 		if (children && (isNew || !localArrayPrototypeIncludes(children, child))) { | ||||
| 			localArrayPrototypePush(children, child); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	require(id) { | ||||
| 		return requireImpl(this, id, false); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| const originalRequire = Module.prototype.require; | ||||
| const cacheBuiltins = {__proto__: null}; | ||||
| 
 | ||||
| function requireImpl(mod, id, direct) { | ||||
| 	if (direct && mod.require !== originalRequire) { | ||||
| 		return mod.require(id); | ||||
| 	} | ||||
| 	const filename = resolver.resolve(mod, id, undefined, Module._extensions, direct); | ||||
| 	if (localStringPrototypeStartsWith(filename, 'node:')) { | ||||
| 		id = localStringPrototypeSlice(filename, 5); | ||||
| 		let nmod = cacheBuiltins[id]; | ||||
| 		if (!nmod) { | ||||
| 			nmod = resolver.loadBuiltinModule(vm, id); | ||||
| 			if (!nmod) throw new VMError(`Cannot find module '${filename}'`, 'ENOTFOUND'); | ||||
| 			cacheBuiltins[id] = nmod; | ||||
| 		} | ||||
| 		return nmod; | ||||
| 	} | ||||
| 
 | ||||
| 	const cachedModule = Module._cache[filename]; | ||||
| 	if (cachedModule !== undefined) { | ||||
| 		mod._updateChildren(cachedModule, false); | ||||
| 		return cachedModule.exports; | ||||
| 	} | ||||
| 
 | ||||
| 	let nmod = cacheBuiltins[id]; | ||||
| 	if (nmod) return nmod; | ||||
| 	nmod = resolver.loadBuiltinModule(vm, id); | ||||
| 	if (nmod) { | ||||
| 		cacheBuiltins[id] = nmod; | ||||
| 		return nmod; | ||||
| 	} | ||||
| 
 | ||||
| 	const path = resolver.pathDirname(filename); | ||||
| 	const module = new Module(filename, path, mod); | ||||
| 	resolver.registerModule(module, filename, path, mod, direct); | ||||
| 	mod._updateChildren(module, true); | ||||
| 	try { | ||||
| 		Module._cache[filename] = module; | ||||
| 		const handler = findBestExtensionHandler(filename); | ||||
| 		handler(module, filename); | ||||
| 		module.loaded = true; | ||||
| 	} catch (e) { | ||||
| 		delete Module._cache[filename]; | ||||
| 		const children = mod.children; | ||||
| 		if (localArrayIsArray(children)) { | ||||
| 			const index = localArrayPrototypeIndexOf(children, module); | ||||
| 			if (index !== -1) { | ||||
| 				localArrayPrototypeSplice(children, index, 1); | ||||
| 			} | ||||
| 		} | ||||
| 		throw e; | ||||
| 	} | ||||
| 
 | ||||
| 	return module.exports; | ||||
| } | ||||
| 
 | ||||
| Module.builtinModules = ensureSandboxArray(resolver.getBuiltinModulesList()); | ||||
| Module.globalPaths = globalPaths; | ||||
| Module._extensions = {__proto__: null}; | ||||
| Module._cache = {__proto__: null}; | ||||
| 
 | ||||
| { | ||||
| 	const keys = Object.getOwnPropertyNames(extensions); | ||||
| 	for (let i = 0; i < keys.length; i++) { | ||||
| 		const key = keys[i]; | ||||
| 		const handler = extensions[key]; | ||||
| 		Module._extensions[key] = (mod, filename) => handler(mod, filename); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function findBestExtensionHandler(filename) { | ||||
| 	const name = resolver.pathBasename(filename); | ||||
| 	for (let i = 0; (i = localStringPrototypeIndexOf(name, '.', i + 1)) !== -1;) { | ||||
| 		const ext = localStringPrototypeSlice(name, i + 1); | ||||
| 		const handler = Module._extensions[ext]; | ||||
| 		if (handler) return handler; | ||||
| 	} | ||||
| 	const js = Module._extensions['.js']; | ||||
| 	if (js) return js; | ||||
| 	const keys = Object.getOwnPropertyNames(Module._extensions); | ||||
| 	if (keys.length === 0) throw new VMError(`Failed to load '${filename}': Unknown type.`, 'ELOADFAIL'); | ||||
| 	return Module._extensions[keys[0]]; | ||||
| } | ||||
| 
 | ||||
| function createRequireForModule(mod) { | ||||
| 	// eslint-disable-next-line no-shadow
 | ||||
| 	function require(id) { | ||||
| 		return requireImpl(mod, id, true); | ||||
| 	} | ||||
| 	function resolve(id, options) { | ||||
| 		return resolver.resolve(mod, id, options, Module._extensions, true); | ||||
| 	} | ||||
| 	require.resolve = resolve; | ||||
| 	function paths(id) { | ||||
| 		return ensureSandboxArray(resolver.lookupPaths(mod, id)); | ||||
| 	} | ||||
| 	resolve.paths = paths; | ||||
| 
 | ||||
| 	require.extensions = Module._extensions; | ||||
| 
 | ||||
| 	require.cache = Module._cache; | ||||
| 
 | ||||
| 	return require; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Prepare sandbox. | ||||
|  */ | ||||
| 
 | ||||
| const TIMERS = new LocalWeakMap(); | ||||
| 
 | ||||
| class Timeout { | ||||
| } | ||||
| 
 | ||||
| class Interval { | ||||
| } | ||||
| 
 | ||||
| class Immediate { | ||||
| } | ||||
| 
 | ||||
| function clearTimer(timer) { | ||||
| 	const obj = localReflectApply(localWeakMapGet, TIMERS, [timer]); | ||||
| 	if (obj) { | ||||
| 		obj.clear(obj.value); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // This is a function and not an arrow function, since the original is also a function
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.setTimeout = function setTimeout(callback, delay, ...args) { | ||||
| 	if (typeof callback !== 'function') throw new LocalTypeError('"callback" argument must be a function'); | ||||
| 	const obj = new Timeout(callback, args); | ||||
| 	const cb = () => { | ||||
| 		localReflectApply(callback, null, args); | ||||
| 	}; | ||||
| 	const tmr = host.setTimeout(cb, delay); | ||||
| 
 | ||||
| 	const ref = { | ||||
| 		__proto__: null, | ||||
| 		clear: host.clearTimeout, | ||||
| 		value: tmr | ||||
| 	}; | ||||
| 
 | ||||
| 	localReflectApply(localWeakMapSet, TIMERS, [obj, ref]); | ||||
| 	return obj; | ||||
| }; | ||||
| 
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.setInterval = function setInterval(callback, interval, ...args) { | ||||
| 	if (typeof callback !== 'function') throw new LocalTypeError('"callback" argument must be a function'); | ||||
| 	const obj = new Interval(); | ||||
| 	const cb = () => { | ||||
| 		localReflectApply(callback, null, args); | ||||
| 	}; | ||||
| 	const tmr = host.setInterval(cb, interval); | ||||
| 
 | ||||
| 	const ref = { | ||||
| 		__proto__: null, | ||||
| 		clear: host.clearInterval, | ||||
| 		value: tmr | ||||
| 	}; | ||||
| 
 | ||||
| 	localReflectApply(localWeakMapSet, TIMERS, [obj, ref]); | ||||
| 	return obj; | ||||
| }; | ||||
| 
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.setImmediate = function setImmediate(callback, ...args) { | ||||
| 	if (typeof callback !== 'function') throw new LocalTypeError('"callback" argument must be a function'); | ||||
| 	const obj = new Immediate(); | ||||
| 	const cb = () => { | ||||
| 		localReflectApply(callback, null, args); | ||||
| 	}; | ||||
| 	const tmr = host.setImmediate(cb); | ||||
| 
 | ||||
| 	const ref = { | ||||
| 		__proto__: null, | ||||
| 		clear: host.clearImmediate, | ||||
| 		value: tmr | ||||
| 	}; | ||||
| 
 | ||||
| 	localReflectApply(localWeakMapSet, TIMERS, [obj, ref]); | ||||
| 	return obj; | ||||
| }; | ||||
| 
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.clearTimeout = function clearTimeout(timeout) { | ||||
| 	clearTimer(timeout); | ||||
| }; | ||||
| 
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.clearInterval = function clearInterval(interval) { | ||||
| 	clearTimer(interval); | ||||
| }; | ||||
| 
 | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| global.clearImmediate = function clearImmediate(immediate) { | ||||
| 	clearTimer(immediate); | ||||
| }; | ||||
| 
 | ||||
| const localProcess = host.process; | ||||
| 
 | ||||
| function vmEmitArgs(event, args) { | ||||
| 	const allargs = [event]; | ||||
| 	for (let i = 0; i < args.length; i++) { | ||||
| 		if (!localReflectDefineProperty(allargs, i + 1, { | ||||
| 			__proto__: null, | ||||
| 			value: args[i], | ||||
| 			writable: true, | ||||
| 			enumerable: true, | ||||
| 			configurable: true | ||||
| 		})) throw new LocalError('Unexpected'); | ||||
| 	} | ||||
| 	return localReflectApply(vm.emit, vm, allargs); | ||||
| } | ||||
| 
 | ||||
| const LISTENERS = new LocalWeakMap(); | ||||
| const LISTENER_HANDLER = new LocalWeakMap(); | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param {*} name | ||||
|  * @param {*} handler | ||||
|  * @this process | ||||
|  * @return {this} | ||||
|  */ | ||||
| function addListener(name, handler) { | ||||
| 	if (name !== 'beforeExit' && name !== 'exit') { | ||||
| 		throw new LocalError(`Access denied to listen for '${name}' event.`); | ||||
| 	} | ||||
| 
 | ||||
| 	let cb = localReflectApply(localWeakMapGet, LISTENERS, [handler]); | ||||
| 	if (!cb) { | ||||
| 		cb = () => { | ||||
| 			handler(); | ||||
| 		}; | ||||
| 		localReflectApply(localWeakMapSet, LISTENER_HANDLER, [cb, handler]); | ||||
| 		localReflectApply(localWeakMapSet, LISTENERS, [handler, cb]); | ||||
| 	} | ||||
| 
 | ||||
| 	localProcess.on(name, cb); | ||||
| 
 | ||||
| 	return this; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @this process | ||||
|  * @return {this} | ||||
|  */ | ||||
| // eslint-disable-next-line no-shadow
 | ||||
| function process() { | ||||
| 	return this; | ||||
| } | ||||
| 
 | ||||
| // FIXME wrong class structure
 | ||||
| global.process = { | ||||
| 	__proto__: process.prototype, | ||||
| 	argv: optionArgv !== undefined ? optionArgv : [], | ||||
| 	title: localProcess.title, | ||||
| 	version: localProcess.version, | ||||
| 	versions: localProcess.versions, | ||||
| 	arch: localProcess.arch, | ||||
| 	platform: localProcess.platform, | ||||
| 	env: optionEnv !== undefined ? optionEnv : {}, | ||||
| 	pid: localProcess.pid, | ||||
| 	features: localProcess.features, | ||||
| 	nextTick: function nextTick(callback, ...args) { | ||||
| 		if (typeof callback !== 'function') { | ||||
| 			throw new LocalError('Callback must be a function.'); | ||||
| 		} | ||||
| 
 | ||||
| 		localProcess.nextTick(()=>{ | ||||
| 			localReflectApply(callback, null, args); | ||||
| 		}); | ||||
| 	}, | ||||
| 	hrtime: function hrtime(time) { | ||||
| 		return localProcess.hrtime(time); | ||||
| 	}, | ||||
| 	cwd: function cwd() { | ||||
| 		return localProcess.cwd(); | ||||
| 	}, | ||||
| 	addListener, | ||||
| 	on: addListener, | ||||
| 
 | ||||
| 	once: function once(name, handler) { | ||||
| 		if (name !== 'beforeExit' && name !== 'exit') { | ||||
| 			throw new LocalError(`Access denied to listen for '${name}' event.`); | ||||
| 		} | ||||
| 
 | ||||
| 		let triggered = false; | ||||
| 		const cb = () => { | ||||
| 			if (triggered) return; | ||||
| 			triggered = true; | ||||
| 			localProcess.removeListener(name, cb); | ||||
| 			handler(); | ||||
| 		}; | ||||
| 		localReflectApply(localWeakMapSet, LISTENER_HANDLER, [cb, handler]); | ||||
| 
 | ||||
| 		localProcess.on(name, cb); | ||||
| 
 | ||||
| 		return this; | ||||
| 	}, | ||||
| 
 | ||||
| 	listeners: function listeners(name) { | ||||
| 		if (name !== 'beforeExit' && name !== 'exit') { | ||||
| 			// Maybe add ({__proto__:null})[name] to throw when name fails in https://tc39.es/ecma262/#sec-topropertykey.
 | ||||
| 			return []; | ||||
| 		} | ||||
| 
 | ||||
| 		// Filter out listeners, which were not created in this sandbox
 | ||||
| 		const all = localProcess.listeners(name); | ||||
| 		const filtered = []; | ||||
| 		let j = 0; | ||||
| 		for (let i = 0; i < all.length; i++) { | ||||
| 			const h = localReflectApply(localWeakMapGet, LISTENER_HANDLER, [all[i]]); | ||||
| 			if (h) { | ||||
| 				if (!localReflectDefineProperty(filtered, j, { | ||||
| 					__proto__: null, | ||||
| 					value: h, | ||||
| 					writable: true, | ||||
| 					enumerable: true, | ||||
| 					configurable: true | ||||
| 				})) throw new LocalError('Unexpected'); | ||||
| 				j++; | ||||
| 			} | ||||
| 		} | ||||
| 		return filtered; | ||||
| 	}, | ||||
| 
 | ||||
| 	removeListener: function removeListener(name, handler) { | ||||
| 		if (name !== 'beforeExit' && name !== 'exit') { | ||||
| 			return this; | ||||
| 		} | ||||
| 
 | ||||
| 		const cb = localReflectApply(localWeakMapGet, LISTENERS, [handler]); | ||||
| 		if (cb) localProcess.removeListener(name, cb); | ||||
| 
 | ||||
| 		return this; | ||||
| 	}, | ||||
| 
 | ||||
| 	umask: function umask() { | ||||
| 		if (arguments.length) { | ||||
| 			throw new LocalError('Access denied to set umask.'); | ||||
| 		} | ||||
| 
 | ||||
| 		return localProcess.umask(); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| if (optionConsole === 'inherit') { | ||||
| 	global.console = host.console; | ||||
| } else if (optionConsole === 'redirect') { | ||||
| 	global.console = { | ||||
| 		debug(...args) { | ||||
| 			vmEmitArgs('console.debug', args); | ||||
| 		}, | ||||
| 		log(...args) { | ||||
| 			vmEmitArgs('console.log', args); | ||||
| 		}, | ||||
| 		info(...args) { | ||||
| 			vmEmitArgs('console.info', args); | ||||
| 		}, | ||||
| 		warn(...args) { | ||||
| 			vmEmitArgs('console.warn', args); | ||||
| 		}, | ||||
| 		error(...args) { | ||||
| 			vmEmitArgs('console.error', args); | ||||
| 		}, | ||||
| 		dir(...args) { | ||||
| 			vmEmitArgs('console.dir', args); | ||||
| 		}, | ||||
| 		time() {}, | ||||
| 		timeEnd() {}, | ||||
| 		trace(...args) { | ||||
| 			vmEmitArgs('console.trace', args); | ||||
| 		} | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| return { | ||||
| 	__proto__: null, | ||||
| 	Module, | ||||
| 	jsonParse: JSON.parse, | ||||
| 	createRequireForModule | ||||
| }; | ||||
| 
 | ||||
| module.exports = __webpack_exports__; | ||||
| /******/ })() | ||||
| ; | ||||
							
								
								
									
										462
									
								
								dist/setup-sandbox.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										462
									
								
								dist/setup-sandbox.js
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,462 +0,0 @@ | |||
| /******/ (() => { // webpackBootstrap
 | ||||
| /******/ 	"use strict"; | ||||
| /******/ 	/* webpack/runtime/compat */ | ||||
| /******/ 	 | ||||
| /******/ 	if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ | ||||
| var __webpack_exports__ = {}; | ||||
| /* global host, bridge, data, context */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| const { | ||||
| 	Object: localObject, | ||||
| 	Array: localArray, | ||||
| 	Error: LocalError, | ||||
| 	Reflect: localReflect, | ||||
| 	Proxy: LocalProxy, | ||||
| 	WeakMap: LocalWeakMap, | ||||
| 	Function: localFunction, | ||||
| 	Promise: localPromise, | ||||
| 	eval: localEval | ||||
| } = global; | ||||
| 
 | ||||
| const { | ||||
| 	freeze: localObjectFreeze | ||||
| } = localObject; | ||||
| 
 | ||||
| const { | ||||
| 	getPrototypeOf: localReflectGetPrototypeOf, | ||||
| 	apply: localReflectApply, | ||||
| 	deleteProperty: localReflectDeleteProperty, | ||||
| 	has: localReflectHas, | ||||
| 	defineProperty: localReflectDefineProperty, | ||||
| 	setPrototypeOf: localReflectSetPrototypeOf, | ||||
| 	getOwnPropertyDescriptor: localReflectGetOwnPropertyDescriptor | ||||
| } = localReflect; | ||||
| 
 | ||||
| const { | ||||
| 	isArray: localArrayIsArray | ||||
| } = localArray; | ||||
| 
 | ||||
| const { | ||||
| 	ensureThis, | ||||
| 	ReadOnlyHandler, | ||||
| 	from, | ||||
| 	fromWithFactory, | ||||
| 	readonlyFactory, | ||||
| 	connect, | ||||
| 	addProtoMapping, | ||||
| 	VMError, | ||||
| 	ReadOnlyMockHandler | ||||
| } = bridge; | ||||
| 
 | ||||
| const { | ||||
| 	allowAsync, | ||||
| 	GeneratorFunction, | ||||
| 	AsyncFunction, | ||||
| 	AsyncGeneratorFunction | ||||
| } = data; | ||||
| 
 | ||||
| const localWeakMapGet = LocalWeakMap.prototype.get; | ||||
| 
 | ||||
| function localUnexpected() { | ||||
| 	return new VMError('Should not happen'); | ||||
| } | ||||
| 
 | ||||
| // global is originally prototype of host.Object so it can be used to climb up from the sandbox.
 | ||||
| if (!localReflectSetPrototypeOf(context, localObject.prototype)) throw localUnexpected(); | ||||
| 
 | ||||
| Object.defineProperties(global, { | ||||
| 	global: {value: global, writable: true, configurable: true, enumerable: true}, | ||||
| 	globalThis: {value: global, writable: true, configurable: true}, | ||||
| 	GLOBAL: {value: global, writable: true, configurable: true}, | ||||
| 	root: {value: global, writable: true, configurable: true} | ||||
| }); | ||||
| 
 | ||||
| if (!localReflectDefineProperty(global, 'VMError', { | ||||
| 	__proto__: null, | ||||
| 	value: VMError, | ||||
| 	writable: true, | ||||
| 	enumerable: false, | ||||
| 	configurable: true | ||||
| })) throw localUnexpected(); | ||||
| 
 | ||||
| // Fixes buffer unsafe allocation
 | ||||
| /* eslint-disable no-use-before-define */ | ||||
| class BufferHandler extends ReadOnlyHandler { | ||||
| 
 | ||||
| 	apply(target, thiz, args) { | ||||
| 		if (args.length > 0 && typeof args[0] === 'number') { | ||||
| 			return LocalBuffer.alloc(args[0]); | ||||
| 		} | ||||
| 		return localReflectApply(LocalBuffer.from, LocalBuffer, args); | ||||
| 	} | ||||
| 
 | ||||
| 	construct(target, args, newTarget) { | ||||
| 		if (args.length > 0 && typeof args[0] === 'number') { | ||||
| 			return LocalBuffer.alloc(args[0]); | ||||
| 		} | ||||
| 		return localReflectApply(LocalBuffer.from, LocalBuffer, args); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| /* eslint-enable no-use-before-define */ | ||||
| 
 | ||||
| const LocalBuffer = fromWithFactory(obj => new BufferHandler(obj), host.Buffer); | ||||
| 
 | ||||
| 
 | ||||
| if (!localReflectDefineProperty(global, 'Buffer', { | ||||
| 	__proto__: null, | ||||
| 	value: LocalBuffer, | ||||
| 	writable: true, | ||||
| 	enumerable: false, | ||||
| 	configurable: true | ||||
| })) throw localUnexpected(); | ||||
| 
 | ||||
| addProtoMapping(LocalBuffer.prototype, host.Buffer.prototype, 'Uint8Array'); | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param {*} size Size of new buffer | ||||
|  * @this LocalBuffer | ||||
|  * @return {LocalBuffer} | ||||
|  */ | ||||
| function allocUnsafe(size) { | ||||
| 	return LocalBuffer.alloc(size); | ||||
| } | ||||
| 
 | ||||
| connect(allocUnsafe, host.Buffer.allocUnsafe); | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param {*} size Size of new buffer | ||||
|  * @this LocalBuffer | ||||
|  * @return {LocalBuffer} | ||||
|  */ | ||||
| function allocUnsafeSlow(size) { | ||||
| 	return LocalBuffer.alloc(size); | ||||
| } | ||||
| 
 | ||||
| connect(allocUnsafeSlow, host.Buffer.allocUnsafeSlow); | ||||
| 
 | ||||
| /** | ||||
|  * Replacement for Buffer inspect | ||||
|  * | ||||
|  * @param {*} recurseTimes | ||||
|  * @param {*} ctx | ||||
|  * @this LocalBuffer | ||||
|  * @return {string} | ||||
|  */ | ||||
| function inspect(recurseTimes, ctx) { | ||||
| 	// Mimic old behavior, could throw but didn't pass a test.
 | ||||
| 	const max = host.INSPECT_MAX_BYTES; | ||||
| 	const actualMax = Math.min(max, this.length); | ||||
| 	const remaining = this.length - max; | ||||
| 	let str = this.hexSlice(0, actualMax).replace(/(.{2})/g, '$1 ').trim(); | ||||
| 	if (remaining > 0) str += ` ... ${remaining} more byte${remaining > 1 ? 's' : ''}`; | ||||
| 	return `<${this.constructor.name} ${str}>`; | ||||
| } | ||||
| 
 | ||||
| connect(inspect, host.Buffer.prototype.inspect); | ||||
| 
 | ||||
| connect(localFunction.prototype.bind, host.Function.prototype.bind); | ||||
| 
 | ||||
| connect(localObject.prototype.__defineGetter__, host.Object.prototype.__defineGetter__); | ||||
| connect(localObject.prototype.__defineSetter__, host.Object.prototype.__defineSetter__); | ||||
| connect(localObject.prototype.__lookupGetter__, host.Object.prototype.__lookupGetter__); | ||||
| connect(localObject.prototype.__lookupSetter__, host.Object.prototype.__lookupSetter__); | ||||
| 
 | ||||
| /* | ||||
|  * PrepareStackTrace sanitization | ||||
|  */ | ||||
| 
 | ||||
| const oldPrepareStackTraceDesc = localReflectGetOwnPropertyDescriptor(LocalError, 'prepareStackTrace'); | ||||
| 
 | ||||
| let currentPrepareStackTrace = LocalError.prepareStackTrace; | ||||
| const wrappedPrepareStackTrace = new LocalWeakMap(); | ||||
| if (typeof currentPrepareStackTrace === 'function') { | ||||
| 	wrappedPrepareStackTrace.set(currentPrepareStackTrace, currentPrepareStackTrace); | ||||
| } | ||||
| 
 | ||||
| let OriginalCallSite; | ||||
| LocalError.prepareStackTrace = (e, sst) => { | ||||
| 	OriginalCallSite = sst[0].constructor; | ||||
| }; | ||||
| new LocalError().stack; | ||||
| if (typeof OriginalCallSite === 'function') { | ||||
| 	LocalError.prepareStackTrace = undefined; | ||||
| 
 | ||||
| 	function makeCallSiteGetters(list) { | ||||
| 		const callSiteGetters = []; | ||||
| 		for (let i=0; i<list.length; i++) { | ||||
| 			const name = list[i]; | ||||
| 			const func = OriginalCallSite.prototype[name]; | ||||
| 			callSiteGetters[i] = {__proto__: null, | ||||
| 				name, | ||||
| 				propName: '_' + name, | ||||
| 				func: (thiz) => { | ||||
| 					return localReflectApply(func, thiz, []); | ||||
| 				} | ||||
| 			}; | ||||
| 		} | ||||
| 		return callSiteGetters; | ||||
| 	} | ||||
| 
 | ||||
| 	function applyCallSiteGetters(thiz, callSite, getters) { | ||||
| 		for (let i=0; i<getters.length; i++) { | ||||
| 			const getter = getters[i]; | ||||
| 			localReflectDefineProperty(thiz, getter.propName, { | ||||
| 				__proto__: null, | ||||
| 				value: getter.func(callSite) | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	const callSiteGetters = makeCallSiteGetters([ | ||||
| 		'getTypeName', | ||||
| 		'getFunctionName', | ||||
| 		'getMethodName', | ||||
| 		'getFileName', | ||||
| 		'getLineNumber', | ||||
| 		'getColumnNumber', | ||||
| 		'getEvalOrigin', | ||||
| 		'isToplevel', | ||||
| 		'isEval', | ||||
| 		'isNative', | ||||
| 		'isConstructor', | ||||
| 		'isAsync', | ||||
| 		'isPromiseAll', | ||||
| 		'getPromiseIndex' | ||||
| 	]); | ||||
| 
 | ||||
| 	class CallSite { | ||||
| 		constructor(callSite) { | ||||
| 			applyCallSiteGetters(this, callSite, callSiteGetters); | ||||
| 		} | ||||
| 		getThis() { | ||||
| 			return undefined; | ||||
| 		} | ||||
| 		getFunction() { | ||||
| 			return undefined; | ||||
| 		} | ||||
| 		toString() { | ||||
| 			return 'CallSite {}'; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	for (let i=0; i<callSiteGetters.length; i++) { | ||||
| 		const name = callSiteGetters[i].name; | ||||
| 		const funcProp = localReflectGetOwnPropertyDescriptor(OriginalCallSite.prototype, name); | ||||
| 		if (!funcProp) continue; | ||||
| 		const propertyName = callSiteGetters[i].propName; | ||||
| 		const func = {func() { | ||||
| 			return this[propertyName]; | ||||
| 		}}.func; | ||||
| 		const nameProp = localReflectGetOwnPropertyDescriptor(func, 'name'); | ||||
| 		if (!nameProp) throw localUnexpected(); | ||||
| 		nameProp.value = name; | ||||
| 		if (!localReflectDefineProperty(func, 'name', nameProp)) throw localUnexpected(); | ||||
| 		funcProp.value = func; | ||||
| 		if (!localReflectDefineProperty(CallSite.prototype, name, funcProp)) throw localUnexpected(); | ||||
| 	} | ||||
| 
 | ||||
| 	if (!localReflectDefineProperty(LocalError, 'prepareStackTrace', { | ||||
| 		configurable: false, | ||||
| 		enumerable: false, | ||||
| 		get() { | ||||
| 			return currentPrepareStackTrace; | ||||
| 		}, | ||||
| 		set(value) { | ||||
| 			if (typeof(value) !== 'function') { | ||||
| 				currentPrepareStackTrace = value; | ||||
| 				return; | ||||
| 			} | ||||
| 			const wrapped = localReflectApply(localWeakMapGet, wrappedPrepareStackTrace, [value]); | ||||
| 			if (wrapped) { | ||||
| 				currentPrepareStackTrace = wrapped; | ||||
| 				return; | ||||
| 			} | ||||
| 			const newWrapped = (error, sst) => { | ||||
| 				if (localArrayIsArray(sst)) { | ||||
| 					for (let i=0; i < sst.length; i++) { | ||||
| 						const cs = sst[i]; | ||||
| 						if (typeof cs === 'object' && localReflectGetPrototypeOf(cs) === OriginalCallSite.prototype) { | ||||
| 							sst[i] = new CallSite(cs); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				return value(error, sst); | ||||
| 			}; | ||||
| 			wrappedPrepareStackTrace.set(value, newWrapped); | ||||
| 			wrappedPrepareStackTrace.set(newWrapped, newWrapped); | ||||
| 			currentPrepareStackTrace = newWrapped; | ||||
| 		} | ||||
| 	})) throw localUnexpected(); | ||||
| } else if (oldPrepareStackTraceDesc) { | ||||
| 	localReflectDefineProperty(LocalError, 'prepareStackTrace', oldPrepareStackTraceDesc); | ||||
| } else { | ||||
| 	localReflectDeleteProperty(LocalError, 'prepareStackTrace'); | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Exception sanitization | ||||
|  */ | ||||
| 
 | ||||
| const withProxy = localObjectFreeze({ | ||||
| 	__proto__: null, | ||||
| 	has(target, key) { | ||||
| 		if (key === host.INTERNAL_STATE_NAME) return false; | ||||
| 		return localReflectHas(target, key); | ||||
| 	} | ||||
| }); | ||||
| 
 | ||||
| const interanState = localObjectFreeze({ | ||||
| 	__proto__: null, | ||||
| 	wrapWith(x) { | ||||
| 		return new LocalProxy(x, withProxy); | ||||
| 	}, | ||||
| 	handleException: ensureThis, | ||||
| 	import(what) { | ||||
| 		throw new VMError('Dynamic Import not supported'); | ||||
| 	} | ||||
| }); | ||||
| 
 | ||||
| if (!localReflectDefineProperty(global, host.INTERNAL_STATE_NAME, { | ||||
| 	__proto__: null, | ||||
| 	configurable: false, | ||||
| 	enumerable: false, | ||||
| 	writable: false, | ||||
| 	value: interanState | ||||
| })) throw localUnexpected(); | ||||
| 
 | ||||
| /* | ||||
|  * Eval sanitization | ||||
|  */ | ||||
| 
 | ||||
| function throwAsync() { | ||||
| 	return new VMError('Async not available'); | ||||
| } | ||||
| 
 | ||||
| function makeFunction(inputArgs, isAsync, isGenerator) { | ||||
| 	const lastArgs = inputArgs.length - 1; | ||||
| 	let code = lastArgs >= 0 ? `${inputArgs[lastArgs]}` : ''; | ||||
| 	let args = lastArgs > 0 ? `${inputArgs[0]}` : ''; | ||||
| 	for (let i = 1; i < lastArgs; i++) { | ||||
| 		args += `,${inputArgs[i]}`; | ||||
| 	} | ||||
| 	try { | ||||
| 		code = host.transformAndCheck(args, code, isAsync, isGenerator, allowAsync); | ||||
| 	} catch (e) { | ||||
| 		throw bridge.from(e); | ||||
| 	} | ||||
| 	return localEval(code); | ||||
| } | ||||
| 
 | ||||
| const FunctionHandler = { | ||||
| 	__proto__: null, | ||||
| 	apply(target, thiz, args) { | ||||
| 		return makeFunction(args, this.isAsync, this.isGenerator); | ||||
| 	}, | ||||
| 	construct(target, args, newTarget) { | ||||
| 		return makeFunction(args, this.isAsync, this.isGenerator); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| const EvalHandler = { | ||||
| 	__proto__: null, | ||||
| 	apply(target, thiz, args) { | ||||
| 		if (args.length === 0) return undefined; | ||||
| 		let code = `${args[0]}`; | ||||
| 		try { | ||||
| 			code = host.transformAndCheck(null, code, false, false, allowAsync); | ||||
| 		} catch (e) { | ||||
| 			throw bridge.from(e); | ||||
| 		} | ||||
| 		return localEval(code); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| const AsyncErrorHandler = { | ||||
| 	__proto__: null, | ||||
| 	apply(target, thiz, args) { | ||||
| 		throw throwAsync(); | ||||
| 	}, | ||||
| 	construct(target, args, newTarget) { | ||||
| 		throw throwAsync(); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| function makeCheckFunction(isAsync, isGenerator) { | ||||
| 	if (isAsync && !allowAsync) return AsyncErrorHandler; | ||||
| 	return { | ||||
| 		__proto__: FunctionHandler, | ||||
| 		isAsync, | ||||
| 		isGenerator | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| function overrideWithProxy(obj, prop, value, handler) { | ||||
| 	const proxy = new LocalProxy(value, handler); | ||||
| 	if (!localReflectDefineProperty(obj, prop, {__proto__: null, value: proxy})) throw localUnexpected(); | ||||
| 	return proxy; | ||||
| } | ||||
| 
 | ||||
| const proxiedFunction = overrideWithProxy(localFunction.prototype, 'constructor', localFunction, makeCheckFunction(false, false)); | ||||
| if (GeneratorFunction) { | ||||
| 	if (!localReflectSetPrototypeOf(GeneratorFunction, proxiedFunction)) throw localUnexpected(); | ||||
| 	overrideWithProxy(GeneratorFunction.prototype, 'constructor', GeneratorFunction, makeCheckFunction(false, true)); | ||||
| } | ||||
| if (AsyncFunction) { | ||||
| 	if (!localReflectSetPrototypeOf(AsyncFunction, proxiedFunction)) throw localUnexpected(); | ||||
| 	overrideWithProxy(AsyncFunction.prototype, 'constructor', AsyncFunction, makeCheckFunction(true, false)); | ||||
| } | ||||
| if (AsyncGeneratorFunction) { | ||||
| 	if (!localReflectSetPrototypeOf(AsyncGeneratorFunction, proxiedFunction)) throw localUnexpected(); | ||||
| 	overrideWithProxy(AsyncGeneratorFunction.prototype, 'constructor', AsyncGeneratorFunction, makeCheckFunction(true, true)); | ||||
| } | ||||
| 
 | ||||
| global.Function = proxiedFunction; | ||||
| global.eval = new LocalProxy(localEval, EvalHandler); | ||||
| 
 | ||||
| /* | ||||
|  * Promise sanitization | ||||
|  */ | ||||
| 
 | ||||
| if (localPromise && !allowAsync) { | ||||
| 
 | ||||
| 	const PromisePrototype = localPromise.prototype; | ||||
| 
 | ||||
| 	overrideWithProxy(PromisePrototype, 'then', PromisePrototype.then, AsyncErrorHandler); | ||||
| 	// This seems not to work, and will produce
 | ||||
| 	// UnhandledPromiseRejectionWarning: TypeError: Method Promise.prototype.then called on incompatible receiver [object Object].
 | ||||
| 	// This is likely caused since the host.Promise.prototype.then cannot use the VM Proxy object.
 | ||||
| 	// Contextify.connect(host.Promise.prototype.then, Promise.prototype.then);
 | ||||
| 
 | ||||
| 	if (PromisePrototype.finally) { | ||||
| 		overrideWithProxy(PromisePrototype, 'finally', PromisePrototype.finally, AsyncErrorHandler); | ||||
| 		// Contextify.connect(host.Promise.prototype.finally, Promise.prototype.finally);
 | ||||
| 	} | ||||
| 	if (Promise.prototype.catch) { | ||||
| 		overrideWithProxy(PromisePrototype, 'catch', PromisePrototype.catch, AsyncErrorHandler); | ||||
| 		// Contextify.connect(host.Promise.prototype.catch, Promise.prototype.catch);
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| function readonly(other, mock) { | ||||
| 	// Note: other@other(unsafe) mock@other(unsafe) returns@this(unsafe) throws@this(unsafe)
 | ||||
| 	if (!mock) return fromWithFactory(readonlyFactory, other); | ||||
| 	const tmock = from(mock); | ||||
| 	return fromWithFactory(obj=>new ReadOnlyMockHandler(obj, tmock), other); | ||||
| } | ||||
| 
 | ||||
| return { | ||||
| 	__proto__: null, | ||||
| 	readonly, | ||||
| 	global | ||||
| }; | ||||
| 
 | ||||
| module.exports = __webpack_exports__; | ||||
| /******/ })() | ||||
| ; | ||||
|  | @ -1,5 +1,5 @@ | |||
| variable "NODE_VERSION" { | ||||
|   default = "12" | ||||
|   default = "16" | ||||
| } | ||||
| 
 | ||||
| target "node-version" { | ||||
|  |  | |||
|  | @ -2,9 +2,7 @@ module.exports = { | |||
|   clearMocks: true, | ||||
|   moduleFileExtensions: ['js', 'ts'], | ||||
|   setupFiles: ["dotenv/config"], | ||||
|   testEnvironment: 'node', | ||||
|   testMatch: ['**/*.test.ts'], | ||||
|   testRunner: 'jest-circus/runner', | ||||
|   transform: { | ||||
|     '^.+\\.ts$': 'ts-jest' | ||||
|   }, | ||||
|  |  | |||
							
								
								
									
										28
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								package.json
									
										
									
									
									
								
							|  | @ -4,8 +4,8 @@ | |||
|   "main": "lib/main.js", | ||||
|   "scripts": { | ||||
|     "build": "tsc && ncc build", | ||||
|     "format": "prettier --write **/*.ts", | ||||
|     "format-check": "prettier --check **/*.ts", | ||||
|     "format": "prettier --write '**/*.ts'", | ||||
|     "format-check": "prettier --check '**/*.ts'", | ||||
|     "test": "jest --coverage", | ||||
|     "pre-checkin": "yarn run format && yarn run build" | ||||
|   }, | ||||
|  | @ -13,6 +13,9 @@ | |||
|     "type": "git", | ||||
|     "url": "git+https://github.com/docker/login-action.git" | ||||
|   }, | ||||
|   "engines": { | ||||
|     "node": "^16" | ||||
|   }, | ||||
|   "keywords": [ | ||||
|     "actions", | ||||
|     "docker", | ||||
|  | @ -32,19 +35,16 @@ | |||
|     "@actions/io": "^1.1.1", | ||||
|     "@aws-sdk/client-ecr": "^3.45.0", | ||||
|     "@aws-sdk/client-ecr-public": "^3.45.0", | ||||
|     "proxy-agent": "^5.0.0" | ||||
|     "http-proxy-agent": "^5.0.0", | ||||
|     "https-proxy-agent": "^5.0.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^26.0.23", | ||||
|     "@types/node": "^14.17.4", | ||||
|     "@vercel/ncc": "^0.28.6", | ||||
|     "dotenv": "^8.6.0", | ||||
|     "jest": "^26.6.3", | ||||
|     "jest-circus": "^26.6.3", | ||||
|     "jest-runtime": "^26.6.3", | ||||
|     "prettier": "^2.3.2", | ||||
|     "ts-jest": "^26.5.6", | ||||
|     "typescript": "^3.9.10", | ||||
|     "typescript-formatter": "^7.2.2" | ||||
|     "@types/node": "^16.11.26", | ||||
|     "@vercel/ncc": "^0.33.3", | ||||
|     "dotenv": "^16.0.0", | ||||
|     "jest": "^27.2.5", | ||||
|     "prettier": "^2.5.1", | ||||
|     "ts-jest": "^27.1.2", | ||||
|     "typescript": "^4.4.4" | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -2,7 +2,8 @@ import * as core from '@actions/core'; | |||
| import {ECR} from '@aws-sdk/client-ecr'; | ||||
| import {ECRPUBLIC} from '@aws-sdk/client-ecr-public'; | ||||
| import {NodeHttpHandler} from '@aws-sdk/node-http-handler'; | ||||
| import ProxyAgent from 'proxy-agent'; | ||||
| import {HttpProxyAgent} from 'http-proxy-agent'; | ||||
| import {HttpsProxyAgent} from 'https-proxy-agent'; | ||||
| 
 | ||||
| const ecrRegistryRegex = /^(([0-9]{12})\.dkr\.ecr\.(.+)\.amazonaws\.com(.cn)?)(\/([^:]+)(:.+)?)?$/; | ||||
| 
 | ||||
|  | @ -60,14 +61,14 @@ export const getRegistriesData = async (registry: string, username?: string, pas | |||
|   const httpProxy = process.env.http_proxy || process.env.HTTP_PROXY || ''; | ||||
|   if (httpProxy) { | ||||
|     core.debug(`Using http proxy ${httpProxy}`); | ||||
|     httpProxyAgent = new ProxyAgent(httpProxy); | ||||
|     httpProxyAgent = new HttpProxyAgent(httpProxy); | ||||
|   } | ||||
| 
 | ||||
|   let httpsProxyAgent: any = null; | ||||
|   const httpsProxy = process.env.https_proxy || process.env.HTTPS_PROXY || ''; | ||||
|   if (httpsProxy) { | ||||
|     core.debug(`Using https proxy ${httpsProxy}`); | ||||
|     httpsProxyAgent = new ProxyAgent(httpsProxy); | ||||
|     httpsProxyAgent = new HttpsProxyAgent(httpsProxy); | ||||
|   } | ||||
| 
 | ||||
|   const credentials = | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ export async function run(): Promise<void> { | |||
|     stateHelper.setRegistry(input.registry); | ||||
|     stateHelper.setLogout(input.logout); | ||||
|     await docker.login(input.registry, input.username, input.password, input.ecr); | ||||
|   } catch (error) { | ||||
|   } catch (error: any) { | ||||
|     core.setFailed(error.message); | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,11 +1,7 @@ | |||
| { | ||||
|   "compilerOptions": { | ||||
|     "target": "es6", | ||||
|     "target": "esnext", | ||||
|     "module": "commonjs", | ||||
|     "lib": [ | ||||
|       "es6", | ||||
|       "dom" | ||||
|     ], | ||||
|     "newLine": "lf", | ||||
|     "outDir": "./lib", | ||||
|     "rootDir": "./src", | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue