mustardscript 0.1.0 → 0.1.2

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 (96) hide show
  1. package/README.md +65 -22
  2. package/SECURITY.md +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/lib/executor.js +16 -1
  5. package/dist/lib/policy.js +301 -22
  6. package/dist/lib/progress.js +499 -113
  7. package/dist/lib/runtime.js +109 -40
  8. package/dist/lib/structured.js +327 -11
  9. package/dist/native-loader.js +11 -12
  10. package/index.d.ts +54 -6
  11. package/mustard.d.ts +23 -1
  12. package/package.json +34 -25
  13. package/Cargo.lock +0 -1579
  14. package/Cargo.toml +0 -40
  15. package/crates/mustard/Cargo.toml +0 -31
  16. package/crates/mustard/src/cancellation.rs +0 -28
  17. package/crates/mustard/src/diagnostic.rs +0 -145
  18. package/crates/mustard/src/ir.rs +0 -435
  19. package/crates/mustard/src/lib.rs +0 -21
  20. package/crates/mustard/src/limits.rs +0 -22
  21. package/crates/mustard/src/parser/expressions.rs +0 -723
  22. package/crates/mustard/src/parser/mod.rs +0 -115
  23. package/crates/mustard/src/parser/operators.rs +0 -105
  24. package/crates/mustard/src/parser/patterns.rs +0 -123
  25. package/crates/mustard/src/parser/scope.rs +0 -107
  26. package/crates/mustard/src/parser/statements.rs +0 -298
  27. package/crates/mustard/src/parser/tests/acceptance.rs +0 -339
  28. package/crates/mustard/src/parser/tests/mod.rs +0 -2
  29. package/crates/mustard/src/parser/tests/rejections.rs +0 -107
  30. package/crates/mustard/src/runtime/accounting.rs +0 -613
  31. package/crates/mustard/src/runtime/api.rs +0 -192
  32. package/crates/mustard/src/runtime/async_runtime/mod.rs +0 -5
  33. package/crates/mustard/src/runtime/async_runtime/promises.rs +0 -246
  34. package/crates/mustard/src/runtime/async_runtime/reactions.rs +0 -400
  35. package/crates/mustard/src/runtime/async_runtime/scheduler.rs +0 -224
  36. package/crates/mustard/src/runtime/builtins/arrays.rs +0 -1205
  37. package/crates/mustard/src/runtime/builtins/collections.rs +0 -573
  38. package/crates/mustard/src/runtime/builtins/install.rs +0 -501
  39. package/crates/mustard/src/runtime/builtins/intl.rs +0 -553
  40. package/crates/mustard/src/runtime/builtins/mod.rs +0 -25
  41. package/crates/mustard/src/runtime/builtins/objects.rs +0 -405
  42. package/crates/mustard/src/runtime/builtins/primitives.rs +0 -859
  43. package/crates/mustard/src/runtime/builtins/promises.rs +0 -335
  44. package/crates/mustard/src/runtime/builtins/regexp.rs +0 -356
  45. package/crates/mustard/src/runtime/builtins/strings.rs +0 -803
  46. package/crates/mustard/src/runtime/builtins/support.rs +0 -561
  47. package/crates/mustard/src/runtime/bytecode.rs +0 -123
  48. package/crates/mustard/src/runtime/compiler/assignments.rs +0 -690
  49. package/crates/mustard/src/runtime/compiler/bindings.rs +0 -92
  50. package/crates/mustard/src/runtime/compiler/context.rs +0 -46
  51. package/crates/mustard/src/runtime/compiler/control.rs +0 -342
  52. package/crates/mustard/src/runtime/compiler/expressions.rs +0 -372
  53. package/crates/mustard/src/runtime/compiler/mod.rs +0 -173
  54. package/crates/mustard/src/runtime/compiler/statements.rs +0 -459
  55. package/crates/mustard/src/runtime/conversions/boundary.rs +0 -293
  56. package/crates/mustard/src/runtime/conversions/coercions.rs +0 -217
  57. package/crates/mustard/src/runtime/conversions/errors.rs +0 -118
  58. package/crates/mustard/src/runtime/conversions/mod.rs +0 -14
  59. package/crates/mustard/src/runtime/conversions/operators.rs +0 -334
  60. package/crates/mustard/src/runtime/env.rs +0 -355
  61. package/crates/mustard/src/runtime/exceptions.rs +0 -377
  62. package/crates/mustard/src/runtime/gc.rs +0 -595
  63. package/crates/mustard/src/runtime/mod.rs +0 -318
  64. package/crates/mustard/src/runtime/properties.rs +0 -1762
  65. package/crates/mustard/src/runtime/serialization.rs +0 -127
  66. package/crates/mustard/src/runtime/shared.rs +0 -108
  67. package/crates/mustard/src/runtime/snapshot_validation_tests.rs +0 -93
  68. package/crates/mustard/src/runtime/state.rs +0 -652
  69. package/crates/mustard/src/runtime/tests/async_host.rs +0 -104
  70. package/crates/mustard/src/runtime/tests/collections.rs +0 -50
  71. package/crates/mustard/src/runtime/tests/diagnostics.rs +0 -36
  72. package/crates/mustard/src/runtime/tests/exceptions.rs +0 -122
  73. package/crates/mustard/src/runtime/tests/execution.rs +0 -553
  74. package/crates/mustard/src/runtime/tests/gc.rs +0 -533
  75. package/crates/mustard/src/runtime/tests/mod.rs +0 -56
  76. package/crates/mustard/src/runtime/tests/serialization.rs +0 -170
  77. package/crates/mustard/src/runtime/validation/bytecode.rs +0 -484
  78. package/crates/mustard/src/runtime/validation/mod.rs +0 -14
  79. package/crates/mustard/src/runtime/validation/policy.rs +0 -94
  80. package/crates/mustard/src/runtime/validation/snapshot.rs +0 -406
  81. package/crates/mustard/src/runtime/validation/walk.rs +0 -206
  82. package/crates/mustard/src/runtime/vm.rs +0 -1016
  83. package/crates/mustard/src/span.rs +0 -22
  84. package/crates/mustard/src/structured.rs +0 -107
  85. package/crates/mustard-bridge/Cargo.toml +0 -17
  86. package/crates/mustard-bridge/src/codec.rs +0 -46
  87. package/crates/mustard-bridge/src/dto.rs +0 -99
  88. package/crates/mustard-bridge/src/lib.rs +0 -12
  89. package/crates/mustard-bridge/src/operations.rs +0 -142
  90. package/crates/mustard-node/Cargo.toml +0 -24
  91. package/crates/mustard-node/build.rs +0 -3
  92. package/crates/mustard-node/src/lib.rs +0 -236
  93. package/crates/mustard-sidecar/Cargo.toml +0 -21
  94. package/crates/mustard-sidecar/src/lib.rs +0 -134
  95. package/crates/mustard-sidecar/src/main.rs +0 -36
  96. package/dist/install.js +0 -117
