@endo/compartment-mapper 1.6.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/package.json +12 -16
  2. package/src/archive-lite.d.ts +7 -7
  3. package/src/archive-lite.d.ts.map +1 -1
  4. package/src/archive-lite.js +78 -27
  5. package/src/archive.d.ts.map +1 -1
  6. package/src/archive.js +7 -0
  7. package/src/bundle-lite.d.ts +3 -3
  8. package/src/bundle-lite.d.ts.map +1 -1
  9. package/src/bundle-lite.js +19 -24
  10. package/src/bundle.d.ts +3 -3
  11. package/src/bundle.d.ts.map +1 -1
  12. package/src/bundle.js +19 -24
  13. package/src/capture-lite.d.ts +2 -2
  14. package/src/capture-lite.d.ts.map +1 -1
  15. package/src/capture-lite.js +217 -25
  16. package/src/compartment-map.d.ts +9 -2
  17. package/src/compartment-map.d.ts.map +1 -1
  18. package/src/compartment-map.js +737 -254
  19. package/src/digest.d.ts +22 -2
  20. package/src/digest.d.ts.map +1 -1
  21. package/src/digest.js +179 -56
  22. package/src/generic-graph.d.ts.map +1 -1
  23. package/src/generic-graph.js +8 -3
  24. package/src/guards.d.ts +18 -0
  25. package/src/guards.d.ts.map +1 -0
  26. package/src/guards.js +109 -0
  27. package/src/hooks.md +124 -0
  28. package/src/import-archive-lite.d.ts.map +1 -1
  29. package/src/import-archive-lite.js +15 -11
  30. package/src/import-archive.d.ts +5 -19
  31. package/src/import-archive.d.ts.map +1 -1
  32. package/src/import-archive.js +7 -27
  33. package/src/import-hook.d.ts +4 -3
  34. package/src/import-hook.d.ts.map +1 -1
  35. package/src/import-hook.js +138 -69
  36. package/src/import-lite.d.ts +6 -6
  37. package/src/import-lite.d.ts.map +1 -1
  38. package/src/import-lite.js +8 -5
  39. package/src/import.d.ts +3 -3
  40. package/src/import.d.ts.map +1 -1
  41. package/src/import.js +16 -6
  42. package/src/infer-exports.d.ts.map +1 -1
  43. package/src/infer-exports.js +16 -6
  44. package/src/link.d.ts +4 -3
  45. package/src/link.d.ts.map +1 -1
  46. package/src/link.js +70 -58
  47. package/src/node-modules.d.ts +4 -3
  48. package/src/node-modules.d.ts.map +1 -1
  49. package/src/node-modules.js +482 -114
  50. package/src/parse-cjs-shared-export-wrapper.d.ts.map +1 -1
  51. package/src/parse-cjs-shared-export-wrapper.js +3 -1
  52. package/src/policy-format.d.ts +22 -5
  53. package/src/policy-format.d.ts.map +1 -1
  54. package/src/policy-format.js +342 -108
  55. package/src/policy.d.ts +13 -28
  56. package/src/policy.d.ts.map +1 -1
  57. package/src/policy.js +161 -106
  58. package/src/types/canonical-name.d.ts +97 -0
  59. package/src/types/canonical-name.d.ts.map +1 -0
  60. package/src/types/canonical-name.ts +151 -0
  61. package/src/types/compartment-map-schema.d.ts +114 -35
  62. package/src/types/compartment-map-schema.d.ts.map +1 -1
  63. package/src/types/compartment-map-schema.ts +202 -37
  64. package/src/types/external.d.ts +168 -28
  65. package/src/types/external.d.ts.map +1 -1
  66. package/src/types/external.ts +215 -26
  67. package/src/types/internal.d.ts +23 -42
  68. package/src/types/internal.d.ts.map +1 -1
  69. package/src/types/internal.ts +51 -50
  70. package/src/types/node-modules.d.ts +71 -10
  71. package/src/types/node-modules.d.ts.map +1 -1
  72. package/src/types/node-modules.ts +107 -9
  73. package/src/types/policy-schema.d.ts +26 -11
  74. package/src/types/policy-schema.d.ts.map +1 -1
  75. package/src/types/policy-schema.ts +29 -16
  76. package/src/types/policy.d.ts +6 -2
  77. package/src/types/policy.d.ts.map +1 -1
  78. package/src/types/policy.ts +7 -2
  79. package/src/types/typescript.d.ts +28 -0
  80. package/src/types/typescript.d.ts.map +1 -1
  81. package/src/types/typescript.ts +37 -1
