Unified · Split
| @@ -0,0 +1,6 @@ | ||
| 1 | +--- | |
| 2 | +"@executor-js/plugin-file-secrets": patch | |
| 3 | +"@executor-js/plugin-keychain": patch | |
| 4 | +--- | |
| 5 | + | |
| 6 | +Import plugin-authoring symbols from `@executor-js/sdk/core` instead of the package root. The published root is the Promise surface and does not export `StorageError`, `definePlugin`, `PluginCtx`, or `Plugin`, so both packages failed to load when installed from npm. | |
| @@ -9,7 +9,7 @@ import { · 8 unmodified lines | ||
| 9 | 9 | ProviderKey, |
| 10 | 10 | StorageError, |
| 11 | 11 | type CredentialProvider, |
| 12 | −} from "@executor-js/sdk"; | |
| 12 | +} from "@executor-js/sdk/core"; | |
| 13 | 13 | |
| 14 | 14 | // --------------------------------------------------------------------------- |
| 15 | 15 | // Auth file location |
| @@ -1,4 +1,4 @@ | ||
| 1 | −import { type Plugin } from "@executor-js/sdk"; | |
| 1 | +import { type Plugin } from "@executor-js/sdk/core"; | |
| 2 | 2 | |
| 3 | 3 | import { |
| 4 | 4 | fileSecretsPlugin as fileSecretsPluginEffect, |
| @@ -9,7 +9,7 @@ import { · 4 unmodified lines | ||
| 9 | 9 | export type { FileSecretsPluginConfig } from "./index"; |
| 10 | 10 | |
| 11 | 11 | // Explicit return type so the emitted dist/promise.d.ts references |
| 12 | −// `import("@executor-js/sdk").Plugin` rather than the Promise-surface | |
| 12 | +// `import("@executor-js/sdk/core").Plugin` rather than the Promise-surface | |
| 13 | 13 | // root specifier (which doesn't re-export Plugin). |
| 14 | 14 | export const fileSecretsPlugin = ( |
| 15 | 15 | config?: FileSecretsPluginConfig, |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | import { Effect } from "effect"; |
| 2 | 2 | |
| 3 | −import { definePlugin, type CredentialProvider, type PluginCtx } from "@executor-js/sdk"; | |
| 3 | +import { definePlugin, type CredentialProvider, type PluginCtx } from "@executor-js/sdk/core"; | |
| 4 | 4 | |
| 5 | 5 | import { |
| 6 | 6 | deletePassword, |
| @@ -1,4 +1,4 @@ | ||
| 1 | −import { type Plugin } from "@executor-js/sdk"; | |
| 1 | +import { type Plugin } from "@executor-js/sdk/core"; | |
| 2 | 2 | |
| 3 | 3 | import { |
| 4 | 4 | keychainPlugin as keychainPluginEffect, |
| @@ -9,7 +9,7 @@ import { · 4 unmodified lines | ||
| 9 | 9 | export type { KeychainPluginConfig } from "./index"; |
| 10 | 10 | |
| 11 | 11 | // Explicit return type so the emitted dist/promise.d.ts references |
| 12 | −// `import("@executor-js/sdk").Plugin` rather than the Promise-surface | |
| 12 | +// `import("@executor-js/sdk/core").Plugin` rather than the Promise-surface | |
| 13 | 13 | // root specifier (which doesn't re-export Plugin). |
| 14 | 14 | export const keychainPlugin = ( |
| 15 | 15 | config?: KeychainPluginConfig, |
| @@ -5,7 +5,7 @@ import { · 4 unmodified lines | ||
| 5 | 5 | ProviderKey, |
| 6 | 6 | type CredentialProvider, |
| 7 | 7 | type ProviderItemId, |
| 8 | −} from "@executor-js/sdk"; | |
| 8 | +} from "@executor-js/sdk/core"; | |
| 9 | 9 | |
| 10 | 10 | import type { KeychainError } from "./errors"; |
| 11 | 11 | import { getPassword, setPassword, deletePassword } from "./keyring"; |
| @@ -78,6 +78,13 @@ type SmokeFailure = { · 77 unmodified lines | ||
| 78 | 78 | |
| 79 | 79 | const PRIVATE_PACKAGE_RE = /Cannot find package '(@executor-js\/[^']+)'/; |
| 80 | 80 | |
| 81 | +// `import { X } from "@executor-js/sdk"` where the published entry doesn't | |
| 82 | +// export `X` — the packed bundle references a symbol that only exists on a | |
| 83 | +// different subpath (or in the dev-time workspace view). This is a bundle | |
| 84 | +// bug, never a missing-peer environment issue, so it's a hard failure. | |
| 85 | +const MISSING_EXPORT_RE = | |
| 86 | + /The requested module '([^']+)' does not provide an export named '([^']+)'/; | |
| 87 | + | |
| 81 | 88 | const firstMeaningfulLine = (stderr: string): string => { |
| 82 | 89 | const lines = stderr |
| 83 | 90 | .split("\n") |
| @@ -182,6 +189,17 @@ const smokeTestPackage = async ( · 98 unmodified lines | ||
| 182 | 189 | console.log(` FAIL ${spec} — references private '${offending}'`); |
| 183 | 190 | continue; |
| 184 | 191 | } |
| 192 | + const missingExportMatch = stderr.match(MISSING_EXPORT_RE); | |
| 193 | + if (missingExportMatch) { | |
| 194 | + const [, module, symbol] = missingExportMatch; | |
| 195 | + failures.push({ | |
| 196 | + pkg: pkg.name, | |
| 197 | + subpath, | |
| 198 | + reason: `published '${module}' does not export '${symbol}'`, | |
| 199 | + }); | |
| 200 | + console.log(` FAIL ${spec} — '${module}' does not export '${symbol}'`); | |
| 201 | + continue; | |
| 202 | + } | |
| 185 | 203 | const peerMatch = |
| 186 | 204 | stderr.match(/Cannot find package '([^']+)'/) ?? |
| 187 | 205 | stderr.match(/Cannot find module '([^']+)'/); |