Skip to content

Commit 9e049f3

Browse files
committed
Merge branch 'master' into markm-rank-strings-by-codepoint
2 parents 44b1665 + 03eff8f commit 9e049f3

File tree

48 files changed

+384
-267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+384
-267
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"type-coverage": "^2.26.3",
2626
"typedoc": "^0.25.12",
2727
"typedoc-plugin-markdown": "^3.17.1",
28-
"typescript": "~5.5.0-dev.20240327",
28+
"typescript": "5.5.0-beta",
2929
"typescript-eslint": "^7.3.1"
3030
},
3131
"scripts": {

packages/base64/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"eslint-plugin-eslint-comments": "^3.1.2",
5252
"eslint-plugin-import": "^2.29.0",
5353
"prettier": "^3.2.5",
54-
"typescript": "~5.5.0-dev.20240327"
54+
"typescript": "5.5.0-beta"
5555
},
5656
"files": [
5757
"LICENSE*",

packages/captp/src/captp.js

+4
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ export const makeCapTP = (
140140
const seen = new Set();
141141

142142
return harden({
143+
/**
144+
* @param {T} specimen
145+
* @returns {T}
146+
*/
143147
add(specimen) {
144148
if (predicate(specimen)) {
145149
seen.add(specimen);

packages/check-bundle/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"eslint-plugin-eslint-comments": "^3.1.2",
5858
"eslint-plugin-import": "^2.29.0",
5959
"prettier": "^3.2.5",
60-
"typescript": "~5.5.0-dev.20240327"
60+
"typescript": "5.5.0-beta"
6161
},
6262
"files": [
6363
"*.js",

packages/cjs-module-analyzer/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"eslint-plugin-eslint-comments": "^3.1.2",
4242
"eslint-plugin-import": "^2.29.0",
4343
"prettier": "^3.2.5",
44-
"typescript": "~5.5.0-dev.20240327"
44+
"typescript": "5.5.0-beta"
4545
},
4646
"files": [
4747
"LICENSE*",

packages/cli/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"eslint-plugin-eslint-comments": "^3.1.2",
5858
"eslint-plugin-import": "^2.29.0",
5959
"prettier": "^3.2.5",
60-
"typescript": "~5.5.0-dev.20240327"
60+
"typescript": "5.5.0-beta"
6161
},
6262
"files": [
6363
"LICENSE*",

packages/cli/src/commands/make.js

+14-7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import bundleSource from '@endo/bundle-source';
88
import { makeReaderRef } from '@endo/daemon';
99
import { E } from '@endo/far';
1010
import { withEndoAgent } from '../context.js';
11+
import { parsePetNamePath } from '../pet-name.js';
1112
import { randomHex16 } from '../random.js';
1213

1314
const textEncoder = new TextEncoder();
@@ -38,6 +39,8 @@ export const makeCommand = async ({
3839
return;
3940
}
4041

42+
const resultPath = resultName && parsePetNamePath(resultName);
43+
4144
/** @type {import('@endo/eventual-send').FarRef<import('@endo/stream').Reader<string>> | undefined} */
4245
let bundleReaderRef;
4346
/** @type {string | undefined} */
@@ -68,14 +71,18 @@ export const makeCommand = async ({
6871
workerName,
6972
url.pathToFileURL(path.resolve(importPath)).href,
7073
powersName,
71-
resultName,
74+
resultPath,
7275
)
73-
: E(agent).makeBundle(workerName, bundleName, powersName, resultName);
74-
const result = await resultP;
75-
console.log(result);
76-
77-
if (temporaryBundleName) {
78-
await E(agent).remove(temporaryBundleName);
76+
: E(agent).makeBundle(workerName, bundleName, powersName, resultPath);
77+
let result;
78+
try {
79+
result = await resultP;
80+
console.log(result);
81+
} finally {
82+
if (temporaryBundleName) {
83+
await E(agent).remove(temporaryBundleName);
84+
}
7985
}
86+
return result;
8087
});
8188
};

packages/cli/src/commands/mkdir.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/* global process */
2+
import os from 'os';
3+
import { E } from '@endo/far';
4+
import { withEndoAgent } from '../context.js';
5+
import { parsePetNamePath } from '../pet-name.js';
6+
7+
export const mkdir = async ({ agentNames, directoryPath }) =>
8+
withEndoAgent(agentNames, { os, process }, async ({ agent }) => {
9+
await E(agent).makeDirectory(...parsePetNamePath(directoryPath));
10+
});

packages/cli/src/commands/store.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { makeReaderRef } from '@endo/daemon';
77
import { E } from '@endo/far';
88

99
import { withEndoAgent } from '../context.js';
10+
import { parsePetNamePath } from '../pet-name.js';
1011

1112
/**
1213
* @param {Array<Uint8Array>} arrays
@@ -72,32 +73,34 @@ export const store = async ({
7273
)})`;
7374
}
7475

76+
const parsedName = parsePetNamePath(name);
77+
7578
await withEndoAgent(agentNames, { os, process }, async ({ agent }) => {
7679
if (storeText !== undefined) {
77-
await E(agent).storeValue(storeText, name);
80+
await E(agent).storeValue(storeText, parsedName);
7881
} else if (storeJson !== undefined) {
79-
await E(agent).storeValue(JSON.parse(storeJson), name);
82+
await E(agent).storeValue(JSON.parse(storeJson), parsedName);
8083
} else if (storeBigInt !== undefined) {
81-
await E(agent).storeValue(BigInt(storeBigInt), name);
84+
await E(agent).storeValue(BigInt(storeBigInt), parsedName);
8285
} else if (storeTextStdin !== undefined) {
8386
const reader = makeNodeReader(process.stdin);
8487
const bytes = await asyncConcat(reader);
8588
const text = new TextDecoder().decode(bytes);
86-
await E(agent).storeValue(text, name);
89+
await E(agent).storeValue(text, parsedName);
8790
} else if (storeJsonStdin !== undefined) {
8891
const reader = makeNodeReader(process.stdin);
8992
const bytes = await asyncConcat(reader);
9093
const text = new TextDecoder().decode(bytes);
91-
await E(agent).storeValue(JSON.parse(text), name);
94+
await E(agent).storeValue(JSON.parse(text), parsedName);
9295
} else if (storeStdin !== undefined) {
9396
const reader = makeNodeReader(process.stdin);
9497
const readerRef = makeReaderRef(reader);
95-
await E(agent).storeBlob(readerRef, name);
98+
await E(agent).storeBlob(readerRef, parsedName);
9699
} else if (storePath !== undefined) {
97100
const nodeReadStream = fs.createReadStream(storePath);
98101
const reader = makeNodeReader(nodeReadStream);
99102
const readerRef = makeReaderRef(reader);
100-
await E(agent).storeBlob(readerRef, name);
103+
await E(agent).storeBlob(readerRef, parsedName);
101104
}
102105
});
103106
};

packages/cli/src/endo.js

+10
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,16 @@ export const main = async rawArgs => {
470470
return mkguest({ agentName, handleName, agentNames, introducedNames });
471471
});
472472

473+
program
474+
.command('mkdir <path>')
475+
.option(...commonOptions.as)
476+
.description('makes a directory (pet store, name hub)')
477+
.action(async (directoryPath, cmd) => {
478+
const { as: agentNames } = cmd.opts();
479+
const { mkdir } = await import('./commands/mkdir.js');
480+
return mkdir({ agentNames, directoryPath });
481+
});
482+
473483
program
474484
.command('invite <guest-name>')
475485
.option(...commonOptions.as)

packages/common/from-unique-entries.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ const { ownKeys } = Reflect;
88
* like `Object.fromEntries` but hardens the result.
99
* Use it to protect from property names computed from user-provided data.
1010
*
11-
* @template K,V
12-
* @param {Iterable<[K,V]>} allEntries
13-
* @returns {{[k: K]: V}}
11+
* @template [T=any]
12+
* @param {Iterable<readonly [PropertyKey, T]>} allEntries
13+
* @returns {{ [k: string]: T; }}
1414
*/
1515
export const fromUniqueEntries = allEntries => {
1616
const entriesArray = [...allEntries];

packages/compartment-mapper/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"eslint-plugin-eslint-comments": "^3.1.2",
6363
"eslint-plugin-import": "^2.29.0",
6464
"prettier": "^3.2.5",
65-
"typescript": "~5.5.0-dev.20240327"
65+
"typescript": "5.5.0-beta"
6666
},
6767
"files": [
6868
"LICENSE*",

packages/daemon/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
"eslint-plugin-eslint-comments": "^3.1.2",
7777
"eslint-plugin-import": "^2.29.0",
7878
"prettier": "^3.2.5",
79-
"typescript": "~5.5.0-dev.20240327"
79+
"typescript": "5.5.0-beta"
8080
},
8181
"files": [
8282
"LICENSE*",

packages/daemon/src/directory.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -207,15 +207,11 @@ export const makeDirectoryMaker = ({
207207
await toHub.write([toName], id);
208208
};
209209

210-
/** @type {EndoDirectory['makeDirectory']} */
211-
const makeDirectory = async directoryPetName => {
212-
const { value: directory, id } = await formulateDirectory();
213-
await petStore.write(directoryPetName, id);
214-
return directory;
215-
};
216-
217210
/** @type {EndoDirectory['write']} */
218211
const write = async (petNamePath, id) => {
212+
if (typeof petNamePath === 'string') {
213+
petNamePath = [petNamePath];
214+
}
219215
if (petNamePath.length === 1) {
220216
const petName = petNamePath[0];
221217
await petStore.write(petName, id);
@@ -225,6 +221,13 @@ export const makeDirectoryMaker = ({
225221
await hub.write([name], id);
226222
};
227223

224+
/** @type {EndoDirectory['makeDirectory']} */
225+
const makeDirectory = async (...directoryPetNamePath) => {
226+
const { value: directory, id } = await formulateDirectory();
227+
await write(directoryPetNamePath, id);
228+
return directory;
229+
};
230+
228231
/** @type {EndoDirectory} */
229232
const directory = {
230233
has,

packages/daemon/src/host.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,15 @@ export const makeHostMaker = ({
108108

109109
/**
110110
* @param {ERef<AsyncIterableIterator<string>>} readerRef
111-
* @param {string} [petName]
111+
* @param {string | string[]} [petName]
112112
*/
113113
const storeBlob = async (readerRef, petName) => {
114114
/** @type {DeferredTasks<ReadableBlobDeferredTaskParams>} */
115115
const tasks = makeDeferredTasks();
116116

117117
if (petName !== undefined) {
118-
assertPetName(petName);
119118
tasks.push(identifiers =>
120-
petStore.write(petName, identifiers.readableBlobId),
119+
E(directory).write(petName, identifiers.readableBlobId),
121120
);
122121
}
123122

@@ -131,9 +130,8 @@ export const makeHostMaker = ({
131130
const tasks = makeDeferredTasks();
132131

133132
if (petName !== undefined) {
134-
assertPetName(petName);
135133
tasks.push(identifiers =>
136-
petStore.write(petName, identifiers.marshalId),
134+
E(directory).write(petName, identifiers.marshalId),
137135
);
138136
}
139137

@@ -244,7 +242,7 @@ export const makeHostMaker = ({
244242
* Helper function for makeUnconfined and makeBundle.
245243
* @param {string} powersName
246244
* @param {string} workerName
247-
* @param {string} [resultName]
245+
* @param {string | string[]} [resultName]
248246
*/
249247
const prepareMakeCaplet = (powersName, workerName, resultName) => {
250248
assertPowersName(powersName);
@@ -263,7 +261,7 @@ export const makeHostMaker = ({
263261

264262
if (resultName !== undefined) {
265263
tasks.push(identifiers =>
266-
petStore.write(resultName, identifiers.capletId),
264+
E(directory).write(resultName, identifiers.capletId),
267265
);
268266
}
269267

packages/daemon/src/types.d.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,14 @@ export interface NameHub {
446446
): AsyncGenerator<PetStoreNameChange, undefined, undefined>;
447447
lookup(...petNamePath: string[]): Promise<unknown>;
448448
reverseLookup(value: unknown): Array<string>;
449-
write(petNamePath: string[], id: string): Promise<void>;
449+
write(petNamePath: string | string[], id: string): Promise<void>;
450450
remove(...petNamePath: string[]): Promise<void>;
451451
move(fromPetName: string[], toPetName: string[]): Promise<void>;
452452
copy(fromPetName: string[], toPetName: string[]): Promise<void>;
453453
}
454454

455455
export interface EndoDirectory extends NameHub {
456-
makeDirectory(petName: string): Promise<EndoDirectory>;
456+
makeDirectory(...petNamePath: string[]): Promise<EndoDirectory>;
457457
}
458458

459459
export type MakeDirectoryNode = (petStore: PetStore) => EndoDirectory;
@@ -568,7 +568,10 @@ export interface EndoHost extends EndoAgent {
568568
readerRef: ERef<AsyncIterableIterator<string>>,
569569
petName: string,
570570
): Promise<FarRef<EndoReadable>>;
571-
storeValue<T extends Passable>(value: T, petName: string): Promise<void>;
571+
storeValue<T extends Passable>(
572+
value: T,
573+
petName: string | string[],
574+
): Promise<void>;
572575
provideGuest(
573576
petName?: string,
574577
opts?: MakeHostOrGuestOptions,

packages/env-options/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"eslint-plugin-eslint-comments": "^3.1.2",
4343
"eslint-plugin-import": "^2.29.0",
4444
"prettier": "^3.2.5",
45-
"typescript": "~5.5.0-dev.20240327"
45+
"typescript": "5.5.0-beta"
4646
},
4747
"files": [
4848
"*.js",

packages/errors/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ Object.assign(assert, assertions);
6969
// quote behavior for that environment.
7070
const bareOrQuote = bare || quote;
7171

72+
// XXX module exports fail if these aren't in scope
73+
/** @import {AssertMakeErrorOptions, Details, GenericErrorConstructor} from 'ses' */
74+
7275
export {
7376
// assertions
7477
assert,

packages/eslint-plugin/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"requireindex": "~1.1.0",
2121
"ts-api-utils": "~1.0.1",
2222
"tsutils": "~3.21.0",
23-
"typescript": "~5.5.0-dev.20240327",
23+
"typescript": "5.5.0-beta",
2424
"typescript-eslint": "^7.3.1"
2525
},
2626
"devDependencies": {

packages/evasive-transform/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"eslint": "^8.57.0",
5151
"rollup": "^2.79.1",
5252
"tsd": "^0.30.7",
53-
"typescript": "~5.5.0-dev.20240327"
53+
"typescript": "5.5.0-beta"
5454
},
5555
"files": [
5656
"*.js",

packages/eventual-send/src/no-shim.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import makeE from './E.js';
22

3+
// XXX module exports for HandledPromise fail if these aren't in scope
4+
/** @import {Handler, HandledExecutor} from './handled-promise.js' */
5+
36
const hp = HandledPromise;
47
export const E = makeE(hp);
58
export { hp as HandledPromise };

packages/exo/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"eslint-plugin-eslint-comments": "^3.1.2",
5353
"eslint-plugin-import": "^2.29.0",
5454
"prettier": "^3.2.5",
55-
"typescript": "~5.5.0-dev.20240327"
55+
"typescript": "5.5.0-beta"
5656
},
5757
"files": [
5858
"*.js",

packages/lp32/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"eslint-plugin-eslint-comments": "^3.1.2",
6767
"eslint-plugin-import": "^2.29.0",
6868
"prettier": "^3.2.5",
69-
"typescript": "~5.5.0-dev.20240327"
69+
"typescript": "5.5.0-beta"
7070
},
7171
"files": [
7272
"LICENSE*",

0 commit comments

Comments
 (0)