package/index.d.ts CHANGED
@@ -2,22 +2,70 @@
2
2
  /* eslint-disable */
3
3
  export declare function cancelCancellationToken(tokenId: string): void
4
4
 
5
- export declare function claimProgressSnapshot(snapshotIdentity: string): boolean
6
-
7
- export declare function compileProgram(source: string): Buffer
5
+ export declare function compileProgram(source: string): string
8
6
 
9
7
  export declare function createCancellationToken(): string
10
8
 
9
+ export declare function createExecutionContext(policyJson: string): string
10
+
11
+ export declare function dumpProgram(programHandle: string): Buffer
12
+
13
+ export declare function dumpSnapshotHandle(snapshotHandle: string): Buffer
14
+
15
+ export declare function inspectDetachedSnapshot(programHandle: string, snapshot: Buffer, policyJson: string): string
16
+
11
17
  export declare function inspectSnapshot(snapshot: Buffer, policyJson: string): string
12
18
 
13
- export declare function isProgressSnapshotUsed(snapshotIdentity: string): boolean
19
+ export declare function inspectSnapshotHandle(snapshotHandle: string): string
20
+
21
+ export declare function loadDetachedSnapshotHandle(programHandle: string, snapshot: Buffer, policyJson: string): string
22
+
23
+ export declare function loadDetachedSnapshotHandleWithExecutionContext(programHandle: string, contextHandle: string, snapshot: Buffer, snapshotId: string, snapshotKeyBase64: string, snapshotKeyDigest: string, snapshotToken: string): string
24
+
25
+ export declare function loadProgram(program: Buffer): string
26
+
27
+ export declare function loadSnapshotHandle(snapshot: Buffer, policyJson: string): string
28
+
29
+ export declare function loadSnapshotHandleWithExecutionContext(contextHandle: string, snapshot: Buffer, snapshotId: string, snapshotKeyBase64: string, snapshotKeyDigest: string, snapshotToken: string): string
30
+
31
+ export declare function profileResumeSnapshotHandle(snapshotHandle: string, payloadJson: string, cancellationTokenId?: string | undefined | null): string
32
+
33
+ export declare function profileResumeSnapshotHandleBuffer(snapshotHandle: string, payloadBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
34
+
35
+ export declare function profileStartProgramWithExecutionContextHandle(programHandle: string, contextHandle: string, inputsJson: string, cancellationTokenId?: string | undefined | null): string
36
+
37
+ export declare function profileStartProgramWithExecutionContextHandleBuffer(programHandle: string, contextHandle: string, inputsBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
38
+
39
+ export declare function profileStartProgramWithSnapshotHandle(programHandle: string, optionsJson: string, cancellationTokenId?: string | undefined | null): string
40
+
41
+ export declare function profileStartProgramWithSnapshotHandleBuffer(programHandle: string, optionsBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
14
42
 
15
43
  export declare function releaseCancellationToken(tokenId: string): void
16
44
 
17
- export declare function releaseProgressSnapshot(snapshotIdentity: string): void
45
+ export declare function releaseExecutionContext(contextHandle: string): void
46
+
47
+ export declare function releaseProgram(programHandle: string): void
48
+
49
+ export declare function releaseSnapshotHandle(snapshotHandle: string): void
50
+
51
+ export declare function resumeDetachedProgram(programHandle: string, snapshot: Buffer, payloadJson: string, policyJson: string, cancellationTokenId?: string | undefined | null): string
18
52
 
19
53
  export declare function resumeProgram(snapshot: Buffer, payloadJson: string, policyJson: string, cancellationTokenId?: string | undefined | null): string
20
54
 
55
+ export declare function resumeSnapshotHandle(snapshotHandle: string, payloadJson: string, cancellationTokenId?: string | undefined | null): string
56
+
57
+ export declare function resumeSnapshotHandleBuffer(snapshotHandle: string, payloadBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
58
+
59
+ export declare function retainProgram(programHandle: string): string
60
+
21
61
  export declare function snapshotIdentity(snapshot: Buffer): string
22
62
 
23
- export declare function startProgram(program: Buffer, optionsJson: string, cancellationTokenId?: string | undefined | null): string
63
+ export declare function startProgram(programHandle: string, optionsJson: string, cancellationTokenId?: string | undefined | null): string
64
+
65
+ export declare function startProgramWithExecutionContextHandle(programHandle: string, contextHandle: string, inputsJson: string, cancellationTokenId?: string | undefined | null): string
66
+
67
+ export declare function startProgramWithExecutionContextHandleBuffer(programHandle: string, contextHandle: string, inputsBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
68
+
69
+ export declare function startProgramWithSnapshotHandle(programHandle: string, optionsJson: string, cancellationTokenId?: string | undefined | null): string
70
+
71
+ export declare function startProgramWithSnapshotHandleBuffer(programHandle: string, optionsBuffer: Buffer, cancellationTokenId?: string | undefined | null): string
package/mustard.d.ts CHANGED
@@ -28,8 +28,16 @@ export interface CompileOptions {
28
28
 
29
29
  export type SnapshotKey = string | Buffer | Uint8Array;
30
30
 
31
+ export interface ExecutionContextOptions {
32
+ capabilities?: Record<string, Capability>;
33
+ console?: ConsoleCallbacks;
34
+ limits?: RuntimeLimits;
35
+ snapshotKey?: SnapshotKey;
36
+ }
37
+
31
38
  export interface ExecutionOptions {
32
39
  inputs?: Record<string, StructuredValue>;
40
+ context?: ExecutionContext;
33
41
  capabilities?: Record<string, Capability>;
34
42
  console?: ConsoleCallbacks;
35
43
  limits?: RuntimeLimits;
@@ -46,7 +54,7 @@ export interface ProgressLoadOptionsBase {
46
54
  snapshotKey: SnapshotKey;
47
55
  }
48
56
 
49
- export type ProgressLoadOptions =
57
+ export type ProgressLoadOptionsExplicit =
50
58
  | (ProgressLoadOptionsBase & {
51
59
  capabilities: Record<string, Capability>;
52
60
  console?: ConsoleCallbacks;
@@ -56,6 +64,12 @@ export type ProgressLoadOptions =
56
64
  console: ConsoleCallbacks;
57
65
  });
58
66
 
67
+ export interface ProgressLoadContextOptions {
68
+ context: ExecutionContext;
69
+ }
70
+
71
+ export type ProgressLoadOptions = ProgressLoadOptionsExplicit | ProgressLoadContextOptions;
72
+
59
73
  export interface RuntimeLimits {
60
74
  instructionBudget?: number;
61
75
  heapLimitBytes?: number;
@@ -159,6 +173,10 @@ export interface SerializedProgress {
159
173
  snapshot_id: string;
160
174
  snapshot_key_digest: string;
161
175
  token: string;
176
+ program?: Buffer;
177
+ program_id?: string;
178
+ suspended_manifest?: string;
179
+ suspended_manifest_token?: string;
162
180
  }
163
181
 
164
182
  export class Progress {
@@ -174,6 +192,10 @@ export class Progress {
174
192
  static load(state: SerializedProgress, options: ProgressLoadOptions): Progress;
175
193
  }
176
194
 
195
+ export class ExecutionContext {
196
+ constructor(options?: ExecutionContextOptions);
197
+ }
198
+
177
199
  export class Mustard {
178
200
  constructor(code: string, options?: CompileOptions);
179
201
 
package/package.json CHANGED
@@ -1,26 +1,16 @@
1
1
  {
2
2
  "name": "mustardscript",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Sandboxed, subset JavaScript runtime for Node services.",
5
5
  "main": "dist/index.js",
6
6
  "types": "mustard.d.ts",
7
7
  "files": [
8
- "Cargo.lock",
9
- "Cargo.toml",
10
8
  "LICENSE",
11
9
  "SECURITY.md",
10
+ "README.md",
12
11
  "dist",
13
12
  "index.d.ts",
14
- "mustard.d.ts",
15
- "crates/mustard/Cargo.toml",
16
- "crates/mustard/src/**",
17
- "crates/mustard-bridge/Cargo.toml",
18
- "crates/mustard-bridge/src/**",
19
- "crates/mustard-node/Cargo.toml",
20
- "crates/mustard-node/build.rs",
21
- "crates/mustard-node/src/**",
22
- "crates/mustard-sidecar/Cargo.toml",
23
- "crates/mustard-sidecar/src/**"
13
+ "mustard.d.ts"
24
14
  ],
25
15
  "directories": {
26
16
  "doc": "docs",
@@ -38,13 +28,12 @@
38
28
  ]
39
29
  },
40
30
  "optionalDependencies": {
41
- "mustardscript-darwin-arm64": "0.1.0",
42
- "mustardscript-darwin-x64": "0.1.0",
43
- "mustardscript-linux-x64-gnu": "0.1.0",
44
- "mustardscript-win32-x64-msvc": "0.1.0"
31
+ "@mustardscript/binding-darwin-arm64": "0.1.2",
32
+ "@mustardscript/binding-darwin-x64": "0.1.2",
33
+ "@mustardscript/binding-linux-x64-gnu": "0.1.2",
34
+ "@mustardscript/binding-win32-x64-msvc": "0.1.2"
45
35
  },
46
36
  "scripts": {
47
- "install": "node -e \"const fs=require('node:fs'); const cp=require('node:child_process'); if (!fs.existsSync('dist/install.js')) { cp.execFileSync(process.execPath, ['scripts/build-ts-dist.ts'], { stdio: 'inherit' }); } cp.execFileSync(process.execPath, ['dist/install.js'], { stdio: 'inherit' });\"",
48
37
  "prepack": "node scripts/build-ts-dist.ts",
49
38
  "build": "node scripts/build-ts-dist.ts && napi build --platform --manifest-path crates/mustard-node/Cargo.toml --js-package-name mustardscript --output-dir . --no-js",
50
39
  "ralph-loop": "node scripts/ralph-loop.ts",
@@ -60,16 +49,35 @@
60
49
  "test:hardening": "scripts/run-hardening.sh",
61
50
  "test:mutation-guards": "npm run build && node --test tests/hardening/**/*.test.js",
62
51
  "seed:fuzz-corpus": "node scripts/seed-fuzz-corpus.ts",
63
- "bench:smoke": "npm run build && node --expose-gc benchmarks/smoke.ts",
64
- "prebuilt:dirs": "napi create-npm-dirs",
52
+ "bench:smoke": "npm run bench:smoke:dev",
53
+ "bench:smoke:dev": "npm run build && node --expose-gc benchmarks/smoke.ts --profile dev",
54
+ "bench:smoke:release": "node scripts/build-ts-dist.ts && napi build --platform --release --manifest-path crates/mustard-node/Cargo.toml --js-package-name mustardscript --output-dir . --no-js && node --expose-gc benchmarks/smoke.ts --profile release",
55
+ "prebuilt:dirs": "node scripts/generate-prebuilt-packages.ts",
65
56
  "prebuilt:artifacts": "napi artifacts --output-dir artifacts",
57
+ "bench:rust": "cargo bench -p mustard --bench runtime_core -- --noplot",
58
+ "bench:regress:workloads": "node scripts/benchmark-compare.ts --kind workloads --profile release --tracked-baseline --include-prefix addon. --max-regression-pct 10",
59
+ "bench:regress:smoke": "node scripts/benchmark-compare.ts --kind smoke --profile release --tracked-baseline --max-regression-pct 50",
60
+ "bench:regress:ptc": "npm run bench:regress:ptc:broad && npm run bench:regress:ptc:holdout",
61
+ "bench:regress:ptc:broad": "node scripts/benchmark-compare.ts --kind ptc_broad_release --profile release --tracked-baseline --include-prefix addon.ptc.phase2.scorecards.headlineScore.medium --include-prefix addon.ptc.phase2.scorecards.broadScore.medium --include-prefix addon.ptc.phase2.scorecards.p90LaneRatio.medium --include-prefix addon.ptc.phase2.scorecards.worstLaneRatio.medium --require-path addon.ptc.phase2.scorecards.headlineScore.medium --require-path addon.ptc.phase2.scorecards.broadScore.medium --require-path addon.ptc.phase2.scorecards.p90LaneRatio.medium --require-path addon.ptc.phase2.scorecards.worstLaneRatio.medium --max-regression-pct 10",
62
+ "bench:regress:ptc:holdout": "node scripts/benchmark-compare.ts --kind ptc_holdout_release --profile release --tracked-baseline --include-prefix addon.ptc.phase2.scorecards.holdoutScore.medium --require-path addon.ptc.phase2.scorecards.holdoutScore.medium --max-regression-pct 10",
66
63
  "verify:prebuilt": "node scripts/verify-prebuilt.ts",
67
64
  "verify:release": "node scripts/release-verify.ts",
68
- "lint": "cargo fmt --all --check && cargo clippy --workspace --all-targets -- -D warnings"
65
+ "lint": "cargo fmt --all --check && cargo clippy --workspace --all-targets -- -D warnings",
66
+ "bench:workloads": "npm run bench:workloads:release",
67
+ "bench:workloads:dev": "node scripts/build-ts-dist.ts && napi build --platform --manifest-path crates/mustard-node/Cargo.toml --js-package-name mustardscript --output-dir . --no-js && cargo build -q -p mustard-sidecar && node --expose-gc benchmarks/workloads.ts --profile dev",
68
+ "bench:workloads:release": "node scripts/build-ts-dist.ts && napi build --platform --release --manifest-path crates/mustard-node/Cargo.toml --js-package-name mustardscript --output-dir . --no-js && cargo build -q --release -p mustard-sidecar && node --expose-gc benchmarks/workloads.ts --profile release",
69
+ "bench:ptc:release": "npm run bench:workloads:release",
70
+ "bench:ptc:public": "npm run bench:workloads:release -- --mode ptc_public",
71
+ "bench:ptc:headline": "npm run bench:workloads:release -- --mode ptc_headline_release",
72
+ "bench:ptc:broad": "npm run bench:workloads:release -- --mode ptc_broad_release",
73
+ "bench:ptc:holdout": "npm run bench:workloads:release -- --mode ptc_holdout_release",
74
+ "bench:ptc:gallery-canary": "npm run bench:workloads:release -- --mode ptc_gallery_canary",
75
+ "bench:ptc:sentinel": "npm run bench:workloads:release -- --mode ptc_sentinel_release",
76
+ "bench:compare": "node scripts/benchmark-compare.ts"
69
77
  },
70
78
  "repository": {
71
79
  "type": "git",
72
- "url": "git+https://github.com/keppoai/mustardscript.git"
80
+ "url": "git+https://github.com/mustardscript/mustardscript.git"
73
81
  },
74
82
  "keywords": [
75
83
  "javascript",
@@ -85,12 +93,13 @@
85
93
  "@napi-rs/cli": "^3.3.0",
86
94
  "@types/node": "^25.6.0",
87
95
  "fast-check": "^4.6.0",
88
- "typescript": "^6.0.2"
96
+ "typescript": "^6.0.2",
97
+ "isolated-vm": "^6.1.2"
89
98
  },
90
99
  "bugs": {
91
- "url": "https://github.com/keppoai/mustardscript/issues"
100
+ "url": "https://github.com/mustardscript/mustardscript/issues"
92
101
  },
93
- "homepage": "https://github.com/keppoai/mustardscript#readme",
102
+ "homepage": "https://github.com/mustardscript/mustardscript#readme",
94
103
  "publishConfig": {
95
104
  "access": "public"
96
105
  }