mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-07 03:00:29 +00:00
Remove files committed by mistake
`git add -A` over lib/ and docs/ swept in work that was already untracked in the working tree before this branch started: lib/crates/, and three docs files. None of it belongs to this change. Removed from the index only, so the files stay on disk as the untracked work they were. They net out of the branch diff entirely. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7d48c88d61
commit
e1a1ee6e05
369 changed files with 0 additions and 23069 deletions
|
|
@ -1,63 +0,0 @@
|
|||
---
|
||||
id: dec-redact-at-source
|
||||
status: proposed
|
||||
owners: [bryan]
|
||||
paths:
|
||||
- lib/crates/fabro-redact
|
||||
- lib/crates/fabro-workflow/src/event
|
||||
- lib/crates/fabro-server/src/server/handler/events.rs
|
||||
---
|
||||
|
||||
# Redact at the source
|
||||
|
||||
Secrets are made safe where they are known, enforced once where data enters
|
||||
shared storage, and trusted everywhere else.
|
||||
|
||||
## Context
|
||||
|
||||
Registry-based redaction (exact replacement of known secret values) is only
|
||||
possible in the process that loaded the run's secrets — the worker, while
|
||||
the run executes. It cannot be applied ex-post facto. Pattern-based
|
||||
redaction (entropy + gitleaks) can run anywhere but is heuristic. As a
|
||||
multi-tenant SaaS, the server never holds tenant secrets in plaintext, and
|
||||
unredacted data at rest is an incident.
|
||||
|
||||
## Decision
|
||||
|
||||
1. **Redact at the source.** The process that knows a secret makes every
|
||||
emission safe before it crosses a boundary — wire, disk, or log. The
|
||||
worker applies registry + pattern redaction to events and command
|
||||
output. Errors never carry raw secrets or raw process output in their
|
||||
displayable text (raw material lives behind redacting accessors, e.g.
|
||||
`ExecOutputTail`); credential-bearing URLs travel as `DisplaySafeUrl`.
|
||||
Log sites format these already-safe values.
|
||||
2. **Enforce once at ingest.** The server applies pattern-based redaction —
|
||||
the only kind it can perform — when events enter shared storage.
|
||||
Everything at rest is redacted.
|
||||
3. **Trust everywhere else.** No redaction on read paths or log output.
|
||||
One backstop: a registry scrub on the worker's tracing subscriber,
|
||||
because third-party crates also log, and worker logs persist
|
||||
server-side.
|
||||
|
||||
## Alternatives
|
||||
|
||||
- Redact at read boundaries — rejected: no registry there, raw data at
|
||||
rest is unacceptable, and the mixed model already left the list-events
|
||||
endpoints returning raw payloads.
|
||||
- Blanket pattern scrub of all log lines — rejected: heuristic cost for
|
||||
false confidence.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Read-side re-redaction (SSE, event detail, CLI) is deleted, along with
|
||||
the `redacted` flag on event detail responses.
|
||||
- `SecretRedactor` is populated from the worker's vault at run start.
|
||||
- A value that slips both source and ingest passes is persisted
|
||||
permanently; pattern rules improve go-forward only. Inherent to the
|
||||
server never knowing tenant secrets — accepted.
|
||||
|
||||
## Guidance
|
||||
|
||||
New output channels (event types, logs, artifacts, API responses) redact in
|
||||
the producing process. Never add read-time redaction to compensate for a
|
||||
producer that doesn't.
|
||||
|
|
@ -1,278 +0,0 @@
|
|||
---
|
||||
title: Add CLI Variable Management
|
||||
type: feat
|
||||
status: active
|
||||
date: 2026-05-27
|
||||
---
|
||||
|
||||
# Add CLI Variable Management
|
||||
|
||||
## Overview
|
||||
|
||||
Expose the recently added variables API through the CLI with a singular `fabro variable`
|
||||
namespace. Variables are non-sensitive run-configuration values, so the CLI should expose
|
||||
values in `list` and `get`, while continuing to direct credentials and tokens to
|
||||
`fabro secret`.
|
||||
|
||||
## Requirements Trace
|
||||
|
||||
- R1. Provide variables management in the CLI, similar to secrets management.
|
||||
- R2. Support the full readable-variable CRUD surface: list, get, set/upsert, and remove.
|
||||
- R3. Preserve existing server/API behavior: variable names are env-style, values may be
|
||||
empty, and `set` preserves an existing description when `--description` is omitted.
|
||||
- R4. Keep generated CLI docs and help snapshots in sync with the new public command.
|
||||
|
||||
## Context & Research
|
||||
|
||||
- `lib/crates/fabro-cli/src/commands/secret/` is the command pattern to follow for
|
||||
namespace dispatch, JSON output, tabular list output, stdin value input, and status
|
||||
messages.
|
||||
- `lib/crates/fabro-server/src/server/handler/variables.rs` already provides
|
||||
`GET /variables`, `POST /variables`, `GET /variables/{name}`,
|
||||
`PUT /variables/{name}`, and `DELETE /variables/{name}`.
|
||||
- `lib/crates/fabro-types/src/variable.rs` defines the canonical API/request types and
|
||||
validates env-style names.
|
||||
- `lib/crates/fabro-api/tests/variable_round_trip.rs` already proves OpenAPI generated
|
||||
types reuse the canonical variable types.
|
||||
- `docs/public/workflows/variables.mdx` currently explains workflow template variables
|
||||
but does not yet document how server-managed `{{ "{" ~ "{" }} "{" ~ "{" {{ "}" ~ "}" }} vars.NAME {{ "{" ~ "{" }} "}" ~ "}" {{ "}" ~ "}" }}` values are configured.
|
||||
|
||||
## Key Technical Decisions
|
||||
|
||||
- Use `fabro variable`, not `fabro variables`, to match existing singular CLI namespaces
|
||||
such as `fabro secret`, `fabro model`, and `fabro repo`.
|
||||
- Add `get` because variables are intentionally readable; secrets remain write-only.
|
||||
- Make `set` an upsert using the API's create/upsert endpoint, matching the mental model
|
||||
of `fabro secret set`.
|
||||
- Reuse `--value-stdin` from secrets but allow empty stdin values for variables after
|
||||
trimming trailing newlines.
|
||||
- Plain `list` should include a `VALUE` column. Do not add truncation or redaction in
|
||||
this first pass; exact retrieval is available through JSON output and `get`.
|
||||
|
||||
## Implementation Units
|
||||
|
||||
- [ ] **Unit 1: Add fabro-client variable wrappers**
|
||||
|
||||
**Goal:** Give CLI code stable methods over the generated OpenAPI client.
|
||||
|
||||
**Requirements:** R2, R3
|
||||
|
||||
**Dependencies:** Existing variables API and generated `fabro-api` client.
|
||||
|
||||
**Files:**
|
||||
- Modify: `lib/crates/fabro-client/src/client.rs`
|
||||
|
||||
**Approach:**
|
||||
- Add wrappers for `list_variables`, `get_variable`, `create_variable`,
|
||||
`update_variable`, and `delete_variable`.
|
||||
- Return `Vec<types::Variable>` from `list_variables` by unwrapping the API response's
|
||||
`data`, matching `list_secrets`.
|
||||
- Use the generated path-parameter operations for `get`, `update`, and `delete`.
|
||||
|
||||
**Patterns to follow:**
|
||||
- `list_secrets`, `create_secret`, and `delete_secret_by_name` in the same file.
|
||||
|
||||
**Test scenarios:**
|
||||
- Happy path: CLI integration tests in later units exercise each wrapper through the
|
||||
shared server client path.
|
||||
- Error path: missing and invalid variable operations propagate the server's API errors.
|
||||
|
||||
**Verification:**
|
||||
- The CLI can compile against these wrapper methods without importing generated client
|
||||
builders directly.
|
||||
|
||||
- [ ] **Unit 2: Add CLI args, dispatch, and command module**
|
||||
|
||||
**Goal:** Register the new top-level namespace and route subcommands to implementation
|
||||
modules.
|
||||
|
||||
**Requirements:** R1, R2, R4
|
||||
|
||||
**Dependencies:** Unit 1
|
||||
|
||||
**Files:**
|
||||
- Modify: `lib/crates/fabro-cli/src/args.rs`
|
||||
- Modify: `lib/crates/fabro-cli/src/main.rs`
|
||||
- Modify: `lib/crates/fabro-cli/src/commands/mod.rs`
|
||||
- Create: `lib/crates/fabro-cli/src/commands/variable/mod.rs`
|
||||
|
||||
**Approach:**
|
||||
- Add `Commands::Variable(VariableNamespace)` with description
|
||||
`Manage server-owned variables`.
|
||||
- Add `VariableNamespace` with `ServerTargetArgs`, matching `SecretNamespace`.
|
||||
- Add `VariableCommand::{List, Get, Rm, Set}`; give `list` the `ls` alias.
|
||||
- Add command-name mapping for analytics/logging: `variable list`, `variable get`,
|
||||
`variable rm`, and `variable set`.
|
||||
- Dispatch through `commands::variable::dispatch`, deriving the target context with
|
||||
`base_ctx.with_target(&ns.target)`.
|
||||
|
||||
**Patterns to follow:**
|
||||
- `SecretNamespace`, `SecretCommand`, and `commands::secret::dispatch`.
|
||||
|
||||
**Test scenarios:**
|
||||
- Happy path: `fabro --help` lists `variable`.
|
||||
- Happy path: `fabro variable --help` shows `list`, `get`, `rm`, and `set`.
|
||||
- Happy path: command-name mapping covers all subcommands.
|
||||
|
||||
**Verification:**
|
||||
- The new namespace is reachable through clap and main dispatch without affecting
|
||||
existing commands.
|
||||
|
||||
- [ ] **Unit 3: Implement variable list/get/set/rm behavior**
|
||||
|
||||
**Goal:** Provide the full user-facing variables management workflow.
|
||||
|
||||
**Requirements:** R1, R2, R3
|
||||
|
||||
**Dependencies:** Units 1 and 2
|
||||
|
||||
**Files:**
|
||||
- Create: `lib/crates/fabro-cli/src/commands/variable/list.rs`
|
||||
- Create: `lib/crates/fabro-cli/src/commands/variable/get.rs`
|
||||
- Create: `lib/crates/fabro-cli/src/commands/variable/set.rs`
|
||||
- Create: `lib/crates/fabro-cli/src/commands/variable/rm.rs`
|
||||
|
||||
**Approach:**
|
||||
- `list`: fetch all variables, print JSON array when JSON output is active, otherwise
|
||||
print a table with `NAME`, `VALUE`, and `UPDATED`.
|
||||
- `get`: fetch one variable, print the full variable object for JSON output, otherwise
|
||||
print only the raw value to stdout.
|
||||
- `set`: accept `<NAME> [VALUE]`, `--value-stdin`, and `--description`; call the upsert
|
||||
API wrapper and print the stored variable for JSON output or `Set NAME` otherwise.
|
||||
- `rm`: call the delete API wrapper and print `{ "name": NAME }` for JSON output or
|
||||
`Removed NAME` otherwise.
|
||||
- For `set`, allow empty explicit values and empty stdin values. Only error when no value
|
||||
is provided and stdin is not being used.
|
||||
|
||||
**Patterns to follow:**
|
||||
- `commands/secret/list.rs` for table style and age formatting.
|
||||
- `commands/secret/set.rs` for argument precedence and stdin handling, adjusted so empty
|
||||
values are valid.
|
||||
- `commands/secret/rm.rs` for delete output shape.
|
||||
|
||||
**Test scenarios:**
|
||||
- Happy path: `set DEPLOY_ENV staging --description "Deployment target"` then `list`
|
||||
shows `DEPLOY_ENV`, `staging`, and an updated age.
|
||||
- Happy path: `get DEPLOY_ENV` prints exactly `staging\n` in plain output.
|
||||
- Happy path: `set DEPLOY_ENV production` updates the value and preserves the existing
|
||||
description through API behavior.
|
||||
- Happy path: `set EMPTY ""` stores an empty value.
|
||||
- Happy path: `printf '\n' | fabro variable set EMPTY --value-stdin` stores an empty
|
||||
value instead of failing.
|
||||
- Error path: `get MISSING` and `rm MISSING` fail with `variable not found: MISSING`.
|
||||
- Error path: `set 1BAD value` fails with the server invalid-name error.
|
||||
|
||||
**Verification:**
|
||||
- The command works against the default test server and does not write directly to
|
||||
local `variables.json`.
|
||||
|
||||
- [ ] **Unit 4: Add test harness support and CLI integration tests**
|
||||
|
||||
**Goal:** Lock the public CLI surface and expected behavior with integration coverage.
|
||||
|
||||
**Requirements:** R1, R2, R3, R4
|
||||
|
||||
**Dependencies:** Units 1-3
|
||||
|
||||
**Files:**
|
||||
- Modify: `lib/crates/fabro-test/src/lib.rs`
|
||||
- Modify: `lib/crates/fabro-cli/tests/it/cmd/mod.rs`
|
||||
- Modify: `lib/crates/fabro-cli/tests/it/cmd/fabro.rs`
|
||||
- Modify: `lib/crates/fabro-cli/tests/it/cmd/json_global.rs`
|
||||
- Create: `lib/crates/fabro-cli/tests/it/cmd/variable.rs`
|
||||
- Create: `lib/crates/fabro-cli/tests/it/cmd/variable_list.rs`
|
||||
- Create: `lib/crates/fabro-cli/tests/it/cmd/variable_get.rs`
|
||||
- Create: `lib/crates/fabro-cli/tests/it/cmd/variable_set.rs`
|
||||
- Create: `lib/crates/fabro-cli/tests/it/cmd/variable_rm.rs`
|
||||
|
||||
**Approach:**
|
||||
- Add `TestContext::variable()` helper mirroring `TestContext::secret()`.
|
||||
- Add help snapshots for the namespace and each subcommand.
|
||||
- Add lifecycle tests for set/list/get/update/rm, `ls` alias, empty value support, JSON
|
||||
output, missing variable errors, and invalid-name errors.
|
||||
- Update root help and curated landing snapshots only if the final clap/landing output
|
||||
changes.
|
||||
|
||||
**Patterns to follow:**
|
||||
- `secret.rs`, `secret_list.rs`, `secret_set.rs`, and `secret_rm.rs`.
|
||||
|
||||
**Test scenarios:**
|
||||
- Happy path: JSON `list` returns an array of full variable objects including `value`.
|
||||
- Happy path: JSON `get` and `set` return full variable objects.
|
||||
- Happy path: global JSON config makes `variable list` emit JSON, matching the
|
||||
`secret list` config test.
|
||||
- Error path: missing variables and invalid names produce nonzero exits and readable
|
||||
errors.
|
||||
|
||||
**Verification:**
|
||||
- `cargo nextest run -p fabro-cli -- variable`
|
||||
- `cargo nextest run -p fabro-cli -- fabro`
|
||||
|
||||
- [ ] **Unit 5: Update generated and conceptual docs**
|
||||
|
||||
**Goal:** Keep public documentation aligned with the new command and clarify how variables
|
||||
relate to secrets.
|
||||
|
||||
**Requirements:** R1, R4
|
||||
|
||||
**Dependencies:** Units 2-4
|
||||
|
||||
**Files:**
|
||||
- Modify: `docs/public/reference/cli.mdx`
|
||||
- Modify: `docs/public/workflows/variables.mdx`
|
||||
|
||||
**Approach:**
|
||||
- Regenerate the CLI reference with `cargo dev docs refresh`.
|
||||
- Add a short section to `docs/public/workflows/variables.mdx` explaining that
|
||||
server-managed run config variables can be set with `fabro variable set NAME VALUE`
|
||||
and referenced as `{{ "{" ~ "{" }} "{" ~ "{" {{ "}" ~ "}" }} vars.NAME {{ "{" ~ "{" }} "}" ~ "}" {{ "}" ~ "}" }}` in run config interpolation.
|
||||
- State that variables are non-sensitive and readable; tokens, keys, and credentials
|
||||
should use `fabro secret set`.
|
||||
|
||||
**Patterns to follow:**
|
||||
- Existing generated docs workflow in `lib/crates/fabro-dev/src/commands/docs.rs`.
|
||||
- Existing CLI references to `fabro secret set` in administration docs.
|
||||
|
||||
**Test scenarios:**
|
||||
- Happy path: generated CLI docs include `fabro variable` and its subcommands.
|
||||
- Documentation check: `cargo dev docs check` succeeds after regeneration.
|
||||
|
||||
**Verification:**
|
||||
- The docs describe the CLI surface without implying variables are secret storage.
|
||||
|
||||
## System-Wide Impact
|
||||
|
||||
- **API surface parity:** No server or OpenAPI changes are planned; the CLI consumes the
|
||||
existing variables API.
|
||||
- **Error propagation:** Invalid names, missing variables, and write failures should flow
|
||||
through the existing `fabro-client` API error classification.
|
||||
- **State lifecycle risks:** CLI commands must use the server API rather than editing
|
||||
`variables.json` locally, so behavior remains correct for remote and socket-backed
|
||||
servers.
|
||||
- **Security boundary:** Values are intentionally visible for variables. Documentation
|
||||
must clearly distinguish variables from secrets to avoid accidental credential storage.
|
||||
- **Unchanged invariants:** `fabro secret` remains write-only and unchanged.
|
||||
|
||||
## Risks & Dependencies
|
||||
|
||||
| Risk | Mitigation |
|
||||
| --- | --- |
|
||||
| Users put credentials in variables because the command looks like secrets | Document variables as non-sensitive and keep secret guidance explicit. |
|
||||
| Empty values accidentally fail because secret handling rejects empties | Test explicit empty strings and newline-only stdin for `variable set`. |
|
||||
| CLI docs drift after adding clap args | Regenerate with `cargo dev docs refresh` and verify with `cargo dev docs check`. |
|
||||
| Plain `list` becomes awkward for long values | Accept for v1; `get` and JSON output provide exact machine-readable retrieval. |
|
||||
|
||||
## Verification Plan
|
||||
|
||||
- `cargo nextest run -p fabro-cli -- variable`
|
||||
- `cargo nextest run -p fabro-cli -- fabro`
|
||||
- `cargo dev docs check`
|
||||
- `cargo +nightly-2026-04-14 fmt --check --all`
|
||||
- `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D warnings`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- The chosen CLI surface is full CRUD with readable values.
|
||||
- The namespace is singular: `fabro variable`.
|
||||
- No TypeScript client regeneration is required for this CLI-only change.
|
||||
- No server API, OpenAPI schema, or storage migration changes are required.
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{S as a}from"./chunk-c8zhk10v.js";import"./chunk-xg9nsz1a.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{d as a}from"./chunk-5q0vf5kd.js";import"./chunk-z1p7fbkb.js";import"./chunk-amk943wr.js";import"./chunk-972wx742.js";import"./chunk-ept66kdn.js";import"./chunk-1ehq66yp.js";import"./chunk-xg9nsz1a.js";import"./chunk-z868q2s0.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{e}from"./chunk-7zy2rxws.js";import"./chunk-gf0502ds.js";var n=Object.freeze(JSON.parse('{"displayName":"Nextflow","name":"nextflow","patterns":[{"include":"#nextflow"}],"repository":{"enum-def":{"begin":"^\\\\s*(enum)\\\\s+(\\\\w+)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"},"2":{"name":"storage.type.groovy"}},"end":"}","patterns":[{"include":"source.nextflow-groovy#groovy"},{"include":"#enum-values"}]},"enum-values":{"patterns":[{"begin":"(?<=;|^)\\\\s*\\\\b([0-9A-Z_]+)(?=\\\\s*(?:[(,}]|$))","beginCaptures":{"1":{"name":"constant.enum.name.groovy"}},"end":",|(?=})|^(?!\\\\s*\\\\w+\\\\s*(?:,|$))","patterns":[{"begin":"\\\\(","end":"\\\\)","name":"meta.enum.value.groovy","patterns":[{"match":",","name":"punctuation.definition.seperator.parameter.groovy"},{"include":"#groovy-code"}]}]}]},"function-body":{"patterns":[{"match":"\\\\s"},{"begin":"(?=[<\\\\w][^(]*\\\\s+[$<\\\\w]+\\\\s*\\\\()","end":"(?=[$\\\\w]+\\\\s*\\\\()","name":"meta.method.return-type.java","patterns":[{"include":"source.nextflow-groovy#types"}]},{"begin":"([$\\\\w]+)\\\\s*\\\\(","beginCaptures":{"1":{"name":"entity.name.function.nextflow"}},"end":"\\\\)","name":"meta.definition.method.signature.java","patterns":[{"begin":"(?=[^)])","end":"(?=\\\\))","name":"meta.method.parameters.groovy","patterns":[{"begin":"(?=[^),])","end":"(?=[),])","name":"meta.method.parameter.groovy","patterns":[{"match":",","name":"punctuation.definition.separator.groovy"},{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.groovy"}},"end":"(?=[),])","name":"meta.parameter.default.groovy","patterns":[{"include":"source.nextflow-groovy#groovy-code"}]},{"include":"source.nextflow-groovy#parameters"}]}]}]},{"begin":"(?=<)","end":"(?=\\\\s)","name":"meta.method.paramerised-type.groovy","patterns":[{"begin":"<","end":">","name":"storage.type.parameters.groovy","patterns":[{"include":"source.nextflow-groovy#types"},{"match":",","name":"punctuation.definition.seperator.groovy"}]}]},{"begin":"\\\\{","end":"(?=})","name":"meta.method.body.java","patterns":[{"include":"source.nextflow-groovy#groovy-code"}]}]},"function-def":{"applyEndPatternLast":1,"begin":"(?<=;|^|\\\\{)(?=\\\\s*(?:def|(?:(?:boolean|byte|char|short|int|float|long|double)|@?(?:[A-Za-z]\\\\w*\\\\.)*[A-Z]+\\\\w*)[]\\\\[]*(?:<.*>)?n)\\\\s+([^=]+\\\\s+)?\\\\w+\\\\s*\\\\()","end":"}|(?=[^{])","name":"meta.definition.method.groovy","patterns":[{"include":"#function-body"}]},"include-decl":{"patterns":[{"match":"^\\\\b(include)\\\\b","name":"keyword.nextflow"},{"match":"\\\\b(from)\\\\b","name":"keyword.nextflow"}]},"nextflow":{"patterns":[{"include":"#record-def"},{"include":"#enum-def"},{"include":"#function-def"},{"include":"#process-def"},{"include":"#workflow-def"},{"include":"#params-def"},{"include":"#output-def"},{"include":"#include-decl"},{"include":"source.nextflow-groovy"}]},"output-def":{"begin":"^\\\\s*(output)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"}},"end":"}","name":"output.nextflow","patterns":[{"include":"source.nextflow-groovy#groovy"}]},"params-def":{"begin":"^\\\\s*(params)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"}},"end":"}","name":"params.nextflow","patterns":[{"include":"source.nextflow-groovy#groovy"}]},"process-body":{"patterns":[{"match":"(?:input|output|when|script|shell|exec):","name":"constant.block.nextflow"},{"match":"\\\\b(val|env|file|path|stdin|stdout|tuple)([(\\\\s])","name":"entity.name.function.nextflow"},{"include":"source.nextflow-groovy#groovy"}]},"process-def":{"begin":"^\\\\s*(process)\\\\s+(\\\\w+)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"},"2":{"name":"entity.name.function.nextflow"}},"end":"}","name":"process.nextflow","patterns":[{"include":"#process-body"}]},"record-def":{"begin":"^\\\\s*(record)\\\\s+(\\\\w+)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"},"2":{"name":"storage.type.groovy"}},"end":"}","name":"record.nextflow","patterns":[{"include":"source.nextflow-groovy#groovy"}]},"workflow-body":{"patterns":[{"match":"(?:take|main|emit|publish):","name":"constant.block.nextflow"},{"include":"source.nextflow-groovy#groovy"}]},"workflow-def":{"begin":"^\\\\s*(workflow)(?:\\\\s+(\\\\w+))?\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.nextflow"},"2":{"name":"entity.name.function.nextflow"}},"end":"}","name":"workflow.nextflow","patterns":[{"include":"#workflow-body"}]}},"scopeName":"source.nextflow","embeddedLangs":["nextflow-groovy"],"aliases":["nf"]}')),t=[...e,n];export{t as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{v as a}from"./chunk-ktx0nkhz.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{O as a}from"./chunk-ept66kdn.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"CODEOWNERS","name":"codeowners","patterns":[{"include":"#comment"},{"include":"#pattern"},{"include":"#owner"}],"repository":{"comment":{"patterns":[{"begin":"^\\\\s*#","captures":{"0":{"name":"punctuation.definition.comment.codeowners"}},"end":"$","name":"comment.line.codeowners"}]},"owner":{"match":"\\\\S*@\\\\S+","name":"storage.type.function.codeowners"},"pattern":{"match":"^\\\\s*(\\\\S+)","name":"variable.other.codeowners"}},"scopeName":"text.codeowners"}')),n=[e];export{n as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Gettext PO","fileTypes":["po","pot","potx"],"name":"po","patterns":[{"begin":"^(?:(?=(msg(?:id(_plural)?|ctxt))\\\\s*\\"[^\\"])|\\\\s*$)","end":"\\\\z","patterns":[{"include":"#body"}]},{"include":"#comments"},{"match":"^msg(id|str)\\\\s+\\"\\"\\\\s*$\\\\n?","name":"comment.line.number-sign.po"},{"captures":{"1":{"name":"constant.language.po"},"2":{"name":"punctuation.separator.key-value.po"},"3":{"name":"string.other.po"}},"match":"^\\"(?:([^:\\\\s]+)(:)\\\\s+)?([^\\"]*)\\"\\\\s*$\\\\n?","name":"meta.header.po"}],"repository":{"body":{"patterns":[{"begin":"^(msgid(_plural)?)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.msgid.po"}},"end":"^(?!\\")","name":"meta.scope.msgid.po","patterns":[{"begin":"(\\\\G|^)\\"","end":"\\"","name":"string.quoted.double.po","patterns":[{"match":"\\\\\\\\[\\"\\\\\\\\]","name":"constant.character.escape.po"}]}]},{"begin":"^(msgstr)(?:(\\\\[)(\\\\d+)(]))?\\\\s+","beginCaptures":{"1":{"name":"keyword.control.msgstr.po"},"2":{"name":"keyword.control.msgstr.po"},"3":{"name":"constant.numeric.po"},"4":{"name":"keyword.control.msgstr.po"}},"end":"^(?!\\")","name":"meta.scope.msgstr.po","patterns":[{"begin":"(\\\\G|^)\\"","end":"\\"","name":"string.quoted.double.po","patterns":[{"match":"\\\\\\\\[\\"\\\\\\\\]","name":"constant.character.escape.po"}]}]},{"begin":"^(msgctxt)(?:(\\\\[)(\\\\d+)(]))?\\\\s+","beginCaptures":{"1":{"name":"keyword.control.msgctxt.po"},"2":{"name":"keyword.control.msgctxt.po"},"3":{"name":"constant.numeric.po"},"4":{"name":"keyword.control.msgctxt.po"}},"end":"^(?!\\")","name":"meta.scope.msgctxt.po","patterns":[{"begin":"(\\\\G|^)\\"","end":"\\"","name":"string.quoted.double.po","patterns":[{"match":"\\\\\\\\[\\"\\\\\\\\]","name":"constant.character.escape.po"}]}]},{"captures":{"1":{"name":"punctuation.definition.comment.po"}},"match":"^(#~).*$\\\\n?","name":"comment.line.number-sign.obsolete.po"},{"include":"#comments"},{"match":"^(?!\\\\s*$)[^\\"#].*$\\\\n?","name":"invalid.illegal.po"}]},"comments":{"patterns":[{"begin":"^(?=#)","end":"(?!\\\\G)","patterns":[{"begin":"(#,)\\\\s+","beginCaptures":{"1":{"name":"punctuation.definition.comment.po"}},"end":"\\\\n","name":"comment.line.number-sign.flag.po","patterns":[{"captures":{"1":{"name":"entity.name.type.flag.po"}},"match":"(?:\\\\G|,\\\\s*)(fuzzy|(?:no-)?(?:c|objc|sh|lisp|elisp|librep|scheme|smalltalk|java|csharp|awk|object-pascal|ycp|tcl|perl|perl-brace|php|gcc-internal|qt|boost)-format)"}]},{"begin":"#\\\\.","beginCaptures":{"0":{"name":"punctuation.definition.comment.po"}},"end":"\\\\n","name":"comment.line.number-sign.extracted.po"},{"begin":"(#:)[\\\\t ]*","beginCaptures":{"1":{"name":"punctuation.definition.comment.po"}},"end":"\\\\n","name":"comment.line.number-sign.reference.po","patterns":[{"match":"(\\\\S+:)([;\\\\d]*)","name":"storage.type.class.po"}]},{"begin":"#\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.comment.po"}},"end":"\\\\n","name":"comment.line.number-sign.previous.po"},{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.po"}},"end":"\\\\n","name":"comment.line.number-sign.po"}]}]}},"scopeName":"source.po","aliases":["pot","potx"]}')),n=[e];export{n as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Tcl","fileTypes":["tcl"],"foldingStartMarker":"\\\\{\\\\s*$","foldingStopMarker":"^\\\\s*}","name":"tcl","patterns":[{"begin":"(?<=^|;)\\\\s*((#))","beginCaptures":{"1":{"name":"comment.line.number-sign.tcl"},"2":{"name":"punctuation.definition.comment.tcl"}},"contentName":"comment.line.number-sign.tcl","end":"\\\\n","patterns":[{"match":"(\\\\\\\\[\\\\n\\\\\\\\])"}]},{"captures":{"1":{"name":"keyword.control.tcl"}},"match":"(?<=^|[;\\\\[{])\\\\s*(if|while|for|catch|default|return|break|continue|switch|exit|foreach|try|throw)\\\\b"},{"captures":{"1":{"name":"keyword.control.tcl"}},"match":"(?<=^|})\\\\s*(then|elseif|else)\\\\b"},{"captures":{"1":{"name":"keyword.other.tcl"},"2":{"name":"entity.name.function.tcl"}},"match":"(?<=^|\\\\{)\\\\s*(proc)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"keyword.other.tcl"}},"match":"(?<=^|[;\\\\[{])\\\\s*(after|append|array|auto_execok|auto_import|auto_load|auto_mkindex|auto_mkindex_old|auto_qualify|auto_reset|bgerror|binary|cd|clock|close|concat|dde|encoding|eof|error|eval|exec|expr|fblocked|fconfigure|fcopy|file|fileevent|filename|flush|format|gets|glob|global|history|http|incr|info|interp|join|lappend|library|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|memory|msgcat|namespace|open|package|parray|pid|pkg::create|pkg_mkIndex|proc|puts|pwd|re_syntax|read|registry|rename|resource|scan|seek|set|socket|SafeBase|source|split|string|subst|Tcl|tcl_endOfWord|tcl_findLibrary|tcl_startOfNextWord|tcl_startOfPreviousWord|tcl_wordBreakAfter|tcl_wordBreakBefore|tcltest|tclvars|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait)\\\\b"},{"begin":"(?<=^|[;\\\\[{])\\\\s*(reg(?:exp|sub))\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.other.tcl"}},"end":"[]\\\\n;]","patterns":[{"match":"\\\\\\\\(?:.|\\\\n)","name":"constant.character.escape.tcl"},{"match":"-\\\\w+\\\\s*"},{"applyEndPatternLast":1,"begin":"--\\\\s*","end":"","patterns":[{"include":"#regexp"}]},{"include":"#regexp"}]},{"include":"#escape"},{"include":"#variable"},{"include":"#operator"},{"include":"#numeric"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.tcl"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.tcl"}},"name":"string.quoted.double.tcl","patterns":[{"include":"#escape"},{"include":"#variable"},{"include":"#embedded"}]}],"repository":{"bare-string":{"begin":"(?:^|(?<=\\\\s))\\"","end":"\\"([^]\\\\s]*)","endCaptures":{"1":{"name":"invalid.illegal.tcl"}},"patterns":[{"include":"#escape"},{"include":"#variable"}]},"braces":{"begin":"(?:^|(?<=\\\\s))\\\\{","end":"}([^]\\\\s]*)","endCaptures":{"1":{"name":"invalid.illegal.tcl"}},"patterns":[{"match":"\\\\\\\\[\\\\n{}]","name":"constant.character.escape.tcl"},{"include":"#inner-braces"}]},"embedded":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.tcl"}},"end":"]","endCaptures":{"0":{"name":"punctuation.section.embedded.end.tcl"}},"name":"source.tcl.embedded","patterns":[{"include":"source.tcl"}]},"escape":{"match":"\\\\\\\\(\\\\d{1,3}|x\\\\h+|u\\\\h{1,4}|.|\\\\n)","name":"constant.character.escape.tcl"},"inner-braces":{"begin":"\\\\{","end":"}","patterns":[{"match":"\\\\\\\\[\\\\n{}]","name":"constant.character.escape.tcl"},{"include":"#inner-braces"}]},"numeric":{"match":"(?<![A-Za-z])([-+]?([0-9]*\\\\.)?[0-9]+f?)(?![.A-Za-z])","name":"constant.numeric.tcl"},"operator":{"match":"(?<=[ \\\\d])([-+~]|&{1,2}|\\\\|{1,2}|<{1,2}|>{1,2}|\\\\*{1,2}|[!%/]|<=|>=|={1,2}|!=|\\\\^)(?=[ \\\\d])","name":"keyword.operator.tcl"},"regexp":{"begin":"(?=\\\\S)(?![]\\\\n;])","end":"(?=[]\\\\n;])","patterns":[{"begin":"(?=[^\\\\t\\\\n ;])","end":"(?=[\\\\t\\\\n ;])","name":"string.regexp.tcl","patterns":[{"include":"#braces"},{"include":"#bare-string"},{"include":"#escape"},{"include":"#variable"}]},{"begin":"[\\\\t ]","end":"(?=[]\\\\n;])","patterns":[{"include":"#variable"},{"include":"#embedded"},{"include":"#escape"},{"include":"#braces"},{"include":"#string"}]}]},"string":{"applyEndPatternLast":1,"begin":"(?:^|(?<=\\\\s))(?=\\")","end":"","name":"string.quoted.double.tcl","patterns":[{"include":"#bare-string"}]},"variable":{"captures":{"1":{"name":"punctuation.definition.variable.tcl"}},"match":"(\\\\$)((?:[0-9A-Z_a-z]|::)+(\\\\([^)]+\\\\))?|\\\\{[^}]*})","name":"support.function.tcl"}},"scopeName":"source.tcl"}')),n=[e];export{n as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Gleam","fileTypes":["gleam"],"name":"gleam","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#strings"},{"include":"#constant"},{"include":"#entity"},{"include":"#discards"}],"repository":{"binary_number":{"match":"\\\\b0[Bb][01_]*\\\\b","name":"constant.numeric.binary.gleam","patterns":[]},"comments":{"patterns":[{"match":"//.*","name":"comment.line.gleam"}]},"constant":{"patterns":[{"include":"#binary_number"},{"include":"#octal_number"},{"include":"#hexadecimal_number"},{"include":"#decimal_number"},{"match":"\\\\p{upper}\\\\p{alnum}*","name":"entity.name.type.gleam"}]},"decimal_number":{"match":"\\\\b([0-9][0-9_]*)(\\\\.([0-9_]*)?(e-?[0-9]+)?)?\\\\b","name":"constant.numeric.decimal.gleam","patterns":[]},"discards":{"match":"\\\\b_\\\\p{word}+{0,1}\\\\b","name":"comment.unused.gleam"},"entity":{"patterns":[{"begin":"\\\\b(\\\\p{lower}\\\\p{word}*)\\\\b\\\\s*\\\\(","captures":{"1":{"name":"entity.name.function.gleam"}},"end":"\\\\)","patterns":[{"include":"$self"}]},{"match":"\\\\b(\\\\p{lower}\\\\p{word}*):\\\\s","name":"variable.parameter.gleam"},{"match":"\\\\b(\\\\p{lower}\\\\p{word}*):","name":"entity.name.namespace.gleam"}]},"hexadecimal_number":{"match":"\\\\b0[Xx][_\\\\h]+\\\\b","name":"constant.numeric.hexadecimal.gleam","patterns":[]},"keywords":{"patterns":[{"match":"\\\\b(as|use|case|if|fn|import|let|assert|pub|type|opaque|const|todo|panic|else|echo)\\\\b","name":"keyword.control.gleam"},{"match":"(<-|->)","name":"keyword.operator.arrow.gleam"},{"match":"\\\\|>","name":"keyword.operator.pipe.gleam"},{"match":"\\\\.\\\\.","name":"keyword.operator.splat.gleam"},{"match":"([!=]=)","name":"keyword.operator.comparison.gleam"},{"match":"([<>]=?\\\\.)","name":"keyword.operator.comparison.float.gleam"},{"match":"(<=|>=|[<>])","name":"keyword.operator.comparison.int.gleam"},{"match":"(&&|\\\\|\\\\|)","name":"keyword.operator.logical.gleam"},{"match":"<>","name":"keyword.operator.string.gleam"},{"match":"\\\\|","name":"keyword.operator.other.gleam"},{"match":"([-*+/]\\\\.)","name":"keyword.operator.arithmetic.float.gleam"},{"match":"([-%*+/])","name":"keyword.operator.arithmetic.int.gleam"},{"match":"=","name":"keyword.operator.assignment.gleam"}]},"octal_number":{"match":"\\\\b0[Oo][0-7_]*\\\\b","name":"constant.numeric.octal.gleam","patterns":[]},"strings":{"begin":"\\"","end":"\\"","name":"string.quoted.double.gleam","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.gleam"}]}},"scopeName":"source.gleam"}')),a=[e];export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{Y as a}from"./chunk-1ehq66yp.js";import"./chunk-xg9nsz1a.js";import"./chunk-z868q2s0.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"QML Directory","name":"qmldir","patterns":[{"include":"#comment"},{"include":"#keywords"},{"include":"#version"},{"include":"#names"}],"repository":{"comment":{"patterns":[{"begin":"#","end":"$","name":"comment.line.number-sign.qmldir"}]},"file-name":{"patterns":[{"match":"\\\\b\\\\w+\\\\.(qmltypes|qml|js)\\\\b","name":"string.unquoted.qmldir"}]},"identifier":{"patterns":[{"match":"\\\\b\\\\w+\\\\b","name":"variable.parameter.qmldir"}]},"keywords":{"patterns":[{"match":"\\\\b(module|singleton|internal|plugin|classname|typeinfo|depends|designersupported)\\\\b","name":"keyword.other.qmldir"}]},"module-name":{"patterns":[{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.qmldir"}]},"names":{"patterns":[{"include":"#file-name"},{"include":"#module-name"},{"include":"#identifier"}]},"version":{"patterns":[{"match":"\\\\b\\\\d+\\\\.\\\\d+\\\\b","name":"constant.numeric.qml"}]}},"scopeName":"source.qmldir"}')),n=[e];export{n as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{G as n}from"./chunk-z9jws129.js";import{N as t}from"./chunk-71s03bbh.js";import{Y as e}from"./chunk-1ehq66yp.js";import"./chunk-xg9nsz1a.js";import"./chunk-z868q2s0.js";import"./chunk-gf0502ds.js";var a=Object.freeze(JSON.parse('{"displayName":"Edge","injections":{"text.html.edge - (meta.embedded | meta.tag | comment.block.edge), L:(text.html.edge meta.tag - (comment.block.edge | meta.embedded.block.edge)), L:(source.ts.embedded.html - (comment.block.edge | meta.embedded.block.edge))":{"patterns":[{"include":"#comment"},{"include":"#escapedMustache"},{"include":"#safeMustache"},{"include":"#mustache"},{"include":"#nonSeekableTag"},{"include":"#tag"}]}},"name":"edge","patterns":[{"include":"text.html.basic"},{"include":"text.html.derivative"}],"repository":{"comment":{"begin":"\\\\{\\\\{--","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.edge"}},"end":"--}}","endCaptures":{"0":{"name":"punctuation.definition.comment.end.edge"}},"name":"comment.block"},"escapedMustache":{"begin":"@\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.edge"}},"end":"}}","endCaptures":{"0":{"name":"punctuation.definition.comment.end.edge"}},"name":"comment.block"},"mustache":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.mustache.begin"}},"end":"}}","endCaptures":{"0":{"name":"punctuation.mustache.end"}},"name":"meta.embedded.block.javascript","patterns":[{"include":"source.ts#expression"}]},"nonSeekableTag":{"captures":{"2":{"name":"support.function.edge"}},"match":"^(\\\\s*)((@{1,2})(!)?([.A-Z_a-z]+))(~)?$","name":"meta.embedded.block.javascript","patterns":[{"include":"source.ts#expression"}]},"safeMustache":{"begin":"\\\\{\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.mustache.begin"}},"end":"}}}","endCaptures":{"0":{"name":"punctuation.mustache.end"}},"name":"meta.embedded.block.javascript","patterns":[{"include":"source.ts#expression"}]},"tag":{"begin":"^(\\\\s*)((@{1,2})(!)?([.A-Z_a-z]+)(\\\\s{0,2}))(\\\\()","beginCaptures":{"2":{"name":"support.function.edge"},"7":{"name":"punctuation.paren.open"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.paren.close"}},"name":"meta.embedded.block.javascript","patterns":[{"include":"source.ts#expression"}]}},"scopeName":"text.html.edge","embeddedLangs":["typescript","html","html-derivative"]}')),i=[...t,...e,...n,a];export{i as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var t=Object.freeze(JSON.parse('{"displayName":"TSV","fileTypes":["tsv","tab"],"name":"tsv","patterns":[{"captures":{"1":{"name":"rainbow1"},"2":{"name":"keyword.rainbow2"},"3":{"name":"entity.name.function.rainbow3"},"4":{"name":"comment.rainbow4"},"5":{"name":"string.rainbow5"},"6":{"name":"variable.parameter.rainbow6"},"7":{"name":"constant.numeric.rainbow7"},"8":{"name":"entity.name.type.rainbow8"},"9":{"name":"markup.bold.rainbow9"},"10":{"name":"invalid.rainbow10"}},"match":"([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)([^\\\\t]*\\\\t?)","name":"rainbowgroup"}],"scopeName":"text.tsv"}')),a=[t];export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{k as a}from"./chunk-pce8yxd3.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Rel","name":"rel","patterns":[{"include":"#strings"},{"include":"#comment"},{"include":"#single-line-comment-consuming-line-ending"},{"include":"#deprecated-temporary"},{"include":"#operators"},{"include":"#symbols"},{"include":"#keywords"},{"include":"#otherkeywords"},{"include":"#types"},{"include":"#constants"}],"repository":{"comment":{"patterns":[{"begin":"/\\\\*\\\\*(?!/)","beginCaptures":{"0":{"name":"punctuation.definition.comment.rel"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.rel"}},"name":"comment.block.documentation.rel","patterns":[{"include":"#docblock"}]},{"begin":"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?","beginCaptures":{"1":{"name":"punctuation.definition.comment.rel"},"2":{"name":"storage.type.internaldeclaration.rel"},"3":{"name":"punctuation.decorator.internaldeclaration.rel"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.rel"}},"name":"comment.block.rel"},{"begin":"doc\\"\\"\\"","end":"\\"\\"\\"","name":"comment.block.documentation.rel"},{"begin":"(^[\\\\t ]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.rel"},"2":{"name":"comment.line.double-slash.rel"},"3":{"name":"punctuation.definition.comment.rel"},"4":{"name":"storage.type.internaldeclaration.rel"},"5":{"name":"punctuation.decorator.internaldeclaration.rel"}},"contentName":"comment.line.double-slash.rel","end":"(?=$)"}]},"constants":{"patterns":[{"match":"\\\\b((true|false))\\\\b","name":"constant.language.rel"}]},"deprecated-temporary":{"patterns":[{"match":"@inspect","name":"keyword.other.rel"}]},"keywords":{"patterns":[{"match":"\\\\b((def|entity|bound|include|ic|forall|exists|[∀∃]|return|module|^end))\\\\b|(((<)?\\\\|(>)?)|[∀∃])","name":"keyword.control.rel"}]},"operators":{"patterns":[{"match":"\\\\b((if|then|else|and|or|not|eq|neq|lt|lt_eq|gt|gt_eq))\\\\b|([-%*+/=^÷]|!=|[<≠]|<=|[>≤]|>=|[\\\\&≥])|\\\\s+(end)","name":"keyword.other.rel"}]},"otherkeywords":{"patterns":[{"match":"\\\\s*(@inline)\\\\s*|\\\\s*(@auto_number)\\\\s*|\\\\s*(function)\\\\s|\\\\b((implies|select|from|∈|where|for|in))\\\\b|(((<)?\\\\|(>)?)|∈)","name":"keyword.other.rel"}]},"single-line-comment-consuming-line-ending":{"begin":"(^[\\\\t ]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.rel"},"2":{"name":"comment.line.double-slash.rel"},"3":{"name":"punctuation.definition.comment.rel"},"4":{"name":"storage.type.internaldeclaration.rel"},"5":{"name":"punctuation.decorator.internaldeclaration.rel"}},"contentName":"comment.line.double-slash.rel","end":"(?=^)"},"strings":{"begin":"\\"","end":"\\"","name":"string.quoted.double.rel","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.rel"}]},"symbols":{"patterns":[{"match":"(:[$\\\\[_[:alpha:]](]|[$_[:alnum:]]*))","name":"variable.parameter.rel"}]},"types":{"patterns":[{"match":"\\\\b((Symbol|Char|Bool|Rational|FixedDecimal|Float16|Float32|Float64|Int8|Int16|Int32|Int64|Int128|UInt8|UInt16|UInt32|UInt64|UInt128|Date|DateTime|Day|Week|Month|Year|Nanosecond|Microsecond|Millisecond|Second|Minute|Hour|FilePos|HashValue|AutoNumberValue))\\\\b","name":"entity.name.type.rel"}]}},"scopeName":"source.rel"}')),n=[e];export{n as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{s as a}from"./chunk-crmnbecm.js";import"./chunk-0gpjqeyh.js";import"./chunk-nkw6kj41.js";import"./chunk-71s03bbh.js";import"./chunk-z868q2s0.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Berry","name":"berry","patterns":[{"include":"#controls"},{"include":"#strings"},{"include":"#comment-block"},{"include":"#comments"},{"include":"#keywords"},{"include":"#function"},{"include":"#member"},{"include":"#identifier"},{"include":"#number"},{"include":"#operator"}],"repository":{"comment-block":{"begin":"#-","end":"-#","name":"comment.berry","patterns":[{}]},"comments":{"begin":"#","end":"\\\\n","name":"comment.line.berry","patterns":[{}]},"controls":{"patterns":[{"match":"\\\\b(if|elif|else|for|while|do|end|break|continue|return|try|except|raise)\\\\b","name":"keyword.control.berry"}]},"function":{"patterns":[{"match":"\\\\b([A-Z_a-z][0-9A-Z_a-z]*(?=\\\\s*\\\\())","name":"entity.name.function.berry"}]},"identifier":{"patterns":[{"match":"\\\\b[A-Z_a-z]\\\\w+\\\\b","name":"identifier.berry"}]},"keywords":{"patterns":[{"match":"\\\\b(var|static|def|class|true|false|nil|self|super|import|as|_class)\\\\b","name":"keyword.berry"}]},"member":{"patterns":[{"captures":{"0":{"name":"entity.other.attribute-name.berry"}},"match":"\\\\.([A-Z_a-z][0-9A-Z_a-z]*)"}]},"number":{"patterns":[{"match":"0x\\\\h+|\\\\d+|(\\\\d+\\\\.?|\\\\.\\\\d)\\\\d*([Ee][-+]?\\\\d+)?","name":"constant.numeric.berry"}]},"operator":{"patterns":[{"match":"[-\\\\]!%\\\\&(-+./:<=>\\\\[^|~]","name":"keyword.operator.berry"}]},"strings":{"patterns":[{"begin":"f(?=[\\"\'])","patterns":[{"begin":"\\"","end":"\\"","name":"string.quoted.other.berry","patterns":[{"match":"(\\\\\\\\x\\\\h{2})|(\\\\\\\\[0-7]{3})|(\\\\\\\\\\\\\\\\)|(\\\\\\\\\\")|(\\\\\\\\\')|(\\\\\\\\a)|(\\\\\\\\b)|(\\\\\\\\f)|(\\\\\\\\n)|(\\\\\\\\r)|(\\\\\\\\t)|(\\\\\\\\v)","name":"constant.character.escape.berry"},{"match":"\\\\{\\\\{[^}]*}}","name":"string.quoted.other.berry"},{"begin":"\\\\{","end":"}","name":"keyword.other.unit.berry","patterns":[{"include":"#keywords"},{"include":"#numbers"},{"include":"#identifier"},{"include":"#operator"},{"include":"#member"},{"include":"#function"}]}]},{"begin":"\'","end":"\'","name":"string.quoted.other.berry","patterns":[{"match":"(\\\\\\\\x\\\\h{2})|(\\\\\\\\[0-7]{3})|(\\\\\\\\\\\\\\\\)|(\\\\\\\\\\")|(\\\\\\\\\')|(\\\\\\\\a)|(\\\\\\\\b)|(\\\\\\\\f)|(\\\\\\\\n)|(\\\\\\\\r)|(\\\\\\\\t)|(\\\\\\\\v)","name":"constant.character.escape.berry"},{"match":"\\\\{\\\\{[^}]*}}","name":"string.quoted.other.berry"},{"begin":"\\\\{","end":"}","name":"keyword.other.unit.berry","patterns":[{"include":"#keywords"},{"include":"#numbers"},{"include":"#identifier"},{"include":"#operator"},{"include":"#member"},{"include":"#function"}]}]}],"while":"\\\\G|^[\\\\t ]*(?=[\\"\'])"},{"begin":"([\\"\'])","end":"\\\\1","name":"string.quoted.double.berry","patterns":[{"match":"(\\\\\\\\x\\\\h{2})|(\\\\\\\\[0-7]{3})|(\\\\\\\\\\\\\\\\)|(\\\\\\\\\\")|(\\\\\\\\\')|(\\\\\\\\a)|(\\\\\\\\b)|(\\\\\\\\f)|(\\\\\\\\n)|(\\\\\\\\r)|(\\\\\\\\t)|(\\\\\\\\v)","name":"constant.character.escape.berry"}]}]}},"scopeName":"source.berry","aliases":["be"]}')),r=[e];export{r as default};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{B as e}from"./chunk-xsvv7xvt.js";import"./chunk-gf0502ds.js";var s=Object.freeze(JSON.parse('{"displayName":"Shell Session","fileTypes":["sh-session"],"name":"shellsession","patterns":[{"captures":{"1":{"name":"entity.other.prompt-prefix.shell-session"},"2":{"name":"punctuation.separator.prompt.shell-session"},"3":{"name":"source.shell","patterns":[{"include":"source.shell"}]}},"match":"^(?:((?:\\\\(\\\\S+\\\\)\\\\s*)?(?:sh\\\\S*?|\\\\w+\\\\S+[:@]\\\\S+(?:\\\\s+\\\\S+)?|\\\\[\\\\S+?[:@]\\\\N+?].*?))\\\\s*)?([#$%>❯➜\\\\p{Greek}])\\\\s+(.*)$"},{"match":"^.+$","name":"meta.output.shell-session"}],"scopeName":"text.shell-session","embeddedLangs":["shellscript"],"aliases":["console"]}')),t=[...e,s];export{t as default};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{l as a}from"./chunk-6v64ydme.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{F as a}from"./chunk-y949271p.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{u as a}from"./chunk-8veqp2gt.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Wenyan","name":"wenyan","patterns":[{"include":"#keywords"},{"include":"#constants"},{"include":"#operators"},{"include":"#symbols"},{"include":"#expression"},{"include":"#comment-blocks"},{"include":"#comment-lines"}],"repository":{"comment-blocks":{"begin":"([批注疏]曰)。?(「「|『)","end":"(」」|』)","name":"comment.block","patterns":[{"match":"\\\\\\\\.","name":"constant.character"}]},"comment-lines":{"begin":"[批注疏]曰","end":"$","name":"comment.line","patterns":[{"match":"\\\\\\\\.","name":"constant.character"}]},"constants":{"patterns":[{"match":"[·〇一七三九二五京億兆八六分十千又四垓埃塵微忽極正毫沙渺溝漠澗百秭穰絲纖萬負載釐零]","name":"constant.numeric"},{"match":"[其陰陽]","name":"constant.language"},{"begin":"「「|『","end":"」」|』","name":"string.quoted","patterns":[{"match":"\\\\\\\\.","name":"constant.character"}]}]},"expression":{"patterns":[{"include":"#variables"}]},"keywords":{"patterns":[{"match":"[元列數爻物術言]","name":"storage.type"},{"match":"乃行是術曰|若其不然者|乃歸空無|欲行是術|乃止是遍|若其然者|其物如是|乃得矣|之術也|必先得|是術曰|恆為是|之物也|乃得|是謂|云云|中之|為是|乃止|若非|或若|之長|其餘","name":"keyword.control"},{"match":"或云|蓋謂","name":"keyword.control"},{"match":"中有陽乎|中無陰乎|所餘幾何|不等於|不大於|不小於|等於|大於|小於|[乘以加於減變除]","name":"keyword.operator"},{"match":"不知何禍歟|不復存矣|姑妄行此|如事不諧|名之曰|吾嘗觀|之禍歟|乃作罷|吾有|今有|物之|書之|以施|昔之|是矣|之書|方悟|之義|嗚呼|之禍|[中今取噫夫施曰有豈]","name":"keyword.other"},{"match":"[之也充凡者若遍銜]","name":"keyword.control"}]},"symbols":{"patterns":[{"match":"[、。]","name":"punctuation.separator"}]},"variables":{"begin":"「","end":"」","name":"variable.other","patterns":[{"match":"\\\\\\\\.","name":"constant.character"}]}},"scopeName":"source.wenyan","aliases":["文言"]}')),n=[e];export{n as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse('{"displayName":"Tasl","fileTypes":["tasl"],"name":"tasl","patterns":[{"include":"#comment"},{"include":"#namespace"},{"include":"#type"},{"include":"#class"},{"include":"#edge"}],"repository":{"class":{"begin":"^\\\\s*(class)\\\\b","beginCaptures":{"1":{"name":"keyword.control.tasl.class"}},"end":"$","patterns":[{"include":"#key"},{"include":"#export"},{"include":"#expression"}]},"comment":{"captures":{"1":{"name":"punctuation.definition.comment.tasl"}},"match":"(#).*$","name":"comment.line.number-sign.tasl"},"component":{"begin":"->","beginCaptures":{"0":{"name":"punctuation.separator.tasl.component"}},"end":"$","patterns":[{"include":"#expression"}]},"coproduct":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.block.tasl.coproduct"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.block.tasl.coproduct"}},"patterns":[{"include":"#comment"},{"include":"#term"},{"include":"#option"}]},"datatype":{"match":"[A-Za-z][0-9A-Za-z]*:(?:[!$\\\\&-;=?-Z_a-z~]|%\\\\h{2})+","name":"string.regexp"},"edge":{"begin":"^\\\\s*(edge)\\\\b","beginCaptures":{"1":{"name":"keyword.control.tasl.edge"}},"end":"$","patterns":[{"include":"#key"},{"include":"#export"},{"match":"=/","name":"punctuation.separator.tasl.edge.source"},{"match":"/=>","name":"punctuation.separator.tasl.edge.target"},{"match":"=>","name":"punctuation.separator.tasl.edge"},{"include":"#expression"}]},"export":{"match":"::","name":"keyword.operator.tasl.export"},"expression":{"patterns":[{"include":"#literal"},{"include":"#uri"},{"include":"#product"},{"include":"#coproduct"},{"include":"#reference"},{"include":"#optional"},{"include":"#identifier"}]},"identifier":{"captures":{"1":{"name":"variable"}},"match":"([A-Za-z][0-9A-Za-z]*)\\\\b"},"key":{"match":"[A-Za-z][0-9A-Za-z]*:(?:[!$\\\\&-;=?-Z_a-z~]|%\\\\h{2})+","name":"markup.bold entity.name.class"},"literal":{"patterns":[{"include":"#datatype"}]},"namespace":{"captures":{"1":{"name":"keyword.control.tasl.namespace"},"2":{"patterns":[{"include":"#namespaceURI"},{"match":"[A-Za-z][0-9A-Za-z]*\\\\b","name":"entity.name"}]}},"match":"^\\\\s*(namespace)\\\\b(.*)"},"namespaceURI":{"match":"[a-z]+:[]!#-;=?-\\\\[_a-z~]+","name":"markup.underline.link"},"option":{"begin":"<-","beginCaptures":{"0":{"name":"punctuation.separator.tasl.option"}},"end":"$","patterns":[{"include":"#expression"}]},"optional":{"begin":"\\\\?","beginCaptures":{"0":{"name":"keyword.operator"}},"end":"$","patterns":[{"include":"#expression"}]},"product":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.tasl.product"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.tasl.product"}},"patterns":[{"include":"#comment"},{"include":"#term"},{"include":"#component"}]},"reference":{"captures":{"1":{"name":"markup.bold keyword.operator"},"2":{"patterns":[{"include":"#key"}]}},"match":"(\\\\*)\\\\s*(.*)"},"term":{"match":"[A-Za-z][0-9A-Za-z]*:(?:[!$\\\\&-;=?-Z_a-z~]|%\\\\h{2})+","name":"entity.other.tasl.key"},"type":{"begin":"^\\\\s*(type)\\\\b","beginCaptures":{"1":{"name":"keyword.control.tasl.type"}},"end":"$","patterns":[{"include":"#expression"}]},"uri":{"match":"<>","name":"variable.other.constant"}},"scopeName":"source.tasl"}')),n=[e];export{n as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{y as a}from"./chunk-vxrqpknz.js";import"./chunk-fgccx1yw.js";import"./chunk-9nqxn300.js";import"./chunk-a4mrrp97.js";import"./chunk-z1p7fbkb.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{j as e}from"./chunk-tcwzycpt.js";import"./chunk-gf0502ds.js";var n=Object.freeze(JSON.parse('{"displayName":"HXML","fileTypes":["hxml"],"foldingStartMarker":"--next","foldingStopMarker":"\\\\n\\\\n","name":"hxml","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.hxml"}},"match":"(#).*$\\\\n?","name":"comment.line.number-sign.hxml"},{"begin":"(?<!\\\\w)(--macro)\\\\b","beginCaptures":{"1":{"name":"keyword.other.hxml"}},"end":"\\\\n","patterns":[{"include":"source.hx#block-contents"}]},{"captures":{"1":{"name":"keyword.other.hxml"},"2":{"name":"support.package.hx"},"4":{"name":"entity.name.type.hx"}},"match":"(?<!\\\\w)(-(?:m|main|-main|-run))\\\\b\\\\s*\\\\b(?:(([a-z][0-9A-Za-z]*\\\\.)*)(_*[A-Z]\\\\w*))?\\\\b"},{"captures":{"1":{"name":"keyword.other.hxml"}},"match":"(?<!\\\\w)(-(?:cppia|cpp?|js|as3|swf-(header|version|lib(-extern)?)|swf9?|neko|python|php|cs|java-lib|java|xml|lua|hl|x|lib|D|resource|exclude|version|v|debug|prompt|cmd|dce\\\\s+(std|full|no)?|-flash-strict|-no-traces|-flash-use-stage|-neko-source|-gen-hx-classes|net-lib|net-std|c-arg|-each|-next|-display|-no-output|-times|-no-inline|-no-opt|-php-front|-php-lib|-php-prefix|-remap|-help-defines|-help-metas|help|-help|java|cs|-js-modern|-interp|-eval|-dce|-wait|-connect|-cwd|-run)).*$"},{"captures":{"1":{"name":"keyword.other.hxml"}},"match":"(?<!\\\\w)(-(?:-js(on)?|-lua|-swf-(header|version|lib(-extern)?)|-swf|-as3|-neko|-php|-cppia|-cpp|-cppia|-cs|-java-lib(-extern)?|-java|-jvm|-python|-hl|p|-class-path|L|-library|-define|r|-resource|-cmd|C|-verbose|-debug|-prompt|-xml|-json|-net-lib|-net-std|-c-arg|-version|-haxelib-global|h|-main|-server-connect|-server-listen)).*$"}],"scopeName":"source.hxml","embeddedLangs":["haxe"]}')),t=[...e,n];export{t as default};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import"./chunk-gf0502ds.js";var e=Object.freeze(JSON.parse(`{"displayName":"OpenSCAD","fileTypes":["scad"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*}","name":"openscad","patterns":[{"captures":{"1":{"name":"keyword.control.scad"}},"match":"^(module)\\\\s.*$","name":"meta.function.scad"},{"match":"\\\\b(if|else|for|intersection_for|assign|render|function|include|use)\\\\b","name":"keyword.control.scad"},{"begin":"/\\\\*\\\\*(?!/)","captures":{"0":{"name":"punctuation.definition.comment.scad"}},"end":"\\\\*/","name":"comment.block.documentation.scad"},{"begin":"/\\\\*","captures":{"0":{"name":"punctuation.definition.comment.scad"}},"end":"\\\\*/","name":"comment.block.scad"},{"captures":{"1":{"name":"punctuation.definition.comment.scad"}},"match":"(//).*$\\\\n?","name":"comment.line.double-slash.scad"},{"begin":"\\"","end":"\\"","name":"string.quoted.double.scad","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.scad"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.scad"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.scad"}},"name":"string.quoted.single.scad","patterns":[{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)","name":"constant.character.escape.scad"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.scad"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.scad"}},"name":"string.quoted.double.scad","patterns":[{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)","name":"constant.character.escape.scad"}]},{"match":"\\\\b(abs|acos|asun|atan2??|ceil|cos|exp|floor|ln|log|lookup|max|min|pow|rands|round|sign|sin|sqrt|tan|str|cube|sphere|cylinder|polyhedron|scale|rotate|translate|mirror|multimatrix|color|minkowski|hull|union|difference|intersection|echo)\\\\b","name":"support.function.scad"},{"match":";","name":"punctuation.terminator.statement.scad"},{"match":",[\\\\t |]*","name":"meta.delimiter.object.comma.scad"},{"match":"\\\\.","name":"meta.delimiter.method.period.scad"},{"match":"[{}]","name":"meta.brace.curly.scad"},{"match":"[()]","name":"meta.brace.round.scad"},{"match":"[]\\\\[]","name":"meta.brace.square.scad"},{"match":"[!$%\\\\&*]|--?|\\\\+\\\\+|[+~]|===?|=|!==??|<=|>=|<<=|>>=|>>>=|<>|[!<>]|&&|\\\\|\\\\||\\\\?:|\\\\*=|(?<!\\\\()/=|%=|\\\\+=|-=|&=|\\\\^=|\\\\b(in|instanceof|new|delete|typeof|void)\\\\b","name":"keyword.operator.scad"},{"match":"\\\\b((0([Xx])\\\\h+)|([0-9]+(\\\\.[0-9]+)?))\\\\b","name":"constant.numeric.scad"},{"match":"\\\\btrue\\\\b","name":"constant.language.boolean.true.scad"},{"match":"\\\\bfalse\\\\b","name":"constant.language.boolean.false.scad"}],"scopeName":"source.scad","aliases":["scad"]}`)),a=[e];export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{Z as a}from"./chunk-xg9nsz1a.js";import"./chunk-gf0502ds.js";export{a as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue