mirror of
https://github.com/ankitects/anki.git
synced 2025-09-21 23:42:23 -04:00
vendor Svelte rules
The separate repo made it difficult to update the rules, and made things more complicated than they needed to be.
This commit is contained in:
parent
58a154c58f
commit
ea7611d8cc
11 changed files with 205 additions and 59 deletions
3
defs.bzl
3
defs.bzl
|
@ -7,7 +7,6 @@ load(":protobuf.bzl", "setup_protobuf_binary")
|
||||||
load("//rslib:clang_format.bzl", "setup_clang_format")
|
load("//rslib:clang_format.bzl", "setup_clang_format")
|
||||||
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install")
|
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install")
|
||||||
load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")
|
load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")
|
||||||
load("@build_bazel_rules_svelte//:defs.bzl", "rules_svelte_dependencies")
|
|
||||||
load("@com_github_ali5h_rules_pip//:defs.bzl", "pip_import")
|
load("@com_github_ali5h_rules_pip//:defs.bzl", "pip_import")
|
||||||
load("//pip/pyqt5:defs.bzl", "install_pyqt5")
|
load("//pip/pyqt5:defs.bzl", "install_pyqt5")
|
||||||
|
|
||||||
|
@ -53,5 +52,3 @@ def setup_deps():
|
||||||
)
|
)
|
||||||
|
|
||||||
sass_repositories()
|
sass_repositories()
|
||||||
|
|
||||||
rules_svelte_dependencies()
|
|
||||||
|
|
18
repos.bzl
18
repos.bzl
|
@ -109,24 +109,6 @@ def register_repos():
|
||||||
sha256 = "224ae14b8d2166b3ab4c5fa9b2ae1828f30620ac628dc152e6c0859c7853bb97",
|
sha256 = "224ae14b8d2166b3ab4c5fa9b2ae1828f30620ac628dc152e6c0859c7853bb97",
|
||||||
)
|
)
|
||||||
|
|
||||||
# svelte
|
|
||||||
##########
|
|
||||||
|
|
||||||
# native.local_repository(
|
|
||||||
# name = "build_bazel_rules_svelte",
|
|
||||||
# path = "../rules_svelte",
|
|
||||||
# )
|
|
||||||
|
|
||||||
maybe(
|
|
||||||
http_archive,
|
|
||||||
name = "build_bazel_rules_svelte",
|
|
||||||
strip_prefix = "rules_svelte-anki-2021-02-06",
|
|
||||||
urls = [
|
|
||||||
"https://github.com/ankitects/rules_svelte/archive/anki-2021-02-06.tar.gz",
|
|
||||||
],
|
|
||||||
sha256 = "f77a96ae5a354f8c3c24045f3bee8521bfe56224292d4f71184a3382784640eb",
|
|
||||||
)
|
|
||||||
|
|
||||||
# translations
|
# translations
|
||||||
################
|
################
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
load("@build_bazel_rules_svelte//:defs.bzl", "svelte")
|
|
||||||
load("@npm//@bazel/typescript:index.bzl", "ts_library")
|
load("@npm//@bazel/typescript:index.bzl", "ts_library")
|
||||||
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
|
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
|
||||||
load("//ts:prettier.bzl", "prettier_test")
|
load("//ts:prettier.bzl", "prettier_test")
|
||||||
load("//ts:eslint.bzl", "eslint_test")
|
load("//ts:eslint.bzl", "eslint_test")
|
||||||
load("//ts:svelte.bzl", "svelte_check")
|
load("//ts/svelte:svelte.bzl", "svelte", "svelte_check")
|
||||||
|
|
||||||
svelte(
|
svelte(
|
||||||
name = "CongratsPage",
|
name = "CongratsPage",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
load("@npm//@bazel/typescript:index.bzl", "ts_library")
|
load("@npm//@bazel/typescript:index.bzl", "ts_library")
|
||||||
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
|
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
|
||||||
load("//ts:svelte.bzl", "compile_svelte", "svelte_check")
|
load("//ts/svelte:svelte.bzl", "compile_svelte", "svelte_check")
|
||||||
load("//ts:prettier.bzl", "prettier_test")
|
load("//ts:prettier.bzl", "prettier_test")
|
||||||
load("//ts:eslint.bzl", "eslint_test")
|
load("//ts:eslint.bzl", "eslint_test")
|
||||||
load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
|
load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
|
||||||
|
|
|
@ -42,8 +42,9 @@
|
||||||
"rollup-plugin-terser": "^7.0.2",
|
"rollup-plugin-terser": "^7.0.2",
|
||||||
"sass": "^1.32.6",
|
"sass": "^1.32.6",
|
||||||
"semver": "^7.3.4",
|
"semver": "^7.3.4",
|
||||||
"svelte": "^3.28.0",
|
"svelte": "=3.24.1",
|
||||||
"svelte-check": "^1.0.61",
|
"svelte-check": "^1.0.61",
|
||||||
|
"svelte-preprocess": "^4.6.9",
|
||||||
"svelte2tsx": "^0.1.133",
|
"svelte2tsx": "^0.1.133",
|
||||||
"tmp": "^0.2.1",
|
"tmp": "^0.2.1",
|
||||||
"tslib": "^2.0.3",
|
"tslib": "^2.0.3",
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
load("@build_bazel_rules_svelte//:defs.bzl", "svelte")
|
|
||||||
load("@npm//svelte-check:index.bzl", _svelte_check = "svelte_check_test")
|
|
||||||
|
|
||||||
def compile_svelte(name, srcs):
|
|
||||||
for src in srcs:
|
|
||||||
svelte(
|
|
||||||
name = src.replace(".svelte", ""),
|
|
||||||
entry_point = src,
|
|
||||||
)
|
|
||||||
|
|
||||||
native.filegroup(
|
|
||||||
name = name,
|
|
||||||
srcs = srcs,
|
|
||||||
)
|
|
||||||
|
|
||||||
def svelte_check(name = "svelte_check", srcs = []):
|
|
||||||
_svelte_check(
|
|
||||||
name = name,
|
|
||||||
args = [
|
|
||||||
"--workspace",
|
|
||||||
native.package_name(),
|
|
||||||
],
|
|
||||||
data = [
|
|
||||||
"//ts:tsconfig.json",
|
|
||||||
"//ts/lib",
|
|
||||||
"//ts/lib:backend_proto",
|
|
||||||
"@npm//sass"
|
|
||||||
] + srcs,
|
|
||||||
link_workspace_root = True,
|
|
||||||
)
|
|
24
ts/svelte/BUILD.bazel
Normal file
24
ts/svelte/BUILD.bazel
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
|
||||||
|
|
||||||
|
nodejs_binary(
|
||||||
|
name = "typescript",
|
||||||
|
data = [
|
||||||
|
"@npm//typescript",
|
||||||
|
],
|
||||||
|
entry_point = "@npm//:node_modules/typescript/lib/tsc.js",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
nodejs_binary(
|
||||||
|
name = "svelte",
|
||||||
|
data = [
|
||||||
|
":svelte.js",
|
||||||
|
"@npm//sass",
|
||||||
|
"@npm//svelte",
|
||||||
|
"@npm//svelte-preprocess",
|
||||||
|
"@npm//svelte2tsx",
|
||||||
|
],
|
||||||
|
entry_point = ":svelte.js",
|
||||||
|
templated_args = ["--bazel_patch_module_resolver"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
4
ts/svelte/README.md
Normal file
4
ts/svelte/README.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Originally forked from https://github.com/thelgevold/rules_svelte (MIT) into
|
||||||
|
https://github.com/ankitects/rules_svelte, and modified to generate TypeScript
|
||||||
|
definitions in addition to mjs files. The parts we need are now integrated into
|
||||||
|
this repo, so we can modify them more easily.
|
103
ts/svelte/svelte.bzl
Normal file
103
ts/svelte/svelte.bzl
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
load("@npm//svelte-check:index.bzl", _svelte_check = "svelte_check_test")
|
||||||
|
|
||||||
|
"Implementation of the svelte rule"
|
||||||
|
|
||||||
|
load("@build_bazel_rules_nodejs//:providers.bzl", "declaration_info")
|
||||||
|
|
||||||
|
SvelteFilesInfo = provider("transitive_sources")
|
||||||
|
|
||||||
|
def get_transitive_srcs(srcs, deps):
|
||||||
|
return depset(
|
||||||
|
srcs,
|
||||||
|
transitive = [dep[SvelteFilesInfo].transitive_sources for dep in deps],
|
||||||
|
)
|
||||||
|
|
||||||
|
def _svelte(ctx):
|
||||||
|
base = ctx.attr.name + ".svelte"
|
||||||
|
temp = ctx.actions.declare_directory(base + ".temp")
|
||||||
|
temptsx = temp.path + "/" + base + ".tsx"
|
||||||
|
ctx.actions.run_shell(
|
||||||
|
mnemonic = "Svelte",
|
||||||
|
command = """\
|
||||||
|
{svelte} {input} {output_js} {temp} && \
|
||||||
|
{tsc} {tsc_args} {temptsx} {shims} && \
|
||||||
|
mv {temp}/{base}.d.ts {output_def} && \
|
||||||
|
rm {temptsx}""".format(
|
||||||
|
svelte = ctx.executable._svelte.path,
|
||||||
|
input = ctx.file.entry_point.path,
|
||||||
|
output_js = ctx.outputs.build.path,
|
||||||
|
tsc = ctx.executable._typescript.path,
|
||||||
|
output_def = ctx.outputs.buildDef.path,
|
||||||
|
temp = temp.path,
|
||||||
|
temptsx = temptsx,
|
||||||
|
base = base,
|
||||||
|
tsc_args = "--jsx preserve --emitDeclarationOnly --declaration --skipLibCheck",
|
||||||
|
shims = " ".join([f.path for f in ctx.files._shims]),
|
||||||
|
),
|
||||||
|
outputs = [ctx.outputs.build, ctx.outputs.buildDef, temp],
|
||||||
|
inputs = [ctx.file.entry_point] + ctx.files._shims,
|
||||||
|
tools = [ctx.executable._svelte, ctx.executable._typescript],
|
||||||
|
)
|
||||||
|
|
||||||
|
trans_srcs = get_transitive_srcs(ctx.files.srcs + [ctx.outputs.build, ctx.outputs.buildDef], ctx.attr.deps)
|
||||||
|
|
||||||
|
return [
|
||||||
|
declaration_info(depset([ctx.outputs.buildDef]), deps = [ctx.attr._shims]),
|
||||||
|
SvelteFilesInfo(transitive_sources = trans_srcs),
|
||||||
|
DefaultInfo(files = trans_srcs),
|
||||||
|
]
|
||||||
|
|
||||||
|
svelte = rule(
|
||||||
|
implementation = _svelte,
|
||||||
|
attrs = {
|
||||||
|
"entry_point": attr.label(allow_single_file = True),
|
||||||
|
"deps": attr.label_list(),
|
||||||
|
"srcs": attr.label_list(allow_files = True),
|
||||||
|
"_svelte": attr.label(
|
||||||
|
default = Label("//ts/svelte:svelte"),
|
||||||
|
executable = True,
|
||||||
|
cfg = "host",
|
||||||
|
),
|
||||||
|
"_typescript": attr.label(
|
||||||
|
default = Label("//ts/svelte:typescript"),
|
||||||
|
executable = True,
|
||||||
|
cfg = "host",
|
||||||
|
),
|
||||||
|
"_shims": attr.label(
|
||||||
|
default = Label("@npm//svelte2tsx:svelte2tsx__typings"),
|
||||||
|
allow_files = True,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
outputs = {
|
||||||
|
"build": "%{name}.svelte.mjs",
|
||||||
|
"buildDef": "%{name}.svelte.d.ts",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
def compile_svelte(name, srcs):
|
||||||
|
for src in srcs:
|
||||||
|
svelte(
|
||||||
|
name = src.replace(".svelte", ""),
|
||||||
|
entry_point = src,
|
||||||
|
)
|
||||||
|
|
||||||
|
native.filegroup(
|
||||||
|
name = name,
|
||||||
|
srcs = srcs,
|
||||||
|
)
|
||||||
|
|
||||||
|
def svelte_check(name = "svelte_check", srcs = []):
|
||||||
|
_svelte_check(
|
||||||
|
name = name,
|
||||||
|
args = [
|
||||||
|
"--workspace",
|
||||||
|
native.package_name(),
|
||||||
|
],
|
||||||
|
data = [
|
||||||
|
"//ts:tsconfig.json",
|
||||||
|
"//ts/lib",
|
||||||
|
"//ts/lib:backend_proto",
|
||||||
|
"@npm//sass",
|
||||||
|
] + srcs,
|
||||||
|
link_workspace_root = True,
|
||||||
|
)
|
56
ts/svelte/svelte.js
Normal file
56
ts/svelte/svelte.js
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
const fs = require("fs");
|
||||||
|
const process = require("process");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const input = process.argv[2];
|
||||||
|
const outputJs = process.argv[3];
|
||||||
|
const temp = process.argv[4];
|
||||||
|
|
||||||
|
|
||||||
|
const svelte = require("svelte/compiler");
|
||||||
|
|
||||||
|
const source = fs.readFileSync(input, "utf8");
|
||||||
|
|
||||||
|
const preprocessOptions = require("svelte-preprocess")({});
|
||||||
|
preprocessOptions.filename = input;
|
||||||
|
|
||||||
|
const svelte2tsx = require("svelte2tsx");
|
||||||
|
|
||||||
|
let tsoutput = svelte2tsx(source, {
|
||||||
|
filename: input,
|
||||||
|
strictMode: true,
|
||||||
|
isTsFile: true,
|
||||||
|
});
|
||||||
|
let codeLines = tsoutput.code.split("\n");
|
||||||
|
// replace the "///<reference types="svelte" />" with a line
|
||||||
|
// turning off checking, as we'll use svelte-check for that
|
||||||
|
codeLines[0] = "// @ts-nocheck";
|
||||||
|
const outputBase = path.basename(outputJs.replace(".mjs", ".tsx"));
|
||||||
|
const outputTs = path.join(temp, outputBase);
|
||||||
|
fs.writeFileSync(outputTs, codeLines.join("\n"));
|
||||||
|
|
||||||
|
svelte.preprocess(source, preprocessOptions).then(
|
||||||
|
(processed) => {
|
||||||
|
let result;
|
||||||
|
try {
|
||||||
|
result = svelte.compile(processed.toString(), {
|
||||||
|
format: "esm",
|
||||||
|
generate: "dom",
|
||||||
|
filename: outputJs,
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.log(`compile failed: ${err}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (result.warnings.length > 0) {
|
||||||
|
console.log(`warnings during compile: ${result.warnings}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let code = result.js.code;
|
||||||
|
fs.writeFileSync(outputJs, code);
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
console.log(`preprocess failed: ${error}`);
|
||||||
|
}
|
||||||
|
);
|
18
ts/yarn.lock
18
ts/yarn.lock
|
@ -2350,6 +2350,16 @@ svelte-preprocess@^4.0.0:
|
||||||
detect-indent "^6.0.0"
|
detect-indent "^6.0.0"
|
||||||
strip-indent "^3.0.0"
|
strip-indent "^3.0.0"
|
||||||
|
|
||||||
|
svelte-preprocess@^4.6.9:
|
||||||
|
version "4.6.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.6.9.tgz#073d923eb351b98b6c6a454ba5feee981cd9dbf5"
|
||||||
|
integrity sha512-SROWH0rB0DJ+0Ii264cprmNu/NJyZacs5wFD71ya93Cg/oA2lKHgQm4F6j0EWA4ktFMzeuJJm/eX6fka39hEHA==
|
||||||
|
dependencies:
|
||||||
|
"@types/pug" "^2.0.4"
|
||||||
|
"@types/sass" "^1.16.0"
|
||||||
|
detect-indent "^6.0.0"
|
||||||
|
strip-indent "^3.0.0"
|
||||||
|
|
||||||
svelte2tsx@^0.1.133:
|
svelte2tsx@^0.1.133:
|
||||||
version "0.1.166"
|
version "0.1.166"
|
||||||
resolved "https://registry.yarnpkg.com/svelte2tsx/-/svelte2tsx-0.1.166.tgz#0424747e13f1babb40c7f3637f01415398ddab18"
|
resolved "https://registry.yarnpkg.com/svelte2tsx/-/svelte2tsx-0.1.166.tgz#0424747e13f1babb40c7f3637f01415398ddab18"
|
||||||
|
@ -2358,10 +2368,10 @@ svelte2tsx@^0.1.133:
|
||||||
dedent-js "^1.0.1"
|
dedent-js "^1.0.1"
|
||||||
pascal-case "^3.1.1"
|
pascal-case "^3.1.1"
|
||||||
|
|
||||||
svelte@^3.28.0:
|
svelte@=3.24.1:
|
||||||
version "3.32.1"
|
version "3.24.1"
|
||||||
resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.32.1.tgz#c4b6e35517d0ed77e652cc8964ef660afa2f70f3"
|
resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.24.1.tgz#aca364937dd1df27fe131e2a4c234acb6061db4b"
|
||||||
integrity sha512-j1KmD2ZOU0RGq1/STDXjwfh0/eJ/Deh2NXyuz1bpR9eOcz9yImn4CGxXdbSAN7cMTm9a7IyPUIbuBCzu/pXK0g==
|
integrity sha512-OX/IBVUJSFo1rnznXdwf9rv6LReJ3qQ0PwRjj76vfUWyTfbHbR9OXqJBnUrpjyis2dwYcbT2Zm1DFjOOF1ZbbQ==
|
||||||
|
|
||||||
table@^5.2.3:
|
table@^5.2.3:
|
||||||
version "5.4.6"
|
version "5.4.6"
|
||||||
|
|
Loading…
Reference in a new issue