diff --git a/packages/extension/package.json b/packages/extension/package.json index 82a48ffcb..25d520d95 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -26,8 +26,8 @@ "test:watch": "vitest --config vitest.config.ts" }, "dependencies": { - "@endo/lockdown": "^1.0.7", - "@endo/promise-kit": "^1.1.2", + "@endo/lockdown": "^1.0.9", + "@endo/promise-kit": "^1.1.4", "@metamask/snaps-utils": "^7.8.0", "@metamask/utils": "^9.1.0", "@ocap/shims": "workspace:^", diff --git a/packages/shims/package.json b/packages/shims/package.json index d064ddcbb..a257b5b88 100644 --- a/packages/shims/package.json +++ b/packages/shims/package.json @@ -33,14 +33,14 @@ "test:watch": "vitest --config vitest.config.ts" }, "dependencies": { - "@endo/eventual-send": "^1.2.2", - "@endo/lockdown": "^1.0.7", + "@endo/eventual-send": "^1.2.4", + "@endo/lockdown": "^1.0.9", "ses": "^1.7.0" }, "devDependencies": { + "@endo/bundle-source": "^3.3.0", "@metamask/auto-changelog": "^3.4.4", "deepmerge": "^4.3.1", - "mkdirp": "^3.0.1", "rimraf": "^6.0.1", "vitest": "^2.0.5" }, diff --git a/packages/shims/scripts/bundle.js b/packages/shims/scripts/bundle.js index 37e54b704..45157d98d 100644 --- a/packages/shims/scripts/bundle.js +++ b/packages/shims/scripts/bundle.js @@ -1,34 +1,42 @@ import 'ses'; import '@endo/lockdown/commit.js'; -import { copyFile } from 'fs/promises'; -import { mkdirp } from 'mkdirp'; +import bundleSource from '@endo/bundle-source'; +import { copyFile, mkdir, writeFile } from 'fs/promises'; import path from 'path'; -// TODO: Bundle the eventual send shim using bundle-source after the next endo release. -// import bundleSource from '@endo/bundle-source'; import { rimraf } from 'rimraf'; +import { fileURLToPath } from 'url'; console.log('Bundling shims...'); const rootDir = path.resolve(import.meta.dirname, '..'); const src = path.resolve(rootDir, 'src'); const dist = path.resolve(rootDir, 'dist'); - -// const eventualSendSrc = path.resolve(rootDir, '../../node_modules/@endo/eventual-send/shim.js'); - const fileNames = { endoify: 'endoify.mjs', eventualSend: 'eventual-send.mjs', - lockdown: 'apply-lockdown.mjs', + applyLockdown: 'apply-lockdown.mjs', }; -await mkdirp(dist); +await mkdir(dist, { recursive: true }); await rimraf(`${dist}/*`); -for (const fileName of Object.values(fileNames)) { +for (const fileName of [fileNames.endoify, fileNames.applyLockdown]) { await copyFile(path.resolve(src, fileName), path.resolve(dist, fileName)); } -// const { source } = await bundleSource(eventualSendSrc, { format: 'endoScript' }); +const eventualSendSourcePath = fileURLToPath( + import.meta.resolve('@endo/eventual-send/shim.js'), +); + +const { source: eventualSendBundleSource } = await bundleSource( + eventualSendSourcePath, + { format: 'endoScript' }, +); + +await writeFile( + path.resolve(dist, fileNames.eventualSend), + eventualSendBundleSource, +); console.log('Success!'); diff --git a/packages/shims/src/eventual-send.mjs b/packages/shims/src/eventual-send.mjs deleted file mode 100644 index 1d6699605..000000000 --- a/packages/shims/src/eventual-send.mjs +++ /dev/null @@ -1,1461 +0,0 @@ -'use strict'; -(functors => { - - const cell = (name, value = undefined) => { - const observers = []; - return Object.freeze({ - get: Object.freeze(() => { - return value; - }), - set: Object.freeze((newValue) => { - value = newValue; - for (const observe of observers) { - observe(value); - } - }), - observe: Object.freeze((observe) => { - observers.push(observe); - observe(value); - }), - enumerable: true, - }); - }; - - const cells = [ - { - makeEnvironmentCaptor: cell("makeEnvironmentCaptor"), - getEnvironmentOption: cell("getEnvironmentOption"), - getEnvironmentOptionsList: cell("getEnvironmentOptionsList"), - environmentOptionsListHas: cell("environmentOptionsListHas"), - }, - { - }, - { - trackTurns: cell("trackTurns"), - }, - { - makeMessageBreakpointTester: cell("makeMessageBreakpointTester"), - }, - { - getMethodNames: cell("getMethodNames"), - localApplyFunction: cell("localApplyFunction"), - localApplyMethod: cell("localApplyMethod"), - localGet: cell("localGet"), - }, - { - makePostponedHandler: cell("makePostponedHandler"), - }, - { - makeHandledPromise: cell("makeHandledPromise"), - }, - { - }, - ]; - - Object.defineProperties(cells[1], Object.getOwnPropertyDescriptors(cells[0])); - - const namespaces = cells.map(cells => Object.freeze(Object.create(null, { - ...cells, - // Make this appear like an ESM module namespace object. - [Symbol.toStringTag]: { - value: 'Module', - writable: false, - enumerable: false, - configurable: false, - }, - }))); - - for (let index = 0; index < namespaces.length; index += 1) { - cells[index]['*'] = cell('*', namespaces[index]); - } - -function observeImports(map, importName, importIndex) { - for (const [name, observers] of map.get(importName)) { - const cell = cells[importIndex][name]; - if (cell === undefined) { - throw new ReferenceError(`Cannot import name ${name}`); - } - for (const observer of observers) { - cell.observe(observer); - } - } -} - - - functors[0]({ - imports(entries) { - const map = new Map(entries); - }, - liveVar: { - }, - onceVar: { - makeEnvironmentCaptor: cells[0].makeEnvironmentCaptor.set, - getEnvironmentOption: cells[0].getEnvironmentOption.set, - getEnvironmentOptionsList: cells[0].getEnvironmentOptionsList.set, - environmentOptionsListHas: cells[0].environmentOptionsListHas.set, - }, - importMeta: {}, - }); - functors[1]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "./src/env-options.js", 0); - }, - liveVar: { - }, - onceVar: { - }, - importMeta: {}, - }); - functors[2]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "@endo/env-options", 1); - }, - liveVar: { - }, - onceVar: { - trackTurns: cells[2].trackTurns.set, - }, - importMeta: {}, - }); - functors[3]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "@endo/env-options", 1); - }, - liveVar: { - }, - onceVar: { - makeMessageBreakpointTester: cells[3].makeMessageBreakpointTester.set, - }, - importMeta: {}, - }); - functors[4]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "./message-breakpoints.js", 3); - }, - liveVar: { - }, - onceVar: { - getMethodNames: cells[4].getMethodNames.set, - localApplyFunction: cells[4].localApplyFunction.set, - localApplyMethod: cells[4].localApplyMethod.set, - localGet: cells[4].localGet.set, - }, - importMeta: {}, - }); - functors[5]({ - imports(entries) { - const map = new Map(entries); - }, - liveVar: { - }, - onceVar: { - makePostponedHandler: cells[5].makePostponedHandler.set, - }, - importMeta: {}, - }); - functors[6]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "./track-turns.js", 2); - observeImports(map, "./local.js", 4); - observeImports(map, "./postponed.js", 5); - }, - liveVar: { - }, - onceVar: { - makeHandledPromise: cells[6].makeHandledPromise.set, - }, - importMeta: {}, - }); - functors[7]({ - imports(entries) { - const map = new Map(entries); - observeImports(map, "./src/handled-promise.js", 6); - }, - liveVar: { - }, - onceVar: { - }, - importMeta: {}, - }); - - return cells[cells.length - 1]['*'].get(); -})([// === functors[0] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; $h‍_imports([]); /* global globalThis */ -/* @ts-check*/ - -/* `@endo/env-options` needs to be imported quite early, and so should*/ -/* avoid importing from ses or anything that depends on ses.*/ - -/* /////////////////////////////////////////////////////////////////////////////*/ -/* Prelude of cheap good - enough imitations of things we'd use or*/ -/* do differently if we could depend on ses*/ - -const{freeze}=Object; -const{apply}=Reflect; - -/* Should be equivalent to the one in ses' commons.js even though it*/ -/* uses the other technique.*/ -const uncurryThis= -(fn)=> -(receiver,...args)=> -apply(fn,receiver,args); -const arrayPush=uncurryThis(Array.prototype.push); -const arrayIncludes=uncurryThis(Array.prototype.includes); -const stringSplit=uncurryThis(String.prototype.split); - -const q=JSON.stringify; - -const Fail=(literals,...args)=>{ -let msg=literals[0]; -for(let i=0;i{ -const capturedEnvironmentOptionNames=[]; - -/** - * Gets an environment option by name and returns the option value or the - * given default. - * - * @param {string} optionName - * @param {string} defaultSetting - * @param {string[]} [optOtherValues] - * If provided, the option value must be included or match `defaultSetting`. - * @returns {string} - */ -const getEnvironmentOption=( -optionName, -defaultSetting, -optOtherValues=undefined)=> -{ -typeof optionName==='string'|| -Fail `Environment option name ${q(optionName)} must be a string.`; -typeof defaultSetting==='string'|| -Fail `Environment option default setting ${q( -defaultSetting) - } must be a string.`; - -/** @type {string} */ -let setting=defaultSetting; -const globalProcess=aGlobal.process||undefined; -const globalEnv= -typeof globalProcess==='object'&&globalProcess.env||undefined; -if(typeof globalEnv==='object'){ -if(optionName in globalEnv){ -if(!dropNames){ -arrayPush(capturedEnvironmentOptionNames,optionName); - } -const optionValue=globalEnv[optionName]; -/* eslint-disable-next-line @endo/no-polymorphic-call*/ -typeof optionValue==='string'|| -Fail `Environment option named ${q( -optionName) - }, if present, must have a corresponding string value, got ${q( -optionValue) - }`; -setting=optionValue; - } - } -optOtherValues===undefined|| -setting===defaultSetting|| -arrayIncludes(optOtherValues,setting)|| -Fail `Unrecognized ${q(optionName)} value ${q( -setting) - }. Expected one of ${q([defaultSetting,...optOtherValues])}`; -return setting; - }; -freeze(getEnvironmentOption); - -/** - * @param {string} optionName - * @returns {string[]} - */ -const getEnvironmentOptionsList=(optionName)=>{ -const option=getEnvironmentOption(optionName,''); -return freeze(option===''?[]:stringSplit(option,',')); - }; -freeze(getEnvironmentOptionsList); - -const environmentOptionsListHas=(optionName,element)=> -arrayIncludes(getEnvironmentOptionsList(optionName),element); - -const getCapturedEnvironmentOptionNames=()=>{ -return freeze([...capturedEnvironmentOptionNames]); - }; -freeze(getCapturedEnvironmentOptionNames); - -return freeze({ -getEnvironmentOption, -getEnvironmentOptionsList, -environmentOptionsListHas, -getCapturedEnvironmentOptionNames}); - - };$h‍_once.makeEnvironmentCaptor(makeEnvironmentCaptor); -freeze(makeEnvironmentCaptor); - -/** - * For the simple case, where the global in question is `globalThis` and no - * reporting of option names is desired. - */ -const { -getEnvironmentOption, -getEnvironmentOptionsList, -environmentOptionsListHas}= -makeEnvironmentCaptor(globalThis,true);$h‍_once.getEnvironmentOption(getEnvironmentOption);$h‍_once.getEnvironmentOptionsList(getEnvironmentOptionsList);$h‍_once.environmentOptionsListHas(environmentOptionsListHas); -})() -, -// === functors[1] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; $h‍_imports([["./src/env-options.js", []]]); -})() -, -// === functors[2] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; let getEnvironmentOption,environmentOptionsListHas;$h‍_imports([["@endo/env-options", [["getEnvironmentOption", [$h‍_a => (getEnvironmentOption = $h‍_a)]],["environmentOptionsListHas", [$h‍_a => (environmentOptionsListHas = $h‍_a)]]]]]); - - - - - -/* NOTE: We can't import these because they're not in scope before lockdown.*/ -/* We also cannot currently import them because it would create a cyclic*/ -/* dependency, though this is more easily fixed.*/ -/* import { assert, X, Fail } from '@endo/errors';*/ -/* See also https://github.com/Agoric/agoric-sdk/issues/9515*/ - -/* WARNING: Global Mutable State!*/ -/* This state is communicated to `assert` that makes it available to the*/ -/* causal console, which affects the console log output. Normally we*/ -/* regard the ability to see console log output as a meta-level privilege*/ -/* analogous to the ability to debug. Aside from that, this module should*/ -/* not have any observably mutable state.*/ - -let hiddenPriorError; -let hiddenCurrentTurn=0; -let hiddenCurrentEvent=0; - -/* Turn on if you seem to be losing error logging at the top of the event loop*/ -const VERBOSE=environmentOptionsListHas('DEBUG','track-turns'); - -/* Track-turns is disabled by default and can be enabled by an environment*/ -/* option.*/ -const ENABLED= -getEnvironmentOption('TRACK_TURNS','disabled',['enabled'])==='enabled'; - -/* We hoist the following functions out of trackTurns() to discourage the*/ -/* closures from holding onto 'args' or 'func' longer than necessary,*/ -/* which we've seen cause HandledPromise arguments to be retained for*/ -/* a surprisingly long time.*/ - -const addRejectionNote=(detailsNote)=>(reason)=>{ -if(reason instanceof Error){ -globalThis.assert.note(reason,detailsNote); - } -if(VERBOSE){ -console.log('REJECTED at top of event loop',reason); - } - }; - -const wrapFunction= -(func,sendingError,X)=> -(...args)=>{ -hiddenPriorError=sendingError; -hiddenCurrentTurn+=1; -hiddenCurrentEvent=0; -try{ -let result; -try{ -result=func(...args); - }catch(err){ -if(err instanceof Error){ -globalThis.assert.note( -err, -X `Thrown from: ${hiddenPriorError}:${hiddenCurrentTurn}.${hiddenCurrentEvent}`); - - } -if(VERBOSE){ -console.log('THROWN to top of event loop',err); - } -throw err; - } -/* Must capture this now, not when the catch triggers.*/ -const detailsNote=X `Rejection from: ${hiddenPriorError}:${hiddenCurrentTurn}.${hiddenCurrentEvent}`; -Promise.resolve(result).catch(addRejectionNote(detailsNote)); -return result; - }finally{ -hiddenPriorError=undefined; - } - }; - -/** - * Given a list of `TurnStarterFn`s, returns a list of `TurnStarterFn`s whose - * `this`-free call behaviors are not observably different to those that - * cannot see console output. The only purpose is to cause additional - * information to appear on the console. - * - * The call to `trackTurns` is itself a sending event, that occurs in some call - * stack in some turn number at some event number within that turn. Each call - * to any of the returned `TurnStartFn`s is a receiving event that begins a new - * turn. This sending event caused each of those receiving events. - * - * @template {TurnStarterFn[]} T - * @param {T} funcs - * @returns {T} - */ -const trackTurns=(funcs)=>{ -if(!ENABLED||typeof globalThis==='undefined'||!globalThis.assert){ -return funcs; - } -const{details:X,note:annotateError}=globalThis.assert; - -hiddenCurrentEvent+=1; -const sendingError=Error( - `Event: ${hiddenCurrentTurn}.${hiddenCurrentEvent}`); - -if(hiddenPriorError!==undefined){ -annotateError(sendingError,X `Caused by: ${hiddenPriorError}`); - } - -return (/** @type {T} */ -funcs.map((func)=>func&&wrapFunction(func,sendingError,X))); - - }; - -/** - * An optional function that is not this-sensitive, expected to be called at - * bottom of stack to start a new turn. - * - * @typedef {((...args: any[]) => any) | undefined} TurnStarterFn - */$h‍_once.trackTurns(trackTurns); -})() -, -// === functors[3] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; let getEnvironmentOption;$h‍_imports([["@endo/env-options", [["getEnvironmentOption", [$h‍_a => (getEnvironmentOption = $h‍_a)]]]]]); - -const{quote:q,Fail}=assert; - -const{hasOwn,freeze,entries}=Object; - -/** - * @typedef {string | '*'} MatchStringTag - * A star `'*'` matches any recipient. Otherwise, the string is - * matched against the value of a recipient's `@@toStringTag` - * after stripping out any leading `'Alleged: '` or `'DebugName: '` - * prefix. For objects defined with `Far` this is the first argument, - * known as the `farName`. For exos, this is the tag. - */ -/** - * @typedef {string | '*'} MatchMethodName - * A star `'*'` matches any method name. Otherwise, the string is - * matched against the method name. Currently, this is only an exact match. - * However, beware that we may introduce a string syntax for - * symbol method names. - */ -/** - * @typedef {number | '*'} MatchCountdown - * A star `'*'` will always breakpoint. Otherwise, the string - * must be a non-negative integer. Once that is zero, always breakpoint. - * Otherwise decrement by one each time it matches until it reaches zero. - * In other words, the countdown represents the number of - * breakpoint occurrences to skip before actually breakpointing. - */ - -/** - * This is the external JSON representation, in which - * - the outer property name is the class-like tag or '*', - * - the inner property name is the method name or '*', - * - the value is a non-negative integer countdown or '*'. - * - * @typedef {Record>} MessageBreakpoints - */ - -/** - * This is the internal JSON representation, in which - * - the outer property name is the method name or '*', - * - the inner property name is the class-like tag or '*', - * - the value is a non-negative integer countdown or '*'. - * - * @typedef {Record>} BreakpointTable - */ - -/** - * @typedef {object} MessageBreakpointTester - * @property {() => MessageBreakpoints} getBreakpoints - * @property {(newBreakpoints?: MessageBreakpoints) => void} setBreakpoints - * @property {( - * recipient: object, - * methodName: string | symbol | undefined - * ) => boolean} shouldBreakpoint - */ - -/** - * @param {any} val - * @returns {val is Record} - */ -const isJSONRecord=(val)=> -typeof val==='object'&&val!==null&&!Array.isArray(val); - -/** - * Return `tag` after stripping off any `'Alleged: '` or `'DebugName: '` - * prefix if present. - * ```js - * simplifyTag('Alleged: moola issuer') === 'moola issuer' - * ``` - * If there are multiple such prefixes, only the outer one is removed. - * - * @param {string} tag - * @returns {string} - */ -const simplifyTag=(tag)=>{ -for(const prefix of['Alleged: ','DebugName: ']){ -if(tag.startsWith(prefix)){ -return tag.slice(prefix.length); - } - } -return tag; - }; - -/** - * @param {string} optionName - * @returns {MessageBreakpointTester | undefined} - */ -const makeMessageBreakpointTester=(optionName)=>{ -let breakpoints=JSON.parse(getEnvironmentOption(optionName,'null')); - -if(breakpoints===null){ -return undefined; - } - -/** @type {BreakpointTable} */ -let breakpointsTable; - -const getBreakpoints=()=>breakpoints; -freeze(getBreakpoints); - -const setBreakpoints=(newBreakpoints=breakpoints)=>{ -isJSONRecord(newBreakpoints)|| -Fail `Expected ${q(optionName)} option to be a JSON breakpoints record`; - -/** @type {BreakpointTable} */ -/* @ts-expect-error confused by __proto__*/ -const newBreakpointsTable={__proto__:null}; - -for(const[tag,methodBPs]of entries(newBreakpoints)){ -tag===simplifyTag(tag)|| -Fail `Just use simple tag ${q(simplifyTag(tag))} rather than ${q(tag)}`; -isJSONRecord(methodBPs)|| -Fail `Expected ${q(optionName)} option's ${q( -tag) - } to be a JSON methods breakpoints record`; -for(const[methodName,count]of entries(methodBPs)){ -count==='*'|| -typeof count==='number'&& -Number.isSafeInteger(count)&& -count>=0|| -Fail `Expected ${q(optionName)} option's ${q(tag)}.${q( -methodName) - } to be "*" or a non-negative integer`; - -const classBPs=hasOwn(newBreakpointsTable,methodName)? -newBreakpointsTable[methodName]: -newBreakpointsTable[methodName]={ -/* @ts-expect-error confused by __proto__*/ -__proto__:null}; - -classBPs[tag]=count; - } - } -breakpoints=newBreakpoints; -breakpointsTable=newBreakpointsTable; - }; -freeze(setBreakpoints); - -const shouldBreakpoint=(recipient,methodName)=>{ -if(methodName===undefined||methodName===null){ -/* TODO enable function breakpointing*/ -return false; - } -const classBPs=breakpointsTable[methodName]||breakpointsTable['*']; -if(classBPs===undefined){ -return false; - } -let tag=simplifyTag(recipient[Symbol.toStringTag]); -let count=classBPs[tag]; -if(count===undefined){ -tag='*'; -count=classBPs[tag]; -if(count===undefined){ -return false; - } - } -if(count==='*'){ -return true; - } -if(count===0){ -return true; - } -assert(typeof count==='number'&&count>=1); -classBPs[tag]=count-1; -return false; - }; -freeze(shouldBreakpoint); - -const breakpointTester=freeze({ -getBreakpoints, -setBreakpoints, -shouldBreakpoint}); - -breakpointTester.setBreakpoints(); -return breakpointTester; - };$h‍_once.makeMessageBreakpointTester(makeMessageBreakpointTester); -freeze(makeMessageBreakpointTester); -})() -, -// === functors[4] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; let makeMessageBreakpointTester;$h‍_imports([["./message-breakpoints.js", [["makeMessageBreakpointTester", [$h‍_a => (makeMessageBreakpointTester = $h‍_a)]]]]]); - -const{details:X,quote:q,Fail}=assert; - -const{getOwnPropertyDescriptors,getPrototypeOf,freeze}=Object; -const{apply,ownKeys}=Reflect; - -const ntypeof=(specimen)=>specimen===null?'null':typeof specimen; - -const onDelivery=makeMessageBreakpointTester('ENDO_DELIVERY_BREAKPOINTS'); - -/** - * TODO Consolidate with `isObject` that's currently in `@endo/marshal` - * - * @param {any} val - * @returns {boolean} - */ -const isObject=(val)=>Object(val)===val; - -/** - * Prioritize symbols as earlier than strings. - * - * @param {string|symbol} a - * @param {string|symbol} b - * @returns {-1 | 0 | 1} - */ -const compareStringified=(a,b)=>{ -if(typeof a===typeof b){ -const left=String(a); -const right=String(b); -/* eslint-disable-next-line no-nested-ternary*/ -return leftright?1:0; - } -if(typeof a==='symbol'){ -assert(typeof b==='string'); -return-1; - } -assert(typeof a==='string'); -assert(typeof b==='symbol'); -return 1; - }; - -/** - * @param {any} val - * @returns {(string|symbol)[]} - */ -const getMethodNames=(val)=>{ -let layer=val; -const names=new Set();/* Set to deduplicate*/ -while(layer!==null&&layer!==Object.prototype){ -/* be tolerant of non-objects*/ -const descs=getOwnPropertyDescriptors(layer); -for(const name of ownKeys(descs)){ -/* In case a method is overridden by a non-method,*/ -/* test `val[name]` rather than `layer[name]`*/ -if(typeof val[name]==='function'){ -names.add(name); - } - } -if(!isObject(val)){ -break; - } -layer=getPrototypeOf(layer); - } -return harden([...names].sort(compareStringified)); - }; -/* The top level of the eventual send modules can be evaluated before*/ -/* ses creates `harden`, and so cannot rely on `harden` at top level.*/$h‍_once.getMethodNames(getMethodNames); -freeze(getMethodNames); - -const localApplyFunction=(recipient,args)=>{ -typeof recipient==='function'|| -assert.fail( -X `Cannot invoke target as a function; typeof target is ${q( -ntypeof(recipient)) - }`, -TypeError); - -if(onDelivery&&onDelivery.shouldBreakpoint(recipient,undefined)){ -/* eslint-disable-next-line no-debugger*/ -debugger;/* STEP INTO APPLY*/ -/* Stopped at a breakpoint on this delivery of an eventual function call*/ -/* so that you can step *into* the following `apply` in order to see the*/ -/* function call as it happens. Or step *over* to see what happens*/ -/* after the function call returns.*/ - } -const result=apply(recipient,undefined,args); -return result; - };$h‍_once.localApplyFunction(localApplyFunction); - -const localApplyMethod=(recipient,methodName,args)=>{ -if(methodName===undefined||methodName===null){ -/* Base case; bottom out to apply functions.*/ -return localApplyFunction(recipient,args); - } -if(recipient===undefined||recipient===null){ -assert.fail( -X `Cannot deliver ${q(methodName)} to target; typeof target is ${q( -ntypeof(recipient)) - }`, -TypeError); - - } -const fn=recipient[methodName]; -if(fn===undefined){ -assert.fail( -X `target has no method ${q(methodName)}, has ${q( -getMethodNames(recipient)) - }`, -TypeError); - - } -const ftype=ntypeof(fn); -typeof fn==='function'|| -Fail `invoked method ${q(methodName)} is not a function; it is a ${q( -ftype) - }`; -if(onDelivery&&onDelivery.shouldBreakpoint(recipient,methodName)){ -/* eslint-disable-next-line no-debugger*/ -debugger;/* STEP INTO APPLY*/ -/* Stopped at a breakpoint on this delivery of an eventual method call*/ -/* so that you can step *into* the following `apply` in order to see the*/ -/* method call as it happens. Or step *over* to see what happens*/ -/* after the method call returns.*/ - } -const result=apply(fn,recipient,args); -return result; - };$h‍_once.localApplyMethod(localApplyMethod); - -const localGet=(t,key)=>t[key];$h‍_once.localGet(localGet); -})() -, -// === functors[5] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; $h‍_imports([]); /*/ */ - -/** - * Create a simple postponedHandler that just postpones until donePostponing is - * called. - * - * @param {IMPORT('./types').HandledPromiseConstructor} HandledPromise - * @returns {[Required>, () => void]} postponedHandler and donePostponing callback. - */ -const makePostponedHandler=(HandledPromise)=>{ -/** @type {() => void} */ -let donePostponing; - -const interlockP=new Promise((resolve)=>{ -donePostponing=()=>resolve(undefined); - }); - -const makePostponedOperation=(postponedOperation)=>{ -/* Just wait until the handler is resolved/rejected.*/ -return function postpone(x,...args){ -/* console.log(`forwarding ${postponedOperation} ${args[0]}`);*/ -return new HandledPromise((resolve,reject)=>{ -interlockP. -then((_)=>{ -resolve(HandledPromise[postponedOperation](x,...args)); - }). -catch(reject); - }); - }; - }; - -/** @type {Required>} */ -const postponedHandler={ -get:makePostponedOperation('get'), -getSendOnly:makePostponedOperation('getSendOnly'), -applyFunction:makePostponedOperation('applyFunction'), -applyFunctionSendOnly:makePostponedOperation('applyFunctionSendOnly'), -applyMethod:makePostponedOperation('applyMethod'), -applyMethodSendOnly:makePostponedOperation('applyMethodSendOnly')}; - - -/* @ts-expect-error 2454*/ -assert(donePostponing); - -return[postponedHandler,donePostponing]; - };$h‍_once.makePostponedHandler(makePostponedHandler); -})() -, -// === functors[6] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; let trackTurns,localApplyFunction,localApplyMethod,localGet,getMethodNames,makePostponedHandler;$h‍_imports([["./track-turns.js", [["trackTurns", [$h‍_a => (trackTurns = $h‍_a)]]]],["./local.js", [["localApplyFunction", [$h‍_a => (localApplyFunction = $h‍_a)]],["localApplyMethod", [$h‍_a => (localApplyMethod = $h‍_a)]],["localGet", [$h‍_a => (localGet = $h‍_a)]],["getMethodNames", [$h‍_a => (getMethodNames = $h‍_a)]]]],["./postponed.js", [["makePostponedHandler", [$h‍_a => (makePostponedHandler = $h‍_a)]]]]]); - - - - - - - - - - -const{Fail,details:X,quote:q,note:annotateError}=assert; - -const{ -create, -freeze, -getOwnPropertyDescriptor, -getOwnPropertyDescriptors, -defineProperties, -getPrototypeOf, -setPrototypeOf, -isFrozen, -is:objectIs}= -Object; - -const{apply,construct,ownKeys}=Reflect; - -const SEND_ONLY_RE=/^(.*)SendOnly$/; - -/** - * Coerce to an object property (string or symbol). - * - * @param {any} specimen - * @returns {string | symbol} - */ -const coerceToObjectProperty=(specimen)=>{ -if(typeof specimen==='symbol'){ -return specimen; - } -return String(specimen); - }; - -/* the following method (makeHandledPromise) is part*/ -/* of the shim, and will not be exported by the module once the feature*/ -/* becomes a part of standard javascript*/ - -/** - * Create a HandledPromise class to have it support eventual send - * (wavy-dot) operations. - * - * Based heavily on nanoq - * https://github.com/drses/nanoq/blob/master/src/nanoq.js - * - * Original spec for the infix-bang (predecessor to wavy-dot) desugaring: - * https://web.archive.org/web/20161026162206/http://wiki.ecmascript.org/doku.php?id=strawman:concurrency - * - */ -const makeHandledPromise=()=>{ -const presenceToHandler=new WeakMap(); -/** @type {WeakMap} */ -const presenceToPromise=new WeakMap(); -const promiseToPendingHandler=new WeakMap(); -const promiseToPresence=new WeakMap(); -const forwardedPromiseToPromise=new WeakMap();/* forwarding, union-find-ish*/ - -/** - * You can imagine a forest of trees in which the roots of each tree is an - * unresolved HandledPromise or a non-Promise, and each node's parent is the - * HandledPromise to which it was forwarded. We maintain that mapping of - * forwarded HandledPromise to its resolution in forwardedPromiseToPromise. - * - * We use something like the description of "Find" with "Path splitting" - * to propagate changes down to the children efficiently: - * https://en.wikipedia.org/wiki/Disjoint-set_data_structure - * - * @param {any} target Any value. - * @returns {any} If the target was a HandledPromise, the most-resolved parent - * of it, otherwise the target. - */ -const shorten=(target)=>{ -let p=target; -/* Find the most-resolved value for p.*/ -while(forwardedPromiseToPromise.has(p)){ -p=forwardedPromiseToPromise.get(p); - } -const presence=promiseToPresence.get(p); -if(presence){ -/* Presences are final, so it is ok to propagate*/ -/* this upstream.*/ -while(!objectIs(target,p)){ -const parent=forwardedPromiseToPromise.get(target); -forwardedPromiseToPromise.delete(target); -promiseToPendingHandler.delete(target); -promiseToPresence.set(target,presence); -target=parent; - } - }else{ -/* We propagate p and remove all other pending handlers*/ -/* upstream.*/ -/* Note that everything except presences is covered here.*/ -while(!objectIs(target,p)){ -const parent=forwardedPromiseToPromise.get(target); -forwardedPromiseToPromise.set(target,p); -promiseToPendingHandler.delete(target); -target=parent; - } - } -return target; - }; - -/** - * This special handler accepts Promises, and forwards - * handled Promises to their corresponding fulfilledHandler. - * - * @type {Required>} - */ -let forwardingHandler; -let handle; - -/** - * @param {string} handlerName - * @param {Handler} handler - * @param {string} operation - * @param {any} o - * @param {any[]} opArgs - * @param {Promise} [returnedP] - * @returns {any} - */ -const dispatchToHandler=( -handlerName, -handler, -operation, -o, -opArgs, -returnedP)=> -{ -let actualOp=operation; - -const matchSendOnly=SEND_ONLY_RE.exec(actualOp); - -const makeResult=(result)=>matchSendOnly?undefined:result; - -if(matchSendOnly){ -/* We don't specify the resulting promise if it is sendonly.*/ -returnedP=undefined; - } - -if(matchSendOnly&&typeof handler[actualOp]!=='function'){ -/* Substitute for sendonly with the corresponding non-sendonly operation.*/ -actualOp=matchSendOnly[1]; - } - -/* Fast path: just call the actual operation.*/ -const hfn=handler[actualOp]; -if(typeof hfn==='function'){ -const result=apply(hfn,handler,[o,...opArgs,returnedP]); -return makeResult(result); - } - -if(actualOp==='applyMethod'){ -/* Compose a missing applyMethod by get followed by applyFunction.*/ -const[prop,args]=opArgs; -const getResultP=handle( -o, -'get', -/* The argument to 'get' is a string or symbol.*/ -[coerceToObjectProperty(prop)], -undefined); - -return makeResult(handle(getResultP,'applyFunction',[args],returnedP)); - } - -/* BASE CASE: applyFunction bottoms out into applyMethod, if it exists.*/ -if(actualOp==='applyFunction'){ -const amfn=handler.applyMethod; -if(typeof amfn==='function'){ -/* Downlevel a missing applyFunction to applyMethod with undefined name.*/ -const[args]=opArgs; -const result=apply(amfn,handler,[o,undefined,[args],returnedP]); -return makeResult(result); - } - } - -throw assert.fail( -X `${q(handlerName)} is defined but has no methods needed for ${q( -operation) - } (has ${q(getMethodNames(handler))})`, -TypeError); - - }; - -/** @typedef {{new (executor: HandledExecutor, unfulfilledHandler?: Handler>): Promise, prototype: Promise} & PromiseConstructor & HandledPromiseStaticMethods} HandledPromiseConstructor */ -/** @type {HandledPromiseConstructor} */ -let HandledPromise; - -/** - * This *needs* to be a `function X` so that we can use it as a constructor. - * - * @template R - * @param {HandledExecutor} executor - * @param {Handler>} [pendingHandler] - * @returns {Promise} - */ -function baseHandledPromise(executor,pendingHandler=undefined){ -new.target||Fail `must be invoked with "new"`; -let handledResolve; -let handledReject; -let resolved=false; -let resolvedTarget=null; -let handledP; -let continueForwarding=()=>{ }; -const assertNotYetForwarded=()=>{ -!forwardedPromiseToPromise.has(handledP)|| -assert.fail(X `internal: already forwarded`,TypeError); - }; -const superExecutor=(superResolve,superReject)=>{ -handledResolve=(value)=>{ -if(resolved){ -return; - } -assertNotYetForwarded(); -value=shorten(value); -let targetP; -if( -promiseToPendingHandler.has(value)|| -promiseToPresence.has(value)) -{ -targetP=value; - }else{ -/* We're resolving to a non-promise, so remove our handler.*/ -promiseToPendingHandler.delete(handledP); -targetP=presenceToPromise.get(value); - } -/* Ensure our data structure is a proper tree (avoid cycles).*/ -if(targetP&&!objectIs(targetP,handledP)){ -forwardedPromiseToPromise.set(handledP,targetP); - }else{ -forwardedPromiseToPromise.delete(handledP); - } - -/* Remove stale pending handlers, set to canonical form.*/ -shorten(handledP); - -/* Finish the resolution.*/ -superResolve(value); -resolved=true; -resolvedTarget=value; - -/* We're resolved, so forward any postponed operations to us.*/ -continueForwarding(); - }; -handledReject=(reason)=>{ -if(resolved){ -return; - } -harden(reason); -assertNotYetForwarded(); -promiseToPendingHandler.delete(handledP); -resolved=true; -superReject(reason); -continueForwarding(); - }; - }; -handledP=harden(construct(Promise,[superExecutor],new.target)); - -if(!pendingHandler){ -/* This is insufficient for actual remote handled Promises*/ -/* (too many round-trips), but is an easy way to create a*/ -/* local handled Promise.*/ -[pendingHandler,continueForwarding]= -makePostponedHandler(HandledPromise); - } - -const validateHandler=(h)=>{ -Object(h)===h|| -assert.fail(X `Handler ${h} cannot be a primitive`,TypeError); - }; -validateHandler(pendingHandler); - -/* Until the handled promise is resolved, we use the pendingHandler.*/ -promiseToPendingHandler.set(handledP,pendingHandler); - -const rejectHandled=(reason)=>{ -if(resolved){ -return; - } -assertNotYetForwarded(); -handledReject(reason); - }; - -const resolveWithPresence=( -presenceHandler=pendingHandler, -options={})=> -{ -if(resolved){ -return resolvedTarget; - } -assertNotYetForwarded(); -try{ -/* Sanity checks.*/ -validateHandler(presenceHandler); - -const{proxy:proxyOpts}=options; -let presence; -if(proxyOpts){ -const{ -handler:proxyHandler, -target:proxyTarget, -revokerCallback}= -proxyOpts; -if(revokerCallback){ -/* Create a proxy and its revoke function.*/ -const{proxy,revoke}=Proxy.revocable( -proxyTarget, -proxyHandler); - -presence=proxy; -revokerCallback(revoke); - }else{ -presence=new Proxy(proxyTarget,proxyHandler); - } - }else{ -/* Default presence.*/ -presence=create(null); - } - -/* Validate and install our mapped target (i.e. presence).*/ -resolvedTarget=presence; - -/* Create table entries for the presence mapped to the*/ -/* fulfilledHandler.*/ -presenceToPromise.set(resolvedTarget,handledP); -promiseToPresence.set(handledP,resolvedTarget); -presenceToHandler.set(resolvedTarget,presenceHandler); - -/* We committed to this presence, so resolve.*/ -handledResolve(resolvedTarget); -return resolvedTarget; - }catch(e){ -annotateError(e,X `during resolveWithPresence`); -handledReject(e); -throw e; - } - }; - -const resolveHandled=(target)=>{ -if(resolved){ -return; - } -assertNotYetForwarded(); -try{ -/* Resolve the target.*/ -handledResolve(target); - }catch(e){ -handledReject(e); - } - }; - -/* Invoke the callback to let the user resolve/reject.*/ -executor(resolveHandled,rejectHandled,resolveWithPresence); - -return handledP; - } - -/** - * If the promise `p` is safe, then during the evaluation of the - * expressopns `p.then` and `await p`, `p` cannot mount a reentrancy attack. - * Unfortunately, due to limitations of the current JavaScript standard, - * it seems impossible to prevent `p` from mounting a reentrancy attack - * during the evaluation of `isSafePromise(p)`, and therefore during - * operations like `HandledPromise.resolve(p)` that call - * `isSafePromise(p)` synchronously. - * - * The `@endo/marshal` package defines a related notion of a passable - * promise, i.e., one for which which `passStyleOf(p) === 'promise'`. All - * passable promises are also safe. But not vice versa because the - * requirements for a promise to be passable are slightly greater. A safe - * promise must not override `then` or `constructor`. A passable promise - * must not have any own properties. The requirements are otherwise - * identical. - * - * @param {Promise} p - * @returns {boolean} - */ -const isSafePromise=(p)=>{ -return( -isFrozen(p)&& -getPrototypeOf(p)===Promise.prototype&& -Promise.resolve(p)===p&& -getOwnPropertyDescriptor(p,'then')===undefined&& -getOwnPropertyDescriptor(p,'constructor')===undefined); - - }; - -/** @type {HandledPromiseStaticMethods & Pick} */ -const staticMethods={ -get(target,prop){ -prop=coerceToObjectProperty(prop); -return handle(target,'get',[prop]); - }, -getSendOnly(target,prop){ -prop=coerceToObjectProperty(prop); -handle(target,'getSendOnly',[prop]).catch(()=>{ }); - }, -applyFunction(target,args){ -/* Ensure args is an array.*/ -args=[...args]; -return handle(target,'applyFunction',[args]); - }, -applyFunctionSendOnly(target,args){ -/* Ensure args is an array.*/ -args=[...args]; -handle(target,'applyFunctionSendOnly',[args]).catch(()=>{ }); - }, -applyMethod(target,prop,args){ -prop=coerceToObjectProperty(prop); -/* Ensure args is an array.*/ -args=[...args]; -return handle(target,'applyMethod',[prop,args]); - }, -applyMethodSendOnly(target,prop,args){ -prop=coerceToObjectProperty(prop); -/* Ensure args is an array.*/ -args=[...args]; -handle(target,'applyMethodSendOnly',[prop,args]).catch(()=>{ }); - }, -resolve(value){ -/* Resolving a Presence returns the pre-registered handled promise.*/ -let resolvedPromise=presenceToPromise.get(/** @type {any} */value); -if(!resolvedPromise){ -resolvedPromise=Promise.resolve(value); - } -/* Prevent any proxy trickery.*/ -harden(resolvedPromise); -if(isSafePromise(resolvedPromise)){ -/* We can use the `resolvedPromise` directly, since it is guaranteed to*/ -/* have a `then` which is actually `Promise.prototype.then`.*/ -return resolvedPromise; - } -/* Assimilate the `resolvedPromise` as an actual frozen Promise, by*/ -/* treating `resolvedPromise` as if it is a non-promise thenable.*/ -const executeThen=(resolve,reject)=> -resolvedPromise.then(resolve,reject); -return harden( -Promise.resolve().then(()=>new HandledPromise(executeThen))); - - }}; - - -const makeForwarder=(operation,localImpl)=>{ -return(o,...args)=>{ -/* We are in another turn already, and have the naked object.*/ -const presenceHandler=presenceToHandler.get(o); -if(!presenceHandler){ -return localImpl(o,...args); - } -return dispatchToHandler( -'presenceHandler', -presenceHandler, -operation, -o, -args); - - }; - }; - -/* eslint-disable-next-line prefer-const*/ -forwardingHandler={ -get:makeForwarder('get',localGet), -getSendOnly:makeForwarder('getSendOnly',localGet), -applyFunction:makeForwarder('applyFunction',localApplyFunction), -applyFunctionSendOnly:makeForwarder( -'applyFunctionSendOnly', -localApplyFunction), - -applyMethod:makeForwarder('applyMethod',localApplyMethod), -applyMethodSendOnly:makeForwarder('applyMethodSendOnly',localApplyMethod)}; - - -handle=(...handleArgs)=>{ -/* We're in SES mode, so we should harden.*/ -harden(handleArgs); -const[_p,operation,opArgs,...dispatchArgs]=handleArgs; -let[p]=handleArgs; -const doDispatch=(handlerName,handler,o)=> -dispatchToHandler( -handlerName, -handler, -operation, -o, -opArgs, -/* eslint-disable-next-line no-use-before-define*/ -...(dispatchArgs.length===0?[returnedP]:dispatchArgs)); - -const[trackedDoDispatch]=trackTurns([doDispatch]); -const returnedP=new HandledPromise((resolve,reject)=>{ -/* We run in a future turn to prevent synchronous attacks,*/ -let raceIsOver=false; - -const win=(handlerName,handler,o)=>{ -if(raceIsOver){ -return; - } -try{ -resolve(harden(trackedDoDispatch(handlerName,handler,o))); - }catch(reason){ -reject(harden(reason)); - } -raceIsOver=true; - }; - -const lose=(reason)=>{ -if(raceIsOver){ -return; - } -reject(harden(reason)); -raceIsOver=true; - }; - -/* This contestant tries to win with the target's resolution.*/ -staticMethods. -resolve(p). -then((o)=>win('forwardingHandler',forwardingHandler,o)). -catch(lose); - -/* This contestant sleeps a turn, but then tries to win immediately.*/ -staticMethods. -resolve(). -then(()=>{ -p=shorten(p); -const pendingHandler=promiseToPendingHandler.get(p); -if(pendingHandler){ -/* resolve to the answer from the specific pending handler,*/ -win('pendingHandler',pendingHandler,p); - }else if(!p||typeof p.then!=='function'){ -/* Not a Thenable, so use it.*/ -win('forwardingHandler',forwardingHandler,p); - }else if(promiseToPresence.has(p)){ -/* We have the object synchronously, so resolve with it.*/ -const o=promiseToPresence.get(p); -win('forwardingHandler',forwardingHandler,o); - } -/* If we made it here without winning, then we will wait*/ -/* for the other contestant to win instead.*/ - }). -catch(lose); - }); - -/* We return a handled promise with the default pending handler. This*/ -/* prevents a race between the above Promise.resolves and pipelining.*/ -return harden(returnedP); - }; - -/* Add everything needed on the constructor.*/ -baseHandledPromise.prototype=Promise.prototype; -setPrototypeOf(baseHandledPromise,Promise); -defineProperties( -baseHandledPromise, -getOwnPropertyDescriptors(staticMethods)); - - -/* FIXME: This is really ugly to bypass the type system, but it will be better*/ -/* once we use Promise.delegated and don't have any [[Constructor]] behaviours.*/ -/* @ts-expect-error cast*/ -HandledPromise=baseHandledPromise; - -/* We're a vetted shim which runs before `lockdown` allows*/ -/* `harden(HandledPromise)` to function, but single-level `freeze` is a*/ -/* suitable replacement because all mutable objects reachable afterwards are*/ -/* intrinsics hardened by lockdown.*/ -freeze(HandledPromise); -for(const key of ownKeys(HandledPromise)){ -/* prototype is the intrinsic Promise.prototype to be hardened by lockdown.*/ -if(key!=='prototype'){ -freeze(HandledPromise[key]); - } - } - -return HandledPromise; - }; - -/** - * @template T - * @typedef {{ - * get?(p: T, name: PropertyKey, returnedP?: Promise): unknown; - * getSendOnly?(p: T, name: PropertyKey): void; - * applyFunction?(p: T, args: unknown[], returnedP?: Promise): unknown; - * applyFunctionSendOnly?(p: T, args: unknown[]): void; - * applyMethod?(p: T, name: PropertyKey | undefined, args: unknown[], returnedP?: Promise): unknown; - * applyMethodSendOnly?(p: T, name: PropertyKey | undefined, args: unknown[]): void; - * }} Handler - */ - -/** - * @template {{}} T - * @typedef {{ - * proxy?: { - * handler: ProxyHandler; - * target: unknown; - * revokerCallback?(revoker: () => void): void; - * }; - * }} ResolveWithPresenceOptionsBag - */ - -/** - * @template [R = unknown] - * @typedef {( - * resolveHandled: (value?: R) => void, - * rejectHandled: (reason?: unknown) => void, - * resolveWithPresence: (presenceHandler: Handler<{}>, options?: ResolveWithPresenceOptionsBag<{}>) => object, - * ) => void} HandledExecutor - */ - -/** - * @template [R = unknown] - * @typedef {{ - * resolve(value?: R): void; - * reject(reason: unknown): void; - * resolveWithPresence(presenceHandler?: Handler<{}>, options?: ResolveWithPresenceOptionsBag<{}>): object; - * }} Settler - */ - -/** - * @typedef {{ - * applyFunction(target: unknown, args: unknown[]): Promise; - * applyFunctionSendOnly(target: unknown, args: unknown[]): void; - * applyMethod(target: unknown, prop: PropertyKey | undefined, args: unknown[]): Promise; - * applyMethodSendOnly(target: unknown, prop: PropertyKey, args: unknown[]): void; - * get(target: unknown, prop: PropertyKey): Promise; - * getSendOnly(target: unknown, prop: PropertyKey): void; - * }} HandledPromiseStaticMethods - */ - -/** @typedef {ReturnType} HandledPromiseConstructor */$h‍_once.makeHandledPromise(makeHandledPromise); -})() -, -// === functors[7] === -({ imports: $h‍_imports, liveVar: $h‍_live, onceVar: $h‍_once, importMeta: $h‍____meta, }) => (function () { 'use strict'; let makeHandledPromise;$h‍_imports([["./src/handled-promise.js", [["makeHandledPromise", [$h‍_a => (makeHandledPromise = $h‍_a)]]]]]); - - -if(typeof globalThis.HandledPromise==='undefined'){ -globalThis.HandledPromise=makeHandledPromise(); - } -})() -, -]); - diff --git a/yarn.lock b/yarn.lock index 5f921a116..c4bcea338 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,17 @@ __metadata: languageName: node linkType: hard +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10/12cd14851369eeb8c3892c8a81a7100bc468758c4c464b088d46b3e365cdb6572896aeef5dc9e76f243613c7373231cb1de2e21de8fc5cbf85b4178653b2de8a + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0, @ampproject/remapping@npm:^2.3.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" @@ -100,15 +111,15 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.24.8, @babel/generator@npm:^7.24.9": - version: 7.24.10 - resolution: "@babel/generator@npm:7.24.10" +"@babel/generator@npm:^7.24.9, @babel/generator@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/generator@npm:7.25.0" dependencies: - "@babel/types": "npm:^7.24.9" + "@babel/types": "npm:^7.25.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 10/c2491fb7d985527a165546cbcf9e5f6a2518f2a968c7564409c012acce1019056b21e67a152af89b3f4d4a295ca2e75a1a16858152f750efbc4b5087f0cb7253 + checksum: 10/de3ce2ae7aa0c9585260556ca5a81ce2ce6b8269e3260d7bb4e47a74661af715184ca6343e9906c22e4dd3eed5ce39977dfaf6cded4d2d8968fa096c7cf66697 languageName: node linkType: hard @@ -134,25 +145,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/2ceb3d9b2b35a0fc4100fc06ed7be3bc38f03ff0bf128ff0edbc0cc7dd842967b1496fc70b5c616c747d7711c2b87e7d025c8888f48740631d6148a9d3614f85 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d - languageName: node - linkType: hard - "@babel/helper-module-imports@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-module-imports@npm:7.24.7" @@ -249,52 +241,51 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.16.4, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/parser@npm:7.24.8" +"@babel/parser@npm:^7.16.4, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.8, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/parser@npm:7.25.3" + dependencies: + "@babel/types": "npm:^7.25.2" bin: parser: ./bin/babel-parser.js - checksum: 10/e44b8327da46e8659bc9fb77f66e2dc4364dd66495fb17d046b96a77bf604f0446f1e9a89cf2f011d78fc3f5cdfbae2e9e0714708e1c985988335683b2e781ef + checksum: 10/7bd57e89110bdc9cffe0ef2f2286f1cfb9bbb3aa1d9208c287e0bf6a1eb4cfe6ab33958876ebc59aafcbe3e2381c4449240fc7cc2ff32b79bc9db89cd52fc779 languageName: node linkType: hard -"@babel/template@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" +"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/5975d404ef51cf379515eb0f80b115981d0b9dff5539e53a47516644abb8c83d7559f5b083eb1d4977b20d8359ebb2f911ccd4f729143f8958fdc465f976d843 + "@babel/parser": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: 10/07ebecf6db8b28244b7397628e09c99e7a317b959b926d90455c7253c88df3677a5a32d1501d9749fe292a263ff51a4b6b5385bcabd5dadd3a48036f4d4949e0 languageName: node linkType: hard -"@babel/traverse@npm:^7.12.5, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/traverse@npm:7.24.8" +"@babel/traverse@npm:^7.12.5, @babel/traverse@npm:^7.23.6, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8": + version: 7.25.3 + resolution: "@babel/traverse@npm:7.25.3" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.8" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-hoist-variables": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.8" - "@babel/types": "npm:^7.24.8" + "@babel/generator": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.3" + "@babel/template": "npm:^7.25.0" + "@babel/types": "npm:^7.25.2" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10/47d8ecf8cfff58fe621fc4d8454b82c97c407816d8f9c435caa0c849ea7c357b91119a06f3c69f21a0228b5d06ac0b44f49d1f78cff032d6266317707f1fe615 + checksum: 10/fba34f323e17fa83372fc290bc12413a50e2f780a86c7d8b1875c594b6be2857867804de5d52ab10a78a9cae29e1b09ea15d85ad63671ce97d79c40650282bb9 languageName: node linkType: hard -"@babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.24.9, @babel/types@npm:^7.8.3": - version: 7.24.9 - resolution: "@babel/types@npm:7.24.9" +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.24.9, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.8.3": + version: 7.25.2 + resolution: "@babel/types@npm:7.25.2" dependencies: "@babel/helper-string-parser": "npm:^7.24.8" "@babel/helper-validator-identifier": "npm:^7.24.7" to-fast-properties: "npm:^2.0.0" - checksum: 10/21873a08a124646824aa230de06af52149ab88206dca59849dcb3003990a6306ec2cdaa4147ec1127c0cfc5f133853cfc18f80d7f6337b6662a3c378ed565f15 + checksum: 10/ccf5399db1dcd6dd87b84a6f7bc8dd241e04a326f4f038c973c26ccb69cd360c8f2276603f584c58fd94da95229313060b27baceb0d9b18a435742d3f616afd1 languageName: node linkType: hard @@ -312,37 +303,135 @@ __metadata: languageName: node linkType: hard -"@endo/env-options@npm:^1.1.4, @endo/env-options@npm:^1.1.5": +"@endo/base64@npm:^1.0.6": + version: 1.0.6 + resolution: "@endo/base64@npm:1.0.6" + checksum: 10/b99336d648507dafc1c96c85ef00da241bec9ce2a989608d8e0786090ad2ab25de420a75afcc0e0b8ff09b4951c10f92592d47582a32a4b103843f67851f4170 + languageName: node + linkType: hard + +"@endo/bundle-source@npm:^3.3.0": + version: 3.3.0 + resolution: "@endo/bundle-source@npm:3.3.0" + dependencies: + "@endo/base64": "npm:^1.0.6" + "@endo/compartment-mapper": "npm:^1.2.0" + "@endo/evasive-transform": "npm:^1.2.0" + "@endo/init": "npm:^1.1.3" + "@endo/promise-kit": "npm:^1.1.3" + "@endo/where": "npm:^1.0.6" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + bin: + bundle-source: src/tool.js + checksum: 10/a33c53efa6e089639a084507b5034d36bcd55efcbfbca1362c581a1883190495fed81e23764badfaa5f26ed6db83db2c8c79a7e386c80ea32e7aa0e360a15ef9 + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.6": + version: 1.0.6 + resolution: "@endo/cjs-module-analyzer@npm:1.0.6" + checksum: 10/a9986b11d4c5b86e7b4943c4f2515ecd22b4265f69a93bacbaa08a6f0f8bd9a21b3a8158b97efe01bba43e7d0d20c15f28eb455229ef5ba7f579ca87072b03f0 + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.2.0": + version: 1.2.1 + resolution: "@endo/compartment-mapper@npm:1.2.1" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.6" + "@endo/module-source": "npm:^1.0.1" + "@endo/zip": "npm:^1.0.6" + ses: "npm:^1.7.0" + checksum: 10/d91b8076e81ee61a46623d1fc97f45753c126a69f1bae86a1b22ada89453a5680578f932839ebdcba789e28fb69802397433cb2e2c27e373c6dc4dcf65dae2ff + languageName: node + linkType: hard + +"@endo/env-options@npm:^1.1.5": version: 1.1.5 resolution: "@endo/env-options@npm:1.1.5" checksum: 10/ce4cb29ecf387f52f7d1c9e7e43b0a1064326587ebac62e7c239bf2df71aa4c3296d2a05cf169d1efcd8c1ddf73aeede8afd86e7b5c9387b80e8e0939d1af0f6 languageName: node linkType: hard -"@endo/eventual-send@npm:^1.2.2": - version: 1.2.2 - resolution: "@endo/eventual-send@npm:1.2.2" +"@endo/evasive-transform@npm:^1.2.0": + version: 1.2.1 + resolution: "@endo/evasive-transform@npm:1.2.1" dependencies: - "@endo/env-options": "npm:^1.1.4" - checksum: 10/780449d9d5e8be2b75697521b9727971b7232d00dccef1fabd364650237b82025b582940eedb8951eae55e16a8271fbf7b2f69f9442e37a595e9dbb4632c1c2a + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10/6ae88919b9fdae5dadfad14a8938194171f8da6eca255b4a830da28d071ab0ceacb56cd9cf4257a6637293659dbad98301324abb1cc3905887efac94821a31e2 languageName: node linkType: hard -"@endo/lockdown@npm:^1.0.7": - version: 1.0.7 - resolution: "@endo/lockdown@npm:1.0.7" +"@endo/eventual-send@npm:^1.2.3, @endo/eventual-send@npm:^1.2.4": + version: 1.2.4 + resolution: "@endo/eventual-send@npm:1.2.4" + dependencies: + "@endo/env-options": "npm:^1.1.5" + checksum: 10/5b46f7987af609dd52e6c65fd828ca29e36cbf88128e435ccf9cadfb72457c4342d5b6b49a3dc977d2203cefc6c956d6aa0280e086c3bca6f4b1d7228c50810e + languageName: node + linkType: hard + +"@endo/init@npm:^1.1.3": + version: 1.1.3 + resolution: "@endo/init@npm:1.1.3" dependencies: - ses: "npm:^1.5.0" - checksum: 10/1d4d0df4460e5acfbccaf1e41492d2b4b4f60679e55b3e349a032d3eafd2b629c5b61052e51e77bbf7a7ff1bbfe63ccca1c684dc1914bfb45064915aa86bda0e + "@endo/base64": "npm:^1.0.6" + "@endo/eventual-send": "npm:^1.2.3" + "@endo/lockdown": "npm:^1.0.8" + "@endo/promise-kit": "npm:^1.1.3" + checksum: 10/466d3d91cfb414a0f423d490268cf27a305468cb2bbed822cac89d0779c2c91c7374c82642354326fa9508a82d779fb9306a202c9b5cd451585336c3b5ab891f languageName: node linkType: hard -"@endo/promise-kit@npm:^1.1.2": - version: 1.1.2 - resolution: "@endo/promise-kit@npm:1.1.2" +"@endo/lockdown@npm:^1.0.8, @endo/lockdown@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/lockdown@npm:1.0.9" dependencies: - ses: "npm:^1.5.0" - checksum: 10/63b8d503cbd1d2d06f1eeffb10a397a11cc89ad2bb17de72fda5d1971fa54b78ec8cbb4bb4789e245c53f5e5088d313291cad9f8b3e45f9569140b5c59964cd5 + ses: "npm:^1.7.0" + checksum: 10/c7a5ad1e7912b5a976f9098ce744049e9e02adfd4f01aafacd6c8cb32e9a57c32821b980c3ebd4dbf4147a12eec36cac07875e767ad0bc2e8c56a88b053201dd + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.0.1": + version: 1.0.1 + resolution: "@endo/module-source@npm:1.0.1" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.7.0" + checksum: 10/0819f6120338bc763e8253de6674f05ac1ed3bec5c5e5ac366c7f047f85efc0ed5432f85a5ea01faf6f28c05a4c5a8718bb5a9d2ff34476620d9dfb0e56875da + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^1.1.3, @endo/promise-kit@npm:^1.1.4": + version: 1.1.4 + resolution: "@endo/promise-kit@npm:1.1.4" + dependencies: + ses: "npm:^1.7.0" + checksum: 10/794c38d2105597dfec999fb55e0865edd5ce24c86e42eb58561514b5ee68dedae423a7e79e9d75fa66447a88d7c4755d28f848ee841cc531c0ced9253b121fc6 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.6": + version: 1.0.6 + resolution: "@endo/where@npm:1.0.6" + checksum: 10/7d94568b4f36ed892d70ea1ead4fc99a227ecb6d83e04cbdd43d179baf673854ff63c6bccce4ed161a8867d0a74453fece8eca58e56624bbfddca6a07dc1f136 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.6": + version: 1.0.6 + resolution: "@endo/zip@npm:1.0.6" + checksum: 10/c26707103187d08d91e7e7e30bca98aeaa53648eb22125083d414c6739ca2707a47681cbd0495a1e3f48e46681d47d2ab62d64a65443cbb7db06255d34f8ee90 languageName: node linkType: hard @@ -1228,8 +1317,8 @@ __metadata: resolution: "@ocap/extension@workspace:packages/extension" dependencies: "@arethetypeswrong/cli": "npm:^0.15.3" - "@endo/lockdown": "npm:^1.0.7" - "@endo/promise-kit": "npm:^1.1.2" + "@endo/lockdown": "npm:^1.0.9" + "@endo/promise-kit": "npm:^1.1.4" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/snaps-utils": "npm:^7.8.0" "@metamask/utils": "npm:^9.1.0" @@ -1293,11 +1382,11 @@ __metadata: version: 0.0.0-use.local resolution: "@ocap/shims@workspace:packages/shims" dependencies: - "@endo/eventual-send": "npm:^1.2.2" - "@endo/lockdown": "npm:^1.0.7" + "@endo/bundle-source": "npm:^3.3.0" + "@endo/eventual-send": "npm:^1.2.4" + "@endo/lockdown": "npm:^1.0.9" "@metamask/auto-changelog": "npm:^3.4.4" deepmerge: "npm:^4.3.1" - mkdirp: "npm:^3.0.1" rimraf: "npm:^6.0.1" ses: "npm:^1.7.0" vitest: "npm:^2.0.5" @@ -1322,6 +1411,82 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10/b8eb58134436cb9f9c7df2c75913a1646ddf46ccedf717d81419060964b082e843158e1ab60f354d340999f864adf1104dd9b9cd3e96822d0f05fda4902e4448 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10/cc018d20c80242a2b8b44fae61a968049cf31bb8406218187cc7cda35747616594e79452dd65722e7da6dd825b392e90d4599d43cd4461a02fefa2865945164e + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10/f1165e68c05d3bb22d56c73b258368bfa1d724e53d195f71c316cee6d6ba67995b89057cdf2140f28337510a893839bce90dcf8385c653d8871d650392027dc4 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10/3b69f02893eea42455fb97b81f612ac6bfadf94ac73bebd481ea13e90a693eef52c163210a095b12e574a25603af5e55f86a020889019167f331aa8dd3ff30e0 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.0 + resolution: "@rollup/pluginutils@npm:5.1.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10/abb15eaec5b36f159ec351b48578401bedcefdfa371d24a914cfdbb1e27d0ebfbf895299ec18ccc343d247e71f2502cba21202bc1362d7ef27d5ded699e5c2b2 + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.18.1": version: 4.18.1 resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.1" @@ -1564,13 +1729,20 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": +"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 languageName: node linkType: hard +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10/9f0f20990dbf725470564d4d815d3758ac688b790f601ea98654b6e0b9797dc3c80306fb525abdacd9e75e014e3d09ad326098eaa2ed1851e4823a8e278538aa + languageName: node + linkType: hard + "@types/filesystem@npm:*": version: 0.0.36 resolution: "@types/filesystem@npm:0.0.36" @@ -1648,6 +1820,15 @@ __metadata: languageName: node linkType: hard +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10/dc6a6df507656004e242dcb02c784479deca516d5f4b58a1707e708022b269ae147e1da0521f3e8ad0d63638869d87e0adc023f0bd5454aa6f72ac66c7525cf5 + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12": version: 7.3.13 resolution: "@types/semver@npm:7.3.13" @@ -2038,7 +2219,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.9.0": +"acorn@npm:^8.2.4, acorn@npm:^8.9.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -2400,6 +2581,13 @@ __metadata: languageName: node linkType: hard +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10/62e063ab40c0c1efccbfa9ffa31873e4f9d57408cb396a2649981a0ecbce56aabc93c28feaccbc5658c95aab2703ad1d11980e62ec2e5e72637404e1eb60f39e + languageName: node + linkType: hard + "builtins@npm:^5.0.0, builtins@npm:^5.0.1": version: 5.1.0 resolution: "builtins@npm:5.1.0" @@ -2729,6 +2917,13 @@ __metadata: languageName: node linkType: hard +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10/4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2889,7 +3084,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.3.1": +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 @@ -3632,7 +3827,14 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^2.0.2": +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10/1cf11a0aff7613aa765dc535ed1d83e2a1986207d2353f4795df309a2c55726de3ca4948df635c09969a739dc59e8e2d69f88d3b3d2c6dfc5701257aafd1d11b + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 @@ -4103,7 +4305,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -4568,6 +4770,15 @@ __metadata: languageName: node linkType: hard +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10/e8f0ffc19a98240bda9c7ada84d846486365af88d14616e737d280d378695c8c448a621dcafc8332dbf0fcd0a17b0763b845400709963fa9151ddffece90ae88 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -4628,6 +4839,13 @@ __metadata: languageName: node linkType: hard +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10/8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -4670,6 +4888,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10/e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -5436,15 +5663,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^3.0.1": - version: 3.0.1 - resolution: "mkdirp@npm:3.0.1" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 10/16fd79c28645759505914561e249b9a1f5fe3362279ad95487a4501e4467abeb714fd35b95307326b8fd03f3c7719065ef11a6f97b7285d7888306d1bd2232ba - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -5930,7 +6148,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc @@ -6181,7 +6399,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.18.1, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": +"resolve@npm:1.22.8, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -6194,7 +6412,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -6251,6 +6469,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^2.79.1": + version: 2.79.1 + resolution: "rollup@npm:2.79.1" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10/df087b701304432f30922bbee5f534ab189aa6938bd383b5686c03147e0d00cd1789ea10a462361326ce6b6ebe448ce272ad3f3cc40b82eeb3157df12f33663c + languageName: node + linkType: hard + "rollup@npm:^4.13.0": version: 4.18.1 resolution: "rollup@npm:4.18.1" @@ -6431,7 +6663,7 @@ __metadata: languageName: node linkType: hard -"ses@npm:^1.1.0, ses@npm:^1.5.0, ses@npm:^1.7.0": +"ses@npm:^1.1.0, ses@npm:^1.7.0": version: 1.7.0 resolution: "ses@npm:1.7.0" dependencies: @@ -6615,6 +6847,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10/9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 + languageName: node + linkType: hard + "source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1"