chore: migrate Regex Tools to LocalToolBox
This commit is contained in:
3
.npmrc
3
.npmrc
@@ -1,2 +1 @@
|
||||
@add-ideas:registry=https://git.add-ideas.de/api/packages/zemion/npm/
|
||||
|
||||
@add-ideas:registry=https://git.add-ideas.de/api/packages/lotobo/npm/
|
||||
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -2,6 +2,17 @@
|
||||
|
||||
## Unreleased
|
||||
|
||||
## 0.4.2 — 2026-07-27
|
||||
|
||||
- Move canonical source and package identity from the `zemion` account to the
|
||||
`lotobo` organization and consume Toolbox SDK 0.2.3 from its new namespace.
|
||||
- Remove the outer application frame and align the workbench with the shared
|
||||
`min(100%, 90rem)` Toolbox content width.
|
||||
- Replace the favicon with a file-style Regex mark derived from the MIT-licensed
|
||||
OOjs regular-expression icon, retaining its licence and attribution.
|
||||
- Rebuild the Go WebAssembly engine so its embedded module path uses the new
|
||||
canonical repository identity.
|
||||
|
||||
## 0.4.1 — 2026-07-27
|
||||
|
||||
- Keep the last completed syntax and execution frame visible while edited
|
||||
|
||||
28
LICENSES/OOjs-UI-icon-MIT.txt
Normal file
28
LICENSES/OOjs-UI-icon-MIT.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
OOjs UI regular-expression-progressive icon
|
||||
|
||||
Source:
|
||||
https://commons.wikimedia.org/wiki/File:OOjs_UI_icon_regular-expression-progressive.svg
|
||||
|
||||
The icon path is adapted into public/favicon.svg and recoloured. The
|
||||
surrounding rounded square, document shape, gradient and shadow are original
|
||||
Regex Tools artwork and are not part of the upstream icon.
|
||||
|
||||
Copyright © 2011–2017 OOjs UI Team and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -8,9 +8,9 @@ Patterns, replacement templates, test text and project files stay in the
|
||||
browser. There is no account, backend, upload, remote execution, telemetry,
|
||||
runtime CDN, remote font, or cloud-save service.
|
||||
|
||||
## Current release — 0.4.1
|
||||
## Current release — 0.4.2
|
||||
|
||||
The v0.4.1 release contains twelve selectable, executable profiles:
|
||||
The v0.4.2 release contains twelve selectable, executable profiles:
|
||||
|
||||
- **JavaScript (ECMAScript)** — the current browser's native `RegExp`, with
|
||||
ECMAScript 2025 syntax supplied by regexpp 4.12.2;
|
||||
@@ -356,7 +356,7 @@ The normal build performs no network download. `vite.config.ts` uses
|
||||
|
||||
## Toolbox SDK and Portal
|
||||
|
||||
The application uses Toolbox SDK 0.2.2 `AppShell`. Its canonical typed/static
|
||||
The application uses Toolbox SDK 0.2.3 `AppShell`. Its canonical typed/static
|
||||
manifest source is `src/toolbox/manifest.source.json`; generation fails if its
|
||||
version or source identity drifts.
|
||||
|
||||
|
||||
12
SOURCE.md
12
SOURCE.md
@@ -1,10 +1,10 @@
|
||||
# Source identity
|
||||
|
||||
- Project: Regex Tools
|
||||
- Release version: `0.4.1`
|
||||
- Release tag: `v0.4.1`
|
||||
- Repository: <https://git.add-ideas.de/zemion/regex-tools>
|
||||
- Previous release tag: `v0.4.0`
|
||||
- Release version: `0.4.2`
|
||||
- Release tag: `v0.4.2`
|
||||
- Repository: <https://git.add-ideas.de/lotobo/regex-tools>
|
||||
- Previous release tag: `v0.4.1`
|
||||
- Licence: GPL-3.0-or-later
|
||||
- Copyright: © 2026 Albrecht Degering
|
||||
|
||||
@@ -82,7 +82,7 @@ metadata, closed file sets, checksums and exact licence/notice material are
|
||||
installed under `public/engines/` and included in the application source and
|
||||
build.
|
||||
|
||||
The v0.4.1 release includes native browser ECMAScript, standalone PCRE2 10.47,
|
||||
The v0.4.2 release includes native browser ECMAScript, standalone PCRE2 10.47,
|
||||
PHP 8.5.8 `preg` with PCRE2 10.44, legacy Perl 5.28.1 via WebPerl 0.09-beta,
|
||||
CPython 3.14.2 `re`, CRuby 4.0.0 `Regexp`, TeaVM 0.15.0 `java.util.regex`,
|
||||
Emscripten 6.0.4 libc++ `std::wregex`, Go 1.26.5 `regexp`, Rust `regex` 1.13.1,
|
||||
@@ -91,4 +91,4 @@ TeaVM-backed Scala/JVM compatibility profile.
|
||||
|
||||
Earlier releases remain available under their historical tags and artifact
|
||||
coordinates. A future public artifact must bump package, manifest, tag and
|
||||
source identity together; it must not reuse `v0.4.1`.
|
||||
source identity together; it must not reuse `v0.4.2`.
|
||||
|
||||
@@ -6,8 +6,8 @@ Exact dependency resolution is recorded in `package-lock.json`.
|
||||
|
||||
| Component | Version | Licence | Shipped | Role and source |
|
||||
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `@add-ideas/toolbox-contract` | 0.2.2 | Apache-2.0 | Runtime | Manifest contract; <https://git.add-ideas.de/zemion/toolbox-sdk> |
|
||||
| `@add-ideas/toolbox-shell-react` | 0.2.2 | Apache-2.0 | Runtime | Shared shell; same source |
|
||||
| `@add-ideas/toolbox-contract` | 0.2.3 | Apache-2.0 | Runtime | Manifest contract; <https://git.add-ideas.de/lotobo/toolbox-sdk> |
|
||||
| `@add-ideas/toolbox-shell-react` | 0.2.3 | Apache-2.0 | Runtime | Shared shell; same source |
|
||||
| `@eslint-community/regexpp` | 4.12.2 | MIT | Syntax worker | ECMAScript parser; <https://github.com/eslint-community/regexpp> |
|
||||
| CodeMirror packages | state 6.7.1; view 6.43.6; language 6.12.4; commands 6.10.4; search 6.7.1 | MIT | Runtime | Editors; <https://github.com/codemirror> |
|
||||
| `@lezer/highlight` | 1.2.3 | MIT | Runtime | Editor highlighting support; <https://github.com/lezer-parser/highlight> |
|
||||
@@ -46,7 +46,12 @@ Exact dependency resolution is recorded in `package-lock.json`.
|
||||
| Vite | 8.1.5 | MIT | Generated helpers | Production build; <https://github.com/vitejs/vite> |
|
||||
| Rolldown | 1.1.5 | MIT | Generated helpers | Production bundling; <https://github.com/rolldown/rolldown> |
|
||||
|
||||
`@add-ideas/toolbox-testkit` 0.2.2 and the other test/build dependencies are
|
||||
The application icon adapts and recolours the MIT-licensed
|
||||
[OOjs UI regular-expression-progressive icon](https://commons.wikimedia.org/wiki/File:OOjs_UI_icon_regular-expression-progressive.svg)
|
||||
inside original Regex Tools file artwork. Its copyright notice, source and
|
||||
licence are preserved in `LICENSES/OOjs-UI-icon-MIT.txt`.
|
||||
|
||||
`@add-ideas/toolbox-testkit` 0.2.3 and the other test/build dependencies are
|
||||
development-only and are not part of the static runtime bundle.
|
||||
|
||||
The PHP pack's `native-components.json` is scoped to the exact
|
||||
|
||||
@@ -18,7 +18,7 @@ budget. Consumers must inspect the preview status rather than treating a
|
||||
preview as complete. In particular, list export is disabled if its template
|
||||
would consume an incomplete value.
|
||||
|
||||
Repeated captures expose only the final retained value in all twelve v0.4.1
|
||||
Repeated captures expose only the final retained value in all twelve v0.4.2
|
||||
profiles. This includes .NET even though its native API can retain capture
|
||||
history: the current adapter deliberately normalizes only the final record and
|
||||
reports `captureHistory: false`. The UI labels the limitation and does not
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Flavour support
|
||||
|
||||
Version 0.4.1 exposes twelve executable profiles. “Partial lexical provider”
|
||||
Version 0.4.2 exposes twelve executable profiles. “Partial lexical provider”
|
||||
means that Regex Tools recognizes common structure and replacement tokens for
|
||||
explanation only; the named runtime compiler and replacement operation remain
|
||||
authoritative.
|
||||
|
||||
@@ -11,7 +11,7 @@ selected real ECMAScript or PCRE2 worker. It can preserve:
|
||||
authoritative, untruncated output.
|
||||
|
||||
PHP, Perl, Python, Ruby, Java, C++, Go, Rust, .NET and Scala compatibility are
|
||||
not supported minimization targets in v0.4.1. The workspace disables reduction
|
||||
not supported minimization targets in v0.4.2. The workspace disables reduction
|
||||
for those active profiles; it does not substitute ECMAScript, PCRE2 or a
|
||||
lexical provider as an execution oracle.
|
||||
|
||||
|
||||
@@ -38,9 +38,9 @@ should test both a direct root mount and a nested mount such as
|
||||
`/apps/regex/`, including cold loading of all twelve profiles.
|
||||
|
||||
The Portal must consume the immutable release ZIP, verify its SHA-256, verify
|
||||
manifest ID `de.add-ideas.regex-tools` and version `0.4.1`, and mount it at a
|
||||
manifest ID `de.add-ideas.regex-tools` and version `0.4.2`, and mount it at a
|
||||
relative target such as `apps/regex/`.
|
||||
|
||||
The package, manifest, tag, artifact URL and checksum must all use the v0.4.1
|
||||
The package, manifest, tag, artifact URL and checksum must all use the v0.4.2
|
||||
identity. Historical artifact coordinates remain immutable and must not be
|
||||
overwritten or reused.
|
||||
|
||||
@@ -4,9 +4,9 @@ Inspection date: 2026-07-27.
|
||||
|
||||
| Reference | Exact revision/version | Licence | Use and copying status |
|
||||
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Regex Tools | Release identity `v0.4.1` | GPL-3.0-or-later | Application source written for this project. |
|
||||
| Toolbox SDK | `53c40a61ba1581246f65773fcbb1c1cfd31ac98e` / 0.2.2 | Apache-2.0 | Contract, shell and release conventions; package APIs used, no source adapted. |
|
||||
| Toolbox Portal | `9347554324299c8ec9dfaec2c9730907736f62c3` / aggregate v0.8.0 / package 0.2.7 | AGPL-3.0-only | Assembly/lock conventions inspected; no source copied into the app. |
|
||||
| Regex Tools | Release identity `v0.4.2` | GPL-3.0-or-later | Application source written for this project. |
|
||||
| Toolbox SDK | `ef2dab4b46c61812c9a877d8a19fe497b4a4630a` / 0.2.3 | Apache-2.0 | Contract, shell and release conventions; package APIs used, no source adapted. |
|
||||
| Toolbox Portal | `43670a58249a920d37b7465cfda6724f644a92f7` / aggregate v0.9.1 / package 0.2.9 | AGPL-3.0-only | Assembly/lock conventions inspected; no source copied into the app. |
|
||||
| regexpp | 4.12.2; pinned npm integrity in `package-lock.json` | MIT | ECMAScript 2025 syntax provider; normalized in the syntax worker. |
|
||||
| PCRE2 | Signed tag 10.47; commit `f454e231fe5006dd7ff8f4693fd2b8eb94333429` | BSD-3-Clause WITH PCRE2-exception | Standalone pinned offline build; verified 8-bit WebAssembly pack shipped, source not vendored. |
|
||||
| PHP | Executable identity 8.5.8; embedded PCRE2 identity 10.44 | PHP License version 4 (BSD-3-Clause), elected through the earlier licence's later-version option | Actual PHP `preg_*` compiler, matcher and replacement runtime; PHP source not vendored. |
|
||||
@@ -30,6 +30,6 @@ Inspection date: 2026-07-27.
|
||||
| RegexLib | Website inspected | Redistribution licence not established | No fixture copied. |
|
||||
| RGXP.RU | Website inspected | Redistribution licence not established | No fixture copied. |
|
||||
|
||||
All v0.1.0 through v0.4.1 conformance cases are project-authored. See
|
||||
All v0.1.0 through v0.4.2 conformance cases are project-authored. See
|
||||
`tests/fixtures/README.md`. Runtime pack metadata and adjacent licence/notice
|
||||
files are authoritative for the exact binary distribution.
|
||||
|
||||
@@ -18,8 +18,8 @@ on publication failure, replaces an existing exact version only with
|
||||
`--force`, and produces:
|
||||
|
||||
```text
|
||||
release/regex-tools-0.4.1.zip
|
||||
release/regex-tools-0.4.1.zip.sha256
|
||||
release/regex-tools-0.4.2.zip
|
||||
release/regex-tools-0.4.2.zip.sha256
|
||||
```
|
||||
|
||||
The release scan checks ASCII/UTF-8, UTF-16LE and UTF-16BE content in text,
|
||||
@@ -43,5 +43,5 @@ anchored base-runtime legal files. The C++ gate requires its exact traced
|
||||
component/source manifest and six independently pinned legal files. The release
|
||||
packager names every one of those files explicitly.
|
||||
|
||||
The existing v0.1.0 through v0.4.0 ZIPs and matching sidecars are historical
|
||||
immutable artifacts. Creating v0.4.1 must not replace, rename or remove them.
|
||||
The existing v0.1.0 through v0.4.1 ZIPs and matching sidecars are historical
|
||||
immutable artifacts. Creating v0.4.2 must not replace, rename or remove them.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
module git.add-ideas.de/zemion/regex-tools/engines/go
|
||||
module git.add-ideas.de/lotobo/regex-tools/engines/go
|
||||
|
||||
go 1.26.0
|
||||
|
||||
|
||||
32
package-lock.json
generated
32
package-lock.json
generated
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "regex-tools",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "regex-tools",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@add-ideas/toolbox-contract": "0.2.2",
|
||||
"@add-ideas/toolbox-shell-react": "0.2.2",
|
||||
"@add-ideas/toolbox-contract": "0.2.3",
|
||||
"@add-ideas/toolbox-shell-react": "0.2.3",
|
||||
"@codemirror/commands": "6.10.4",
|
||||
"@codemirror/language": "6.12.4",
|
||||
"@codemirror/search": "6.7.1",
|
||||
@@ -23,7 +23,7 @@
|
||||
"react-dom": "19.2.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@add-ideas/toolbox-testkit": "0.2.2",
|
||||
"@add-ideas/toolbox-testkit": "0.2.3",
|
||||
"@bjorn3/browser_wasi_shim": "0.4.2",
|
||||
"@eslint/js": "10.0.1",
|
||||
"@php-wasm/universal": "3.1.46",
|
||||
@@ -55,18 +55,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@add-ideas/toolbox-contract": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.2/toolbox-contract-0.2.2.tgz",
|
||||
"integrity": "sha512-VcZ8j4O2PgFaIYgxs6r9u0uPxA+hHKwhCW+omfeVCtbjAAYhH2KhRlBGm0ERVVYcK5kchyzZLXrC4LKWRotVzg==",
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/lotobo/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.3/toolbox-contract-0.2.3.tgz",
|
||||
"integrity": "sha512-T0PVSuMT40GjTDfQJhEEY3ZawQq8zz1/ry95JdKI6W39CdLacaRXdGnEpDCMHt+jUbf1Jz7Nat/M5dFCgKVM9A==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@add-ideas/toolbox-shell-react": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.2/toolbox-shell-react-0.2.2.tgz",
|
||||
"integrity": "sha512-w/xbLCd50a2Jq7vQ9Z9ygUOuqlOCRkIYlk4vSJx0mf4REJNeMYi3PE2MbaLUC4DkQWyrmatsa5HNT89o0l91BA==",
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/lotobo/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.3/toolbox-shell-react-0.2.3.tgz",
|
||||
"integrity": "sha512-DT5lQDH48BFkFcmFLZnQh7+Cm73JzBPcmp5WzUXypfkUXpEyDYHzaXgmW4kZ0edSwh4RK4sPmx+JPtK0X4aKCQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@add-ideas/toolbox-contract": "0.2.2"
|
||||
"@add-ideas/toolbox-contract": "0.2.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=18 <20",
|
||||
@@ -74,13 +74,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@add-ideas/toolbox-testkit": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-testkit/-/0.2.2/toolbox-testkit-0.2.2.tgz",
|
||||
"integrity": "sha512-ZxrRYiJI/j5aXwcd3mQItgDl1iOJ6N26+MpIG18qVZNwKKFCTCfSTzgzRooPt8rRc1MQYTPo4c+l/QpOWuTXxA==",
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://git.add-ideas.de/api/packages/lotobo/npm/%40add-ideas%2Ftoolbox-testkit/-/0.2.3/toolbox-testkit-0.2.3.tgz",
|
||||
"integrity": "sha512-sq1MwhKWfFKen+N+124hl74qQimRSvmQ9sOU7jdcI+2qCKZ67+2B8rWyezeV80uTFu4Jv6deHksfYQ/tKNV6XQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@add-ideas/toolbox-contract": "0.2.2"
|
||||
"@add-ideas/toolbox-contract": "0.2.3"
|
||||
},
|
||||
"bin": {
|
||||
"toolbox-check": "dist/cli.js"
|
||||
|
||||
14
package.json
14
package.json
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "regex-tools",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"author": "Albrecht Degering",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://git.add-ideas.de/zemion/regex-tools.git"
|
||||
"url": "git+https://git.add-ideas.de/lotobo/regex-tools.git"
|
||||
},
|
||||
"homepage": "https://git.add-ideas.de/zemion/regex-tools",
|
||||
"homepage": "https://git.add-ideas.de/lotobo/regex-tools",
|
||||
"bugs": {
|
||||
"url": "https://git.add-ideas.de/zemion/regex-tools/issues"
|
||||
"url": "https://git.add-ideas.de/lotobo/regex-tools/issues"
|
||||
},
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -72,8 +72,8 @@
|
||||
"release:artifact": "npm run check && npm run test:browser && npm run package:release"
|
||||
},
|
||||
"dependencies": {
|
||||
"@add-ideas/toolbox-contract": "0.2.2",
|
||||
"@add-ideas/toolbox-shell-react": "0.2.2",
|
||||
"@add-ideas/toolbox-contract": "0.2.3",
|
||||
"@add-ideas/toolbox-shell-react": "0.2.3",
|
||||
"@codemirror/commands": "6.10.4",
|
||||
"@codemirror/language": "6.12.4",
|
||||
"@codemirror/search": "6.7.1",
|
||||
@@ -86,7 +86,7 @@
|
||||
"react-dom": "19.2.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@add-ideas/toolbox-testkit": "0.2.2",
|
||||
"@add-ideas/toolbox-testkit": "0.2.3",
|
||||
"@bjorn3/browser_wasi_shim": "0.4.2",
|
||||
"@eslint/js": "10.0.1",
|
||||
"@php-wasm/universal": "3.1.46",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
911f8f5782931320f5b8d1160a76365b83aea6447ee6c04fa6d5591467db9dad LICENSE-Go.txt
|
||||
208034ac6bb2a1867fa082c51edd5e77098f16ff55e7907f9c9a51b59e6390ff engine-metadata.json
|
||||
ddafd6401e0674c048ee066677157db0b03480f716262845ea30639daffb3ae5 go-regex.wasm
|
||||
38a8e5518e670ca40efce95753d6836ed4686c5d25bb049df2c97e418ec76636 engine-metadata.json
|
||||
d2faa632cc35d4d63040f9a8d7ad15e1bd5866a4d69c72a7bbefadf7fadcb676 go-regex.wasm
|
||||
0c949f4996f9a89698e4b5c586de32249c3b69b7baadb64d220073cc04acba14 wasm_exec.mjs
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
},
|
||||
{
|
||||
"path": "engines/go/go.mod",
|
||||
"sha256": "b2744a26c11ce6be55fabd2109b89f34b0db413abab8b40c9f7e8ea83e8b7bff",
|
||||
"sha256": "1d84837beaa0d734f26a7e87ed83f5a8ffbc4e9d049260636ef127ec163c5f58",
|
||||
"bytes": 85
|
||||
},
|
||||
{
|
||||
@@ -70,7 +70,7 @@
|
||||
},
|
||||
{
|
||||
"path": "go-regex.wasm",
|
||||
"sha256": "ddafd6401e0674c048ee066677157db0b03480f716262845ea30639daffb3ae5",
|
||||
"sha256": "d2faa632cc35d4d63040f9a8d7ad15e1bd5866a4d69c72a7bbefadf7fadcb676",
|
||||
"bytes": 3904895
|
||||
},
|
||||
{
|
||||
|
||||
Binary file not shown.
@@ -1,7 +1,26 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
|
||||
<title id="title">Regex Tools</title>
|
||||
<rect width="64" height="64" rx="15" fill="#5532a8"/>
|
||||
<path d="M15 22h20M15 32h12M15 42h20" fill="none" stroke="#fff" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="m46 20-3 24m-7-8 20-8" fill="none" stroke="#80e1cb" stroke-width="5" stroke-linecap="round"/>
|
||||
<metadata>
|
||||
The regular-expression symbol is adapted from the OOjs UI
|
||||
regular-expression-progressive icon, Copyright 2011–2017 OOjs UI Team and
|
||||
other contributors, MIT licensed. The surrounding application icon is
|
||||
Copyright 2026 Albrecht Degering, GPL-3.0-or-later.
|
||||
</metadata>
|
||||
<defs>
|
||||
<linearGradient id="regex-bg" x1="8" y1="5" x2="56" y2="59" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#6d5cff"/>
|
||||
<stop offset="1" stop-color="#18224d"/>
|
||||
</linearGradient>
|
||||
<filter id="regex-shadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="0" dy="2" stdDeviation="1.25" flood-color="#060b24" flood-opacity="0.32"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<rect width="64" height="64" rx="14" fill="url(#regex-bg)"/>
|
||||
<g filter="url(#regex-shadow)">
|
||||
<path d="M18 9h22l9 9v33a4 4 0 0 1-4 4H18a4 4 0 0 1-4-4V13a4 4 0 0 1 4-4Z" fill="#fff"/>
|
||||
<path d="M40 9v9h9Z" fill="#d9ddff"/>
|
||||
<g transform="translate(20 25) scale(1.2)" fill="#36c">
|
||||
<path d="M1.62 10a13.63 13.63 0 0 0 .45 3.51A13.39 13.39 0 0 0 3.4 16.7a.91.91 0 0 1 .1.27.41.41 0 0 1 0 .21.38.38 0 0 1-.1.15l-.14.11-.83.5a14.89 14.89 0 0 1-1.11-2 13.62 13.62 0 0 1-.74-2 13.22 13.22 0 0 1-.42-2 16.4 16.4 0 0 1 0-4.14 13.22 13.22 0 0 1 .42-2 13.84 13.84 0 0 1 .74-2A14.94 14.94 0 0 1 2.4 2l.83.51.14.11a.4.4 0 0 1 .1.15.41.41 0 0 1 0 .21.93.93 0 0 1-.1.27A13.6 13.6 0 0 0 1.62 10ZM5 13.51a1.53 1.53 0 0 1 .11-.59 1.5 1.5 0 0 1 .31-.48 1.5 1.5 0 0 1 1.65-.32 1.51 1.51 0 0 1 .8.8 1.47 1.47 0 0 1 .12.59 1.46 1.46 0 0 1-.12.59 1.56 1.56 0 0 1-.32.48 1.46 1.46 0 0 1-.48.32 1.57 1.57 0 0 1-1.18 0 1.4 1.4 0 0 1-.47-.32A1.5 1.5 0 0 1 5 13.51Zm10.8-4.72-.54.94-1.75-1-.34-.23a1.38 1.38 0 0 1-.27-.26A1.84 1.84 0 0 1 13 9v2h-1V9a2.16 2.16 0 0 1 .12-.76 1.82 1.82 0 0 1-.58.48l-1.74 1-.54-.94 1.73-1a2.25 2.25 0 0 1 .75-.29 1.77 1.77 0 0 1-.75-.28L9.2 6.2l.54-.94 1.75 1 .33.24a1.64 1.64 0 0 1 .27.27A2 2 0 0 1 12 6V4h1v2a2.93 2.93 0 0 1 0 .4 1.36 1.36 0 0 1-.1.36 2.24 2.24 0 0 1 .59-.49l1.74-1 .54.94-1.73 1-.36.18a1.29 1.29 0 0 1-.36.1 2.11 2.11 0 0 1 .36.1 2 2 0 0 1 .36.19ZM18.37 10a13.65 13.65 0 0 0-.45-3.51 13.81 13.81 0 0 0-1.32-3.27.93.93 0 0 1-.1-.27.45.45 0 0 1 0-.21.36.36 0 0 1 .1-.15l.14-.11.86-.48a15.54 15.54 0 0 1 1.1 2 13.79 13.79 0 0 1 .74 2 13.18 13.18 0 0 1 .42 2 16.16 16.16 0 0 1 .14 2 16.21 16.21 0 0 1-.13 2 13.18 13.18 0 0 1-.42 2 13.57 13.57 0 0 1-.74 2 15.49 15.49 0 0 1-1.1 2l-.84-.5-.14-.11a.35.35 0 0 1-.1-.15.44.44 0 0 1 0-.21.91.91 0 0 1 .1-.27 13.62 13.62 0 0 0 1.31-3.23 13.69 13.69 0 0 0 .43-3.53Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 413 B After Width: | Height: | Size: 2.7 KiB |
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"$schema": "https://git.add-ideas.de/zemion/toolbox-sdk/raw/branch/main/schemas/toolbox-app.v1.schema.json",
|
||||
"$schema": "https://git.add-ideas.de/lotobo/toolbox-sdk/raw/branch/main/schemas/toolbox-app.v1.schema.json",
|
||||
"schemaVersion": 1,
|
||||
"id": "de.add-ideas.regex-tools",
|
||||
"name": "Regex Tools",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||
"entry": "./",
|
||||
"icon": "./favicon.svg",
|
||||
@@ -27,14 +27,14 @@
|
||||
"telemetry": false
|
||||
},
|
||||
"source": {
|
||||
"repository": "https://git.add-ideas.de/zemion/regex-tools",
|
||||
"repository": "https://git.add-ideas.de/lotobo/regex-tools",
|
||||
"license": "GPL-3.0-or-later"
|
||||
},
|
||||
"actions": [
|
||||
{
|
||||
"id": "source",
|
||||
"label": "Source",
|
||||
"url": "https://git.add-ideas.de/zemion/regex-tools"
|
||||
"url": "https://git.add-ideas.de/lotobo/regex-tools"
|
||||
}
|
||||
],
|
||||
"assets": [
|
||||
|
||||
@@ -29,7 +29,7 @@ if (
|
||||
}
|
||||
|
||||
if (
|
||||
source.source?.repository !== "https://git.add-ideas.de/zemion/regex-tools" ||
|
||||
source.source?.repository !== "https://git.add-ideas.de/lotobo/regex-tools" ||
|
||||
source.source?.license !== "GPL-3.0-or-later"
|
||||
) {
|
||||
throw new Error("Manifest source identity is incomplete or inconsistent");
|
||||
|
||||
@@ -19,7 +19,7 @@ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const zipEpoch = new Date(1980, 0, 1, 0, 0, 0);
|
||||
const gplVersion3TextSha256 =
|
||||
"fb981668c18a279e285fc4d83fba1e836cc84dd4daa73c9697d3cfd2d8aca6e0";
|
||||
const expectedApplicationVersion = "0.4.1";
|
||||
const expectedApplicationVersion = "0.4.2";
|
||||
const requiredRootFiles = [
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
@@ -341,7 +341,7 @@ async function collectReleaseEntries() {
|
||||
packageJson.version !== expectedApplicationVersion ||
|
||||
packageJson.license !== "GPL-3.0-or-later" ||
|
||||
packageJson.repository?.url !==
|
||||
"git+https://git.add-ideas.de/zemion/regex-tools.git"
|
||||
"git+https://git.add-ideas.de/lotobo/regex-tools.git"
|
||||
) {
|
||||
throw new Error("Package version, licence or source identity drifted.");
|
||||
}
|
||||
@@ -354,7 +354,7 @@ async function collectReleaseEntries() {
|
||||
`- Release tag: \`v${expectedApplicationVersion}\``,
|
||||
) ||
|
||||
!sourceIdentity.includes(
|
||||
"- Repository: <https://git.add-ideas.de/zemion/regex-tools>",
|
||||
"- Repository: <https://git.add-ideas.de/lotobo/regex-tools>",
|
||||
)
|
||||
) {
|
||||
throw new Error("SOURCE.md release identity drifted.");
|
||||
@@ -565,7 +565,7 @@ async function collectReleaseEntries() {
|
||||
manifest.id !== "de.add-ideas.regex-tools" ||
|
||||
manifest.version !== packageJson.version ||
|
||||
manifest.source?.repository !==
|
||||
"https://git.add-ideas.de/zemion/regex-tools" ||
|
||||
"https://git.add-ideas.de/lotobo/regex-tools" ||
|
||||
manifest.source?.license !== "GPL-3.0-or-later"
|
||||
) {
|
||||
throw new Error("Packaged manifest identity is inconsistent.");
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
} from "../regex/generation/generation-limits";
|
||||
import { manifest } from "../toolbox/manifest";
|
||||
|
||||
const releaseSourceUrl = `https://git.add-ideas.de/zemion/regex-tools/src/tag/v${manifest.version}`;
|
||||
const releaseSourceUrl = `https://git.add-ideas.de/lotobo/regex-tools/src/tag/v${manifest.version}`;
|
||||
|
||||
export function HelpDialog({
|
||||
open,
|
||||
|
||||
@@ -48,6 +48,18 @@
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
min-width: 320px;
|
||||
min-height: 100%;
|
||||
background: var(--toolbox-background);
|
||||
}
|
||||
|
||||
body {
|
||||
min-width: 320px;
|
||||
min-height: 100vh;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
@@ -74,7 +86,7 @@ textarea:focus-visible,
|
||||
position: relative;
|
||||
width: min(100%, 90rem);
|
||||
margin-inline: auto;
|
||||
padding: 1rem clamp(0.75rem, 2.5vw, 2rem) 3rem;
|
||||
padding: 1rem 0 3rem;
|
||||
color: var(--toolbox-text);
|
||||
}
|
||||
|
||||
@@ -2025,10 +2037,6 @@ tbody tr.is-selected {
|
||||
}
|
||||
|
||||
@media (max-width: 40rem) {
|
||||
.regex-application {
|
||||
padding-inline: 0.5rem;
|
||||
}
|
||||
|
||||
.command-bar > label:not(.check-control) {
|
||||
flex: 1 1 10rem;
|
||||
min-width: 0;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"$schema": "https://git.add-ideas.de/zemion/toolbox-sdk/raw/branch/main/schemas/toolbox-app.v1.schema.json",
|
||||
"$schema": "https://git.add-ideas.de/lotobo/toolbox-sdk/raw/branch/main/schemas/toolbox-app.v1.schema.json",
|
||||
"schemaVersion": 1,
|
||||
"id": "de.add-ideas.regex-tools",
|
||||
"name": "Regex Tools",
|
||||
"version": "0.4.1",
|
||||
"version": "0.4.2",
|
||||
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||
"entry": "./",
|
||||
"icon": "./favicon.svg",
|
||||
@@ -27,14 +27,14 @@
|
||||
"telemetry": false
|
||||
},
|
||||
"source": {
|
||||
"repository": "https://git.add-ideas.de/zemion/regex-tools",
|
||||
"repository": "https://git.add-ideas.de/lotobo/regex-tools",
|
||||
"license": "GPL-3.0-or-later"
|
||||
},
|
||||
"actions": [
|
||||
{
|
||||
"id": "source",
|
||||
"label": "Source",
|
||||
"url": "https://git.add-ideas.de/zemion/regex-tools"
|
||||
"url": "https://git.add-ideas.de/lotobo/regex-tools"
|
||||
}
|
||||
],
|
||||
"assets": [
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export const APPLICATION_VERSION = "0.4.1";
|
||||
export const APPLICATION_VERSION = "0.4.2";
|
||||
export const SYNTAX_PROFILE = "community";
|
||||
export const REGEXPP_VERSION = "4.12.2";
|
||||
|
||||
@@ -15,6 +15,49 @@ async function waitForReady(page: Page) {
|
||||
});
|
||||
}
|
||||
|
||||
async function attemptRunWhileDisabled(page: Page) {
|
||||
return page.evaluate(() => {
|
||||
const button = document.querySelector<HTMLButtonElement>(".run-button");
|
||||
if (!button) throw new Error("Run button missing");
|
||||
if (!button.disabled) return false;
|
||||
button.click();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
test("uses the shared 90rem content width without a browser body frame", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.setViewportSize({ width: 1800, height: 900 });
|
||||
await page.goto("./");
|
||||
await expect(page.locator(".regex-application")).toBeVisible();
|
||||
|
||||
const layout = await page.evaluate(() => {
|
||||
const shellMain = document.querySelector<HTMLElement>(
|
||||
".toolbox-shell__main",
|
||||
);
|
||||
const application =
|
||||
document.querySelector<HTMLElement>(".regex-application");
|
||||
if (!shellMain || !application)
|
||||
throw new Error("Application shell missing");
|
||||
|
||||
const shellMainStyle = getComputedStyle(shellMain);
|
||||
return {
|
||||
bodyMargin: getComputedStyle(document.body).margin,
|
||||
shellMainWidth: shellMain.getBoundingClientRect().width,
|
||||
shellMainContentWidth:
|
||||
shellMain.clientWidth -
|
||||
Number.parseFloat(shellMainStyle.paddingLeft) -
|
||||
Number.parseFloat(shellMainStyle.paddingRight),
|
||||
applicationWidth: application.getBoundingClientRect().width,
|
||||
};
|
||||
});
|
||||
|
||||
expect(layout.bodyMargin).toBe("0px");
|
||||
expect(layout.shellMainWidth).toBe(1440);
|
||||
expect(layout.applicationWidth).toBe(layout.shellMainContentWidth);
|
||||
});
|
||||
|
||||
test("standalone ECMAScript workbench parses, explains and extracts", async ({
|
||||
page,
|
||||
}) => {
|
||||
@@ -451,18 +494,20 @@ test("rapid pattern and replacement edits cannot run with stale syntax", async (
|
||||
|
||||
await setEditor(page, "editor-regular-expression-pattern", "(?<stale>\\w+)");
|
||||
await setEditor(page, "editor-replacement-template", "$<stale>");
|
||||
await setEditor(page, "editor-replacement-template", "[$<letter>]");
|
||||
await setEditor(page, "editor-test-text", "A B");
|
||||
await setEditor(
|
||||
page,
|
||||
"editor-regular-expression-pattern",
|
||||
"(?<letter>[A-Z])",
|
||||
);
|
||||
await setEditor(page, "editor-replacement-template", "[$<letter>]");
|
||||
await setEditor(page, "editor-test-text", "A B");
|
||||
|
||||
const runButton = page.getByRole("button", { name: "Run", exact: true });
|
||||
await expect(runButton).toBeDisabled();
|
||||
await runButton.evaluate((button: HTMLButtonElement) => button.click());
|
||||
await expect(page.locator(".run-status")).not.toHaveClass(/status-running/u);
|
||||
expect(await attemptRunWhileDisabled(page)).toBe(true);
|
||||
await expect(page.locator(".run-status")).toHaveClass(/status-idle/u);
|
||||
await expect(page.locator(".run-status")).toContainText(
|
||||
"last completed result remains visible",
|
||||
);
|
||||
await expect(page.locator(".extraction-row")).toHaveCount(
|
||||
initialExtractionCount,
|
||||
);
|
||||
@@ -476,9 +521,8 @@ test("rapid pattern and replacement edits cannot run with stale syntax", async (
|
||||
await expect(currentNamedToken.locator("small")).toHaveText("named capture");
|
||||
|
||||
await page.getByRole("checkbox", { name: "Ignore case (i)" }).check();
|
||||
await expect(runButton).toBeDisabled();
|
||||
await runButton.evaluate((button: HTMLButtonElement) => button.click());
|
||||
await expect(page.locator(".run-status")).not.toHaveClass(/status-running/u);
|
||||
expect(await attemptRunWhileDisabled(page)).toBe(true);
|
||||
await expect(page.locator(".run-status")).toHaveClass(/status-idle/u);
|
||||
|
||||
await expect(runButton).toBeEnabled();
|
||||
await runButton.click();
|
||||
|
||||
Reference in New Issue
Block a user