From 1ae529d310e79bd703a6060589dfe919bbe2b2c4 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 29 Sep 2023 15:53:01 +1300 Subject: [PATCH] update to effect package (#55) --- .changeset/large-kangaroos-jump.md | 5 +++ examples/index.ts | 6 ++-- examples/metrics.ts | 12 +++---- examples/otlp-exporter.ts | 8 ++--- package.json | 8 ++--- pnpm-lock.yaml | 56 ++++++++++++++++++++---------- scripts/gen-index.mjs | 16 +++++++++ src/Metrics.ts | 8 ++--- src/NodeSdk.ts | 4 +-- src/Resource.ts | 4 +-- src/Tracer.ts | 10 +++--- src/index.ts | 19 ++++++++++ src/internal/metrics.ts | 18 +++++----- src/internal/tracer.ts | 20 +++++------ test/Metrics.test.ts | 4 +-- test/Tracer.test.ts | 6 ++-- test/utils/extend.ts | 4 +-- tsconfig.madge.json | 4 +-- 18 files changed, 134 insertions(+), 78 deletions(-) create mode 100644 .changeset/large-kangaroos-jump.md create mode 100644 scripts/gen-index.mjs create mode 100644 src/index.ts diff --git a/.changeset/large-kangaroos-jump.md b/.changeset/large-kangaroos-jump.md new file mode 100644 index 0000000..a82dc01 --- /dev/null +++ b/.changeset/large-kangaroos-jump.md @@ -0,0 +1,5 @@ +--- +"@effect/opentelemetry": minor +--- + +update to effect package diff --git a/examples/index.ts b/examples/index.ts index 64fc136..f8da83f 100644 --- a/examples/index.ts +++ b/examples/index.ts @@ -1,10 +1,10 @@ -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" import * as NodeSdk from "@effect/opentelemetry/NodeSdk" import * as Resource from "@effect/opentelemetry/Resource" import * as Tracer from "@effect/opentelemetry/Tracer" import { ConsoleSpanExporter } from "@opentelemetry/sdk-trace-base" +import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" +import * as Layer from "effect/Layer" const ResourceLive = Resource.layer({ serviceName: "example" }) diff --git a/examples/metrics.ts b/examples/metrics.ts index a575bbe..1086710 100644 --- a/examples/metrics.ts +++ b/examples/metrics.ts @@ -1,12 +1,12 @@ -import * as Chunk from "@effect/data/Chunk" -import { millis, seconds } from "@effect/data/Duration" -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" -import * as Metric from "@effect/io/Metric" import * as OtelMetrics from "@effect/opentelemetry/Metrics" import * as Resource from "@effect/opentelemetry/Resource" import { PrometheusExporter } from "@opentelemetry/exporter-prometheus" +import * as Chunk from "effect/Chunk" +import { millis, seconds } from "effect/Duration" +import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" +import * as Layer from "effect/Layer" +import * as Metric from "effect/Metric" const counter = Metric.counter("count", "An example counter") diff --git a/examples/otlp-exporter.ts b/examples/otlp-exporter.ts index b888cbc..421f7f2 100644 --- a/examples/otlp-exporter.ts +++ b/examples/otlp-exporter.ts @@ -1,11 +1,11 @@ -import { seconds } from "@effect/data/Duration" -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" import * as NodeSdk from "@effect/opentelemetry/NodeSdk" import * as Resource from "@effect/opentelemetry/Resource" import * as Tracer from "@effect/opentelemetry/Tracer" import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http" +import { seconds } from "effect/Duration" +import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" +import * as Layer from "effect/Layer" const ResourceLive = Resource.layer({ serviceName: "example" }) diff --git a/package.json b/package.json index c99ce0c..a145762 100644 --- a/package.json +++ b/package.json @@ -63,9 +63,8 @@ "@opentelemetry/semantic-conventions": "^1.17.0" }, "peerDependencies": { - "@effect/data": "^0.18.6", - "@effect/io": "^0.41.0", - "@opentelemetry/api": "^1.4.0" + "@opentelemetry/api": "^1.4.0", + "effect": "2.0.0-next.37" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -75,10 +74,8 @@ "@changesets/cli": "^2.26.2", "@effect/babel-plugin": "^0.2.0", "@effect/build-utils": "^0.1.4", - "@effect/data": "^0.18.6", "@effect/docgen": "^0.1.7", "@effect/eslint-plugin": "^0.1.2", - "@effect/io": "^0.41.0", "@effect/language-service": "^0.0.21", "@opentelemetry/api": "^1.6.0", "@opentelemetry/exporter-prometheus": "^0.43.0", @@ -93,6 +90,7 @@ "@vitest/expect": "^0.34.5", "babel-plugin-annotate-pure-calls": "^0.4.0", "concurrently": "^8.2.1", + "effect": "2.0.0-next.37", "eslint": "^8.50.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-codegen": "0.17.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7902a7d..ef12948 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,18 +40,12 @@ devDependencies: '@effect/build-utils': specifier: ^0.1.4 version: 0.1.4 - '@effect/data': - specifier: ^0.18.6 - version: 0.18.6 '@effect/docgen': specifier: ^0.1.7 version: 0.1.7(@types/node@20.7.0)(typescript@5.2.2) '@effect/eslint-plugin': specifier: ^0.1.2 version: 0.1.2 - '@effect/io': - specifier: ^0.41.0 - version: 0.41.0(@effect/data@0.18.6) '@effect/language-service': specifier: ^0.0.21 version: 0.0.21 @@ -94,6 +88,9 @@ devDependencies: concurrently: specifier: ^8.2.1 version: 8.2.1 + effect: + specifier: 2.0.0-next.37 + version: 2.0.0-next.37 eslint: specifier: ^8.50.0 version: 8.50.0 @@ -724,10 +721,6 @@ packages: hasBin: true dev: true - /@effect/data@0.18.6: - resolution: {integrity: sha512-gfjorojxEJ0KKxwluZLoAsPv1kkHi7MV1vQDlibClfdtC9iY9JqkJo+BjWTKsU0zV4mW2inmTZQCF72KKbn2tQ==} - dev: true - /@effect/docgen@0.1.7(@types/node@20.7.0)(typescript@5.2.2): resolution: {integrity: sha512-HFvw3k/B7i4o73GIWELktbHs2SX5xT1JFjxxnXp/k6AcWfc4Bf4RMaRe1huAwCpv3VvZZFQMkhJ48ee4YRGaOQ==} engines: {node: '>=16.17.1'} @@ -759,14 +752,6 @@ packages: diff: 5.1.0 dev: true - /@effect/io@0.41.0(@effect/data@0.18.6): - resolution: {integrity: sha512-gCjntDN3lbUh8wVQnwNoYlugNlWESZWsVkBFPfmOf2439EptHkvdEDNA47vR4OSB3lcqhH+J5jJHi2KWnEbRew==} - peerDependencies: - '@effect/data': ^0.18.5 - dependencies: - '@effect/data': 0.18.6 - dev: true - /@effect/language-service@0.0.21: resolution: {integrity: sha512-e8vfKbjnbYiyneBincEFS0tzXluopGK77OkVFbPRtUbNDS5tJfb+jiwOQEiqASDsadcZmd+9J9+Q6v/z7GuN2g==} dev: true @@ -2791,6 +2776,10 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /effect@2.0.0-next.37: + resolution: {integrity: sha512-poONzql/x5pn9ZtsmabqiPPZPuiGJoMUoZccGMaCZWYY1DSD8klYNviQEker1BDU0szr+J7bmyFFjgdYT3BVfQ==} + dev: true + /electron-to-chromium@1.4.529: resolution: {integrity: sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A==} dev: true @@ -2981,7 +2970,7 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.50.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) fast-glob: 3.3.1 get-tsconfig: 4.7.2 @@ -3024,6 +3013,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.50.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3)(eslint-plugin-import@2.28.1)(eslint@8.50.0) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-codegen@0.17.0: resolution: {integrity: sha512-6DDDob+7PjyNJyy9ynHFFsLp0+aUtWbXiiT/SfU161NCxo1zevewq7VvtDiJh15gMBvVZSFs6hXqYJWT3NUZvA==} dependencies: diff --git a/scripts/gen-index.mjs b/scripts/gen-index.mjs new file mode 100644 index 0000000..c74a3a4 --- /dev/null +++ b/scripts/gen-index.mjs @@ -0,0 +1,16 @@ +import * as Fs from "node:fs"; + +const modules = Fs.readdirSync("src") + .filter((_) => _.endsWith(".ts") && _ !== "index.ts") + .map((_) => _.slice(0, -3)); + +console.log( + modules + .map((module) => { + const content = Fs.readFileSync(`src/${module}.ts`, "utf8"); + const topComment = content.match(/\/\*\*\n.+?\*\//s)?.[0] ?? ""; + return `${topComment} +export * as ${module} from "@effect/opentelemetry/${module}"`; + }) + .join("\n\n"), +); diff --git a/src/Metrics.ts b/src/Metrics.ts index 7f7afc5..e06baa9 100644 --- a/src/Metrics.ts +++ b/src/Metrics.ts @@ -1,14 +1,14 @@ /** * @since 1.0.0 */ -import type { LazyArg } from "@effect/data/Function" -import type * as Effect from "@effect/io/Effect" -import type { Layer } from "@effect/io/Layer" -import type * as Scope from "@effect/io/Scope" import * as internal from "@effect/opentelemetry/internal/metrics" import type { Resource } from "@effect/opentelemetry/Resource" import type { MetricReader } from "@opentelemetry/sdk-metrics" import type { MetricProducer } from "@opentelemetry/sdk-metrics/build/src/export/MetricProducer" +import type * as Effect from "effect/Effect" +import type { LazyArg } from "effect/Function" +import type { Layer } from "effect/Layer" +import type * as Scope from "effect/Scope" /** * @since 1.0.0 diff --git a/src/NodeSdk.ts b/src/NodeSdk.ts index a793efa..769a7a0 100644 --- a/src/NodeSdk.ts +++ b/src/NodeSdk.ts @@ -1,11 +1,11 @@ /** * @since 1.0.0 */ -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" import { Resource } from "@effect/opentelemetry/Resource" import type { NodeSDKConfiguration } from "@opentelemetry/sdk-node" import { NodeSDK } from "@opentelemetry/sdk-node" +import * as Effect from "effect/Effect" +import * as Layer from "effect/Layer" /** * @since 1.0.0 diff --git a/src/Resource.ts b/src/Resource.ts index 53ae697..b803c6d 100644 --- a/src/Resource.ts +++ b/src/Resource.ts @@ -1,10 +1,10 @@ /** * @since 1.0.0 */ -import { Tag } from "@effect/data/Context" -import * as Layer from "@effect/io/Layer" import * as Resources from "@opentelemetry/resources" import { SemanticResourceAttributes, TelemetrySdkLanguageValues } from "@opentelemetry/semantic-conventions" +import { Tag } from "effect/Context" +import * as Layer from "effect/Layer" /** * @since 1.0.0 diff --git a/src/Tracer.ts b/src/Tracer.ts index 3cf5aa5..69c0273 100644 --- a/src/Tracer.ts +++ b/src/Tracer.ts @@ -1,14 +1,14 @@ /** * @since 1.0.0 */ -import type { Tag } from "@effect/data/Context" -import type * as Option from "@effect/data/Option" -import type { Effect } from "@effect/io/Effect" -import type { Layer } from "@effect/io/Layer" -import type { ExternalSpan, Tracer } from "@effect/io/Tracer" import * as internal from "@effect/opentelemetry/internal/tracer" import type { Resource } from "@effect/opentelemetry/Resource" import type * as Otel from "@opentelemetry/api" +import type { Tag } from "effect/Context" +import type { Effect } from "effect/Effect" +import type { Layer } from "effect/Layer" +import type * as Option from "effect/Option" +import type { ExternalSpan, Tracer } from "effect/Tracer" /** * @since 1.0.0 diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..f15e666 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,19 @@ +/** + * @since 1.0.0 + */ +export * as Metrics from "@effect/opentelemetry/Metrics" + +/** + * @since 1.0.0 + */ +export * as NodeSdk from "@effect/opentelemetry/NodeSdk" + +/** + * @since 1.0.0 + */ +export * as Resource from "@effect/opentelemetry/Resource" + +/** + * @since 1.0.0 + */ +export * as Tracer from "@effect/opentelemetry/Tracer" diff --git a/src/internal/metrics.ts b/src/internal/metrics.ts index 936a31b..2d98db0 100644 --- a/src/internal/metrics.ts +++ b/src/internal/metrics.ts @@ -1,12 +1,3 @@ -import type { LazyArg } from "@effect/data/Function" -import * as HashSet from "@effect/data/HashSet" -import * as Option from "@effect/data/Option" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" -import * as Metric from "@effect/io/Metric" -import type * as MetricKey from "@effect/io/MetricKey" -import * as MetricKeyType from "@effect/io/MetricKeyType" -import * as MetricState from "@effect/io/MetricState" import * as Resource from "@effect/opentelemetry/Resource" import type { HrTime } from "@opentelemetry/api" import { ValueType } from "@opentelemetry/api" @@ -20,6 +11,15 @@ import type { } from "@opentelemetry/sdk-metrics" import { AggregationTemporality, DataPointType, InstrumentType } from "@opentelemetry/sdk-metrics" import type { MetricCollectOptions, MetricProducer } from "@opentelemetry/sdk-metrics/build/src/export/MetricProducer" +import * as Effect from "effect/Effect" +import type { LazyArg } from "effect/Function" +import * as HashSet from "effect/HashSet" +import * as Layer from "effect/Layer" +import * as Metric from "effect/Metric" +import type * as MetricKey from "effect/MetricKey" +import * as MetricKeyType from "effect/MetricKeyType" +import * as MetricState from "effect/MetricState" +import * as Option from "effect/Option" const sdkName = "@effect/opentelemetry/Metrics" diff --git a/src/internal/tracer.ts b/src/internal/tracer.ts index 2ac42f3..df5ee91 100644 --- a/src/internal/tracer.ts +++ b/src/internal/tracer.ts @@ -1,15 +1,15 @@ -import * as Context from "@effect/data/Context" -import * as List from "@effect/data/List" -import * as Option from "@effect/data/Option" -import * as Cause from "@effect/io/Cause" -import * as Effect from "@effect/io/Effect" -import type { Exit } from "@effect/io/Exit" -import * as FiberRef from "@effect/io/FiberRef" -import * as FiberRefs from "@effect/io/FiberRefs" -import * as Layer from "@effect/io/Layer" -import * as Tracer from "@effect/io/Tracer" import { Resource } from "@effect/opentelemetry/Resource" import * as OtelApi from "@opentelemetry/api" +import * as Cause from "effect/Cause" +import * as Context from "effect/Context" +import * as Effect from "effect/Effect" +import type { Exit } from "effect/Exit" +import * as FiberRef from "effect/FiberRef" +import * as FiberRefs from "effect/FiberRefs" +import * as Layer from "effect/Layer" +import * as List from "effect/List" +import * as Option from "effect/Option" +import * as Tracer from "effect/Tracer" /** @internal */ export class OtelSpan implements Tracer.Span { diff --git a/test/Metrics.test.ts b/test/Metrics.test.ts index 376c7e6..285b659 100644 --- a/test/Metrics.test.ts +++ b/test/Metrics.test.ts @@ -1,9 +1,9 @@ -import * as Effect from "@effect/io/Effect" -import * as Metric from "@effect/io/Metric" import * as internal from "@effect/opentelemetry/internal/metrics" import * as it from "@effect/opentelemetry/test/utils/extend" import { ValueType } from "@opentelemetry/api" import { Resource } from "@opentelemetry/resources" +import * as Effect from "effect/Effect" +import * as Metric from "effect/Metric" const findMetric = (metrics: any, name: string) => metrics.resourceMetrics.scopeMetrics[0].metrics.find((_: any) => _.descriptor.name === name) diff --git a/test/Tracer.test.ts b/test/Tracer.test.ts index deb83a7..14bb812 100644 --- a/test/Tracer.test.ts +++ b/test/Tracer.test.ts @@ -1,6 +1,3 @@ -import { identity } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" import { OtelSpan } from "@effect/opentelemetry/internal/tracer" import * as NodeSdk from "@effect/opentelemetry/NodeSdk" import * as Resource from "@effect/opentelemetry/Resource" @@ -8,6 +5,9 @@ import * as it from "@effect/opentelemetry/test/utils/extend" import * as Tracer from "@effect/opentelemetry/Tracer" import * as OtelApi from "@opentelemetry/api" import { InMemorySpanExporter } from "@opentelemetry/sdk-trace-base" +import * as Effect from "effect/Effect" +import { identity } from "effect/Function" +import * as Layer from "effect/Layer" const TracingLive = Layer.provide( Resource.layer({ serviceName: "test" }), diff --git a/test/utils/extend.ts b/test/utils/extend.ts index 0bf995f..c77d7f4 100644 --- a/test/utils/extend.ts +++ b/test/utils/extend.ts @@ -1,5 +1,5 @@ -import { pipe } from "@effect/data/Function" -import * as Effect from "@effect/io/Effect" +import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as V from "vitest" export type API = V.TestAPI<{}> diff --git a/tsconfig.madge.json b/tsconfig.madge.json index fb67bee..c5fc6e8 100644 --- a/tsconfig.madge.json +++ b/tsconfig.madge.json @@ -4,8 +4,8 @@ "allowJs": true, "baseUrl": ".", "paths": { - "@effect/io": ["./build/esm/index.js"], - "@effect/io/*": ["./build/esm/*"] + "@effect/opentelemetry": ["./build/esm/index.js"], + "@effect/opentelemetry/*": ["./build/esm/*"] } }, "include": ["./build/esm/**/*.js"]