Skip to content

Commit a7200aa

Browse files
Greg Magolanalexeagle
authored andcommitted
feat: add opt-in exports_directories_only mode to yarn_install and npm_install (defaults to False)
When `True`, `yarn_install` and `npm_install` export only top-level package directory artifacts from node_modules. Turning this on will decrease the time it takes for Bazel to setup runfiles and sandboxing when there are a large number of npm dependencies as inputs to an action. This breaks compatabilty for label that reference files within npm packages such as `@npm//:node_modules/prettier/bin-prettier.js`. To reference files within npm packages, you can use the `directory_file_path` rule and/or `DirectoryFilePathInfo` provider. Note, some rules still need upgrading to support consuming `DirectoryFilePathInfo` where needed. NB: This feature requires runfiles be enabled due to an issue in Bazel which we are still investigating. On Windows runfiles are off by default and must be enabled with the `--enable_runfiles` flag when using this feature. NB: `ts_library` does not support directory artifact npm deps due to internal dependency on having all input sources files explicitly specified NB: `karma_web_test` and `karma_web_test_suite` do not yet support directory artifact npm deps as they require `node_modules/requirejs/require.js` & `node_modules/karma-requirejs/lib/adapter.js` explicit source files in deps For the `nodejs_binary` & `nodejs_test` `entry_point` attribute (which often needs to reference a file within an npm package) you can set the entry_point to a dict with a single entry, where the key corresponds to the directory artifact label and the value corresponds to the path within that directory to the entry point. For example, ``` nodejs_binary( name = "prettier", data = ["@npm//prettier"], entry_point = "@npm//:node_modules/prettier/bin-prettier.js", ) ``` becomes, ``` nodejs_binary( name = "prettier", data = ["@npm//prettier"], entry_point = { "@npm//:node_modules/prettier": "bin-prettier.js" }, ) ``` For other labels that are passed to `$(rootpath)`, `$(execpath)`, or `$(location)` you can simply break these apart into the directory artifact label that gets passed to the expander & path part to follows it. For example, ``` $(rootpath @npm//:node_modules/prettier/bin-prettier.js") ``` becomes, ``` $(rootpath @npm//:node_modules/prettier)/bin-prettier.js ```
1 parent 50e6d1d commit a7200aa

File tree

92 files changed

+3385
-134
lines changed

Some content is hidden

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

92 files changed

+3385
-134
lines changed

