Skip to content

Commit 08dbb45

Browse files
committed
Rearrange so we can build with Bazel
Make it possible to build packages that can be used directly, without needing to use the "browser" field in package.json Doing this required some minor rearrangements to avoid cycles between platform agnostic and platform-specific code.
1 parent 03981e4 commit 08dbb45

File tree

45 files changed

+490
-85
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+490
-85
lines changed

BUILD.bazel

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package(default_visibility = ["//visibility:public"])
2+
3+
load(":index.bzl", "iso_library", "library")
4+
5+
library(
6+
name = "context-base",
7+
)
8+
9+
library(
10+
name = "context-zone-peer-dep",
11+
deps = [
12+
"@npm//zone.js",
13+
":context-base",
14+
]
15+
)
16+
17+
library(
18+
name = "semantic-conventions",
19+
)
20+
21+
library(
22+
name = "context-zone",
23+
deps = [
24+
"@npm//zone.js",
25+
":context-zone-peer-dep",
26+
]
27+
)
28+
29+
library(
30+
name = "api",
31+
deps = [
32+
":context-base",
33+
],
34+
)
35+
36+
library(
37+
name = "plugin-xml-http-request",
38+
deps = [
39+
"@npm//shimmer",
40+
"@npm//@types/shimmer",
41+
":api",
42+
":api-global-shared",
43+
":api-global-platform-browser",
44+
":core-shared",
45+
":core-platform-browser",
46+
":web",
47+
":semantic-conventions",
48+
]
49+
)
50+
51+
iso_library(
52+
name = "api-global",
53+
deps = [
54+
":api",
55+
":context-base",
56+
]
57+
)
58+
59+
iso_library(
60+
name = "resources",
61+
# exclude = [
62+
# "packages/opentelemetry-resources/src/platform/**/*.ts",
63+
# ],
64+
deps = [
65+
":api",
66+
],
67+
iso_deps = [
68+
":core",
69+
],
70+
node_deps = [
71+
"@npm//gcp-metadata",
72+
],
73+
)
74+
75+
library(
76+
name = "context-async-hooks",
77+
deps = [
78+
":context-base",
79+
"@npm//@types/node",
80+
]
81+
)
82+
83+
library(
84+
name = "web",
85+
deps = [
86+
":api",
87+
":context-base",
88+
":core-platform-browser",
89+
":core-shared",
90+
":tracing",
91+
":semantic-conventions",
92+
]
93+
)
94+
95+
library(
96+
name = "node",
97+
deps = [
98+
"@npm//@types/node",
99+
"@npm//require-in-the-middle",
100+
"@npm//semver",
101+
"@npm//@types/semver",
102+
":api",
103+
":core-shared",
104+
":core-platform-node",
105+
":tracing",
106+
":context-async-hooks",
107+
]
108+
)
109+
110+
library(
111+
name = "plugin-fetch",
112+
deps = [
113+
"@npm//shimmer",
114+
"@npm//@types/shimmer",
115+
":api",
116+
":api-global-shared",
117+
":api-global-platform-browser",
118+
":core-platform-browser",
119+
":core-shared",
120+
":web",
121+
]
122+
)
123+
124+
iso_library(
125+
name = "core",
126+
deps = [
127+
":context-base",
128+
"@npm//semver",
129+
"@npm//@types/semver",
130+
":api",
131+
],
132+
)
133+
134+
library(
135+
name = "tracing",
136+
deps = [
137+
":context-base",
138+
":api",
139+
140+
":core-shared",
141+
":resources-shared",
142+
":api-global-shared",
143+
]
144+
)

