@livestore/livestore 0.2.0-dev.2 → 0.3.0-dev.10
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/.tsbuildinfo +1 -1
- package/dist/SynchronousDatabaseWrapper.d.ts +6 -1
- package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
- package/dist/SynchronousDatabaseWrapper.js +14 -2
- package/dist/SynchronousDatabaseWrapper.js.map +1 -1
- package/dist/__tests__/fixture.d.ts +252 -0
- package/dist/__tests__/fixture.d.ts.map +1 -0
- package/dist/__tests__/fixture.js +18 -0
- package/dist/__tests__/fixture.js.map +1 -0
- package/dist/effect/LiveStore.d.ts +6 -6
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +5 -12
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/live-queries/db.d.ts.map +1 -1
- package/dist/live-queries/db.js +28 -23
- package/dist/live-queries/db.js.map +1 -1
- package/dist/live-queries/db.test.js +2 -1
- package/dist/live-queries/db.test.js.map +1 -1
- package/dist/row-query-utils.js +1 -1
- package/dist/row-query-utils.js.map +1 -1
- package/dist/store/create-store.d.ts +12 -10
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +22 -28
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +1 -1
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +41 -19
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +9 -14
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store.d.ts +29 -28
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +147 -160
- package/dist/store/store.js.map +1 -1
- package/dist/store/store.test.d.ts +2 -0
- package/dist/store/store.test.d.ts.map +1 -0
- package/dist/store/store.test.js +27 -0
- package/dist/store/store.test.js.map +1 -0
- package/dist/utils/dev.d.ts.map +1 -1
- package/dist/utils/dev.js +3 -2
- package/dist/utils/dev.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +1 -1
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +4 -8
- package/dist/utils/tests/fixture.js.map +1 -1
- package/dist/utils/tests/otel.d.ts +60 -1
- package/dist/utils/tests/otel.d.ts.map +1 -1
- package/dist/utils/tests/otel.js +65 -4
- package/dist/utils/tests/otel.js.map +1 -1
- package/package.json +12 -12
- package/src/SynchronousDatabaseWrapper.ts +18 -2
- package/src/ambient.d.ts +1 -1
- package/src/effect/LiveStore.ts +11 -20
- package/src/index.ts +1 -1
- package/src/live-queries/__snapshots__/db.test.ts.snap +42 -45
- package/src/live-queries/db.test.ts +2 -1
- package/src/live-queries/db.ts +28 -23
- package/src/row-query-utils.ts +1 -1
- package/src/store/create-store.ts +115 -119
- package/src/store/devtools.ts +48 -22
- package/src/store/store-types.ts +14 -14
- package/src/store/store.ts +188 -224
- package/src/utils/dev.ts +4 -2
- package/src/utils/tests/fixture.ts +4 -9
- package/src/utils/tests/otel.ts +71 -5
- package/dist/live-queries/sql.d.ts +0 -62
- package/dist/live-queries/sql.d.ts.map +0 -1
- package/dist/live-queries/sql.js +0 -175
- package/dist/live-queries/sql.js.map +0 -1
- package/dist/live-queries/sql.test.d.ts +0 -2
- package/dist/live-queries/sql.test.d.ts.map +0 -1
- package/dist/live-queries/sql.test.js +0 -285
- package/dist/live-queries/sql.test.js.map +0 -1
- package/dist/reactiveQueries/base-class.d.ts +0 -64
- package/dist/reactiveQueries/base-class.d.ts.map +0 -1
- package/dist/reactiveQueries/base-class.js +0 -31
- package/dist/reactiveQueries/base-class.js.map +0 -1
- package/dist/reactiveQueries/computed.d.ts +0 -26
- package/dist/reactiveQueries/computed.d.ts.map +0 -1
- package/dist/reactiveQueries/computed.js +0 -38
- package/dist/reactiveQueries/computed.js.map +0 -1
- package/dist/reactiveQueries/graphql.d.ts +0 -49
- package/dist/reactiveQueries/graphql.d.ts.map +0 -1
- package/dist/reactiveQueries/graphql.js +0 -122
- package/dist/reactiveQueries/graphql.js.map +0 -1
- package/dist/reactiveQueries/sql.d.ts +0 -62
- package/dist/reactiveQueries/sql.d.ts.map +0 -1
- package/dist/reactiveQueries/sql.js +0 -175
- package/dist/reactiveQueries/sql.js.map +0 -1
- package/dist/reactiveQueries/sql.test.d.ts +0 -2
- package/dist/reactiveQueries/sql.test.d.ts.map +0 -1
- package/dist/reactiveQueries/sql.test.js +0 -285
- package/dist/reactiveQueries/sql.test.js.map +0 -1
- package/dist/row-query.d.ts +0 -16
- package/dist/row-query.d.ts.map +0 -1
- package/dist/row-query.js +0 -30
- package/dist/row-query.js.map +0 -1
package/dist/utils/dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,SACjB,UAAU,GAAG,IAAI,GAAG,MAAM,YACtB,MAAM,4BAUjB,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,YAAY,MAAM,SAQzD,CAAA;AAED,eAAO,MAAM,gBAAgB,YAI5B,CAAA"}
|
package/dist/utils/dev.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDevEnv } from '@livestore/utils';
|
|
1
2
|
/* eslint-disable unicorn/prefer-global-this */
|
|
2
3
|
export const downloadBlob = (data, fileName, mimeType = 'application/octet-stream') => {
|
|
3
4
|
const blob = data instanceof Blob ? data : new Blob([data], { type: mimeType });
|
|
@@ -15,8 +16,8 @@ export const downloadURL = (data, fileName) => {
|
|
|
15
16
|
a.remove();
|
|
16
17
|
};
|
|
17
18
|
export const exposeDebugUtils = () => {
|
|
18
|
-
if (
|
|
19
|
-
globalThis.
|
|
19
|
+
if (isDevEnv()) {
|
|
20
|
+
globalThis.__debugLiveStoreUtils = { downloadBlob };
|
|
20
21
|
}
|
|
21
22
|
};
|
|
22
23
|
//# sourceMappingURL=dev.js.map
|
package/dist/utils/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAgC,EAChC,QAAgB,EAChB,QAAQ,GAAG,0BAA0B,EACrC,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAE/E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAE5C,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACb,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,MAAM,EAAE,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,IAAI,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/utils/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAgC,EAChC,QAAgB,EAChB,QAAQ,GAAG,0BAA0B,EACrC,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAE/E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAE5C,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACb,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,MAAM,EAAE,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,IAAI,QAAQ,EAAE,EAAE,CAAC;QACf,UAAU,CAAC,qBAAqB,GAAG,EAAE,YAAY,EAAE,CAAA;IACrD,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -291,5 +291,5 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalReactivit
|
|
|
291
291
|
}) => Effect.Effect<{
|
|
292
292
|
store: Store<any, FixtureSchema>;
|
|
293
293
|
reactivityGraph: import("@livestore/livestore").ReactivityGraph;
|
|
294
|
-
}, import("@livestore/common
|
|
294
|
+
}, import("@livestore/common").UnexpectedError, import("effect/Scope").Scope>;
|
|
295
295
|
//# sourceMappingURL=fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAe,QAAQ,EAA0D,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQjB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQf,CAAA;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAA;AAE5C,MAAM,WAAW,aAAc,SAAQ,eAAe,CAAC,YAAY,CAAC;IAAE,MAAM,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;CAAG;AAEjG,eAAO,MAAM,WAAW,4DAIrB;IACD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;;;6EAaiF,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { provideOtel } from '@livestore/common';
|
|
1
2
|
import { createStore, DbSchema, globalReactivityGraph, makeReactivityGraph, makeSchema } from '@livestore/livestore';
|
|
2
|
-
import { Effect
|
|
3
|
+
import { Effect } from '@livestore/utils/effect';
|
|
3
4
|
import { makeInMemoryAdapter } from '@livestore/web';
|
|
4
5
|
export const todos = DbSchema.table('todos', {
|
|
5
6
|
id: DbSchema.text({ primaryKey: true }),
|
|
@@ -15,18 +16,13 @@ export const tables = { todos, app };
|
|
|
15
16
|
export const schema = makeSchema({ tables });
|
|
16
17
|
export const makeTodoMvc = ({ otelTracer, otelContext, useGlobalReactivityGraph = true, } = {}) => Effect.gen(function* () {
|
|
17
18
|
const reactivityGraph = useGlobalReactivityGraph ? globalReactivityGraph : makeReactivityGraph();
|
|
18
|
-
const fiberSet = yield* FiberSet.make();
|
|
19
19
|
const store = yield* createStore({
|
|
20
20
|
schema,
|
|
21
21
|
storeId: 'default',
|
|
22
22
|
adapter: makeInMemoryAdapter(),
|
|
23
23
|
reactivityGraph,
|
|
24
|
-
|
|
25
|
-
tracer: otelTracer,
|
|
26
|
-
rootSpanContext: otelContext,
|
|
27
|
-
},
|
|
28
|
-
fiberSet,
|
|
24
|
+
debug: { instanceId: 'test' },
|
|
29
25
|
});
|
|
30
26
|
return { store, reactivityGraph };
|
|
31
|
-
});
|
|
27
|
+
}).pipe(provideOtel({ parentSpanContext: otelContext, otelTracer: otelTracer }));
|
|
32
28
|
//# sourceMappingURL=fixture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAgBpD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CACjC,OAAO,EACP;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACjE,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAC/B,KAAK,EACL;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC1D,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC3D,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAI5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,WAAW,EACX,wBAAwB,GAAG,IAAI,MAK7B,EAAE,EAAE,EAAE,CACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,eAAe,GAAG,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAA;IAEhG,MAAM,KAAK,GAA8B,KAAK,CAAC,CAAC,WAAW,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,eAAe;QACf,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;KAC9B,CAAC,CAAA;IAEF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AACnC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -1,10 +1,69 @@
|
|
|
1
1
|
import type { Attributes } from '@opentelemetry/api';
|
|
2
|
-
import type { InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
import type { InMemorySpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
3
3
|
type SimplifiedNestedSpan = {
|
|
4
4
|
_name: string;
|
|
5
5
|
attributes: any;
|
|
6
6
|
children: SimplifiedNestedSpan[];
|
|
7
7
|
};
|
|
8
8
|
export declare const getSimplifiedRootSpan: (exporter: InMemorySpanExporter, mapAttributes?: (attributes: Attributes) => Attributes) => SimplifiedNestedSpan;
|
|
9
|
+
export declare const toTraceFile: (spans: ReadableSpan[]) => {
|
|
10
|
+
batches: {
|
|
11
|
+
resource: {
|
|
12
|
+
attributes: {
|
|
13
|
+
key: string;
|
|
14
|
+
value: {
|
|
15
|
+
stringValue: string;
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
droppedAttributesCount: number;
|
|
19
|
+
};
|
|
20
|
+
instrumentationLibrarySpans: {
|
|
21
|
+
spans: {
|
|
22
|
+
name: string;
|
|
23
|
+
kind: string;
|
|
24
|
+
startTimeUnixNano: string;
|
|
25
|
+
endTimeUnixNano: string;
|
|
26
|
+
attributes: {
|
|
27
|
+
key: string;
|
|
28
|
+
value: {
|
|
29
|
+
stringValue: string;
|
|
30
|
+
intValue?: undefined;
|
|
31
|
+
doubleValue?: undefined;
|
|
32
|
+
boolValue?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
intValue: number;
|
|
35
|
+
stringValue?: undefined;
|
|
36
|
+
doubleValue?: undefined;
|
|
37
|
+
boolValue?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
doubleValue: number;
|
|
40
|
+
stringValue?: undefined;
|
|
41
|
+
intValue?: undefined;
|
|
42
|
+
boolValue?: undefined;
|
|
43
|
+
} | {
|
|
44
|
+
boolValue: boolean;
|
|
45
|
+
stringValue?: undefined;
|
|
46
|
+
intValue?: undefined;
|
|
47
|
+
doubleValue?: undefined;
|
|
48
|
+
};
|
|
49
|
+
}[];
|
|
50
|
+
droppedAttributesCount: number;
|
|
51
|
+
droppedEventsCount: number;
|
|
52
|
+
droppedLinksCount: number;
|
|
53
|
+
status: {
|
|
54
|
+
code: import("@opentelemetry/api").SpanStatusCode;
|
|
55
|
+
message: string;
|
|
56
|
+
};
|
|
57
|
+
parentSpanId?: string | undefined;
|
|
58
|
+
traceId: string;
|
|
59
|
+
spanId: string;
|
|
60
|
+
}[];
|
|
61
|
+
instrumentationLibrary: {
|
|
62
|
+
name: string;
|
|
63
|
+
version: string;
|
|
64
|
+
};
|
|
65
|
+
}[];
|
|
66
|
+
}[];
|
|
67
|
+
};
|
|
9
68
|
export {};
|
|
10
69
|
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACvF,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEhG,eAAO,MAAM,qBAAqB,aACtB,oBAAoB,kBACd,CAAC,UAAU,EAAE,UAAU,KAAK,UAAU,KACrD,oBAwCF,CAAA;AAqBD,eAAO,MAAM,WAAW,UAAW,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDhD,CAAA"}
|
package/dist/utils/tests/otel.js
CHANGED
|
@@ -9,22 +9,26 @@ export const getSimplifiedRootSpan = (exporter, mapAttributes) => {
|
|
|
9
9
|
parentSpan.children.push(nestedSpan);
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
const rootSpan = spansMap.get(spans.find((_) => _.name === '
|
|
12
|
+
const rootSpan = spansMap.get(spans.find((_) => _.name === 'createStore').spanContext().spanId);
|
|
13
13
|
const simplifySpanRec = (span) => omitEmpty({
|
|
14
14
|
_name: span.span.name,
|
|
15
15
|
attributes: mapAttributesfn(span.span.attributes),
|
|
16
16
|
children: span.children
|
|
17
|
-
.filter((_) => _.span.name !== 'createStore')
|
|
17
|
+
.filter((_) => _.span.name !== 'createStore:makeAdapter')
|
|
18
18
|
// .sort((a, b) => compareHrTime(a.span.startTime, b.span.startTime))
|
|
19
19
|
.map(simplifySpanRec),
|
|
20
20
|
});
|
|
21
|
+
// console.log('rootSpan', rootSpan.span)
|
|
21
22
|
// console.dir(
|
|
22
23
|
// spans.map((_) => [_.spanContext().spanId, _.name, _.attributes, _.parentSpanId]),
|
|
23
24
|
// { depth: 10 },
|
|
24
25
|
// )
|
|
25
|
-
|
|
26
|
+
const simplifiedRootSpan = simplifySpanRec(rootSpan);
|
|
27
|
+
// console.log('simplifiedRootSpan', simplifiedRootSpan)
|
|
28
|
+
// writeFileSync('tmp/trace.json', JSON.stringify(toTraceFile(spans), null, 2))
|
|
29
|
+
return simplifiedRootSpan;
|
|
26
30
|
};
|
|
27
|
-
// const compareHrTime = (a: [number,
|
|
31
|
+
// const compareHrTime = (a: [number, numndber], b: [number, number]) => {
|
|
28
32
|
// if (a[0] !== b[0]) return a[0] - b[0]
|
|
29
33
|
// return a[1] - b[1]
|
|
30
34
|
// }
|
|
@@ -39,4 +43,61 @@ const omitEmpty = (obj) => {
|
|
|
39
43
|
}
|
|
40
44
|
return result;
|
|
41
45
|
};
|
|
46
|
+
export const toTraceFile = (spans) => {
|
|
47
|
+
const hrTimeToBigInt = (hrTime) => (BigInt(hrTime[0]) * BigInt(1e9) + BigInt(hrTime[1])).toString();
|
|
48
|
+
return {
|
|
49
|
+
batches: [
|
|
50
|
+
{
|
|
51
|
+
resource: {
|
|
52
|
+
attributes: [
|
|
53
|
+
{
|
|
54
|
+
key: 'service.name',
|
|
55
|
+
value: {
|
|
56
|
+
stringValue: 'test',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
droppedAttributesCount: 0,
|
|
61
|
+
},
|
|
62
|
+
instrumentationLibrarySpans: [
|
|
63
|
+
{
|
|
64
|
+
spans: spans.map((span) => ({
|
|
65
|
+
traceId: span.spanContext().traceId,
|
|
66
|
+
spanId: span.spanContext().spanId,
|
|
67
|
+
...(span.parentSpanId ? { parentSpanId: span.parentSpanId } : {}),
|
|
68
|
+
// traceState: span.spanContext().traceState ?? '',
|
|
69
|
+
name: span.name,
|
|
70
|
+
kind: 'SPAN_KIND_INTERNAL',
|
|
71
|
+
startTimeUnixNano: hrTimeToBigInt(span.startTime),
|
|
72
|
+
endTimeUnixNano: hrTimeToBigInt(span.endTime),
|
|
73
|
+
attributes: Object.entries(span.attributes).map(([key, value]) => ({
|
|
74
|
+
key,
|
|
75
|
+
value: typeof value === 'string'
|
|
76
|
+
? { stringValue: value }
|
|
77
|
+
: typeof value === 'number'
|
|
78
|
+
? Number.isInteger(value)
|
|
79
|
+
? { intValue: value }
|
|
80
|
+
: { doubleValue: value }
|
|
81
|
+
: typeof value === 'boolean'
|
|
82
|
+
? { boolValue: value }
|
|
83
|
+
: { stringValue: JSON.stringify(value) },
|
|
84
|
+
})),
|
|
85
|
+
droppedAttributesCount: span.droppedAttributesCount ?? 0,
|
|
86
|
+
droppedEventsCount: span.droppedEventsCount ?? 0,
|
|
87
|
+
droppedLinksCount: span.droppedLinksCount ?? 0,
|
|
88
|
+
status: {
|
|
89
|
+
code: span.status.code,
|
|
90
|
+
message: span.status.message ?? '',
|
|
91
|
+
},
|
|
92
|
+
})),
|
|
93
|
+
instrumentationLibrary: {
|
|
94
|
+
name: 'livestore',
|
|
95
|
+
version: '',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
};
|
|
42
103
|
//# sourceMappingURL=otel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../src/utils/tests/otel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/livestore",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-dev.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -29,22 +29,22 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@graphql-typed-document-node/core": "
|
|
33
|
-
"@opentelemetry/api": "
|
|
34
|
-
"@livestore/common": "0.
|
|
35
|
-
"@livestore/
|
|
36
|
-
"@livestore/
|
|
32
|
+
"@graphql-typed-document-node/core": "3.2.0",
|
|
33
|
+
"@opentelemetry/api": "1.9.0",
|
|
34
|
+
"@livestore/common": "0.3.0-dev.10",
|
|
35
|
+
"@livestore/utils": "0.3.0-dev.10",
|
|
36
|
+
"@livestore/db-schema": "0.3.0-dev.10"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@opentelemetry/sdk-trace-base": "1.
|
|
40
|
-
"jsdom": "^
|
|
41
|
-
"typescript": "5.
|
|
42
|
-
"vite": "
|
|
39
|
+
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
40
|
+
"jsdom": "^26.0.0",
|
|
41
|
+
"typescript": "^5.7.2",
|
|
42
|
+
"vite": "^6.0.11",
|
|
43
43
|
"vitest": "^2.1.4",
|
|
44
|
-
"@livestore/web": "0.
|
|
44
|
+
"@livestore/web": "0.3.0-dev.10"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"graphql": "16.
|
|
47
|
+
"graphql": "~16.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependenciesMeta": {
|
|
50
50
|
"graphql": {
|
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
SynchronousDatabase,
|
|
9
9
|
} from '@livestore/common'
|
|
10
10
|
import { BoundArray, BoundMap, sql } from '@livestore/common'
|
|
11
|
+
import { isDevEnv } from '@livestore/utils'
|
|
11
12
|
import type * as otel from '@opentelemetry/api'
|
|
12
13
|
|
|
13
14
|
import QueryCache from './QueryCache.js'
|
|
@@ -75,6 +76,21 @@ export class SynchronousDatabaseWrapper {
|
|
|
75
76
|
return result
|
|
76
77
|
}
|
|
77
78
|
|
|
79
|
+
withChangeset<TRes>(callback: () => TRes): { result: TRes; changeset: Uint8Array | undefined } {
|
|
80
|
+
const session = this.db.session()
|
|
81
|
+
const result = callback()
|
|
82
|
+
const changeset = session.changeset()
|
|
83
|
+
|
|
84
|
+
session.finish()
|
|
85
|
+
|
|
86
|
+
return { result, changeset }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
rollback(changeset: Uint8Array) {
|
|
90
|
+
const invertedChangeset = this.db.makeChangeset(changeset).invert()
|
|
91
|
+
invertedChangeset.apply()
|
|
92
|
+
}
|
|
93
|
+
|
|
78
94
|
getTablesUsed(query: string) {
|
|
79
95
|
// It seems that SQLite doesn't properly handle `DELETE FROM SOME_TABLE` queries without a WHERE clause
|
|
80
96
|
// So we need to handle these queries separately
|
|
@@ -138,7 +154,7 @@ export class SynchronousDatabaseWrapper {
|
|
|
138
154
|
this.debugInfo.queryFrameDuration += durationMs
|
|
139
155
|
this.debugInfo.queryFrameCount++
|
|
140
156
|
|
|
141
|
-
if (durationMs > 5 &&
|
|
157
|
+
if (durationMs > 5 && isDevEnv()) {
|
|
142
158
|
this.debugInfo.slowQueries.push({
|
|
143
159
|
queryStr,
|
|
144
160
|
bindValues,
|
|
@@ -206,7 +222,7 @@ export class SynchronousDatabaseWrapper {
|
|
|
206
222
|
this.debugInfo.queryFrameCount++
|
|
207
223
|
|
|
208
224
|
// TODO also enable in non-dev mode
|
|
209
|
-
if (durationMs > 5 &&
|
|
225
|
+
if (durationMs > 5 && isDevEnv()) {
|
|
210
226
|
this.debugInfo.slowQueries.push({
|
|
211
227
|
queryStr,
|
|
212
228
|
bindValues,
|
package/src/ambient.d.ts
CHANGED
package/src/effect/LiveStore.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Adapter, BootStatus, UnexpectedError } from '@livestore/common'
|
|
2
2
|
import type { LiveStoreSchema } from '@livestore/common/schema'
|
|
3
|
-
import type { Cause, Scope } from '@livestore/utils/effect'
|
|
4
|
-
import { Context, Deferred, Duration, Effect,
|
|
5
|
-
import * as otel from '@opentelemetry/api'
|
|
3
|
+
import type { Cause, OtelTracer, Scope } from '@livestore/utils/effect'
|
|
4
|
+
import { Context, Deferred, Duration, Effect, Layer, pipe } from '@livestore/utils/effect'
|
|
5
|
+
import type * as otel from '@opentelemetry/api'
|
|
6
6
|
import type { GraphQLSchema } from 'graphql'
|
|
7
7
|
|
|
8
8
|
import { createStore } from '../store/create-store.js'
|
|
@@ -32,10 +32,10 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
|
|
|
32
32
|
*/
|
|
33
33
|
storeId?: string
|
|
34
34
|
graphQLOptions?: {
|
|
35
|
-
schema: Effect.Effect<GraphQLSchema, never,
|
|
35
|
+
schema: Effect.Effect<GraphQLSchema, never, OtelTracer.OtelTracer>
|
|
36
36
|
makeContext: (db: SynchronousDatabaseWrapper, tracer: otel.Tracer, sessionId: string) => GraphQLContext
|
|
37
37
|
}
|
|
38
|
-
boot?: (store: Store<GraphQLContext, LiveStoreSchema>) => Effect.Effect<void, unknown,
|
|
38
|
+
boot?: (store: Store<GraphQLContext, LiveStoreSchema>) => Effect.Effect<void, unknown, OtelTracer.OtelTracer>
|
|
39
39
|
adapter: Adapter
|
|
40
40
|
disableDevtools?: boolean
|
|
41
41
|
onBootStatus?: (status: BootStatus) => void
|
|
@@ -44,7 +44,7 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
|
|
|
44
44
|
|
|
45
45
|
export const LiveStoreContextLayer = <GraphQLContext extends BaseGraphQLContext>(
|
|
46
46
|
props: LiveStoreContextProps<GraphQLContext>,
|
|
47
|
-
): Layer.Layer<LiveStoreContextRunning, UnexpectedError | Cause.TimeoutException,
|
|
47
|
+
): Layer.Layer<LiveStoreContextRunning, UnexpectedError | Cause.TimeoutException, OtelTracer.OtelTracer> =>
|
|
48
48
|
Layer.scoped(LiveStoreContextRunning, makeLiveStoreContext(props)).pipe(
|
|
49
49
|
Layer.withSpan('LiveStore'),
|
|
50
50
|
Layer.provide(LiveStoreContextDeferred),
|
|
@@ -67,39 +67,30 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
|
|
|
67
67
|
}: LiveStoreContextProps<GraphQLContext>): Effect.Effect<
|
|
68
68
|
LiveStoreContextRunning,
|
|
69
69
|
UnexpectedError | Cause.TimeoutException,
|
|
70
|
-
DeferredStoreContext | Scope.Scope |
|
|
70
|
+
DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer
|
|
71
71
|
> =>
|
|
72
72
|
pipe(
|
|
73
73
|
Effect.gen(function* () {
|
|
74
|
-
const otelRootSpanContext = otel.context.active()
|
|
75
|
-
|
|
76
|
-
const otelTracer = yield* OtelTracer.Tracer
|
|
77
|
-
|
|
78
74
|
const graphQLOptions = yield* graphQLOptions_
|
|
79
75
|
? Effect.all({ schema: graphQLOptions_.schema, makeContext: Effect.succeed(graphQLOptions_.makeContext) })
|
|
80
76
|
: Effect.succeed(undefined)
|
|
81
77
|
|
|
82
|
-
// TODO join fiber set and close tear down parent scope in case of error (Needs refactor with Mike A)
|
|
83
|
-
const fiberSet = yield* FiberSet.make()
|
|
84
|
-
|
|
85
78
|
const store = yield* createStore({
|
|
86
79
|
schema,
|
|
87
80
|
storeId,
|
|
88
81
|
graphQLOptions,
|
|
89
|
-
otelOptions: {
|
|
90
|
-
tracer: otelTracer,
|
|
91
|
-
rootSpanContext: otelRootSpanContext,
|
|
92
|
-
},
|
|
93
82
|
boot,
|
|
94
83
|
adapter,
|
|
95
84
|
disableDevtools,
|
|
96
|
-
fiberSet,
|
|
97
85
|
onBootStatus,
|
|
98
86
|
batchUpdates,
|
|
99
87
|
})
|
|
100
88
|
|
|
101
89
|
globalThis.__debugLiveStore ??= {}
|
|
102
|
-
|
|
90
|
+
if (Object.keys(globalThis.__debugLiveStore).length === 0) {
|
|
91
|
+
globalThis.__debugLiveStore['_'] = store
|
|
92
|
+
}
|
|
93
|
+
globalThis.__debugLiveStore[storeId] = store
|
|
103
94
|
|
|
104
95
|
return { stage: 'running', store } satisfies LiveStoreContextRunning
|
|
105
96
|
}),
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type {
|
|
|
9
9
|
} from './store/store-types.js'
|
|
10
10
|
|
|
11
11
|
export type { LiveStoreContextRunning } from './effect/LiveStore.js'
|
|
12
|
-
export { StoreAbort, StoreInterrupted, type LiveStoreContext } from './store/store-types.js'
|
|
12
|
+
export { StoreAbort, StoreInterrupted, type LiveStoreContext, type ShutdownDeferred } from './store/store-types.js'
|
|
13
13
|
|
|
14
14
|
export { SynchronousDatabaseWrapper, emptyDebugInfo } from './SynchronousDatabaseWrapper.js'
|
|
15
15
|
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`otel > otel 3`] = `
|
|
4
4
|
{
|
|
5
|
-
"_name": "
|
|
5
|
+
"_name": "createStore",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"debugInstanceId": "test",
|
|
8
|
+
"storeId": "default",
|
|
9
|
+
},
|
|
6
10
|
"children": [
|
|
7
11
|
{
|
|
8
12
|
"_name": "livestore.in-memory-db:execute",
|
|
@@ -17,6 +21,12 @@ exports[`otel > otel 3`] = `
|
|
|
17
21
|
",
|
|
18
22
|
},
|
|
19
23
|
},
|
|
24
|
+
{
|
|
25
|
+
"_name": "LiveStore:createStore",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"_name": "LiveStore:sync",
|
|
29
|
+
},
|
|
20
30
|
{
|
|
21
31
|
"_name": "LiveStore:mutations",
|
|
22
32
|
"children": [
|
|
@@ -27,27 +37,16 @@ exports[`otel > otel 3`] = `
|
|
|
27
37
|
},
|
|
28
38
|
"children": [
|
|
29
39
|
{
|
|
30
|
-
"_name": "LiveStore:
|
|
40
|
+
"_name": "LiveStore:mutate:applyMutations",
|
|
31
41
|
"attributes": {
|
|
32
42
|
"livestore.mutateLabel": "mutate",
|
|
33
43
|
},
|
|
34
44
|
"children": [
|
|
35
45
|
{
|
|
36
|
-
"_name": "
|
|
46
|
+
"_name": "livestore.in-memory-db:execute",
|
|
37
47
|
"attributes": {
|
|
38
|
-
"
|
|
39
|
-
"sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
|
|
40
|
-
}",
|
|
41
|
-
"livestore.mutation": "livestore.RawSql",
|
|
48
|
+
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
42
49
|
},
|
|
43
|
-
"children": [
|
|
44
|
-
{
|
|
45
|
-
"_name": "livestore.in-memory-db:execute",
|
|
46
|
-
"attributes": {
|
|
47
|
-
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
50
|
},
|
|
52
51
|
],
|
|
53
52
|
},
|
|
@@ -100,7 +99,11 @@ exports[`otel > otel 3`] = `
|
|
|
100
99
|
|
|
101
100
|
exports[`otel > with thunks 3`] = `
|
|
102
101
|
{
|
|
103
|
-
"_name": "
|
|
102
|
+
"_name": "createStore",
|
|
103
|
+
"attributes": {
|
|
104
|
+
"debugInstanceId": "test",
|
|
105
|
+
"storeId": "default",
|
|
106
|
+
},
|
|
104
107
|
"children": [
|
|
105
108
|
{
|
|
106
109
|
"_name": "livestore.in-memory-db:execute",
|
|
@@ -115,6 +118,12 @@ exports[`otel > with thunks 3`] = `
|
|
|
115
118
|
",
|
|
116
119
|
},
|
|
117
120
|
},
|
|
121
|
+
{
|
|
122
|
+
"_name": "LiveStore:createStore",
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"_name": "LiveStore:sync",
|
|
126
|
+
},
|
|
118
127
|
{
|
|
119
128
|
"_name": "LiveStore:mutations",
|
|
120
129
|
"children": [
|
|
@@ -125,27 +134,16 @@ exports[`otel > with thunks 3`] = `
|
|
|
125
134
|
},
|
|
126
135
|
"children": [
|
|
127
136
|
{
|
|
128
|
-
"_name": "LiveStore:
|
|
137
|
+
"_name": "LiveStore:mutate:applyMutations",
|
|
129
138
|
"attributes": {
|
|
130
139
|
"livestore.mutateLabel": "mutate",
|
|
131
140
|
},
|
|
132
141
|
"children": [
|
|
133
142
|
{
|
|
134
|
-
"_name": "
|
|
143
|
+
"_name": "livestore.in-memory-db:execute",
|
|
135
144
|
"attributes": {
|
|
136
|
-
"
|
|
137
|
-
"sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
|
|
138
|
-
}",
|
|
139
|
-
"livestore.mutation": "livestore.RawSql",
|
|
145
|
+
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
140
146
|
},
|
|
141
|
-
"children": [
|
|
142
|
-
{
|
|
143
|
-
"_name": "livestore.in-memory-db:execute",
|
|
144
|
-
"attributes": {
|
|
145
|
-
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
147
|
},
|
|
150
148
|
],
|
|
151
149
|
},
|
|
@@ -201,7 +199,11 @@ exports[`otel > with thunks 3`] = `
|
|
|
201
199
|
|
|
202
200
|
exports[`otel > with thunks with query builder and without labels 3`] = `
|
|
203
201
|
{
|
|
204
|
-
"_name": "
|
|
202
|
+
"_name": "createStore",
|
|
203
|
+
"attributes": {
|
|
204
|
+
"debugInstanceId": "test",
|
|
205
|
+
"storeId": "default",
|
|
206
|
+
},
|
|
205
207
|
"children": [
|
|
206
208
|
{
|
|
207
209
|
"_name": "livestore.in-memory-db:execute",
|
|
@@ -216,6 +218,12 @@ exports[`otel > with thunks with query builder and without labels 3`] = `
|
|
|
216
218
|
",
|
|
217
219
|
},
|
|
218
220
|
},
|
|
221
|
+
{
|
|
222
|
+
"_name": "LiveStore:createStore",
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"_name": "LiveStore:sync",
|
|
226
|
+
},
|
|
219
227
|
{
|
|
220
228
|
"_name": "LiveStore:mutations",
|
|
221
229
|
"children": [
|
|
@@ -226,27 +234,16 @@ exports[`otel > with thunks with query builder and without labels 3`] = `
|
|
|
226
234
|
},
|
|
227
235
|
"children": [
|
|
228
236
|
{
|
|
229
|
-
"_name": "LiveStore:
|
|
237
|
+
"_name": "LiveStore:mutate:applyMutations",
|
|
230
238
|
"attributes": {
|
|
231
239
|
"livestore.mutateLabel": "mutate",
|
|
232
240
|
},
|
|
233
241
|
"children": [
|
|
234
242
|
{
|
|
235
|
-
"_name": "
|
|
243
|
+
"_name": "livestore.in-memory-db:execute",
|
|
236
244
|
"attributes": {
|
|
237
|
-
"
|
|
238
|
-
"sql": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)"
|
|
239
|
-
}",
|
|
240
|
-
"livestore.mutation": "livestore.RawSql",
|
|
245
|
+
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
241
246
|
},
|
|
242
|
-
"children": [
|
|
243
|
-
{
|
|
244
|
-
"_name": "livestore.in-memory-db:execute",
|
|
245
|
-
"attributes": {
|
|
246
|
-
"sql.query": "INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)",
|
|
247
|
-
},
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
247
|
},
|
|
251
248
|
],
|
|
252
249
|
},
|
|
@@ -20,6 +20,7 @@ describe('otel', () => {
|
|
|
20
20
|
const makeQuery = Effect.gen(function* () {
|
|
21
21
|
const exporter = new InMemorySpanExporter()
|
|
22
22
|
|
|
23
|
+
// const provider = cachedProvider ?? new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] })
|
|
23
24
|
const provider = cachedProvider ?? new BasicTracerProvider()
|
|
24
25
|
cachedProvider = provider
|
|
25
26
|
provider.addSpanProcessor(new SimpleSpanProcessor(exporter))
|
|
@@ -27,7 +28,7 @@ describe('otel', () => {
|
|
|
27
28
|
|
|
28
29
|
const otelTracer = otel.trace.getTracer('test')
|
|
29
30
|
|
|
30
|
-
const span = otelTracer.startSpan('test')
|
|
31
|
+
const span = otelTracer.startSpan('test-root')
|
|
31
32
|
const otelContext = otel.trace.setSpan(otel.context.active(), span)
|
|
32
33
|
|
|
33
34
|
const { store } = yield* makeTodoMvc({ otelTracer, otelContext })
|