.bazelci/presubmit.yml

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -382,65 +382,74 @@ tasks:
382382
# Disabled due to https://github.com/bazelbuild/rules_nodejs/issues/1486
383383
#- "@fine_grained_deps_yarn//typescript/bin:tsc"
384384
build_flags:
385-
- "--build_tag_filters=-e2e,-examples,-fix-windows,-manual"
385+
- "--build_tag_filters=-e2e,-examples,-manual,-fix-windows,-no-bazelci-windows,-requires-runfiles"
386386
build_targets:
387387
- "//..."
388388
test_flags:
389389
# Firefox not supported on Windows with rules_webtesting (if run it exit with success)
390390
# See https://github.com/bazelbuild/rules_webtesting/blob/0.3.3/browsers/BUILD.bazel#L66.
391-
- "--test_tag_filters=-e2e,-examples,-fix-windows,-no-bazelci-windows,-manual,-browser:firefox-local,-cypress"
391+
- "--test_tag_filters=-e2e,-examples,-fix-windows,-no-bazelci-windows,-requires-runfiles,-manual,-browser:firefox-local,-cypress"
392392
test_targets:
393393
- "//..."
394394
# //internal/node/test:nodejs_toolchain_windows_amd64_test is a "manual" test that must be run
395395
# explicitly; it should pass when running on Windows with no --platform set.
396396
- "//internal/node/test:nodejs_toolchain_windows_amd64_test"
397+
windows_runfiles_enabled:
398+
name: windows_runfiles_enabled
399+
platform: windows
400+
test_flags:
401+
- "--test_tag_filters=requires-runfiles"
402+
- "--enable_runfiles"
403+
test_targets:
404+
- "//..."
397405
windows_e2e:
398406
name: windows_e2e
399407
platform: windows
400408
build_flags:
401-
- "--build_tag_filters=e2e,-fix-windows"
409+
- "--build_tag_filters=e2e,-fix-windows,-no-bazelci-windows,-requires-runfiles"
402410
build_targets:
403411
- "//..."
404412
# We control Bazel version in integration tests, so we don't need USE_BAZEL_VERSION for tests.
405413
skip_use_bazel_version_for_test: true
406414
test_flags:
407-
- "--test_tag_filters=e2e,-fix-windows,-no-bazelci-windows"
415+
- "--test_tag_filters=e2e,-fix-windows,-no-bazelci-windows,-requires-runfiles"
408416
- "--local_ram_resources=792"
409417
# test_args will be passed to the nested bazel process
410418
- "--test_arg=--local_ram_resources=13288"
411419
# Firefox not supported on Windows with rules_webtesting (if run it exit with success)
412420
# See https://github.com/bazelbuild/rules_webtesting/blob/0.3.3/browsers/BUILD.bazel#L66.
413421
# Chrome fails to launch on Windows inside bazel-in-bazel with: [17:12:04] E/launcher -
414422
# spawn D:\...\external\io_bazel_rules_webtesting\third_party\chromedriver\chromedriver.out\chromedriver_win32\chromedriver.exe ENOENT
415-
- "--test_arg=--test_tag_filters=-fix-windows,-manual,-browser:chromium-local,-browser:firefox-local"
423+
- "--test_arg=--test_tag_filters=-fix-windows,-no-bazelci-windows,-requires-runfiles,-manual,-browser:chromium-local,-browser:firefox-local"
416424
test_targets:
417425
- "//..."
418426
windows_examples:
419427
name: windows_examples
420428
platform: windows
421429
build_flags:
422-
- "--build_tag_filters=examples,-fix-windows"
430+
- "--build_tag_filters=examples,-fix-windows,-no-bazelci-windows,-requires-runfiles"
423431
build_targets:
424432
- "//..."
425433
# We control Bazel version in integration tests, so we don't need USE_BAZEL_VERSION for tests.
426434
skip_use_bazel_version_for_test: true
427435
test_flags:
428-
- "--test_tag_filters=examples,-manual,-fix-windows,-no-bazelci-windows,-cypress"
436+
- "--test_tag_filters=examples,-manual,-fix-windows,-no-bazelci-windows,-requires-runfiles,-cypress"
429437
- "--local_ram_resources=792"
430438
# test_args will be passed to the nested bazel process
431439
- "--test_arg=--local_ram_resources=13288"
432440
# Firefox not supported on Windows with rules_webtesting (if run it exit with success)
433441
# See https://github.com/bazelbuild/rules_webtesting/blob/0.3.3/browsers/BUILD.bazel#L66.
434442
# Chrome fails to launch on Windows inside bazel-in-bazel with: [17:12:04] E/launcher -
435443
# spawn D:\...\external\io_bazel_rules_webtesting\third_party\chromedriver\chromedriver.out\chromedriver_win32\chromedriver.exe ENOENT
436-
- "--test_arg=--test_tag_filters=-no-bazelci-windows,-fix-windows,-manual,-browser:chromium-local,-browser:firefox-local,-cypress"
444+
- "--test_arg=--test_tag_filters=-fix-windows,-no-bazelci-windows,-requires-runfiles,-manual,-browser:chromium-local,-browser:firefox-local,-cypress"
437445
test_targets:
438446
- "//..."
439447
windows_cross_compile_linux:
440448
name: windows_cross_compile_linux
441449
platform: windows
442-
# Build on windows with the node --platform set to linux
443450
build_flags:
451+
- "--build_tag_filters=-fix-windows,-no-bazelci-windows,-requires-runfiles"
452+
# Build on windows with the node --platform set to linux
444453
- "--platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64"
445454
build_targets:
446455
- "//internal/..."

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import %workspace%/common.bazelrc
55
# This lets us glob() up all the files inside the examples to make them inputs to tests
66
# To update these lines, just run `yarn bazel:update-deleted-packages`
77
# (Note, we cannot use common --deleted_packages because the bazel version command doesn't support it)
8-
build --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts/test,examples/jest/ts,examples/jest/ts/src,examples/kotlin,examples/kotlin/node_modules/@bazel/rollup,examples/kotlin/node_modules/@bazel/terser,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp
9-
query --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts/test,examples/jest/ts,examples/jest/ts/src,examples/kotlin,examples/kotlin/node_modules/@bazel/rollup,examples/kotlin/node_modules/@bazel/terser,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp
8+
build --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts/test,examples/jest/ts,examples/jest/ts/src,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp
9+
query --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/create-react-app,examples/cypress,examples/esbuild,examples/esbuild/src,examples/from_source,examples/jest,examples/jest/ts/test,examples/jest/ts,examples/jest/ts/src,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protobufjs,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/vue,examples/vue/src,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/concatjs_devserver,e2e/concatjs_devserver/genrule,e2e/concatjs_devserver/subpackage,e2e/concatjs_devserver_directory_artifacts,e2e/concatjs_devserver_directory_artifacts/genrule,e2e/concatjs_devserver_directory_artifacts/subpackage,e2e/coverage,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/nodejs_image,e2e/nodejs_image/foolib,e2e/nodejs_repository,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/typescript,e2e/webapp
1010