index.bzl

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
2+
load("@npm//@bazel/typescript:index.bzl", "ts_library")
3+
4+
load("@build_bazel_rules_nodejs//:providers.bzl", "DeclarationInfo", "declaration_info", "js_module_info", "js_named_module_info")
5+
6+
def _node_module_library_impl(ctx):
7+
workspace_name = ctx.label.workspace_name if ctx.label.workspace_name else ctx.workspace_name
8+
9+
direct_sources = depset(ctx.files.srcs)
10+
sources_depsets = [direct_sources]
11+
12+
declarations = depset([
13+
f
14+
for f in ctx.files.srcs
15+
if (
16+
f.path.endswith(".d.ts") or
17+
# package.json may be required to resolve "typings" key
18+
f.path.endswith("/package.json")
19+
) and
20+
# exclude eg. external/npm/node_modules/protobufjs/node_modules/@types/node/index.d.ts
21+
# these would be duplicates of the typings provided directly in another dependency.
22+
# also exclude all /node_modules/typescript/lib/lib.*.d.ts files as these are determined by
23+
# the tsconfig "lib" attribute
24+
len(f.path.split("/node_modules/")) < 3 and f.path.find("/node_modules/typescript/lib/lib.") == -1
25+
])
26+
27+
transitive_declarations_depsets = [declarations]
28+
29+
for dep in ctx.attr.deps:
30+
if DeclarationInfo in dep:
31+
transitive_declarations_depsets.append(dep[DeclarationInfo].transitive_declarations)
32+
33+
transitive_declarations = depset(transitive = transitive_declarations_depsets)
34+
35+
return struct(
36+
typescript = struct(
37+
declarations = declarations,
38+
devmode_manifest = None,
39+
es5_sources = depset(),
40+
es6_sources = depset(),
41+
replay_params = None,
42+
transitive_declarations = transitive_declarations,
43+
transitive_es5_sources = depset(),
44+
transitive_es6_sources = depset(),
45+
tsickle_externs = [],
46+
type_blacklisted_declarations = depset(),
47+
),
48+
providers = [
49+
DefaultInfo(
50+
files = direct_sources,
51+
),
52+
declaration_info(
53+
declarations = declarations,
54+
deps = ctx.attr.deps,
55+
),
56+
js_module_info(
57+
sources = direct_sources,
58+
deps = ctx.attr.deps,
59+
),
60+
js_named_module_info(
61+
sources = depset(ctx.files.named_module_srcs),
62+
deps = ctx.attr.deps,
63+
),
64+
],
65+
)
66+
67+
node_module_library = rule(
68+
implementation = _node_module_library_impl,
69+
attrs = {
70+
"deps": attr.label_list(
71+
doc = "Transitive dependencies of the package",
72+
),
73+
# "package_name": attr.string(),
74+
"named_module_srcs": attr.label_list(
75+
doc = "A subset of srcs that are javascript named-UMD or named-AMD for use in rules such as ts_devserver",
76+
allow_files = True,
77+
),
78+
"srcs": attr.label_list(
79+
doc = "The list of files that comprise the package",
80+
allow_files = True,
81+
),
82+
},
83+
doc = "Defines an npm package under node_modules",
84+
)
85+
86+
def library(name, target_name = None, include = [], exclude = [], deps = [], module_root = None, extra_srcs=[]):
87+
if not module_root:
88+
module_root = "packages/opentelemetry-" + name + "/src"
89+
90+
if include == None:
91+
include = [
92+
module_root + "/**/*.ts"
93+
]
94+
95+
ts_library(
96+
name = target_name or name,
97+
module_name = '@opentelemetry/' + name,
98+
module_root = module_root,
99+
srcs = native.glob([
100+
module_root + "/**/*.ts"
101+
], exclude=exclude),
102+
deps = deps,
103+
generate_externs = False,
104+
)
105+
106+
def iso_library(name, deps=[], node_deps=[], browser_deps=[], iso_deps=[], exclude=[]):
107+
src_dir = "packages/opentelemetry-" + name + "/src"
108+
109+
expanded_deps = [
110+
d
111+
for ds in [
112+
[dep + "-shared", dep + "-platform-types"] if dep.startswith(":") else [dep]
113+
for dep in iso_deps
114+
]
115+
for d in ds
116+
]
117+
118+
library(
119+
target_name = name + "-platform-common",
120+
name = name + "/platform/common",
121+
module_root = src_dir + "/platform/common",
122+
exclude = exclude,
123+
deps = expanded_deps + deps,
124+
)
125+
126+
node_module_library(
127+
name = name + "-platform-types",
128+
srcs = [
129+
src_dir + "/platform/index.d.ts",
130+
],
131+
)
132+
133+
library(
134+
target_name = name + "-shared",
135+
name = name,
136+
exclude = [
137+
src_dir + "/platform/**/*.ts"
138+
] + exclude,
139+
deps = expanded_deps + deps + [ ":" + name + "-platform-common", ":" + name + "-platform-types" ],
140+
)
141+
142+
all_node_deps = [
143+
d
144+
for ds in [
145+
[dep + "-shared", dep + "-platform-types"] if dep.startswith(":") else [dep]
146+
for dep in iso_deps
147+
]
148+
for d in ds
149+
]
150+
151+
all_node_deps = expanded_deps + [
152+
"@npm//@types/node",
153+
] + deps + node_deps
154+
155+
library(
156+
target_name = name + "-platform-node",
157+
name = name + "/platform",
158+
module_root = src_dir + "/platform/node",
159+
exclude = exclude,
160+
deps = all_node_deps + [ ":" + name + "-platform-common" ],
161+
)
162+
163+
all_browser_deps = expanded_deps + deps + browser_deps
164+
165+
library(
166+
target_name = name + "-platform-browser",
167+
name = name + "/platform",
168+
module_root = src_dir + "/platform/browser",
169+
exclude = exclude,
170+
deps = all_browser_deps + [ ":" + name + "-platform-common" ],
171+
)

