@dxos/functions-testing 0.8.4-main.3c1ae3b → 0.8.4-main.8342792842
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/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +4 -3
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -13
- package/src/cpu-limit.test.ts +10 -4
- package/src/functions/query.ts +1 -1
- package/src/testing/util.ts +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/index.ts":{"bytes":414,"imports":[],"format":"esm"},"src/testing/util.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/index.ts":{"bytes":414,"imports":[],"format":"esm"},"src/testing/util.ts":{"bytes":15297,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime/edge","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime/native","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true}],"format":"esm"},"src/testing/index.ts":{"bytes":458,"imports":[{"path":"src/testing/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/node-esm/index.mjs":{"imports":[],"exports":[],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0}},"bytes":127},"dist/lib/node-esm/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8253},"dist/lib/node-esm/testing/index.mjs":{"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime/edge","kind":"import-statement","external":true},{"path":"@dxos/functions-runtime/native","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/metadata","kind":"import-statement","external":true}],"exports":["deployFunction","observeInvocations","setup","sync","writeBundle"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/util.ts":{"bytesInOutput":3620},"src/testing/index.ts":{"bytesInOutput":0}},"bytes":3854}}}
|
|
@@ -10,6 +10,7 @@ import { Trigger } from "@dxos/functions";
|
|
|
10
10
|
import { InvocationTraceEndEvent, InvocationTraceStartEvent } from "@dxos/functions-runtime";
|
|
11
11
|
import { FunctionsServiceClient } from "@dxos/functions-runtime/edge";
|
|
12
12
|
import { bundleFunction } from "@dxos/functions-runtime/native";
|
|
13
|
+
import { ErrorCodec } from "@dxos/protocols";
|
|
13
14
|
import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata";
|
|
14
15
|
var writeBundle = (path, bundle) => {
|
|
15
16
|
fs.mkdirSync(path, {
|
|
@@ -77,7 +78,7 @@ var observeInvocations = async (space, maxCount) => {
|
|
|
77
78
|
count: count++,
|
|
78
79
|
begin: invocation
|
|
79
80
|
});
|
|
80
|
-
console.log(`${count.toString().padStart(3, " ")}: BEGIN ${JSON.stringify(invocation.input)}`);
|
|
81
|
+
console.log(`${count.toString().padStart(3, " ")}: BEGIN ${invocation.runtime ?? "(unknown runtime)"} ${JSON.stringify(invocation.input)}`);
|
|
81
82
|
} else if (Obj.instanceOf(InvocationTraceEndEvent, invocation)) {
|
|
82
83
|
const data = invocationData.get(invocation.invocationId);
|
|
83
84
|
if (!data || !!data.end) {
|
|
@@ -86,8 +87,8 @@ var observeInvocations = async (space, maxCount) => {
|
|
|
86
87
|
data.end = invocation;
|
|
87
88
|
const outcome = data.end.outcome;
|
|
88
89
|
console.log(`${data.count.toString().padStart(3, " ")}: END outcome=${outcome} duration=${data.end.timestamp - data.begin.timestamp}`);
|
|
89
|
-
if (outcome === "failure") {
|
|
90
|
-
console.
|
|
90
|
+
if (outcome === "failure" && data.end.error) {
|
|
91
|
+
console.error(ErrorCodec.decode(data.end.error));
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/testing/util.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport fs from 'node:fs';\n\nimport { sleep } from '@dxos/async';\nimport { Client, type Config } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { Function } from '@dxos/functions';\nimport { Trigger } from '@dxos/functions';\nimport { InvocationTraceEndEvent, InvocationTraceStartEvent } from '@dxos/functions-runtime';\nimport { FunctionsServiceClient } from '@dxos/functions-runtime/edge';\nimport { bundleFunction } from '@dxos/functions-runtime/native';\nimport type { BundleResult } from '@dxos/functions-runtime/native';\nimport { type FunctionRuntimeKind } from '@dxos/protocols';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\n\nexport const writeBundle = (path: string, bundle: BundleResult) => {\n fs.mkdirSync(path, { recursive: true });\n Object.entries(bundle.assets).forEach(([name, content]) => {\n fs.writeFileSync(path + '/' + name, content);\n });\n};\n\nexport const setup = async (config: Config) => {\n const client = await new Client({\n config,\n types: [Function.Function, Trigger.Trigger],\n }).initialize();\n await client.halo.createIdentity();\n\n const space = await client.spaces.create();\n await space.waitUntilReady();\n await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);\n\n const functionsServiceClient = FunctionsServiceClient.fromClient(client);\n\n return { client, space, functionsServiceClient };\n};\n\nexport const sync = async (space: Space) => {\n await space.db.flush({ indexes: true });\n await space.internal.syncToEdge({\n onProgress: (state) =>\n console.log(state ? `${state.unsyncedDocumentCount} documents syncing...` : 'connecting to edge...'),\n });\n};\n\nexport const deployFunction = async (\n space: Space,\n functionsServiceClient: FunctionsServiceClient,\n entryPoint: string,\n runtime: FunctionRuntimeKind,\n) => {\n const artifact = await bundleFunction({\n entryPoint,\n verbose: true,\n });\n const func = await functionsServiceClient.deploy({\n version: '0.0.1',\n ownerPublicKey: space.key,\n entryPoint: artifact.entryPoint,\n assets: artifact.assets,\n runtime,\n });\n space.db.add(func);\n\n return func;\n};\n\nexport const observeInvocations = async (space: Space, maxCount: number | null) => {\n let initialCount = null;\n const invocationData = new Map<\n string,\n {\n count: number;\n begin: InvocationTraceStartEvent;\n end?: InvocationTraceEndEvent;\n }\n >();\n let count = 0;\n while (true) {\n try {\n const invocations =\n (await space.properties.invocationTraceQueue?.target!.query(Query.select(Filter.everything())).run()) ?? [];\n\n for (const invocation of invocations) {\n if (Obj.instanceOf(InvocationTraceStartEvent, invocation)) {\n if (invocationData.has(invocation.invocationId)) {\n continue;\n }\n invocationData.set(invocation.invocationId, {\n count: count++,\n begin: invocation,\n });\n console.log(`${count.toString().padStart(3, ' ')}: BEGIN ${JSON.stringify(invocation.input)}
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,QAAQ;AAEf,SAASC,aAAa;AACtB,SAASC,cAA2B;AAEpC,SAASC,QAAQC,KAAKC,aAAa;AACnC,SAASC,gBAAgB;AACzB,SAASC,eAAe;AACxB,SAASC,yBAAyBC,iCAAiC;AACnE,SAASC,8BAA8B;AACvC,SAASC,sBAAsB;
|
|
6
|
-
"names": ["fs", "sleep", "Client", "Filter", "Obj", "Query", "Function", "Trigger", "InvocationTraceEndEvent", "InvocationTraceStartEvent", "FunctionsServiceClient", "bundleFunction", "EdgeReplicationSetting", "writeBundle", "path", "bundle", "fs", "mkdirSync", "recursive", "Object", "entries", "assets", "forEach", "name", "content", "writeFileSync", "setup", "config", "client", "Client", "types", "Function", "Trigger", "initialize", "halo", "createIdentity", "space", "spaces", "create", "waitUntilReady", "internal", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "functionsServiceClient", "FunctionsServiceClient", "fromClient", "sync", "db", "flush", "indexes", "syncToEdge", "onProgress", "state", "console", "log", "unsyncedDocumentCount", "deployFunction", "entryPoint", "runtime", "artifact", "bundleFunction", "verbose", "func", "deploy", "version", "ownerPublicKey", "key", "add", "observeInvocations", "maxCount", "initialCount", "invocationData", "Map", "count", "invocations", "properties", "invocationTraceQueue", "target", "query", "Query", "select", "Filter", "everything", "run", "invocation", "Obj", "instanceOf", "InvocationTraceStartEvent", "has", "invocationId", "set", "begin", "toString", "padStart", "JSON", "stringify", "input", "InvocationTraceEndEvent", "data", "get", "end", "outcome", "timestamp", "error", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport fs from 'node:fs';\n\nimport { sleep } from '@dxos/async';\nimport { Client, type Config } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { Function } from '@dxos/functions';\nimport { Trigger } from '@dxos/functions';\nimport { InvocationTraceEndEvent, InvocationTraceStartEvent } from '@dxos/functions-runtime';\nimport { FunctionsServiceClient } from '@dxos/functions-runtime/edge';\nimport { bundleFunction } from '@dxos/functions-runtime/native';\nimport type { BundleResult } from '@dxos/functions-runtime/native';\nimport { ErrorCodec, type FunctionRuntimeKind } from '@dxos/protocols';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\n\nexport const writeBundle = (path: string, bundle: BundleResult) => {\n fs.mkdirSync(path, { recursive: true });\n Object.entries(bundle.assets).forEach(([name, content]) => {\n fs.writeFileSync(path + '/' + name, content);\n });\n};\n\nexport const setup = async (config: Config) => {\n const client = await new Client({\n config,\n types: [Function.Function, Trigger.Trigger],\n }).initialize();\n await client.halo.createIdentity();\n\n const space = await client.spaces.create();\n await space.waitUntilReady();\n await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);\n\n const functionsServiceClient = FunctionsServiceClient.fromClient(client);\n\n return { client, space, functionsServiceClient };\n};\n\nexport const sync = async (space: Space) => {\n await space.db.flush({ indexes: true });\n await space.internal.syncToEdge({\n onProgress: (state) =>\n console.log(state ? `${state.unsyncedDocumentCount} documents syncing...` : 'connecting to edge...'),\n });\n};\n\nexport const deployFunction = async (\n space: Space,\n functionsServiceClient: FunctionsServiceClient,\n entryPoint: string,\n runtime: FunctionRuntimeKind,\n) => {\n const artifact = await bundleFunction({\n entryPoint,\n verbose: true,\n });\n const func = await functionsServiceClient.deploy({\n version: '0.0.1',\n ownerPublicKey: space.key,\n entryPoint: artifact.entryPoint,\n assets: artifact.assets,\n runtime,\n });\n space.db.add(func);\n\n return func;\n};\n\nexport const observeInvocations = async (space: Space, maxCount: number | null) => {\n let initialCount = null;\n const invocationData = new Map<\n string,\n {\n count: number;\n begin: InvocationTraceStartEvent;\n end?: InvocationTraceEndEvent;\n }\n >();\n let count = 0;\n while (true) {\n try {\n const invocations =\n (await space.properties.invocationTraceQueue?.target!.query(Query.select(Filter.everything())).run()) ?? [];\n\n for (const invocation of invocations) {\n if (Obj.instanceOf(InvocationTraceStartEvent, invocation)) {\n if (invocationData.has(invocation.invocationId)) {\n continue;\n }\n invocationData.set(invocation.invocationId, {\n count: count++,\n begin: invocation,\n });\n console.log(\n `${count.toString().padStart(3, ' ')}: BEGIN ${invocation.runtime ?? '(unknown runtime)'} ${JSON.stringify(invocation.input)}`,\n );\n } else if (Obj.instanceOf(InvocationTraceEndEvent, invocation)) {\n const data = invocationData.get(invocation.invocationId);\n if (!data || !!data.end) {\n continue;\n }\n data.end = invocation;\n\n const outcome = data.end.outcome;\n console.log(\n `${data.count.toString().padStart(3, ' ')}: END outcome=${outcome} duration=${data.end.timestamp - data.begin.timestamp}`,\n );\n if (outcome === 'failure' && data.end.error) {\n console.error(ErrorCodec.decode(data.end.error));\n }\n }\n }\n if (initialCount === null) {\n initialCount = invocations.length;\n }\n\n if (maxCount !== null && invocationData.size >= maxCount + initialCount) {\n break;\n }\n } catch (err) {\n console.error(err);\n }\n await sleep(1_000);\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["fs", "sleep", "Client", "Filter", "Obj", "Query", "Function", "Trigger", "InvocationTraceEndEvent", "InvocationTraceStartEvent", "FunctionsServiceClient", "bundleFunction", "ErrorCodec", "EdgeReplicationSetting", "writeBundle", "path", "bundle", "fs", "mkdirSync", "recursive", "Object", "entries", "assets", "forEach", "name", "content", "writeFileSync", "setup", "config", "client", "Client", "types", "Function", "Trigger", "initialize", "halo", "createIdentity", "space", "spaces", "create", "waitUntilReady", "internal", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "functionsServiceClient", "FunctionsServiceClient", "fromClient", "sync", "db", "flush", "indexes", "syncToEdge", "onProgress", "state", "console", "log", "unsyncedDocumentCount", "deployFunction", "entryPoint", "runtime", "artifact", "bundleFunction", "verbose", "func", "deploy", "version", "ownerPublicKey", "key", "add", "observeInvocations", "maxCount", "initialCount", "invocationData", "Map", "count", "invocations", "properties", "invocationTraceQueue", "target", "query", "Query", "select", "Filter", "everything", "run", "invocation", "Obj", "instanceOf", "InvocationTraceStartEvent", "has", "invocationId", "set", "begin", "toString", "padStart", "JSON", "stringify", "input", "InvocationTraceEndEvent", "data", "get", "end", "outcome", "timestamp", "error", "ErrorCodec", "decode", "length", "size", "err", "sleep"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,QAAQ,YAAY,SAK7D,CAAC;AAEF,eAAO,MAAM,KAAK,GAAU,QAAQ,MAAM;;;;EAczC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAU,OAAO,KAAK,kBAMtC,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,OAAO,KAAK,EACZ,wBAAwB,sBAAsB,EAC9C,YAAY,MAAM,EAClB,SAAS,mBAAmB,+BAgB7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,OAAO,KAAK,EAAE,UAAU,MAAM,GAAG,IAAI,kBAwD7E,CAAC"}
|