1111
# Mock versioning command to test the --stamp behavior
1212
build --workspace_status_command="echo BUILD_SCM_VERSION 1.2.3"

docs/Built-ins.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1771,7 +1771,7 @@ Defaults to `[]`
17711771

17721772
The name it will be imported by. Should match the "name" field in the package.json file.
17731773

1774-
If package_name == "$node_modules$" this indictates that this js_library target is one or more external npm
1774+
If package_name is “$node_modules$” or “$node_modules_dir$” this indictates that this js_library target is one or more external npm
17751775
packages in node_modules. This is a special case that used be covered by the internal only
17761776
`external_npm_package` attribute. NB: '$' is an illegal character
17771777
for npm packages names so this reserved name will not conflict with any valid package_name values

e2e/BUILD.bazel

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,21 @@ e2e_integration_test(
122122
},
123123
)
124124

125+
e2e_integration_test(
126+
name = "e2e_concatjs_devserver_directory_artifacts",
127+
bazel_commands = [
128+
"info",
129+
# enable runfiles explicitly so it is on for Windows since directory
130+
# artifacts requires runfiles
131+
"test ... --enable_runfiles",
132+
],
133+
npm_packages = {
134+
"//packages/concatjs:npm_package": "@bazel/concatjs",
135+
"//packages/protractor:npm_package": "@bazel/protractor",
136+
"//packages/typescript:npm_package": "@bazel/typescript",
137+
},
138+
)
139+
125140
[e2e_integration_test(
126141
name = "e2e_typescript_%s" % tsc_version.replace(".", "_"),
127142
npm_packages = {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import %workspace%/../../common.bazelrc
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Copyright 2017 The Bazel Authors. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
load("@build_bazel_rules_nodejs//:index.bzl", "js_library")
16+
load("@build_bazel_rules_nodejs//internal/npm_install:npm_umd_bundle.bzl", "npm_umd_bundle")
17+
load("@npm//@bazel/concatjs:index.bzl", "concatjs_devserver")
18+
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
19+
load("@npm//@bazel/typescript:index.bzl", "ts_project")
20+
21+
exports_files([
22+
"red-body-style.css",
23+
"tsconfig.json",
24+
"protractor.on-prepare.js",
25+
])
26+
27+
ts_project(
28+
name = "compile",
29+
srcs = [
30+
"app.ts",
31+
"app_e2e-spec.ts",
32+
],
33+
declaration = True,
34+
tsconfig = ":tsconfig.json",
35+
validate = False,
36+
deps = [
37+
"@npm//@types",
38+
"@npm//date-fns",
39+
"@npm//protractor",
40+
"@npm//rxjs",
41+
"@npm//typeorm",
42+
],
43+
)
44+
45+
js_library(
46+
name = "lib",
47+
named_module_srcs = [":compile"],
48+
deps = [":compile"],
49+
)
50+
51+
# typeorm is a special case for npm_umd_bundle as we need to excluded
52+
# the `react-native-sqlite-storage` dynamic require from the umd bundle
53+
npm_umd_bundle(
54+
name = "typeorm_umd",
55+
package_name = "typeorm",
56+
entry_point = {"@npm//:node_modules/typeorm": "browser/index.js"},
57+
excluded = ["react-native-sqlite-storage"],
58+
package = "@npm//typeorm",
59+
)
60+
61+
concatjs_devserver(
62+
name = "devserver",
63+
entry_module = "concatjs_devserver_directory_artifacts/app",
64+
scripts = [
65+
"@npm//date-fns:date-fns.umd.js",
66+
"@npm//rxjs:rxjs.umd.js",
67+
":typeorm.umd.js",
68+
],
69+
# We'll collect all the devmode JS sources from these TypeScript libraries
70+
deps = [":lib"],
71+
)
72+
73+
protractor_web_test_suite(
74+
name = "devserver_test",
75+
on_prepare = ":protractor.on-prepare.js",
76+
protractor_entry_point = {"@npm//:node_modules/protractor": "bin/protractor"},
77+
server = ":devserver",
78+
deps = [":lib"],
79+
)
80+
81+
# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test
82+
sh_test(
83+
name = "dummy_test",
84+
srcs = ["dummy_test.sh"],
85+
)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Copyright 2017 The Bazel Authors. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
workspace(
16+
name = "concatjs_devserver_directory_artifacts",
17+
managed_directories = {"@npm": ["node_modules"]},
18+
)
19+
20+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
21+
22+
http_archive(
23+
name = "build_bazel_rules_nodejs",
24+
sha256 = "4a5d654a4ccd4a4c24eca5d319d85a88a650edf119601550c95bf400c8cc897e",
25+
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/3.5.1/rules_nodejs-3.5.1.tar.gz"],
26+
)
27+
28+
load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install")
29+
30+
yarn_install(
31+
name = "npm",
32+
exports_directories_only = True,
33+
package_json = "//:package.json",
34+
yarn_lock = "//:yarn.lock",
35+
)
36+
37+
load("@npm//@bazel/protractor:package.bzl", "npm_bazel_protractor_dependencies")
38+
39+
npm_bazel_protractor_dependencies()
40+
41+
# Setup the rules_webtesting toolchain
42+
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
43+
44+
web_test_repositories()
45+
46+
load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.2.bzl", "browser_repositories")
47+
48+
browser_repositories(
49+
chromium = True,
50+
firefox = True,
51+
)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/// <amd-module name="concatjs_devserver_directory_artifacts/app"/>
2+
3+
import {format} from 'date-fns';
4+
import {of} from 'rxjs';
5+
import {Column, Entity, PrimaryGeneratedColumn} from 'typeorm';
6+
7+
function appendText(text: string, className: string) {
8+
const el: HTMLDivElement = document.createElement('div');
9+
el.innerText = text;
10+
el.className = className;
11+
document.body.appendChild(el);
12+
}
13+
14+
function testDateFns() {
15+
const date: string = format(new Date(2019, 4, 7), 'MMMM D, YYYY');
16+
appendText(`Hello, TypeScript today is ${date}`, 'ts1');
17+
}
18+
19+
20+
@Entity()
21+
export class User {
22+
@PrimaryGeneratedColumn()
23+
id: number;
24+
@Column()
25+
firstName: string;
26+
@Column()
27+
lastName: string;
28+
@Column()
29+
isActive: boolean;
30+
}
31+
32+
function testBrowserEntryPoint() {
33+
// this script will throw if the browser entryPoint in typeorm wasn't resolved correctly
34+
const user = new User();
35+
user.firstName = 'foo';
36+
appendText(`firstname: ${user.firstName}`, 'entrypoint-browser');
37+
}
38+
39+
function testModuleEntryPoint() {
40+
// rxjs uses the module entrypoint to resolve to some import/export
41+
of('rxjs works with modules!').subscribe(value => appendText(String(value), 'entrypoint-module'))
42+
}
43+
44+
testDateFns();
45+
testBrowserEntryPoint();
46+
testModuleEntryPoint();

0 commit comments

Comments
 (0)