packages/opentelemetry-api/src/api/global-utils.ts renamed to packages/opentelemetry-api-global/src/api/global-utils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
*/
1616

1717
import { ContextManager } from '@opentelemetry/context-base';
18-
import { HttpTextPropagator } from '../context/propagation/HttpTextPropagator';
19-
import { MeterProvider } from '../metrics/MeterProvider';
20-
import { TracerProvider } from '../trace/tracer_provider';
21-
import { _globalThis } from '../platform';
18+
import { HttpTextPropagator } from '@opentelemetry/api/context/propagation/HttpTextPropagator';
19+
import { MeterProvider } from '@opentelemetry/api/metrics/MeterProvider';
20+
import { TracerProvider } from '@opentelemetry/api/trace/tracer_provider';
21+
import { _globalThis } from '@opentelemetry/api-global/platform';
2222

2323
export const GLOBAL_CONTEXT_MANAGER_API_KEY = Symbol.for(
2424
'io.opentelemetry.js.api.context'

packages/opentelemetry-api/src/api/metrics.ts renamed to packages/opentelemetry-api-global/src/api/metrics.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Meter } from '../metrics/Meter';
18-
import { MeterProvider } from '../metrics/MeterProvider';
19-
import { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';
17+
import { Meter } from '@opentelemetry/api/metrics/Meter';
18+
import { MeterProvider } from '@opentelemetry/api/metrics/MeterProvider';
19+
import { NOOP_METER_PROVIDER } from '@opentelemetry/api/metrics/NoopMeterProvider';
2020
import {
2121
API_BACKWARDS_COMPATIBILITY_VERSION,
2222
GLOBAL_METRICS_API_KEY,

packages/opentelemetry-api/src/api/propagation.ts renamed to packages/opentelemetry-api-global/src/api/propagation.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
*/
1616

1717
import { Context } from '@opentelemetry/context-base';
18-
import { defaultGetter, GetterFunction } from '../context/propagation/getter';
19-
import { HttpTextPropagator } from '../context/propagation/HttpTextPropagator';
20-
import { NOOP_HTTP_TEXT_PROPAGATOR } from '../context/propagation/NoopHttpTextPropagator';
21-
import { defaultSetter, SetterFunction } from '../context/propagation/setter';
18+
import { defaultGetter, GetterFunction } from '@opentelemetry/api/context/propagation/getter';
19+
import { HttpTextPropagator } from '@opentelemetry/api/context/propagation/HttpTextPropagator';
20+
import { NOOP_HTTP_TEXT_PROPAGATOR } from '@opentelemetry/api/context/propagation/NoopHttpTextPropagator';
21+
import { defaultSetter, SetterFunction } from '@opentelemetry/api/context/propagation/setter';
2222
import { ContextAPI } from './context';
2323
import {
2424
API_BACKWARDS_COMPATIBILITY_VERSION,

packages/opentelemetry-api/src/api/trace.ts renamed to packages/opentelemetry-api-global/src/api/trace.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { NOOP_TRACER_PROVIDER } from '../trace/NoopTracerProvider';
18-
import { Tracer } from '../trace/tracer';
19-
import { TracerProvider } from '../trace/tracer_provider';
17+
import { NOOP_TRACER_PROVIDER } from '@opentelemetry/api/trace/NoopTracerProvider';
18+
import { Tracer } from '@opentelemetry/api/trace/tracer';
19+
import { TracerProvider } from '@opentelemetry/api/trace/tracer_provider';
2020
import {
2121
API_BACKWARDS_COMPATIBILITY_VERSION,
2222
GLOBAL_TRACE_API_KEY,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { ContextAPI } from './api/context';
2+
/** Entrypoint for context API */
3+
export const context = ContextAPI.getInstance();
4+
5+
import { TraceAPI } from './api/trace';
6+
/** Entrypoint for trace API */
7+
export const trace = TraceAPI.getInstance();
8+
9+
import { MetricsAPI } from './api/metrics';
10+
/** Entrypoint for metrics API */
11+
export const metrics = MetricsAPI.getInstance();
12+
13+
import { PropagationAPI } from './api/propagation';
14+
/** Entrypoint for propagation API */
15+
export const propagation = PropagationAPI.getInstance();
16+
17+
export default {
18+
trace,
19+
metrics,
20+
context,
21+
propagation,
22+
};

0 commit comments

Comments
 (0)