Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d40af2e112 |
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
|
## 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
|
## 0.4.1 — 2026-07-27
|
||||||
|
|
||||||
- Keep the last completed syntax and execution frame visible while edited
|
- 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,
|
browser. There is no account, backend, upload, remote execution, telemetry,
|
||||||
runtime CDN, remote font, or cloud-save service.
|
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
|
- **JavaScript (ECMAScript)** — the current browser's native `RegExp`, with
|
||||||
ECMAScript 2025 syntax supplied by regexpp 4.12.2;
|
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
|
## 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
|
manifest source is `src/toolbox/manifest.source.json`; generation fails if its
|
||||||
version or source identity drifts.
|
version or source identity drifts.
|
||||||
|
|
||||||
|
|||||||
12
SOURCE.md
12
SOURCE.md
@@ -1,10 +1,10 @@
|
|||||||
# Source identity
|
# Source identity
|
||||||
|
|
||||||
- Project: Regex Tools
|
- Project: Regex Tools
|
||||||
- Release version: `0.4.1`
|
- Release version: `0.4.2`
|
||||||
- Release tag: `v0.4.1`
|
- Release tag: `v0.4.2`
|
||||||
- Repository: <https://git.add-ideas.de/zemion/regex-tools>
|
- Repository: <https://git.add-ideas.de/lotobo/regex-tools>
|
||||||
- Previous release tag: `v0.4.0`
|
- Previous release tag: `v0.4.1`
|
||||||
- Licence: GPL-3.0-or-later
|
- Licence: GPL-3.0-or-later
|
||||||
- Copyright: © 2026 Albrecht Degering
|
- 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
|
installed under `public/engines/` and included in the application source and
|
||||||
build.
|
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,
|
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`,
|
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,
|
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
|
Earlier releases remain available under their historical tags and artifact
|
||||||
coordinates. A future public artifact must bump package, manifest, tag and
|
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 |
|
| 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-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.2 | Apache-2.0 | Runtime | Shared shell; same source |
|
| `@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> |
|
| `@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> |
|
| 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> |
|
| `@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> |
|
| 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> |
|
| 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.
|
development-only and are not part of the static runtime bundle.
|
||||||
|
|
||||||
The PHP pack's `native-components.json` is scoped to the exact
|
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
|
preview as complete. In particular, list export is disabled if its template
|
||||||
would consume an incomplete value.
|
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
|
profiles. This includes .NET even though its native API can retain capture
|
||||||
history: the current adapter deliberately normalizes only the final record and
|
history: the current adapter deliberately normalizes only the final record and
|
||||||
reports `captureHistory: false`. The UI labels the limitation and does not
|
reports `captureHistory: false`. The UI labels the limitation and does not
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Flavour support
|
# 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
|
means that Regex Tools recognizes common structure and replacement tokens for
|
||||||
explanation only; the named runtime compiler and replacement operation remain
|
explanation only; the named runtime compiler and replacement operation remain
|
||||||
authoritative.
|
authoritative.
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ selected real ECMAScript or PCRE2 worker. It can preserve:
|
|||||||
authoritative, untruncated output.
|
authoritative, untruncated output.
|
||||||
|
|
||||||
PHP, Perl, Python, Ruby, Java, C++, Go, Rust, .NET and Scala compatibility are
|
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
|
for those active profiles; it does not substitute ECMAScript, PCRE2 or a
|
||||||
lexical provider as an execution oracle.
|
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.
|
`/apps/regex/`, including cold loading of all twelve profiles.
|
||||||
|
|
||||||
The Portal must consume the immutable release ZIP, verify its SHA-256, verify
|
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/`.
|
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
|
identity. Historical artifact coordinates remain immutable and must not be
|
||||||
overwritten or reused.
|
overwritten or reused.
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ Inspection date: 2026-07-27.
|
|||||||
|
|
||||||
| Reference | Exact revision/version | Licence | Use and copying status |
|
| 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. |
|
| Regex Tools | Release identity `v0.4.2` | 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 SDK | `ef2dab4b46c61812c9a877d8a19fe497b4a4630a` / 0.2.3 | 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. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| RegexLib | Website inspected | Redistribution licence not established | No fixture copied. |
|
||||||
| RGXP.RU | 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
|
`tests/fixtures/README.md`. Runtime pack metadata and adjacent licence/notice
|
||||||
files are authoritative for the exact binary distribution.
|
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:
|
`--force`, and produces:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
release/regex-tools-0.4.1.zip
|
release/regex-tools-0.4.2.zip
|
||||||
release/regex-tools-0.4.1.zip.sha256
|
release/regex-tools-0.4.2.zip.sha256
|
||||||
```
|
```
|
||||||
|
|
||||||
The release scan checks ASCII/UTF-8, UTF-16LE and UTF-16BE content in text,
|
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
|
component/source manifest and six independently pinned legal files. The release
|
||||||
packager names every one of those files explicitly.
|
packager names every one of those files explicitly.
|
||||||
|
|
||||||
The existing v0.1.0 through v0.4.0 ZIPs and matching sidecars are historical
|
The existing v0.1.0 through v0.4.1 ZIPs and matching sidecars are historical
|
||||||
immutable artifacts. Creating v0.4.1 must not replace, rename or remove them.
|
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
|
go 1.26.0
|
||||||
|
|
||||||
|
|||||||
32
package-lock.json
generated
32
package-lock.json
generated
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "regex-tools",
|
"name": "regex-tools",
|
||||||
"version": "0.4.1",
|
"version": "0.4.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "regex-tools",
|
"name": "regex-tools",
|
||||||
"version": "0.4.1",
|
"version": "0.4.2",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@add-ideas/toolbox-contract": "0.2.2",
|
"@add-ideas/toolbox-contract": "0.2.3",
|
||||||
"@add-ideas/toolbox-shell-react": "0.2.2",
|
"@add-ideas/toolbox-shell-react": "0.2.3",
|
||||||
"@codemirror/commands": "6.10.4",
|
"@codemirror/commands": "6.10.4",
|
||||||
"@codemirror/language": "6.12.4",
|
"@codemirror/language": "6.12.4",
|
||||||
"@codemirror/search": "6.7.1",
|
"@codemirror/search": "6.7.1",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"react-dom": "19.2.7"
|
"react-dom": "19.2.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@add-ideas/toolbox-testkit": "0.2.2",
|
"@add-ideas/toolbox-testkit": "0.2.3",
|
||||||
"@bjorn3/browser_wasi_shim": "0.4.2",
|
"@bjorn3/browser_wasi_shim": "0.4.2",
|
||||||
"@eslint/js": "10.0.1",
|
"@eslint/js": "10.0.1",
|
||||||
"@php-wasm/universal": "3.1.46",
|
"@php-wasm/universal": "3.1.46",
|
||||||
@@ -55,18 +55,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@add-ideas/toolbox-contract": {
|
"node_modules/@add-ideas/toolbox-contract": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.2/toolbox-contract-0.2.2.tgz",
|
"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-VcZ8j4O2PgFaIYgxs6r9u0uPxA+hHKwhCW+omfeVCtbjAAYhH2KhRlBGm0ERVVYcK5kchyzZLXrC4LKWRotVzg==",
|
"integrity": "sha512-T0PVSuMT40GjTDfQJhEEY3ZawQq8zz1/ry95JdKI6W39CdLacaRXdGnEpDCMHt+jUbf1Jz7Nat/M5dFCgKVM9A==",
|
||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
"node_modules/@add-ideas/toolbox-shell-react": {
|
"node_modules/@add-ideas/toolbox-shell-react": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"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",
|
"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-w/xbLCd50a2Jq7vQ9Z9ygUOuqlOCRkIYlk4vSJx0mf4REJNeMYi3PE2MbaLUC4DkQWyrmatsa5HNT89o0l91BA==",
|
"integrity": "sha512-DT5lQDH48BFkFcmFLZnQh7+Cm73JzBPcmp5WzUXypfkUXpEyDYHzaXgmW4kZ0edSwh4RK4sPmx+JPtK0X4aKCQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@add-ideas/toolbox-contract": "0.2.2"
|
"@add-ideas/toolbox-contract": "0.2.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": ">=18 <20",
|
"react": ">=18 <20",
|
||||||
@@ -74,13 +74,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@add-ideas/toolbox-testkit": {
|
"node_modules/@add-ideas/toolbox-testkit": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-testkit/-/0.2.2/toolbox-testkit-0.2.2.tgz",
|
"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-ZxrRYiJI/j5aXwcd3mQItgDl1iOJ6N26+MpIG18qVZNwKKFCTCfSTzgzRooPt8rRc1MQYTPo4c+l/QpOWuTXxA==",
|
"integrity": "sha512-sq1MwhKWfFKen+N+124hl74qQimRSvmQ9sOU7jdcI+2qCKZ67+2B8rWyezeV80uTFu4Jv6deHksfYQ/tKNV6XQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@add-ideas/toolbox-contract": "0.2.2"
|
"@add-ideas/toolbox-contract": "0.2.3"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"toolbox-check": "dist/cli.js"
|
"toolbox-check": "dist/cli.js"
|
||||||
|
|||||||
14
package.json
14
package.json
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "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.",
|
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"author": "Albrecht Degering",
|
"author": "Albrecht Degering",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"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": {
|
"bugs": {
|
||||||
"url": "https://git.add-ideas.de/zemion/regex-tools/issues"
|
"url": "https://git.add-ideas.de/lotobo/regex-tools/issues"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -72,8 +72,8 @@
|
|||||||
"release:artifact": "npm run check && npm run test:browser && npm run package:release"
|
"release:artifact": "npm run check && npm run test:browser && npm run package:release"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@add-ideas/toolbox-contract": "0.2.2",
|
"@add-ideas/toolbox-contract": "0.2.3",
|
||||||
"@add-ideas/toolbox-shell-react": "0.2.2",
|
"@add-ideas/toolbox-shell-react": "0.2.3",
|
||||||
"@codemirror/commands": "6.10.4",
|
"@codemirror/commands": "6.10.4",
|
||||||
"@codemirror/language": "6.12.4",
|
"@codemirror/language": "6.12.4",
|
||||||
"@codemirror/search": "6.7.1",
|
"@codemirror/search": "6.7.1",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"react-dom": "19.2.7"
|
"react-dom": "19.2.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@add-ideas/toolbox-testkit": "0.2.2",
|
"@add-ideas/toolbox-testkit": "0.2.3",
|
||||||
"@bjorn3/browser_wasi_shim": "0.4.2",
|
"@bjorn3/browser_wasi_shim": "0.4.2",
|
||||||
"@eslint/js": "10.0.1",
|
"@eslint/js": "10.0.1",
|
||||||
"@php-wasm/universal": "3.1.46",
|
"@php-wasm/universal": "3.1.46",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
911f8f5782931320f5b8d1160a76365b83aea6447ee6c04fa6d5591467db9dad LICENSE-Go.txt
|
911f8f5782931320f5b8d1160a76365b83aea6447ee6c04fa6d5591467db9dad LICENSE-Go.txt
|
||||||
208034ac6bb2a1867fa082c51edd5e77098f16ff55e7907f9c9a51b59e6390ff engine-metadata.json
|
38a8e5518e670ca40efce95753d6836ed4686c5d25bb049df2c97e418ec76636 engine-metadata.json
|
||||||
ddafd6401e0674c048ee066677157db0b03480f716262845ea30639daffb3ae5 go-regex.wasm
|
d2faa632cc35d4d63040f9a8d7ad15e1bd5866a4d69c72a7bbefadf7fadcb676 go-regex.wasm
|
||||||
0c949f4996f9a89698e4b5c586de32249c3b69b7baadb64d220073cc04acba14 wasm_exec.mjs
|
0c949f4996f9a89698e4b5c586de32249c3b69b7baadb64d220073cc04acba14 wasm_exec.mjs
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "engines/go/go.mod",
|
"path": "engines/go/go.mod",
|
||||||
"sha256": "b2744a26c11ce6be55fabd2109b89f34b0db413abab8b40c9f7e8ea83e8b7bff",
|
"sha256": "1d84837beaa0d734f26a7e87ed83f5a8ffbc4e9d049260636ef127ec163c5f58",
|
||||||
"bytes": 85
|
"bytes": 85
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "go-regex.wasm",
|
"path": "go-regex.wasm",
|
||||||
"sha256": "ddafd6401e0674c048ee066677157db0b03480f716262845ea30639daffb3ae5",
|
"sha256": "d2faa632cc35d4d63040f9a8d7ad15e1bd5866a4d69c72a7bbefadf7fadcb676",
|
||||||
"bytes": 3904895
|
"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">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
|
||||||
<title id="title">Regex Tools</title>
|
<title id="title">Regex Tools</title>
|
||||||
<rect width="64" height="64" rx="15" fill="#5532a8"/>
|
<metadata>
|
||||||
<path d="M15 22h20M15 32h12M15 42h20" fill="none" stroke="#fff" stroke-width="5" stroke-linecap="round"/>
|
The regular-expression symbol is adapted from the OOjs UI
|
||||||
<path d="m46 20-3 24m-7-8 20-8" fill="none" stroke="#80e1cb" stroke-width="5" stroke-linecap="round"/>
|
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>
|
</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,
|
"schemaVersion": 1,
|
||||||
"id": "de.add-ideas.regex-tools",
|
"id": "de.add-ideas.regex-tools",
|
||||||
"name": "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.",
|
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||||
"entry": "./",
|
"entry": "./",
|
||||||
"icon": "./favicon.svg",
|
"icon": "./favicon.svg",
|
||||||
@@ -27,14 +27,14 @@
|
|||||||
"telemetry": false
|
"telemetry": false
|
||||||
},
|
},
|
||||||
"source": {
|
"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"
|
"license": "GPL-3.0-or-later"
|
||||||
},
|
},
|
||||||
"actions": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"id": "source",
|
"id": "source",
|
||||||
"label": "Source",
|
"label": "Source",
|
||||||
"url": "https://git.add-ideas.de/zemion/regex-tools"
|
"url": "https://git.add-ideas.de/lotobo/regex-tools"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ if (
|
|||||||
}
|
}
|
||||||
|
|
||||||
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"
|
source.source?.license !== "GPL-3.0-or-later"
|
||||||
) {
|
) {
|
||||||
throw new Error("Manifest source identity is incomplete or inconsistent");
|
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 zipEpoch = new Date(1980, 0, 1, 0, 0, 0);
|
||||||
const gplVersion3TextSha256 =
|
const gplVersion3TextSha256 =
|
||||||
"fb981668c18a279e285fc4d83fba1e836cc84dd4daa73c9697d3cfd2d8aca6e0";
|
"fb981668c18a279e285fc4d83fba1e836cc84dd4daa73c9697d3cfd2d8aca6e0";
|
||||||
const expectedApplicationVersion = "0.4.1";
|
const expectedApplicationVersion = "0.4.2";
|
||||||
const requiredRootFiles = [
|
const requiredRootFiles = [
|
||||||
"LICENSE",
|
"LICENSE",
|
||||||
"README.md",
|
"README.md",
|
||||||
@@ -341,7 +341,7 @@ async function collectReleaseEntries() {
|
|||||||
packageJson.version !== expectedApplicationVersion ||
|
packageJson.version !== expectedApplicationVersion ||
|
||||||
packageJson.license !== "GPL-3.0-or-later" ||
|
packageJson.license !== "GPL-3.0-or-later" ||
|
||||||
packageJson.repository?.url !==
|
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.");
|
throw new Error("Package version, licence or source identity drifted.");
|
||||||
}
|
}
|
||||||
@@ -354,7 +354,7 @@ async function collectReleaseEntries() {
|
|||||||
`- Release tag: \`v${expectedApplicationVersion}\``,
|
`- Release tag: \`v${expectedApplicationVersion}\``,
|
||||||
) ||
|
) ||
|
||||||
!sourceIdentity.includes(
|
!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.");
|
throw new Error("SOURCE.md release identity drifted.");
|
||||||
@@ -565,7 +565,7 @@ async function collectReleaseEntries() {
|
|||||||
manifest.id !== "de.add-ideas.regex-tools" ||
|
manifest.id !== "de.add-ideas.regex-tools" ||
|
||||||
manifest.version !== packageJson.version ||
|
manifest.version !== packageJson.version ||
|
||||||
manifest.source?.repository !==
|
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"
|
manifest.source?.license !== "GPL-3.0-or-later"
|
||||||
) {
|
) {
|
||||||
throw new Error("Packaged manifest identity is inconsistent.");
|
throw new Error("Packaged manifest identity is inconsistent.");
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from "../regex/generation/generation-limits";
|
} from "../regex/generation/generation-limits";
|
||||||
import { manifest } from "../toolbox/manifest";
|
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({
|
export function HelpDialog({
|
||||||
open,
|
open,
|
||||||
|
|||||||
@@ -48,6 +48,18 @@
|
|||||||
box-sizing: border-box;
|
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,
|
button,
|
||||||
input,
|
input,
|
||||||
select,
|
select,
|
||||||
@@ -74,7 +86,7 @@ textarea:focus-visible,
|
|||||||
position: relative;
|
position: relative;
|
||||||
width: min(100%, 90rem);
|
width: min(100%, 90rem);
|
||||||
margin-inline: auto;
|
margin-inline: auto;
|
||||||
padding: 1rem clamp(0.75rem, 2.5vw, 2rem) 3rem;
|
padding: 1rem 0 3rem;
|
||||||
color: var(--toolbox-text);
|
color: var(--toolbox-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2025,10 +2037,6 @@ tbody tr.is-selected {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 40rem) {
|
@media (max-width: 40rem) {
|
||||||
.regex-application {
|
|
||||||
padding-inline: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.command-bar > label:not(.check-control) {
|
.command-bar > label:not(.check-control) {
|
||||||
flex: 1 1 10rem;
|
flex: 1 1 10rem;
|
||||||
min-width: 0;
|
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,
|
"schemaVersion": 1,
|
||||||
"id": "de.add-ideas.regex-tools",
|
"id": "de.add-ideas.regex-tools",
|
||||||
"name": "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.",
|
"description": "Develop, explain, test and apply regular expressions locally in the browser.",
|
||||||
"entry": "./",
|
"entry": "./",
|
||||||
"icon": "./favicon.svg",
|
"icon": "./favicon.svg",
|
||||||
@@ -27,14 +27,14 @@
|
|||||||
"telemetry": false
|
"telemetry": false
|
||||||
},
|
},
|
||||||
"source": {
|
"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"
|
"license": "GPL-3.0-or-later"
|
||||||
},
|
},
|
||||||
"actions": [
|
"actions": [
|
||||||
{
|
{
|
||||||
"id": "source",
|
"id": "source",
|
||||||
"label": "Source",
|
"label": "Source",
|
||||||
"url": "https://git.add-ideas.de/zemion/regex-tools"
|
"url": "https://git.add-ideas.de/lotobo/regex-tools"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"assets": [
|
"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 SYNTAX_PROFILE = "community";
|
||||||
export const REGEXPP_VERSION = "4.12.2";
|
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 ({
|
test("standalone ECMAScript workbench parses, explains and extracts", async ({
|
||||||
page,
|
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-regular-expression-pattern", "(?<stale>\\w+)");
|
||||||
await setEditor(page, "editor-replacement-template", "$<stale>");
|
await setEditor(page, "editor-replacement-template", "$<stale>");
|
||||||
|
await setEditor(page, "editor-replacement-template", "[$<letter>]");
|
||||||
|
await setEditor(page, "editor-test-text", "A B");
|
||||||
await setEditor(
|
await setEditor(
|
||||||
page,
|
page,
|
||||||
"editor-regular-expression-pattern",
|
"editor-regular-expression-pattern",
|
||||||
"(?<letter>[A-Z])",
|
"(?<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 });
|
const runButton = page.getByRole("button", { name: "Run", exact: true });
|
||||||
await expect(runButton).toBeDisabled();
|
expect(await attemptRunWhileDisabled(page)).toBe(true);
|
||||||
await runButton.evaluate((button: HTMLButtonElement) => button.click());
|
await expect(page.locator(".run-status")).toHaveClass(/status-idle/u);
|
||||||
await expect(page.locator(".run-status")).not.toHaveClass(/status-running/u);
|
await expect(page.locator(".run-status")).toContainText(
|
||||||
|
"last completed result remains visible",
|
||||||
|
);
|
||||||
await expect(page.locator(".extraction-row")).toHaveCount(
|
await expect(page.locator(".extraction-row")).toHaveCount(
|
||||||
initialExtractionCount,
|
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 expect(currentNamedToken.locator("small")).toHaveText("named capture");
|
||||||
|
|
||||||
await page.getByRole("checkbox", { name: "Ignore case (i)" }).check();
|
await page.getByRole("checkbox", { name: "Ignore case (i)" }).check();
|
||||||
await expect(runButton).toBeDisabled();
|
expect(await attemptRunWhileDisabled(page)).toBe(true);
|
||||||
await runButton.evaluate((button: HTMLButtonElement) => button.click());
|
await expect(page.locator(".run-status")).toHaveClass(/status-idle/u);
|
||||||
await expect(page.locator(".run-status")).not.toHaveClass(/status-running/u);
|
|
||||||
|
|
||||||
await expect(runButton).toBeEnabled();
|
await expect(runButton).toBeEnabled();
|
||||||
await runButton.click();
|
await runButton.click();
|
||||||
|
|||||||
Reference in New Issue
Block a user