veryfront 0.1.532 → 0.1.534
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.
- package/esm/cli/commands/extension/init-command.d.ts +1 -1
- package/esm/cli/commands/extension/init-command.d.ts.map +1 -1
- package/esm/cli/commands/extension/init-command.js +14 -4
- package/esm/deno.js +2 -2
- package/esm/deps/esm.sh/react-dom@19.2.4/client.js +3 -5
- package/esm/deps/esm.sh/react-dom@19.2.4/server.js +3 -5
- package/esm/deps/esm.sh/react@19.2.4/jsx-dev-runtime.js +3 -3
- package/esm/deps/esm.sh/react@19.2.4/jsx-runtime.js +3 -3
- package/esm/deps/esm.sh/react@19.2.4.js +3 -3
- package/esm/deps/esm.sh/scheduler@^0.27.0.js +3 -3
- package/esm/extensions/ext-auth-jwt/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-auth-jwt/src/index.js +0 -1
- package/esm/extensions/ext-bundler-esbuild/src/index.js +4 -4
- package/esm/extensions/ext-content-mdx/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-content-mdx/src/index.js +4 -1
- package/esm/extensions/ext-css-tailwind/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-css-tailwind/src/index.js +3 -1
- package/esm/extensions/ext-db-sqlite/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-db-sqlite/src/index.js +3 -1
- package/esm/extensions/ext-document-kreuzberg/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-document-kreuzberg/src/index.js +3 -1
- package/esm/extensions/ext-llm-anthropic/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-llm-anthropic/src/index.js +4 -1
- package/esm/extensions/ext-llm-google/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/index.js +4 -1
- package/esm/extensions/ext-llm-openai/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/index.js +4 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.js +3 -2
- package/esm/extensions/ext-parser-babel/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-parser-babel/src/index.js +4 -1
- package/esm/extensions/ext-sandbox-shell-tools/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-sandbox-shell-tools/src/index.js +4 -1
- package/esm/extensions/ext-schema-zod/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-schema-zod/src/index.js +4 -1
- package/esm/src/agent/testing/durable-run-canaries/environment.d.ts +11 -0
- package/esm/src/agent/testing/durable-run-canaries/environment.d.ts.map +1 -0
- package/esm/src/agent/testing/durable-run-canaries/environment.js +13 -0
- package/esm/src/agent/testing/durable-run-canaries/index.d.ts +2 -0
- package/esm/src/agent/testing/durable-run-canaries/index.d.ts.map +1 -1
- package/esm/src/agent/testing/durable-run-canaries/index.js +2 -0
- package/esm/src/agent/testing/durable-run-canaries/validation.d.ts +7 -0
- package/esm/src/agent/testing/durable-run-canaries/validation.d.ts.map +1 -0
- package/esm/src/agent/testing/durable-run-canaries/validation.js +66 -0
- package/esm/src/agent/testing/index.d.ts +2 -2
- package/esm/src/agent/testing/index.d.ts.map +1 -1
- package/esm/src/agent/testing/index.js +2 -2
- package/esm/src/agent/testing/live-evals/environment.d.ts +12 -0
- package/esm/src/agent/testing/live-evals/environment.d.ts.map +1 -0
- package/esm/src/agent/testing/live-evals/environment.js +18 -0
- package/esm/src/agent/testing/live-evals/index.d.ts +2 -0
- package/esm/src/agent/testing/live-evals/index.d.ts.map +1 -1
- package/esm/src/agent/testing/live-evals/index.js +2 -0
- package/esm/src/agent/testing/live-evals/preflight.d.ts +9 -0
- package/esm/src/agent/testing/live-evals/preflight.d.ts.map +1 -0
- package/esm/src/agent/testing/live-evals/preflight.js +25 -0
- package/esm/src/extensions/builtin-extensions.d.ts.map +1 -1
- package/esm/src/extensions/builtin-extensions.js +4 -1
- package/esm/src/extensions/capabilities.d.ts +1 -1
- package/esm/src/extensions/capabilities.d.ts.map +1 -1
- package/esm/src/extensions/capabilities.js +1 -4
- package/esm/src/extensions/discovery.d.ts +2 -1
- package/esm/src/extensions/discovery.d.ts.map +1 -1
- package/esm/src/extensions/discovery.js +24 -1
- package/esm/src/extensions/index.d.ts +1 -1
- package/esm/src/extensions/index.d.ts.map +1 -1
- package/esm/src/extensions/loader.d.ts.map +1 -1
- package/esm/src/extensions/loader.js +26 -11
- package/esm/src/extensions/types.d.ts +8 -0
- package/esm/src/extensions/types.d.ts.map +1 -1
- package/esm/src/extensions/validation.d.ts.map +1 -1
- package/esm/src/extensions/validation.js +32 -8
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +2 -1
- package/src/cli/commands/extension/init-command.ts +14 -4
- package/src/deno.js +2 -2
- package/src/extensions/ext-auth-jwt/src/index.ts +0 -1
- package/src/extensions/ext-bundler-esbuild/src/index.ts +4 -4
- package/src/extensions/ext-content-mdx/src/index.ts +4 -1
- package/src/extensions/ext-css-tailwind/src/index.ts +3 -1
- package/src/extensions/ext-db-sqlite/src/index.ts +3 -1
- package/src/extensions/ext-document-kreuzberg/src/index.ts +3 -1
- package/src/extensions/ext-llm-anthropic/src/index.ts +4 -1
- package/src/extensions/ext-llm-google/src/index.ts +4 -1
- package/src/extensions/ext-llm-openai/src/index.ts +4 -1
- package/src/extensions/ext-observability-opentelemetry/src/index.ts +3 -2
- package/src/extensions/ext-parser-babel/src/index.ts +4 -1
- package/src/extensions/ext-sandbox-shell-tools/src/index.ts +4 -1
- package/src/extensions/ext-schema-zod/src/index.ts +4 -1
- package/src/src/agent/testing/durable-run-canaries/environment.ts +27 -0
- package/src/src/agent/testing/durable-run-canaries/index.ts +13 -0
- package/src/src/agent/testing/durable-run-canaries/validation.ts +87 -0
- package/src/src/agent/testing/index.ts +14 -0
- package/src/src/agent/testing/live-evals/environment.ts +31 -0
- package/src/src/agent/testing/live-evals/index.ts +10 -0
- package/src/src/agent/testing/live-evals/preflight.ts +42 -0
- package/src/src/extensions/builtin-extensions.ts +4 -1
- package/src/src/extensions/capabilities.ts +1 -5
- package/src/src/extensions/discovery.ts +27 -2
- package/src/src/extensions/index.ts +1 -0
- package/src/src/extensions/loader.ts +29 -11
- package/src/src/extensions/types.ts +10 -0
- package/src/src/extensions/validation.ts +47 -7
- package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
- package/src/src/utils/version-constant.ts +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export { DEFAULT_LIVE_EVAL_ENDPOINT, type LiveEvalEnvironment, resolveLiveEvalEnvironment, } from "./environment.js";
|
|
1
2
|
export { cancelLiveEvalInputRequest, createLiveEvalApiClient, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, listOpenLiveEvalInputRequests, type LiveEvalApiClient, type LiveEvalApiContext, type LiveEvalConversationInput, type LiveEvalCreateConversationInput, type LiveEvalCreateReleaseInput, type LiveEvalInputRequestInput, type LiveEvalInputRequestRecord, type LiveEvalInputResponseValues, type LiveEvalProjectFileInput, type LiveEvalProjectUploadFixtureInput, type LiveEvalRequestTimeoutInput, type LiveEvalSubmitInputResponseInput, type LiveEvalWaitForOpenInputRequestInput, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./api-client.js";
|
|
2
3
|
export { buildFailureSuffix, buildProgressLine, containsOrderedSubsequence, createPlainTextPdf, } from "./formatting.js";
|
|
4
|
+
export { evaluateRuntimeConfidenceEnv, printRuntimeConfidencePreflight, type RuntimeConfidencePreflightResult, } from "./preflight.js";
|
|
3
5
|
export { buildRuntimePerformanceSummary, type LiveEvalResultForPerformance, type LiveEvalRuntime, type RuntimePerformanceSummary, } from "./performance.js";
|
|
4
6
|
export { buildLiveEvalCaseMetadata, type BuildLiveEvalCaseMetadataInput, DEFAULT_LIVE_EVAL_AREA_TAG_RULES, DEFAULT_LIVE_EVAL_OPTIONAL_JUDGE_CASE_PREFIXES, type LiveEvalCaseMetadataOptions, type LiveEvalCaseSurface, type LiveEvalCaseTagRule, withLiveEvalMetadata, } from "./metadata.js";
|
|
5
7
|
export { buildLiveEvalRequestBody, type BuildLiveEvalRequestBodyInput, type LiveEvalRequestBody, } from "./request.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,kCAAkC,EAClC,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,EACnC,gCAAgC,EAChC,8CAA8C,EAC9C,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,kCAAkC,EAClC,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,KAAK,gCAAgC,GACtC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,EACnC,gCAAgC,EAChC,8CAA8C,EAC9C,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export { DEFAULT_LIVE_EVAL_ENDPOINT, resolveLiveEvalEnvironment, } from "./environment.js";
|
|
1
2
|
export { cancelLiveEvalInputRequest, createLiveEvalApiClient, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, listOpenLiveEvalInputRequests, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./api-client.js";
|
|
2
3
|
export { buildFailureSuffix, buildProgressLine, containsOrderedSubsequence, createPlainTextPdf, } from "./formatting.js";
|
|
4
|
+
export { evaluateRuntimeConfidenceEnv, printRuntimeConfidencePreflight, } from "./preflight.js";
|
|
3
5
|
export { buildRuntimePerformanceSummary, } from "./performance.js";
|
|
4
6
|
export { buildLiveEvalCaseMetadata, DEFAULT_LIVE_EVAL_AREA_TAG_RULES, DEFAULT_LIVE_EVAL_OPTIONAL_JUDGE_CASE_PREFIXES, withLiveEvalMetadata, } from "./metadata.js";
|
|
5
7
|
export { buildLiveEvalRequestBody, } from "./request.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AgentServiceConfigInput } from "../../service/config.js";
|
|
2
|
+
export interface RuntimeConfidencePreflightResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
resolvedApiUrl: string;
|
|
5
|
+
messages: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function evaluateRuntimeConfidenceEnv(env?: AgentServiceConfigInput, resolvedApiUrl?: string): RuntimeConfidencePreflightResult;
|
|
8
|
+
export declare function printRuntimeConfidencePreflight(result: RuntimeConfidencePreflightResult, output?: Pick<Console, "error" | "log">): void;
|
|
9
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,yBAAyB,CAAC;AAEhG,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,uBAA4B,EACjC,cAAc,GAAE,MAAuD,GACtE,gCAAgC,CAoBlC;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,gCAAgC,EACxC,MAAM,GAAE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAW,GAC/C,IAAI,CAKN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { parseAgentServiceConfig } from "../../service/config.js";
|
|
2
|
+
export function evaluateRuntimeConfidenceEnv(env = {}, resolvedApiUrl = parseAgentServiceConfig(env).VERYFRONT_API_URL) {
|
|
3
|
+
const messages = [`Resolved VERYFRONT_API_URL: ${resolvedApiUrl}`];
|
|
4
|
+
let hasBlockers = false;
|
|
5
|
+
if (typeof env.VERYFRONT_TOKEN !== "string" || env.VERYFRONT_TOKEN.length === 0) {
|
|
6
|
+
hasBlockers = true;
|
|
7
|
+
messages.push("BLOCKER: VERYFRONT_TOKEN is missing");
|
|
8
|
+
}
|
|
9
|
+
if (typeof env.AG_UI_EVAL_PROJECT_ID !== "string" || env.AG_UI_EVAL_PROJECT_ID.length === 0) {
|
|
10
|
+
hasBlockers = true;
|
|
11
|
+
messages.push("BLOCKER: AG_UI_EVAL_PROJECT_ID is missing");
|
|
12
|
+
}
|
|
13
|
+
if (!hasBlockers) {
|
|
14
|
+
messages.push("Runtime-confidence preflight: PASS");
|
|
15
|
+
return { ok: true, resolvedApiUrl, messages };
|
|
16
|
+
}
|
|
17
|
+
messages.push("Runtime-confidence preflight: FAIL");
|
|
18
|
+
return { ok: false, resolvedApiUrl, messages };
|
|
19
|
+
}
|
|
20
|
+
export function printRuntimeConfidencePreflight(result, output = console) {
|
|
21
|
+
for (const message of result.messages) {
|
|
22
|
+
const writer = result.ok ? output.log : output.error;
|
|
23
|
+
writer(message);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-extensions.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/builtin-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA0DvE,wBAAgB,yBAAyB,IAAI,mBAAmB,CAM/D;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD;
|
|
1
|
+
{"version":3,"file":"builtin-extensions.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/builtin-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA0DvE,wBAAgB,yBAAyB,IAAI,mBAAmB,CAM/D;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD;AAoCD,wBAAgB,uBAAuB,IAAI,iBAAiB,EAAE,CAoD7D"}
|
|
@@ -65,7 +65,10 @@ function createBuiltinLLMProviderExtension(definition) {
|
|
|
65
65
|
extension: {
|
|
66
66
|
name: definition.extensionName,
|
|
67
67
|
version: "0.1.0",
|
|
68
|
-
|
|
68
|
+
contracts: {
|
|
69
|
+
requires: [LLMProviderRegistryName],
|
|
70
|
+
},
|
|
71
|
+
capabilities: [],
|
|
69
72
|
setup(ctx) {
|
|
70
73
|
const registry = ctx.require(LLMProviderRegistryName);
|
|
71
74
|
didRegister = registerBuiltinLLMProvider(registry, provider);
|
|
@@ -10,7 +10,7 @@ import type { Capability, ExtensionLogger } from "./types.js";
|
|
|
10
10
|
export declare function formatCapabilities(capabilities: Capability[]): string[];
|
|
11
11
|
/**
|
|
12
12
|
* Map capabilities to Deno CLI permission flags.
|
|
13
|
-
* Skips
|
|
13
|
+
* Skips capabilities without a Deno permission mapping.
|
|
14
14
|
*/
|
|
15
15
|
export declare function mapToDenoPermissions(capabilities: Capability[]): string[];
|
|
16
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/capabilities.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/capabilities.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAWvE;AA2BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAyBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,eAAe,GACtB,IAAI,CAKN"}
|
|
@@ -8,9 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export function formatCapabilities(capabilities) {
|
|
10
10
|
return capabilities.map((cap) => {
|
|
11
|
-
if (cap.type === "contract") {
|
|
12
|
-
return `contract: ${cap.name}`;
|
|
13
|
-
}
|
|
14
11
|
const { type, ...rest } = cap;
|
|
15
12
|
const extras = Object.keys(rest);
|
|
16
13
|
if (extras.length === 0)
|
|
@@ -41,7 +38,7 @@ const DENO_PERMISSION_MAP = {
|
|
|
41
38
|
};
|
|
42
39
|
/**
|
|
43
40
|
* Map capabilities to Deno CLI permission flags.
|
|
44
|
-
* Skips
|
|
41
|
+
* Skips capabilities without a Deno permission mapping.
|
|
45
42
|
*/
|
|
46
43
|
export function mapToDenoPermissions(capabilities) {
|
|
47
44
|
const seen = new Set();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Capability, ResolvedExtension } from "./types.js";
|
|
1
|
+
import type { Capability, PackageContractMetadata, ResolvedExtension } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Metadata extracted from a package.json that declares itself
|
|
4
4
|
* as a veryfront extension.
|
|
@@ -6,6 +6,7 @@ import type { Capability, ResolvedExtension } from "./types.js";
|
|
|
6
6
|
export interface PackageMetadata {
|
|
7
7
|
isExtension: true;
|
|
8
8
|
capabilities: Capability[];
|
|
9
|
+
contracts?: PackageContractMetadata;
|
|
9
10
|
}
|
|
10
11
|
/**
|
|
11
12
|
* Parse veryfront extension metadata from a package.json-like object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/discovery.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/discovery.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AA+BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,eAAe,GAAG,SAAS,CAsB7B;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,KAAK,EAAE,iBAAiB,EAAE,EAC1B,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC,EAC3D,OAAO,CAAC,EAAE,iBAAiB,EAAE,GAC5B,iBAAiB,EAAE,CA2BrB;AA6BD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,CA4BpE;AAqBD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB"}
|
|
@@ -15,6 +15,26 @@ function isCapability(value) {
|
|
|
15
15
|
const cap = value;
|
|
16
16
|
return typeof cap.type === "string" && cap.type.length > 0;
|
|
17
17
|
}
|
|
18
|
+
function parseStringList(value) {
|
|
19
|
+
if (!Array.isArray(value))
|
|
20
|
+
return undefined;
|
|
21
|
+
const entries = value.filter((entry) => typeof entry === "string" && entry.length > 0);
|
|
22
|
+
return entries.length > 0 ? entries : undefined;
|
|
23
|
+
}
|
|
24
|
+
function parseContractMetadata(value) {
|
|
25
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const raw = value;
|
|
29
|
+
const contracts = {};
|
|
30
|
+
const provides = parseStringList(raw.provides);
|
|
31
|
+
const requires = parseStringList(raw.requires);
|
|
32
|
+
if (provides)
|
|
33
|
+
contracts.provides = provides;
|
|
34
|
+
if (requires)
|
|
35
|
+
contracts.requires = requires;
|
|
36
|
+
return provides || requires ? contracts : undefined;
|
|
37
|
+
}
|
|
18
38
|
/**
|
|
19
39
|
* Parse veryfront extension metadata from a package.json-like object.
|
|
20
40
|
*
|
|
@@ -35,7 +55,10 @@ export function parsePackageMetadata(pkg) {
|
|
|
35
55
|
const capabilities = Array.isArray(meta.capabilities)
|
|
36
56
|
? meta.capabilities.filter(isCapability)
|
|
37
57
|
: [];
|
|
38
|
-
|
|
58
|
+
const contracts = parseContractMetadata(meta.contracts);
|
|
59
|
+
return contracts
|
|
60
|
+
? { isExtension: true, capabilities, contracts }
|
|
61
|
+
: { isExtension: true, capabilities };
|
|
39
62
|
}
|
|
40
63
|
/**
|
|
41
64
|
* Merge extensions from all four sources in priority order.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
import "../../_dnt.polyfills.js";
|
|
24
|
-
export type { Capability, Extension, ExtensionConfigEntry, ExtensionContext, ExtensionFactory, ExtensionLogger, ExtensionSource, ResolvedExtension, } from "./types.js";
|
|
24
|
+
export type { Capability, Extension, ExtensionConfigEntry, ExtensionContext, ExtensionContractMetadata, ExtensionFactory, ExtensionLogger, ExtensionSource, ResolvedExtension, } from "./types.js";
|
|
25
25
|
export { resolve, tryResolve } from "./contracts.js";
|
|
26
26
|
export type { PackageMetadata } from "./discovery.js";
|
|
27
27
|
export { discoverLocalExtensions, discoverPackageExtensions, discoverProjectExtensions, mergeExtensions, parsePackageMetadata, } from "./discovery.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,yBAAyB,CAAC;AAEjC,YAAY,EACV,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,yBAAyB,CAAC;AAEjC,YAAY,EACV,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAA+B,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElG,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;gBAI5C,MAAM,EAAE,eAAe;IAInC;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;IAIpE,OAAO,CAAC,mBAAmB;IA8B3B;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAA+B,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElG,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;gBAI5C,MAAM,EAAE,eAAe;IAInC;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;IAIpE,OAAO,CAAC,mBAAmB;IA8B3B;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE;IAyErE;;;OAGG;IACG,QAAQ,CACZ,UAAU,EAAE,iBAAiB,EAAE,EAC/B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;IAuFhB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBnC"}
|
|
@@ -66,14 +66,10 @@ export class ExtensionLoader {
|
|
|
66
66
|
for (const resolved of extensions) {
|
|
67
67
|
const ext = resolved.extension;
|
|
68
68
|
extByName.set(ext.name, resolved);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
providerOf.set(contract, ext.name);
|
|
72
|
-
}
|
|
69
|
+
for (const contract of providedContractNames(ext)) {
|
|
70
|
+
providerOf.set(contract, ext.name);
|
|
73
71
|
}
|
|
74
|
-
const contracts = ext
|
|
75
|
-
.filter((c) => c.type === "contract")
|
|
76
|
-
.map((c) => c.name);
|
|
72
|
+
const contracts = requiredContractNames(ext);
|
|
77
73
|
if (contracts.length > 0) {
|
|
78
74
|
consumesContracts.set(ext.name, contracts);
|
|
79
75
|
}
|
|
@@ -138,8 +134,9 @@ export class ExtensionLoader {
|
|
|
138
134
|
for (const [name, impl] of Object.entries(this.primed)) {
|
|
139
135
|
register(name, impl);
|
|
140
136
|
}
|
|
137
|
+
const loadOrder = this.topologicalSort(this.flattenPresets(extensions));
|
|
141
138
|
// Check for contract conflicts before loading
|
|
142
|
-
const conflicts = detectConflicts(
|
|
139
|
+
const conflicts = detectConflicts(loadOrder);
|
|
143
140
|
if (conflicts.length > 0) {
|
|
144
141
|
const details = conflicts
|
|
145
142
|
.map((c) => `"${c.contract}" provided by: ${c.providers.map((p) => p.name).join(", ")}`)
|
|
@@ -152,8 +149,8 @@ export class ExtensionLoader {
|
|
|
152
149
|
// provider later in the iteration order cannot overwrite the winning impl
|
|
153
150
|
// via register(). Without this, merged inputs (config -> package ->
|
|
154
151
|
// project -> local-file) silently invert the documented source priority.
|
|
155
|
-
const contractWinner = selectContractProviders(
|
|
156
|
-
for (const resolved of
|
|
152
|
+
const contractWinner = selectContractProviders(loadOrder);
|
|
153
|
+
for (const resolved of loadOrder) {
|
|
157
154
|
const ext = resolved.extension;
|
|
158
155
|
const issues = validateExtension(ext);
|
|
159
156
|
if (issues.length > 0) {
|
|
@@ -173,7 +170,12 @@ export class ExtensionLoader {
|
|
|
173
170
|
const ctx = {
|
|
174
171
|
get: (contract) => tryResolve(contract),
|
|
175
172
|
require: (contract) => resolveContract(contract),
|
|
176
|
-
provide: (contract, impl) =>
|
|
173
|
+
provide: (contract, impl) => {
|
|
174
|
+
const winner = contractWinner.get(contract);
|
|
175
|
+
if (!winner || winner === resolved) {
|
|
176
|
+
register(contract, impl);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
177
179
|
config: projectConfig,
|
|
178
180
|
logger: this.logger,
|
|
179
181
|
};
|
|
@@ -225,3 +227,16 @@ export class ExtensionLoader {
|
|
|
225
227
|
reset();
|
|
226
228
|
}
|
|
227
229
|
}
|
|
230
|
+
function providedContractNames(ext) {
|
|
231
|
+
const names = new Set();
|
|
232
|
+
for (const contract of Object.keys(ext.provides ?? {})) {
|
|
233
|
+
names.add(contract);
|
|
234
|
+
}
|
|
235
|
+
for (const contract of ext.contracts?.provides ?? []) {
|
|
236
|
+
names.add(contract);
|
|
237
|
+
}
|
|
238
|
+
return [...names];
|
|
239
|
+
}
|
|
240
|
+
function requiredContractNames(ext) {
|
|
241
|
+
return ext.contracts?.requires ?? [];
|
|
242
|
+
}
|
|
@@ -11,6 +11,13 @@ export interface Capability {
|
|
|
11
11
|
type: string;
|
|
12
12
|
[key: string]: unknown;
|
|
13
13
|
}
|
|
14
|
+
export interface ExtensionContractMetadata {
|
|
15
|
+
/** Contracts this extension registers dynamically during setup(). */
|
|
16
|
+
provides?: string[];
|
|
17
|
+
/** Contracts this extension needs before setup() runs. */
|
|
18
|
+
requires?: string[];
|
|
19
|
+
}
|
|
20
|
+
export type PackageContractMetadata = ExtensionContractMetadata;
|
|
14
21
|
export interface ExtensionContext {
|
|
15
22
|
get<T>(contract: string): T | undefined;
|
|
16
23
|
require<T>(contract: string): T;
|
|
@@ -28,6 +35,7 @@ export interface Extension {
|
|
|
28
35
|
name: string;
|
|
29
36
|
version: string;
|
|
30
37
|
capabilities: Capability[];
|
|
38
|
+
contracts?: ExtensionContractMetadata;
|
|
31
39
|
setup?(ctx: ExtensionContext): Promise<void> | void;
|
|
32
40
|
teardown?(): Promise<void> | void;
|
|
33
41
|
provides?: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,SAAS,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,SAAS,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAa,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAa,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAchC;AA0BD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAwDxD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAwC/E"}
|
|
@@ -23,10 +23,7 @@ export const SOURCE_PRIORITY = {
|
|
|
23
23
|
export function selectContractProviders(extensions) {
|
|
24
24
|
const winner = new Map();
|
|
25
25
|
for (const resolved of extensions) {
|
|
26
|
-
const
|
|
27
|
-
if (!provides)
|
|
28
|
-
continue;
|
|
29
|
-
for (const contract of Object.keys(provides)) {
|
|
26
|
+
for (const contract of providedContractNames(resolved.extension)) {
|
|
30
27
|
const current = winner.get(contract);
|
|
31
28
|
if (!current ||
|
|
32
29
|
SOURCE_PRIORITY[resolved.source] < SOURCE_PRIORITY[current.source]) {
|
|
@@ -36,6 +33,25 @@ export function selectContractProviders(extensions) {
|
|
|
36
33
|
}
|
|
37
34
|
return winner;
|
|
38
35
|
}
|
|
36
|
+
function providedContractNames(extension) {
|
|
37
|
+
return [
|
|
38
|
+
...Object.keys(extension.provides ?? {}),
|
|
39
|
+
...(extension.contracts?.provides ?? []),
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
function validateContractList(field, value, issues) {
|
|
43
|
+
if (value === undefined)
|
|
44
|
+
return;
|
|
45
|
+
if (!Array.isArray(value)) {
|
|
46
|
+
issues.push(`${field} must be an array`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < value.length; i++) {
|
|
50
|
+
if (typeof value[i] !== "string" || value[i].length === 0) {
|
|
51
|
+
issues.push(`${field}[${i}] must be a non-empty string`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
39
55
|
/**
|
|
40
56
|
* Validate the shape of an extension object.
|
|
41
57
|
* Returns an array of issue descriptions (empty array = valid).
|
|
@@ -70,6 +86,17 @@ export function validateExtension(ext) {
|
|
|
70
86
|
issues.push(`capabilities[${i}].type must be a non-empty string`);
|
|
71
87
|
}
|
|
72
88
|
}
|
|
89
|
+
if (candidate.contracts !== undefined) {
|
|
90
|
+
if (typeof candidate.contracts !== "object" ||
|
|
91
|
+
candidate.contracts === null ||
|
|
92
|
+
Array.isArray(candidate.contracts)) {
|
|
93
|
+
issues.push("contracts must be an object");
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
validateContractList("contracts.provides", candidate.contracts.provides, issues);
|
|
97
|
+
validateContractList("contracts.requires", candidate.contracts.requires, issues);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
73
100
|
return issues;
|
|
74
101
|
}
|
|
75
102
|
/**
|
|
@@ -81,10 +108,7 @@ export function validateExtension(ext) {
|
|
|
81
108
|
export function detectConflicts(extensions) {
|
|
82
109
|
const contractProviders = new Map();
|
|
83
110
|
for (const resolved of extensions) {
|
|
84
|
-
const
|
|
85
|
-
if (!provides)
|
|
86
|
-
continue;
|
|
87
|
-
for (const contract of Object.keys(provides)) {
|
|
111
|
+
for (const contract of providedContractNames(resolved.extension)) {
|
|
88
112
|
let list = contractProviders.get(contract);
|
|
89
113
|
if (!list) {
|
|
90
114
|
list = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-bundle.generated.d.ts","sourceRoot":"","sources":["../../../../src/src/studio/bridge/bridge-bundle.generated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"bridge-bundle.generated.d.ts","sourceRoot":"","sources":["../../../../src/src/studio/bridge/bridge-bundle.generated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,EAAE,MAA0zqD,CAAC"}
|