@@ -13,15 +13,11 @@ import type {
13
13
  Language,
14
14
  LanguageForExtension,
15
15
  LanguageForModuleSpecifier,
16
- ModuleDescriptor,
16
+ PackageCompartmentDescriptor,
17
+ PackageCompartmentDescriptors,
18
+ CompartmentModuleConfiguration,
19
+ PackageCompartmentDescriptorName,
17
20
  } from './compartment-map-schema.js';
18
- import type {
19
- MaybeReadFn,
20
- MaybeReadNowFn,
21
- ReadFn,
22
- ReadPowers,
23
- } from './powers.js';
24
- import type { DeferredAttenuatorsProvider } from './policy.js';
25
21
  import type {
26
22
  ArchiveOnlyOption,
27
23
  AsyncParseFn,
@@ -30,16 +26,30 @@ import type {
30
26
  ExecuteOptions,
31
27
  ExitModuleImportHookOption,
32
28
  ExitModuleImportNowHookOption,
29
+ FileUrlString,
30
+ ModuleSourceHook,
31
+ PackageConnectionsHook,
32
+ PreloadOption,
33
33
  LogOptions,
34
34
  ModuleTransforms,
35
35
  ParseFn,
36
36
  ParserForLanguage,
37
+ PolicyOption,
37
38
  SearchSuffixesOption,
38
39
  SourceMapHook,
39
40
  SourceMapHookOption,
40
41
  Sources,
41
42
  SyncModuleTransforms,
43
+ CompartmentsRenameFn,
42
44
  } from './external.js';
45
+ import type { PackageDescriptor } from './node-modules.js';
46
+ import type { DeferredAttenuatorsProvider } from './policy.js';
47
+ import type {
48
+ MaybeReadFn,
49
+ MaybeReadNowFn,
50
+ ReadFn,
51
+ ReadPowers,
52
+ } from './powers.js';
43
53
 
44
54
  export type LinkOptions = {
45
55
  resolve?: ResolveHook;
@@ -50,7 +60,8 @@ export type LinkOptions = {
50
60
  syncModuleTransforms?: SyncModuleTransforms;
51
61
  __native__?: boolean;
52
62
  } & ArchiveOnlyOption &
53
- ExecuteOptions;
63
+ ExecuteOptions &
64
+ LogOptions;
54
65
 
55
66
  export type LinkResult = {
56
67
  compartment: Compartment;
@@ -76,11 +87,13 @@ export type MakeImportHookMakersOptions = {
76
87
  /**
77
88
  * For depositing captured compartment descriptors.
78
89
  */
79
- compartmentDescriptors?: Record<string, CompartmentDescriptor>;
90
+ compartmentDescriptors?: PackageCompartmentDescriptors;
91
+ moduleSourceHook?: ModuleSourceHook | undefined;
80
92
  } & ComputeSha512Option &
81
93
  SearchSuffixesOption &
82
94
  ArchiveOnlyOption &
83
- SourceMapHookOption;
95
+ SourceMapHookOption &
96
+ LogOptions;
84
97
 
85
98
  export type MakeImportHookMakerOptions = MakeImportHookMakersOptions &
86
99
  ExitModuleImportHookOption;
@@ -88,7 +101,7 @@ export type MakeImportNowHookMakerOptions = MakeImportHookMakersOptions &
88
101
  ExitModuleImportNowHookOption;
89
102
 
90
103
  export type ImportHookMaker = (params: {
91
- packageLocation: string;
104
+ packageLocation: PackageCompartmentDescriptorName;
92
105
  packageName: string;
93
106
  attenuators: DeferredAttenuatorsProvider;
94
107
  parse: ParseFn | AsyncParseFn;
@@ -97,7 +110,7 @@ export type ImportHookMaker = (params: {
97
110
  }) => ImportHook;
98
111
 
99
112
  export type ImportNowHookMaker = (params: {
100
- packageLocation: string;
113
+ packageLocation: PackageCompartmentDescriptorName;
101
114
  packageName: string;
102
115
  parse: ParseFn | AsyncParseFn;
103
116
  compartments: Record<string, Compartment>;
@@ -125,13 +138,13 @@ export type ChooseModuleDescriptorParams = {
125
138
  /** Module specifiers with each search suffix appended */
126
139
  candidates: string[];
127
140
  moduleSpecifier: string;
128
- packageLocation: string;
141
+ packageLocation: FileUrlString;
129
142
  /** Compartment descriptor from the compartment map */
130
- compartmentDescriptor: CompartmentDescriptor;
143
+ compartmentDescriptor: PackageCompartmentDescriptor;
131
144
  /** All compartment descriptors from the compartment map */
132
- compartmentDescriptors: Record<string, CompartmentDescriptor>;
145
+ compartmentDescriptors: PackageCompartmentDescriptors;
133
146
  /** All module descriptors in same compartment */
134
- moduleDescriptors: Record<string, ModuleDescriptor>;
147
+ moduleDescriptors: Record<string, CompartmentModuleConfiguration>;
135
148
  /** All compartments */
136
149
  compartments: Record<string, Compartment>;
137
150
  packageSources: CompartmentSources;
@@ -140,11 +153,13 @@ export type ChooseModuleDescriptorParams = {
140
153
  * Whether to embed a sourceURL in applicable compiled sources.
141
154
  * Should be false for archives and bundles, but true for runtime.
142
155
  */
143
- sourceMapHook?: SourceMapHook;
156
+ sourceMapHook?: SourceMapHook | undefined;
157
+ moduleSourceHook?: ModuleSourceHook | undefined;
144
158
 
145
159
  strictlyRequiredForCompartment: StrictlyRequiredFn;
146
160
  } & ComputeSha512Option &
147
- ArchiveOnlyOption;
161
+ ArchiveOnlyOption &
162
+ LogOptions;
148
163
 
149
164
  type ShouldDeferErrorOption = {
150
165
  shouldDeferError: ShouldDeferError;
@@ -276,37 +291,6 @@ export type MaybeReadDescriptorFn<T = PackageDescriptor> = (
276
291
  location: string,
277
292
  ) => Promise<T | undefined>;
278
293
 
279
- /**
280
- * The type of a `package.json` file containing relevant fields; used by `graphPackages` and its ilk
281
- */
282
- export interface PackageDescriptor {
283
- /**
284
- * TODO: In reality, this is optional, but `graphPackage` does not consider it to be. This will need to be fixed once support for "anonymous" packages lands; see https://github.com/endojs/endo/pull/2664
285
- */
286
- name: string;
287
- version?: string;
288
- /**
289
- * TODO: Update with proper type when this field is handled.
290
- */
291
- exports?: unknown;
292
- type?: 'module' | 'commonjs';
293
- dependencies?: Record<string, string>;
294
- devDependencies?: Record<string, string>;
295
- peerDependencies?: Record<string, string>;
296
- optionalDependencies?: Record<string, string>;
297
- bundleDependencies?: string[];
298
- peerDependenciesMeta?: Record<
299
- string,
300
- { optional?: boolean; [k: string]: unknown }
301
- >;
302
- module?: string;
303
- browser?: Record<string, string> | string;
304
-
305
- main?: string;
306
-
307
- [k: string]: unknown;
308
- }
309
-
310
294
  /**
311
295
  * Function returning a set of module names (scoped to the compartment) whose
312
296
  * parser is not using heuristics to determine imports.
@@ -329,3 +313,20 @@ export type DeferErrorFn = (
329
313
  */
330
314
  error: Error,
331
315
  ) => StaticModuleType;
316
+
317
+ export type MakeLoadCompartmentsOptions = LogOptions &
318
+ PolicyOption &
319
+ PreloadOption;
320
+
321
+ export type DigestCompartmentMapOptions<
322
+ OldCompartmentName extends string = FileUrlString,
323
+ NewCompartmentName extends string = PackageCompartmentDescriptorName,
324
+ > = LogOptions & {
325
+ packageConnectionsHook?: PackageConnectionsHook | undefined;
326
+ renameCompartments?: CompartmentsRenameFn<
327
+ OldCompartmentName,
328
+ NewCompartmentName
329
+ >;
330
+ };
331
+
332
+ export type CaptureCompartmentMapOptions = DigestCompartmentMapOptions;
@@ -1,7 +1,7 @@
1
1
  import type { GenericGraph } from '../generic-graph.js';
2
+ import type { CanonicalName, PackageCompartmentDescriptorName, PolicyOption } from '../types.js';
2
3
  import type { Language, LanguageForExtension } from './compartment-map-schema.js';
3
- import type { LogOptions, FileUrlString } from './external.js';
4
- import type { PackageDescriptor } from './internal.js';
4
+ import type { FileUrlString, LogOptions, PackageDependenciesHook } from './external.js';
5
5
  import type { LiteralUnion } from './typescript.js';
6
6
  export type CommonDependencyDescriptors = Record<string, {
7
7
  spec: string;
@@ -17,16 +17,20 @@ export type CommonDependencyDescriptorsOptions = {
17
17
  */
18
18
  commonDependencyDescriptors?: CommonDependencyDescriptors;
19
19
  };
20
+ /**
21
+ * Options bag containing a {@link PackageDependenciesHook}
22
+ */
23
+ export type PackageDependenciesHookOption = {
24
+ packageDependenciesHook?: PackageDependenciesHook | undefined;
25
+ };
20
26
  /**
21
27
  * Options for `graphPackage()`
22
28
  */
23
- export type GraphPackageOptions = {
24
- logicalPath?: string[];
25
- } & LogOptions & CommonDependencyDescriptorsOptions;
29
+ export type GraphPackageOptions = LogOptions & PolicyOption & PackageDependenciesHookOption & CommonDependencyDescriptorsOptions;
26
30
  /**
27
31
  * Options for `graphPackages()`
28
32
  */
29
- export type GraphPackagesOptions = LogOptions;
33
+ export type GraphPackagesOptions = LogOptions & PolicyOption & PackageDependenciesHookOption;
30
34
  /**
31
35
  * Options for `gatherDependency()`
32
36
  */
@@ -36,7 +40,40 @@ export type GatherDependencyOptions = {
36
40
  * If `true` the dependency is optional
37
41
  */
38
42
  optional?: boolean;
39
- } & LogOptions & CommonDependencyDescriptorsOptions;
43
+ } & LogOptions & PackageDependenciesHookOption & PolicyOption & CommonDependencyDescriptorsOptions;
44
+ /**
45
+ * The type of a `package.json` file containing relevant fields; used by `graphPackages` and its ilk
46
+ */
47
+ export interface PackageDescriptor {
48
+ /**
49
+ * TODO: In reality, this is optional, but `graphPackage` does not consider it
50
+ * to be. This will need to be fixed once support for "anonymous" packages
51
+ * lands; see https://github.com/endojs/endo/pull/2664
52
+ */
53
+ name: string;
54
+ version?: string;
55
+ /**
56
+ * TODO: Update with proper type when this field is handled.
57
+ */
58
+ exports?: unknown;
59
+ type?: 'module' | 'commonjs';
60
+ dependencies?: Record<string, string>;
61
+ devDependencies?: Record<string, string>;
62
+ peerDependencies?: Record<string, string>;
63
+ optionalDependencies?: Record<string, string>;
64
+ bundleDependencies?: string[];
65
+ peerDependenciesMeta?: Record<string, {
66
+ optional?: boolean;
67
+ [k: string]: unknown;
68
+ }>;
69
+ module?: string;
70
+ browser?: Record<string, string> | string;
71
+ main?: string;
72
+ [k: string]: unknown;
73
+ }
74
+ /**
75
+ * Value in {@link Graph}
76
+ */
40
77
  export interface Node {
41
78
  /**
42
79
  * Informative compartment label based on the package name and version (if available)
@@ -46,8 +83,7 @@ export interface Node {
46
83
  * Package name
47
84
  */
48
85
  name: string;
49
- path: Array<string>;
50
- logicalPath: Array<string>;
86
+ location: FileUrlString;
51
87
  /**
52
88
  * `true` if the package's {@link PackageDescriptor} has an `exports` field
53
89
  */
@@ -66,9 +102,20 @@ export interface Node {
66
102
  *
67
103
  * The values are the keys of other {@link Node Nodes} in the {@link Graph}.
68
104
  */
69
- dependencyLocations: Record<string, string>;
105
+ dependencyLocations: Record<string, FileUrlString>;
70
106
  parsers: LanguageForExtension;
71
107
  types: Record<string, Language>;
108
+ packageDescriptor: PackageDescriptor;
109
+ }
110
+ /**
111
+ * A node in the graph that has been finalized, meaning it has a `label` and is
112
+ * ready for conversion into a `CompartmentDescriptor`.
113
+ */
114
+ export interface FinalNode extends Node {
115
+ /**
116
+ * Canonical name of the package; used to identify it in policy
117
+ */
118
+ label: string;
72
119
  }
73
120
  /**
74
121
  * The graph is an intermediate object model that the functions of this module
@@ -80,6 +127,12 @@ export interface Node {
80
127
  * `<ATTENUATORS>` string.
81
128
  */
82
129
  export type Graph = Record<LiteralUnion<'<ATTENUATORS>', FileUrlString>, Node>;
130
+ /**
131
+ * A graph, but contains {@link FinalNode}s instead of {@link Node}s.
132
+ *
133
+ * A "final node" has a `label` prop.
134
+ */
135
+ export type FinalGraph = Record<PackageCompartmentDescriptorName, Readonly<FinalNode>>;
83
136
  export interface LanguageOptions {
84
137
  commonjsLanguageForExtension: LanguageForExtension;
85
138
  moduleLanguageForExtension: LanguageForExtension;
@@ -99,4 +152,12 @@ export interface PackageDetails {
99
152
  * used by `mapNodeModules()` and its ilk.
100
153
  */
101
154
  export type LogicalPathGraph = GenericGraph<FileUrlString>;
155
+ /**
156
+ * Options for `translateGraph()`
157
+ */
158
+ export type TranslateGraphOptions = LogOptions & PolicyOption & PackageDependenciesHookOption;
159
+ /**
160
+ * Mapping to enable reverse-lookups of `CompartmentDescriptor`s from policy.
161
+ */
162
+ export type CanonicalNameMap = Map<CanonicalName, PackageCompartmentDescriptorName>;
102
163
  //# sourceMappingURL=node-modules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-modules.d.ts","sourceRoot":"","sources":["node-modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,QAAQ,EACR,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAChC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kCAAkC,GAAG;IAC/C;;OAEG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,UAAU,GACZ,kCAAkC,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,UAAU,GACZ,kCAAkC,CAAC;AAErC,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,0BAA0B,EAAE,oBAAoB,CAAC;IACjD,qCAAqC,EAAE,oBAAoB,CAAC;IAC5D,mCAAmC,EAAE,oBAAoB,CAAC;IAC1D,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,aAAa,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"node-modules.d.ts","sourceRoot":"","sources":["node-modules.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,25 @@
1
1
  import type { GenericGraph } from '../generic-graph.js';
2
+ import type {
3
+ ATTENUATORS_COMPARTMENT,
4
+ ENTRY_COMPARTMENT,
5
+ } from '../policy-format.js';
6
+ import type {
7
+ CanonicalName,
8
+ CompartmentMapDescriptor,
9
+ PackageCompartmentDescriptorName,
10
+ PolicyOption,
11
+ SomePolicy,
12
+ } from '../types.js';
2
13
  import type {
3
14
  Language,
4
15
  LanguageForExtension,
16
+ PackageCompartmentMapDescriptor,
5
17
  } from './compartment-map-schema.js';
6
- import type { LogOptions, FileUrlString } from './external.js';
7
- import type { PackageDescriptor } from './internal.js';
18
+ import type {
19
+ FileUrlString,
20
+ LogOptions,
21
+ PackageDependenciesHook,
22
+ } from './external.js';
8
23
  import type { LiteralUnion } from './typescript.js';
9
24
 
10
25
  export type CommonDependencyDescriptors = Record<
@@ -23,18 +38,27 @@ export type CommonDependencyDescriptorsOptions = {
23
38
  commonDependencyDescriptors?: CommonDependencyDescriptors;
24
39
  };
25
40
 
41
+ /**
42
+ * Options bag containing a {@link PackageDependenciesHook}
43
+ */
44
+ export type PackageDependenciesHookOption = {
45
+ packageDependenciesHook?: PackageDependenciesHook | undefined;
46
+ };
47
+
26
48
  /**
27
49
  * Options for `graphPackage()`
28
50
  */
29
- export type GraphPackageOptions = {
30
- logicalPath?: string[];
31
- } & LogOptions &
51
+ export type GraphPackageOptions = LogOptions &
52
+ PolicyOption &
53
+ PackageDependenciesHookOption &
32
54
  CommonDependencyDescriptorsOptions;
33
55
 
34
56
  /**
35
57
  * Options for `graphPackages()`
36
58
  */
37
- export type GraphPackagesOptions = LogOptions;
59
+ export type GraphPackagesOptions = LogOptions &
60
+ PolicyOption &
61
+ PackageDependenciesHookOption;
38
62
 
39
63
  /**
40
64
  * Options for `gatherDependency()`
@@ -46,8 +70,46 @@ export type GatherDependencyOptions = {
46
70
  */
47
71
  optional?: boolean;
48
72
  } & LogOptions &
73
+ PackageDependenciesHookOption &
74
+ PolicyOption &
49
75
  CommonDependencyDescriptorsOptions;
50
76
 
77
+ /**
78
+ * The type of a `package.json` file containing relevant fields; used by `graphPackages` and its ilk
79
+ */
80
+ export interface PackageDescriptor {
81
+ /**
82
+ * TODO: In reality, this is optional, but `graphPackage` does not consider it
83
+ * to be. This will need to be fixed once support for "anonymous" packages
84
+ * lands; see https://github.com/endojs/endo/pull/2664
85
+ */
86
+ name: string;
87
+ version?: string;
88
+ /**
89
+ * TODO: Update with proper type when this field is handled.
90
+ */
91
+ exports?: unknown;
92
+ type?: 'module' | 'commonjs';
93
+ dependencies?: Record<string, string>;
94
+ devDependencies?: Record<string, string>;
95
+ peerDependencies?: Record<string, string>;
96
+ optionalDependencies?: Record<string, string>;
97
+ bundleDependencies?: string[];
98
+ peerDependenciesMeta?: Record<
99
+ string,
100
+ { optional?: boolean; [k: string]: unknown }
101
+ >;
102
+ module?: string;
103
+ browser?: Record<string, string> | string;
104
+
105
+ main?: string;
106
+
107
+ [k: string]: unknown;
108
+ }
109
+
110
+ /**
111
+ * Value in {@link Graph}
112
+ */
51
113
  export interface Node {
52
114
  /**
53
115
  * Informative compartment label based on the package name and version (if available)
@@ -57,8 +119,7 @@ export interface Node {
57
119
  * Package name
58
120
  */
59
121
  name: string;
60
- path: Array<string>;
61
- logicalPath: Array<string>;
122
+ location: FileUrlString;
62
123
  /**
63
124
  * `true` if the package's {@link PackageDescriptor} has an `exports` field
64
125
  */
@@ -77,9 +138,21 @@ export interface Node {
77
138
  *
78
139
  * The values are the keys of other {@link Node Nodes} in the {@link Graph}.
79
140
  */
80
- dependencyLocations: Record<string, string>;
141
+ dependencyLocations: Record<string, FileUrlString>;
81
142
  parsers: LanguageForExtension;
82
143
  types: Record<string, Language>;
144
+ packageDescriptor: PackageDescriptor;
145
+ }
146
+
147
+ /**
148
+ * A node in the graph that has been finalized, meaning it has a `label` and is
149
+ * ready for conversion into a `CompartmentDescriptor`.
150
+ */
151
+ export interface FinalNode extends Node {
152
+ /**
153
+ * Canonical name of the package; used to identify it in policy
154
+ */
155
+ label: string;
83
156
  }
84
157
 
85
158
  /**
@@ -93,6 +166,16 @@ export interface Node {
93
166
  */
94
167
  export type Graph = Record<LiteralUnion<'<ATTENUATORS>', FileUrlString>, Node>;
95
168
 
169
+ /**
170
+ * A graph, but contains {@link FinalNode}s instead of {@link Node}s.
171
+ *
172
+ * A "final node" has a `label` prop.
173
+ */
174
+ export type FinalGraph = Record<
175
+ PackageCompartmentDescriptorName,
176
+ Readonly<FinalNode>
177
+ >;
178
+
96
179
  export interface LanguageOptions {
97
180
  commonjsLanguageForExtension: LanguageForExtension;
98
181
  moduleLanguageForExtension: LanguageForExtension;
@@ -114,3 +197,18 @@ export interface PackageDetails {
114
197
  * used by `mapNodeModules()` and its ilk.
115
198
  */
116
199
  export type LogicalPathGraph = GenericGraph<FileUrlString>;
200
+
201
+ /**
202
+ * Options for `translateGraph()`
203
+ */
204
+ export type TranslateGraphOptions = LogOptions &
205
+ PolicyOption &
206
+ PackageDependenciesHookOption;
207
+
208
+ /**
209
+ * Mapping to enable reverse-lookups of `CompartmentDescriptor`s from policy.
210
+ */
211
+ export type CanonicalNameMap = Map<
212
+ CanonicalName,
213
+ PackageCompartmentDescriptorName
214
+ >;
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * @module
6
6
  */
7
+ import type { WILDCARD_POLICY_VALUE } from '../policy-format.js';
7
8
  /**
8
9
  * An object representing a full attenuation definition.
9
10
  */
@@ -11,7 +12,7 @@ export type FullAttenuationDefinition = {
11
12
  /** The type of attenuation. */
12
13
  attenuate: string;
13
14
  /** The parameters for the attenuation. */
14
- params: ImplicitAttenuationDefinition;
15
+ params?: ImplicitAttenuationDefinition;
15
16
  };
16
17
  /**
17
18
  * An array of any type representing an implicit attenuation definition.
@@ -30,7 +31,7 @@ export type UnifiedAttenuationDefinition = {
30
31
  /**
31
32
  * A type representing a wildcard policy, which can be 'any'.
32
33
  */
33
- export type WildcardPolicy = 'any';
34
+ export type WildcardPolicy = typeof WILDCARD_POLICY_VALUE;
34
35
  /**
35
36
  * A type representing a property policy, which is a record of string keys and
36
37
  * boolean values
@@ -41,7 +42,7 @@ export type PropertyPolicy = Record<string, boolean>;
41
42
  * wildcard policy}, a property policy, `undefined`, or defined by an
42
43
  * attenuator
43
44
  */
44
- export type PolicyItem<T = void> = WildcardPolicy | PropertyPolicy | T;
45
+ export type PolicyItem<T = void> = [T] extends [void] ? WildcardPolicy | PropertyPolicy : WildcardPolicy | PropertyPolicy | T;
45
46
  /**
46
47
  * An object representing a nested attenuation definition.
47
48
  */
@@ -50,19 +51,33 @@ export type NestedAttenuationDefinition = Record<string, AttenuationDefinition |
50
51
  * An object representing a base package policy.
51
52
  */
52
53
  export type PackagePolicy<PackagePolicyItem = void, GlobalsPolicyItem = void, BuiltinsPolicyItem = void, ExtraOptions = unknown> = {
53
- /** The default attenuator. */
54
+ /**
55
+ * The default attenuator, if any.
56
+ */
54
57
  defaultAttenuator?: string | undefined;
55
- /** The policy item for packages. */
58
+ /**
59
+ * The policy item for packages.
60
+ */
56
61
  packages?: PolicyItem<PackagePolicyItem> | undefined;
57
- /** The policy item or full attenuation definition for globals. */
62
+ /**
63
+ * The policy item or full attenuation definition for globals.
64
+ */
58
65
  globals?: AttenuationDefinition | PolicyItem<GlobalsPolicyItem> | undefined;
59
- /** The policy item or nested attenuation definition for builtins. */
66
+ /**
67
+ * The policy item or nested attenuation definition for builtins.
68
+ */
60
69
  builtins?: NestedAttenuationDefinition | PolicyItem<BuiltinsPolicyItem> | undefined;
61
- /** Whether to disable global freeze. */
70
+ /**
71
+ * Whether to disable global freeze.
72
+ */
62
73
  noGlobalFreeze?: boolean | undefined;
63
- /** Whether to allow dynamic imports */
74
+ /**
75
+ * Whether to allow dynamic imports
76
+ */
64
77
  dynamic?: boolean | undefined;
65
- /** Any additional user-defined options can be added to the policy here */
78
+ /**
79
+ * Any additional user-defined options can be added to the policy here
80
+ */
66
81
  options?: ExtraOptions | undefined;
67
82
  };
68
83
  /**
@@ -79,5 +94,5 @@ export type Policy<PackagePolicyItem = void, GlobalsPolicyItem = void, BuiltinsP
79
94
  /** Any {@link Policy} */
80
95
  export type SomePolicy = Policy<any, any, any, any>;
81
96
  /** Any {@link PackagePolicy} */
82
- export type SomePackagePolicy = PackagePolicy<PolicyItem, PolicyItem, PolicyItem, unknown>;
97
+ export type SomePackagePolicy = PackagePolicy<void, void, void, unknown>;
83
98
  //# sourceMappingURL=policy-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-schema.d.ts","sourceRoot":"","sources":["policy-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,EAAE,6BAA6B,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B,yBAAyB,GACzB,6BAA6B,CAAC;AAClC,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC;AAEnC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,IAAI,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,MAAM,EACN,qBAAqB,GAAG,OAAO,CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,CACvB,iBAAiB,GAAG,IAAI,EACxB,iBAAiB,GAAG,IAAI,EACxB,kBAAkB,GAAG,IAAI,EACzB,YAAY,GAAG,OAAO,IACpB;IACF,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IACrD,kEAAkE;IAClE,OAAO,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAC5E,qEAAqE;IACrE,QAAQ,CAAC,EACL,2BAA2B,GAC3B,UAAU,CAAC,kBAAkB,CAAC,GAC9B,SAAS,CAAC;IACd,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,MAAM,CAChB,iBAAiB,GAAG,IAAI,EACxB,iBAAiB,GAAG,IAAI,EACxB,kBAAkB,GAAG,IAAI,EACzB,YAAY,GAAG,OAAO,IACpB;IACF,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CACf,MAAM,EACN,aAAa,CACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,CACb,CACF,CAAC;IACF,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,wCAAwC;IACxC,KAAK,CAAC,EACF,aAAa,CACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,CACb,GACD,SAAS,CAAC;CACf,CAAC;AAEF,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAC3C,UAAU,EACV,UAAU,EACV,UAAU,EACV,OAAO,CACR,CAAC"}
1
+ {"version":3,"file":"policy-schema.d.ts","sourceRoot":"","sources":["policy-schema.ts"],"names":[],"mappings":"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"}