Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ config_setting(
visibility = ["//visibility:public"],
)

# This can use `ts_config` rule because the file list is empty.
ts_config(
name = "tsconfig",
src = "tsconfig.json",
visibility = [":__subpackages__"],
visibility = ["//visibility:public"],
)

write_source_files(
Expand All @@ -31,6 +32,7 @@ write_source_files(
"//app/rust-ffi:write_wasm_dist",
"//app/ydoc-shared:write_ast_codegen",
"//app/gui:write_icon_metadata",
"//app/gui:write_tsconfigs",
"//app/table-expression:write_parser_codegen",
],
)
Expand Down
25 changes: 17 additions & 8 deletions app/common/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,26 +1,35 @@
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
load("@aspect_rules_ts//ts:defs.bzl", "ts_config", "ts_project")
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")
load("@npm//:defs.bzl", "npm_link_all_packages", "npm_link_targets")

npm_link_all_packages(name = "node_modules")

ts_config(
name = "tsconfig",
src = "tsconfig.json",
deps = ["//:tsconfig"],
)

ts_project(
name = "tsc",
srcs = glob([
"src/**/*.ts",
]) + ["src/text/english.json"],
allow_js = True,
composite = True,
declaration = True,
no_emit = False,
extends = "//:tsconfig",
out_dir = "dist",
resolve_json_module = True,
root_dir = "src",
tsconfig = ":tsconfig",
tsconfig = {
"compilerOptions": {
"lib": [
"DOM",
"es2023",
],
"composite": True,
"allowJs": True,
"checkJs": True,
"noEmit": False,
"resolveJsonModule": True,
},
},
validate = select({
"@platforms//os:windows": False,
"//conditions:default": True,
Expand Down
27 changes: 16 additions & 11 deletions app/electron-client/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,33 +1,38 @@
load("@aspect_rules_esbuild//esbuild:defs.bzl", "esbuild")
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
load("@aspect_rules_ts//ts:defs.bzl", "ts_config", "ts_project")
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")
load("@npm//:defs.bzl", "npm_link_all_packages", "npm_link_targets")
load("@npm//app/electron-client:electron-builder/package_json.bzl", electron_builder_bin = "bin")
load("//internal:stampFiles.bzl", "stamp_files")

npm_link_all_packages(name = "node_modules")

ts_config(
name = "tsconfig",
src = "tsconfig.json",
visibility = [":__subpackages__"],
deps = ["//:tsconfig"],
)

ts_project(
name = "tsc",
srcs = glob(["src/*.ts"]),
srcs = glob([
"src/*.ts",
"tasks/*.ts",
"tests/*.ts",
"*.ts",
]),
composite = True,
declaration = True,
resolve_json_module = True,
source_map = True,
tsconfig = "//app/project-manager-shim:tsconfig",
extends = "//:tsconfig",
tsconfig = {
"compilerOptions": {
"esModuleInterop": True,
"types": ["node"],
"paths": { "@/*": ["./src/*"] }
}
},
validate = select({
"@platforms//os:windows": False,
"//conditions:default": True,
}),
visibility = ["//visibility:public"],
deps = ["//:tsconfig"] + npm_link_targets(),
deps = npm_link_targets(),
)

npm_package(
Expand Down
162 changes: 123 additions & 39 deletions app/gui/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,69 +1,142 @@
load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files")
load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_run_binary")
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
load("@aspect_rules_ts//ts:defs.bzl", "ts_config")
load("@aspect_rules_ts//ts:defs.bzl", "ts_config", "ts_project")
load("//:bazel_scripts/ts_config.bzl", "write_tsconfig")

load("@env//:defs.bzl", "getenv")
load("@npm//:defs.bzl", "npm_link_all_packages", "npm_link_targets")
load("@npm//app/gui:vite/package_json.bzl", vite_bin = "bin")
load("//internal:stampFiles.bzl", "stamp_files")

npm_link_all_packages(name = "node_modules")


ICON_GENERATED_DIR = "src/project-view/util/iconMetadata"
TESTS_PATTERN_BASE = "src/**/__tests__/*"
VITEST_TEST_FILES = glob([TESTS_PATTERN_BASE + ".ts"])
PUBLIC_FILES = glob(["public/**"])
APP_TSCONFIG_FILES = glob(
[
"src/**",
"project-manager-shim-middleware/**",
] + [
"env.d.ts",
"lib0-ext.d.ts",
],
[ICON_GENERATED_DIR + "/**", TESTS_PATTERN_BASE],
)

PACKAGE_SRCS = [
"//:tsconfig",
":tsconfig",
":tsconfig_app",
":tsconfig_node",
":tsconfig_app_vitest",
":icon_metadata",
"vite.config.ts",
"tailwind.config.ts",
"package.json",
"index.html",
] + APP_TSCONFIG_FILES + PUBLIC_FILES + npm_link_targets()




# This can use `ts_config` rule because the file list is empty.
ts_config(
name = "tsconfig",
src = "tsconfig.json",
deps = ["//:tsconfig"],
)

ts_config(
write_tsconfig(
name = "tsconfig_node",
src = "tsconfig.node.json",
deps = [":tsconfig"],
files = glob([
"integration-test/**/*",
"project-manager-shim-middleware/*.ts",
]) + [
"env.d.ts",
"eslint.config.js",
"playwright.config.ts",
"tailwind.config.ts",
"vite.config.ts",
"vite.test.config.ts",
"vitest.config.ts",

# Extra app project files that are directly imported by integration tests
"src/dashboard/utilities/string.ts",
"src/project-view/util/shortcuts.ts",
"src/project-view/components/GraphEditor/widgets/WidgetFunction/consts.ts",
"src/project-view/util/ast/abstract.ts",
"src/project-view/util/ast/match.ts",
"src/providers/featureFlags.ts",

# Transitive dependencies of above files
"src/project-view/util/projectPath.ts", # WidgetFunction/consts.ts
"src/project-view/util/qualifiedName.ts", # abstract.ts, projectPath.ts
"src/dashboard/utilities/write.ts", # featureFlags.ts
"src/utils/zustand.ts", # featureFlags.ts
],
out = "tsconfig.node.json",
extends = ":tsconfig",
config = {
"compilerOptions": {
"baseUrl": ".",
"module": "ESNext",
"verbatimModuleSyntax": True,
"types": ["node", "vitest/importMeta"],
},
}
)

ts_config(

write_tsconfig(
name = "tsconfig_app",
src = "tsconfig.app.json",
deps = [":tsconfig"],
files = APP_TSCONFIG_FILES,
out = "tsconfig.app.json",
extends = ":tsconfig",
config = {
"compilerOptions": {
"composite": True,
"allowImportingTsExtensions": True,
"types": ["vitest/importMeta"],
}
}
)

ts_config(
name = "tsconfig_scripts",
src = "tsconfig.scripts.json",
ts_project(
name = "tsc_app",
srcs = APP_TSCONFIG_FILES,
composite = True,
declaration = True,
# out = "tsconfig.app.json",
extends = ":tsconfig",
tsconfig = {
"compilerOptions": {
"composite": True,
"allowImportingTsExtensions": True,
"types": ["vitest/importMeta"],
}
}
)

ts_config(

write_tsconfig(
name = "tsconfig_app_vitest",
src = "tsconfig.app.vitest.json",
deps = [":tsconfig_app"],
files = VITEST_TEST_FILES,
out = "tsconfig.app.vitest.json",
extends = ":tsconfig_app",
config = {
"compilerOptions": {
"types": ["node", "vitest/importMeta", "@testing-library/jest-dom"]
}
}
)

ICON_GENERATED_DIR = "src/project-view/util/iconMetadata"

SRCS = [
"//:tsconfig",
":tsconfig",
":tsconfig_app",
":tsconfig_node",
":tsconfig_app_vitest",
":tsconfig_scripts",
":icon_metadata",
"vite.config.ts",
"tailwind.config.ts",
"package.json",
"index.html",
] + glob(
[
"src/**",
"public/**",
"project-manager-shim-middleware/**",
],
[ICON_GENERATED_DIR + "/**"],
) + npm_link_targets()

npm_package(
name = "pkg",
srcs = SRCS,
srcs = PACKAGE_SRCS,
visibility = ["//visibility:public"],
)

Expand Down Expand Up @@ -96,7 +169,7 @@ _vite_env = select({

vite_bin.vite(
name = "dist",
srcs = SRCS + ENV_FILES,
srcs = PACKAGE_SRCS + ENV_FILES,
args = _vite_args,
chdir = package_name(),
env = _vite_env,
Expand All @@ -121,7 +194,7 @@ vite_bin.vite_binary(
vite_bin.vite_binary(
name = "dev_server",
chdir = package_name(),
data = SRCS,
data = PACKAGE_SRCS,
# Under ibazel, let vite hot-reload changed files rather than restart it
tags = ["ibazel_notify_changes"],
)
Expand Down Expand Up @@ -163,3 +236,14 @@ write_source_files(
suggested_update_target = "//:write_all",
visibility = ["//visibility:public"],
)

write_source_files(
name = "write_tsconfigs",
files = {
'tsconfig.app.json': ":tsconfig_app",
'tsconfig.app.vitest.json': ":tsconfig_app_vitest",
'tsconfig.node.json': ":tsconfig_node",
},
suggested_update_target = "//:write_all",
visibility = ["//visibility:public"],
)
2 changes: 1 addition & 1 deletion app/gui/src/project-view/components/GraphEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import GraphMouse from '@/components/GraphMouse.vue'
import PopoverRootProvider from '@/components/PopoverRootProvider.vue'
import SceneScroller from '@/components/SceneScroller.vue'
import TopBar from '@/components/TopBar.vue'
import { builtinWidgets } from '@/components/widgets'
import * as builtinWidgets from '@/components/widgets/index'
import { useDoubleClick } from '@/composables/doubleClick'
import { unrefElement, useEventConditional } from '@/composables/events'
import type { PlacementStrategy } from '@/composables/nodeCreation'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
import CodeMirrorWidgetBase from '@/components/GraphEditor/CodeMirrorWidgetBase.vue'
import NodeWidget from '@/components/GraphEditor/NodeWidget.vue'
import { Ast } from '@/util/ast'
import { useLanguageSupport } from '@/util/codemirror/language'
import { useLanguageSupport } from '@/util/codemirror/language/index'
import { Ok } from 'enso-common/src/utilities/data/result'
import { computed, ref, useTemplateRef } from 'vue'

Expand Down
30 changes: 27 additions & 3 deletions app/gui/src/project-view/components/widgets/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
export const builtinWidgets = import.meta.glob('@/components/GraphEditor/widgets/*.vue', {
eager: true,
})
export {default as WidgetAnyToTarget} from '@/components/GraphEditor/widgets/WidgetAnyToTarget.vue'
export {default as WidgetApplication} from '@/components/GraphEditor/widgets/WidgetApplication.vue'
export {default as WidgetArgumentName} from '@/components/GraphEditor/widgets/WidgetArgumentName.vue'
export {default as WidgetBlank} from '@/components/GraphEditor/widgets/WidgetBlank.vue'
export {default as WidgetCheckbox} from '@/components/GraphEditor/widgets/WidgetCheckbox.vue'
export {default as WidgetEnsoExpression} from '@/components/GraphEditor/widgets/WidgetEnsoExpression.vue'
export {default as WidgetFileBrowser} from '@/components/GraphEditor/widgets/WidgetFileBrowser.vue'
export {default as WidgetFunctionName} from '@/components/GraphEditor/widgets/WidgetFunctionName.vue'
export {default as WidgetFunction} from '@/components/GraphEditor/widgets/WidgetFunction.vue'
export {default as WidgetGroup} from '@/components/GraphEditor/widgets/WidgetGroup.vue'
export {default as WidgetHierarchy} from '@/components/GraphEditor/widgets/WidgetHierarchy.vue'
export {default as WidgetIcon} from '@/components/GraphEditor/widgets/WidgetIcon.vue'
export {default as WidgetMultiSelection} from '@/components/GraphEditor/widgets/WidgetMultiSelection.vue'
export {default as WidgetNumber} from '@/components/GraphEditor/widgets/WidgetNumber.vue'
export {default as WidgetPort} from '@/components/GraphEditor/widgets/WidgetPort.vue'
export {default as WidgetSelectionArrow} from '@/components/GraphEditor/widgets/WidgetSelectionArrow.vue'
export {default as WidgetSelection} from '@/components/GraphEditor/widgets/WidgetSelection.vue'
export {default as WidgetSelfAccessChain} from '@/components/GraphEditor/widgets/WidgetSelfAccessChain.vue'
export {default as WidgetTableEditor} from '@/components/GraphEditor/widgets/WidgetTableEditor.vue'
export {default as WidgetTableMethod} from '@/components/GraphEditor/widgets/WidgetTableMethod.vue'
export {default as WidgetText} from '@/components/GraphEditor/widgets/WidgetText.vue'
export {default as WidgetToken} from '@/components/GraphEditor/widgets/WidgetToken.vue'
export {default as WidgetTopLevelArgument} from '@/components/GraphEditor/widgets/WidgetTopLevelArgument.vue'
export {default as WidgetTypeCastPort} from '@/components/GraphEditor/widgets/WidgetTypeCastPort.vue'
export {default as WidgetTypeCast} from '@/components/GraphEditor/widgets/WidgetTypeCast.vue'
export {default as WidgetTypeExpression} from '@/components/GraphEditor/widgets/WidgetTypeExpression.vue'
export {default as WidgetVector} from '@/components/GraphEditor/widgets/WidgetVector.vue'
4 changes: 2 additions & 2 deletions app/gui/src/project-view/util/ast/match.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { assert, assertDefined } from '@/util/assert'
import { Ast } from '@/util/ast'
import * as Ast from '@/util/ast/abstract'
import { zipLongest } from 'enso-common/src/utilities/data/iter'
import { assert, assertDefined } from 'ydoc-shared/util/assert'

/**
* A pattern is an AST object with "placeholder" expressions.
Expand Down
2 changes: 1 addition & 1 deletion app/gui/src/project-view/util/shortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { assert } from '@/util/assert'
import { assert } from 'ydoc-shared/util/assert'
import { unsafeKeys } from 'enso-common/src/utilities/data/object'
import { isOnMacOS } from 'enso-common/src/utilities/detect'

Expand Down
Loading
Loading