From 5b09fea73d34ca5cbda489ad67d5d61ef6767063 Mon Sep 17 00:00:00 2001 From: raphael-goetz Date: Sun, 2 Nov 2025 11:22:02 +0100 Subject: [PATCH 1/5] feat: wip split mapper and reader into separate packages because the reader still needs to find the definitions at the local file system and the mapper needs to download it from github --- .../http/data_type/type/http_url.proto.json | 2 +- .../data_type/object/object.proto.json | 4 +- .../data_type/primitive/number.proto.json | 2 +- package/mapper/package-lock.json | 2084 +++++++++++++++++ package/mapper/package.json | 39 + package/mapper/src/definition/remote.ts | 119 + package/mapper/src/index.ts | 2 + .../mapper}/src/mapper/dataTypeMapper.ts | 2 +- .../mapper}/src/mapper/flowTypeMapper.ts | 2 +- .../mapper}/src/mapper/functionMapper.ts | 2 +- .../mapper}/src/mapper/translation.ts | 0 {reader/ts => package/mapper}/tsconfig.json | 0 {reader/ts => package/mapper}/vite.config.ts | 0 .../ts => package/reader}/package-lock.json | 7 + {reader/ts => package/reader}/package.json | 2 - package/reader/src/index.ts | 2 + {reader/ts => package/reader}/src/parser.ts | 37 +- package/reader/tsconfig.json | 25 + package/reader/vite.config.ts | 20 + reader/ts/src/index.ts | 2 - reader/ts/src/types.ts | 8 - 21 files changed, 2316 insertions(+), 45 deletions(-) create mode 100644 package/mapper/package-lock.json create mode 100644 package/mapper/package.json create mode 100644 package/mapper/src/definition/remote.ts create mode 100644 package/mapper/src/index.ts rename {reader/ts => package/mapper}/src/mapper/dataTypeMapper.ts (99%) rename {reader/ts => package/mapper}/src/mapper/flowTypeMapper.ts (95%) rename {reader/ts => package/mapper}/src/mapper/functionMapper.ts (96%) rename {reader/ts => package/mapper}/src/mapper/translation.ts (100%) rename {reader/ts => package/mapper}/tsconfig.json (100%) rename {reader/ts => package/mapper}/vite.config.ts (100%) rename {reader/ts => package/reader}/package-lock.json (99%) rename {reader/ts => package/reader}/package.json (87%) create mode 100644 package/reader/src/index.ts rename {reader/ts => package/reader}/src/parser.ts (67%) create mode 100644 package/reader/tsconfig.json create mode 100644 package/reader/vite.config.ts delete mode 100644 reader/ts/src/index.ts delete mode 100644 reader/ts/src/types.ts diff --git a/definitions/http/data_type/type/http_url.proto.json b/definitions/http/data_type/type/http_url.proto.json index 0671709..5ea2d96 100644 --- a/definitions/http/data_type/type/http_url.proto.json +++ b/definitions/http/data_type/type/http_url.proto.json @@ -10,7 +10,7 @@ "rules": [ { "regex": { - "pattern": "/^/\\w+(?:[.:~-]\\w+)*(?:/\\w+(?:[.:~-]\\w+)*)*$/" + "pattern": "^/\\w+(?:[.:~-]\\w+)*(?:/\\w+(?:[.:~-]\\w+)*)*$" } } ], diff --git a/definitions/standard/data_type/object/object.proto.json b/definitions/standard/data_type/object/object.proto.json index 1df9d47..e0f2d2f 100644 --- a/definitions/standard/data_type/object/object.proto.json +++ b/definitions/standard/data_type/object/object.proto.json @@ -1,5 +1,5 @@ { - "variant": "TYPE", + "variant": "OBJECT", "identifier": "OBJECT", "name": [ { @@ -9,4 +9,4 @@ ], "rules": [], "genericKeys": [] -} \ No newline at end of file +}:q \ No newline at end of file diff --git a/definitions/standard/data_type/primitive/number.proto.json b/definitions/standard/data_type/primitive/number.proto.json index 460ef1e..b595c38 100644 --- a/definitions/standard/data_type/primitive/number.proto.json +++ b/definitions/standard/data_type/primitive/number.proto.json @@ -10,7 +10,7 @@ "rules": [ { "regex": { - "pattern": "/^(?:-(?:[1-9](?:\\d{0,2}(?:,\\d{3})+|\\d*))|(?:0|(?:[1-9](?:\\d{0,2}(?:,\\d{3})+|\\d*))))(?:.\\d+|)$/" + "pattern": "^(?:-(?:[1-9](?:\\d{0,2}(?:,\\d{3})+|\\d*))|(?:0|(?:[1-9](?:\\d{0,2}(?:,\\d{3})+|\\d*))))(?:.\\d+|)$" } } ], diff --git a/package/mapper/package-lock.json b/package/mapper/package-lock.json new file mode 100644 index 0000000..7ecad80 --- /dev/null +++ b/package/mapper/package-lock.json @@ -0,0 +1,2084 @@ +{ + "name": "@code0-tech/definition-reader", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@code0-tech/definition-reader", + "version": "0.0.0", + "dependencies": { + "@code0-tech/sagittarius-graphql-types": "^0.0.0-56198dce107a9c09cc5eca0773f239d9c3eba598", + "@code0-tech/tucana": "^0.0.39", + "@protobuf-ts/runtime": "^2.11.1", + "@protobuf-ts/runtime-rpc": "^2.11.1", + "fflate": "^0.8.2", + "vite-plugin-dts": "^4.5.4" + }, + "devDependencies": { + "@types/node": "^24.1.0", + "typescript": "^5.8.3", + "vite": "^7.1.11" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@code0-tech/sagittarius-graphql-types": { + "version": "0.0.0-56198dce107a9c09cc5eca0773f239d9c3eba598", + "resolved": "https://registry.npmjs.org/@code0-tech/sagittarius-graphql-types/-/sagittarius-graphql-types-0.0.0-56198dce107a9c09cc5eca0773f239d9c3eba598.tgz", + "integrity": "sha512-95nHtvQb2W6iSk0SUyUOgEHE1RSqXDi0Ih1edscScKFFmJK1hWbdrvvsRPjQnTfZsieuvdXC9L2q/+SXIBFH7Q==" + }, + "node_modules/@code0-tech/tucana": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@code0-tech/tucana/-/tucana-0.0.39.tgz", + "integrity": "sha512-FZHPN0eGhmMLSaYPAE8fb1g9DS8P3JdacwUjRSiXeBVrOBs3EqT7zjcUnDLqZ8YeXY6/T+srFs3zeemjvicCTQ==", + "license": "Apache-2.0" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.53.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.53.3.tgz", + "integrity": "sha512-p2HmQaMSVqMBj3bH3643f8xApKAqrF1jNpPsMCTQOYCYgfwLnvzsve8c+bgBWzCOBBgLK54PB6ZLIWMGLg8CZA==", + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor-model": "7.31.3", + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.18.0", + "@rushstack/rig-package": "0.6.0", + "@rushstack/terminal": "0.19.3", + "@rushstack/ts-command-line": "5.1.3", + "lodash": "~4.17.15", + "minimatch": "10.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.8.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.31.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.31.3.tgz", + "integrity": "sha512-dv4quQI46p0U03TCEpasUf6JrJL3qjMN7JUAobsPElxBv4xayYYvWW9aPpfYV+Jx6hqUcVaLVOeV7+5hxsyoFQ==", + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.18.0" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz", + "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==", + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.15.1", + "ajv": "~8.12.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" + } + }, + "node_modules/@protobuf-ts/runtime": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.1.tgz", + "integrity": "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@protobuf-ts/runtime-rpc": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz", + "integrity": "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==", + "license": "Apache-2.0", + "dependencies": { + "@protobuf-ts/runtime": "^2.11.1" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/node-core-library": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.18.0.tgz", + "integrity": "sha512-XDebtBdw5S3SuZIt+Ra2NieT8kQ3D2Ow1HxhDQ/2soinswnOu9e7S69VSwTOLlQnx5mpWbONu+5JJjDxMAb6Fw==", + "license": "MIT", + "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", + "fs-extra": "~11.3.0", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@rushstack/problem-matcher": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", + "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", + "license": "MIT", + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.6.0.tgz", + "integrity": "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==", + "license": "MIT", + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.3.tgz", + "integrity": "sha512-0P8G18gK9STyO+CNBvkKPnWGMxESxecTYqOcikHOVIHXa9uAuTK+Fw8TJq2Gng1w7W6wTC9uPX6hGNvrMll2wA==", + "license": "MIT", + "dependencies": { + "@rushstack/node-core-library": "5.18.0", + "@rushstack/problem-matcher": "0.1.1", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.3.tgz", + "integrity": "sha512-Kdv0k/BnnxIYFlMVC1IxrIS0oGQd4T4b7vKfx52Y2+wk2WZSDFIvedr7JrhenzSlm3ou5KwtoTGTGd5nbODRug==", + "license": "MIT", + "dependencies": { + "@rushstack/terminal": "0.19.3", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz", + "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.23" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz", + "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==", + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.23.tgz", + "integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.23", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.4.9", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-dts": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", + "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor": "^7.50.1", + "@rollup/pluginutils": "^5.1.4", + "@volar/typescript": "^2.4.11", + "@vue/language-core": "2.2.0", + "compare-versions": "^6.1.1", + "debug": "^4.4.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + } + } +} diff --git a/package/mapper/package.json b/package/mapper/package.json new file mode 100644 index 0000000..062d20b --- /dev/null +++ b/package/mapper/package.json @@ -0,0 +1,39 @@ +{ + "name": "@code0-tech/definition-mapper", + "version": "0.0.0", + "description": "Will map Code0-Definitions to its correspondent Sagittarius-Types", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", + "scripts": { + "build": "vite build", + "start": "node ./dist/index.js", + "build:and:run": "vite build && node ./dist/index.js" + }, + "author": "", + "license": "", + "devDependencies": { + "@types/node": "^24.1.0", + "typescript": "^5.8.3", + "vite": "^7.1.11" + }, + "repository": { + "type": "git", + "url": "https://github.com/code0-tech/code0-definition" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@code0-tech/sagittarius-graphql-types": "^0.0.0-56198dce107a9c09cc5eca0773f239d9c3eba598", + "@code0-tech/tucana": "^0.0.39", + "@protobuf-ts/runtime": "^2.11.1", + "@protobuf-ts/runtime-rpc": "^2.11.1", + "fflate": "^0.8.2", + "vite-plugin-dts": "^4.5.4" + } +} diff --git a/package/mapper/src/definition/remote.ts b/package/mapper/src/definition/remote.ts new file mode 100644 index 0000000..300ee1e --- /dev/null +++ b/package/mapper/src/definition/remote.ts @@ -0,0 +1,119 @@ +import { unzipSync } from "fflate"; +import { + DefinitionDataType as TucanaDataType +} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; +import { + FlowType as TucanaFlowType +} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; +import { + RuntimeFunctionDefinition as TucanaFunction +} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; +import {DataType, FlowType, FunctionDefinition} from "@code0-tech/sagittarius-graphql-types"; +import { DefinitionDataType } from "@code0-tech/tucana/pb/shared.data_type_pb.js"; + +import { mapFlowType } from "../mapper/flowTypeMapper.js"; +import { mapFunction } from "../mapper/functionMapper.js"; +import { getDataType } from "../mapper/dataTypeMapper.js"; + +export interface ConstructedDataTypes { + scannedTucanaTypes: DefinitionDataType[]; + constructedDataTypes: DataType[]; + id: number; +} + +export interface Feature { + name: string; + dataTypes: DataType[]; + flowTypes: FlowType[]; + runtimeFunctions: FunctionDefinition[]; +} + +export function getID(constructedDataTypes: ConstructedDataTypes) { + const last = constructedDataTypes.id; + constructedDataTypes.id += 1; + return last; +} + +const definitionCache = new Map(); + +/* + * Browser version: downloads a ZIP file, unzips in memory, + * decodes the Tucana proto binaries, and constructs Feature[]. + */ +export async function DefinitionMapper(zipUrl: string): Promise { + // return cached result if available + const cached = definitionCache.get(zipUrl); + if (cached) return cached; + + // 1. fetch zip as ArrayBuffer + const res = await fetch(zipUrl); + if (!res.ok) throw new Error(`Failed to download: ${res.statusText}`); + const arrayBuffer = await res.arrayBuffer(); + const bytes = new Uint8Array(arrayBuffer); + + // 2. unzip using fflate (browser-compatible) + const zipEntries = unzipSync(bytes); + + const dataTypes: { feature: string; type: TucanaDataType }[] = []; + const runtimeFunctions: { feature: string; func: TucanaFunction }[] = []; + const flowTypes: { feature: string; flow: TucanaFlowType }[] = []; + + // 3. iterate files and decode + for (const [filename, content] of Object.entries(zipEntries)) { + if (filename.endsWith("/")) continue; // skip folder entries + + const parts = filename.split("/"); + const base = parts[parts.length - 1]; + const featureName = base.split("_")[0]; + if (!featureName) throw new Error(`Missing feature name for ${filename}`); + + if (base.includes("data_type")) { + const decoded = TucanaDataType.fromBinary(content); + dataTypes.push({ feature: featureName, type: decoded }); + } else if (base.includes("function")) { + const decoded = TucanaFunction.fromBinary(content); + runtimeFunctions.push({ feature: featureName, func: decoded }); + } else if (base.includes("flow_type")) { + const decoded = TucanaFlowType.fromBinary(content); + flowTypes.push({ feature: featureName, flow: decoded }); + } + } + + const features: Feature[] = []; + const constructed: ConstructedDataTypes = { + scannedTucanaTypes: dataTypes.map((f) => f.type), + constructedDataTypes: [], + id: 0, + }; + + function getFeature(name: string): Feature { + let f = features.find((x) => x.name === name); + if (!f) { + f = { name, dataTypes: [], flowTypes: [], runtimeFunctions: [] }; + features.push(f); + } + return f; + } + + dataTypes + .map((f) => ({ name: f.feature, type: getDataType(f.type.identifier, constructed) })) + .forEach((dt) => { + if (dt.type) getFeature(dt.name).dataTypes.push(dt.type); + }); + + runtimeFunctions + .map((f) => ({ name: f.feature, type: mapFunction(f.func, constructed) })) + .forEach((rf) => { + if (rf.type) getFeature(rf.name).runtimeFunctions.push(rf.type); + }); + + flowTypes + .map((f) => ({ name: f.feature, type: mapFlowType(f.flow, constructed) })) + .forEach((ft) => { + if (ft.type) getFeature(ft.name).flowTypes.push(ft.type); + }); + + // 5. cache result and return + definitionCache.set(zipUrl, features); + return features; +} diff --git a/package/mapper/src/index.ts b/package/mapper/src/index.ts new file mode 100644 index 0000000..5c3499d --- /dev/null +++ b/package/mapper/src/index.ts @@ -0,0 +1,2 @@ +export { DefinitionMapper } from './definition/remote.js'; +export type { Feature } from './definition/remote.js'; diff --git a/reader/ts/src/mapper/dataTypeMapper.ts b/package/mapper/src/mapper/dataTypeMapper.ts similarity index 99% rename from reader/ts/src/mapper/dataTypeMapper.ts rename to package/mapper/src/mapper/dataTypeMapper.ts index 9759a76..5ca2ea8 100644 --- a/reader/ts/src/mapper/dataTypeMapper.ts +++ b/package/mapper/src/mapper/dataTypeMapper.ts @@ -13,7 +13,7 @@ import { DefinitionDataType_Variant, DefinitionDataTypeRule, GenericMapper_GenericCombinationStrategy } from "@code0-tech/tucana/pb/shared.data_type_pb.js" import {GenericMapper as TucanaGenericMapper} from "@code0-tech/tucana/pb/shared.data_type_pb.js" -import {ConstructedDataTypes, getID} from "../parser.js"; +import {ConstructedDataTypes, getID} from "../definition/remote.js"; import {getTranslationConnection} from "./translation.js"; import {Value} from "@code0-tech/tucana/pb/shared.struct_pb.js"; diff --git a/reader/ts/src/mapper/flowTypeMapper.ts b/package/mapper/src/mapper/flowTypeMapper.ts similarity index 95% rename from reader/ts/src/mapper/flowTypeMapper.ts rename to package/mapper/src/mapper/flowTypeMapper.ts index 2f4c2da..5ba6654 100644 --- a/reader/ts/src/mapper/flowTypeMapper.ts +++ b/package/mapper/src/mapper/flowTypeMapper.ts @@ -1,8 +1,8 @@ import {FlowType as TucanaFlowType, FlowTypeSetting as TucanaFlowTypeSetting} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js" import {FlowType, FlowTypeSetting} from "@code0-tech/sagittarius-graphql-types"; import {getDataType} from "./dataTypeMapper.js"; -import {ConstructedDataTypes, getID} from "../parser.js"; import {getTranslationConnection} from "./translation.js"; +import {ConstructedDataTypes, getID} from "../definition/remote.js"; function mapFlowType(flowType: TucanaFlowType, constructed: ConstructedDataTypes): FlowType | null { return { diff --git a/reader/ts/src/mapper/functionMapper.ts b/package/mapper/src/mapper/functionMapper.ts similarity index 96% rename from reader/ts/src/mapper/functionMapper.ts rename to package/mapper/src/mapper/functionMapper.ts index fbb9b12..9d813f3 100644 --- a/reader/ts/src/mapper/functionMapper.ts +++ b/package/mapper/src/mapper/functionMapper.ts @@ -4,7 +4,7 @@ import { RuntimeParameterDefinition } from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; import {getDataTypeIdentifier} from "./dataTypeMapper.js"; -import {ConstructedDataTypes, getID} from "../parser.js"; +import {ConstructedDataTypes, getID} from "../definition/remote.js"; import {getTranslationConnection} from "./translation.js"; function mapFunction(func: TucanaFunction, constructed: ConstructedDataTypes): FunctionDefinition | null { diff --git a/reader/ts/src/mapper/translation.ts b/package/mapper/src/mapper/translation.ts similarity index 100% rename from reader/ts/src/mapper/translation.ts rename to package/mapper/src/mapper/translation.ts diff --git a/reader/ts/tsconfig.json b/package/mapper/tsconfig.json similarity index 100% rename from reader/ts/tsconfig.json rename to package/mapper/tsconfig.json diff --git a/reader/ts/vite.config.ts b/package/mapper/vite.config.ts similarity index 100% rename from reader/ts/vite.config.ts rename to package/mapper/vite.config.ts diff --git a/reader/ts/package-lock.json b/package/reader/package-lock.json similarity index 99% rename from reader/ts/package-lock.json rename to package/reader/package-lock.json index 3769f3c..ec4d4d9 100644 --- a/reader/ts/package-lock.json +++ b/package/reader/package-lock.json @@ -12,6 +12,7 @@ "@code0-tech/tucana": "^0.0.39", "@protobuf-ts/runtime": "^2.11.1", "@protobuf-ts/runtime-rpc": "^2.11.1", + "fflate": "^0.8.2", "vite-plugin-dts": "^4.5.4" }, "devDependencies": { @@ -1392,6 +1393,12 @@ } } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "11.3.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", diff --git a/reader/ts/package.json b/package/reader/package.json similarity index 87% rename from reader/ts/package.json rename to package/reader/package.json index 6371eb2..dc57f43 100644 --- a/reader/ts/package.json +++ b/package/reader/package.json @@ -23,14 +23,12 @@ }, "files": [ "dist", - "src/index.ts", "src" ], "publishConfig": { "access": "public" }, "dependencies": { - "@code0-tech/sagittarius-graphql-types": "^0.0.0-56198dce107a9c09cc5eca0773f239d9c3eba598", "@code0-tech/tucana": "^0.0.39", "@protobuf-ts/runtime": "^2.11.1", "@protobuf-ts/runtime-rpc": "^2.11.1", diff --git a/package/reader/src/index.ts b/package/reader/src/index.ts new file mode 100644 index 0000000..224978f --- /dev/null +++ b/package/reader/src/index.ts @@ -0,0 +1,2 @@ +export { Definition } from '../../mapper/src/definition/remote.js'; +export type { Feature } from '../../mapper/src/definition/remote.js'; diff --git a/reader/ts/src/parser.ts b/package/reader/src/parser.ts similarity index 67% rename from reader/ts/src/parser.ts rename to package/reader/src/parser.ts index b623375..5627d58 100644 --- a/reader/ts/src/parser.ts +++ b/package/reader/src/parser.ts @@ -1,41 +1,26 @@ -import {DefinitionDataType as TucanaDataType} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; -import {Feature} from "./types.js"; import {readdirSync, readFileSync} from "node:fs"; -import {FlowType as TucanaFlowType} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; -import {RuntimeFunctionDefinition as TucanaFunction} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; -import path from "node:path"; -import {mapFlowType} from "./mapper/flowTypeMapper.js"; -import {mapFunction} from "./mapper/functionMapper.js"; -import {DataType} from "@code0-tech/sagittarius-graphql-types"; +import {FlowType} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; +import {RuntimeFunctionDefinition} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; import {DefinitionDataType} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; -import {getDataType} from "./mapper/dataTypeMapper.js"; +import { join } from "node:path"; -export interface ConstructedDataTypes { - scannedTucanaTypes: DefinitionDataType[] - constructedDataTypes: DataType[] - id: number +export interface Feature { + dataTypes: DefinitionDataType[]; + flowTypes: FlowType[]; + runtimeFunctions: RuntimeFunctionDefinition[]; } -export function getID(constructedDataTypes: ConstructedDataTypes) { - const last = constructedDataTypes.id - constructedDataTypes.id += 1 - return last -} - -export const Definition = (rootPath: string): Feature[] => { - const dataTypes: {feature: string, type: TucanaDataType}[] = [] - const runtimeFunctions: {feature: string, func: TucanaFunction}[] = []; - const flowTypes: {feature: string, flow: TucanaFlowType}[] = []; +export const Definition = (path: string): Feature => { - readdirSync(rootPath, { withFileTypes: true }).forEach(file => { + readdirSync(path, { withFileTypes: true }).forEach(file => { const featureName = file.name.split("_")[0] if (featureName == null) { throw new Error("Feature name is null") } - const filePath = path.join(file.parentPath, file.name) - + const filePath = join(file.parentPath, file.name) const content = readFileSync(filePath); + if (file.name.includes("data_type")) { const decoded = TucanaDataType.fromBinary(content); dataTypes.push( diff --git a/package/reader/tsconfig.json b/package/reader/tsconfig.json new file mode 100644 index 0000000..4a788d9 --- /dev/null +++ b/package/reader/tsconfig.json @@ -0,0 +1,25 @@ +{ + "exclude": ["node_modules", "build", "dist"], + "include": ["node_modules/@code0-tech/tucana/pb/**/*.ts"], + "types": [ + "typePatches" + ], + "compilerOptions": { + "lib": ["ESNext"], + "module": "NodeNext", + "target": "ESNext", + "skipLibCheck": true, + "strict": true, + "paths": { + "src": [ + "src/*" + ] + }, + "baseUrl": "src/", + "sourceMap": true, + "moduleResolution": "nodenext", + "declaration": true, + "emitDeclarationOnly": true, + "esModuleInterop": true, + } +} diff --git a/package/reader/vite.config.ts b/package/reader/vite.config.ts new file mode 100644 index 0000000..d11b3fe --- /dev/null +++ b/package/reader/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts' + +export default defineConfig({ + plugins: [dts({ + include: ["src"] + })], + build: { + lib: { + entry: './src/index.ts', + formats: ['es'], + }, + rollupOptions: { + external: [/^node:.*$/], + output: { + entryFileNames: '[name].js', + } + }, + }, +}); \ No newline at end of file diff --git a/reader/ts/src/index.ts b/reader/ts/src/index.ts deleted file mode 100644 index 37023bf..0000000 --- a/reader/ts/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { Definition } from './parser.js'; -export type { Feature } from './types.ts'; diff --git a/reader/ts/src/types.ts b/reader/ts/src/types.ts deleted file mode 100644 index f68d5e8..0000000 --- a/reader/ts/src/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {DataType, FlowType, FunctionDefinition} from "@code0-tech/sagittarius-graphql-types"; - -export interface Feature { - name: string; - dataTypes: DataType[]; - flowTypes: FlowType[]; - runtimeFunctions: FunctionDefinition[]; -} \ No newline at end of file From 6b016fe61628d199ffb12d0689a4f556b60e324e Mon Sep 17 00:00:00 2001 From: raphael-goetz Date: Sun, 2 Nov 2025 11:22:40 +0100 Subject: [PATCH 2/5] fix: removed chars --- definitions/standard/data_type/object/object.proto.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/standard/data_type/object/object.proto.json b/definitions/standard/data_type/object/object.proto.json index e0f2d2f..b1495af 100644 --- a/definitions/standard/data_type/object/object.proto.json +++ b/definitions/standard/data_type/object/object.proto.json @@ -9,4 +9,4 @@ ], "rules": [], "genericKeys": [] -}:q \ No newline at end of file +} \ No newline at end of file From f1c0ff8cb888d501572a0bf43e72d605470259a1 Mon Sep 17 00:00:00 2001 From: raphael-goetz Date: Sun, 2 Nov 2025 13:21:21 +0100 Subject: [PATCH 3/5] feat: setup working file reader --- package/reader/package.json | 3 +- package/reader/src/index.ts | 114 +++++++++++++++++++++++++++++++++- package/reader/src/parser.ts | 116 ----------------------------------- 3 files changed, 113 insertions(+), 120 deletions(-) delete mode 100644 package/reader/src/parser.ts diff --git a/package/reader/package.json b/package/reader/package.json index dc57f43..4934254 100644 --- a/package/reader/package.json +++ b/package/reader/package.json @@ -22,8 +22,7 @@ "url": "https://github.com/code0-tech/code0-definition" }, "files": [ - "dist", - "src" + "dist" ], "publishConfig": { "access": "public" diff --git a/package/reader/src/index.ts b/package/reader/src/index.ts index 224978f..ae92ae4 100644 --- a/package/reader/src/index.ts +++ b/package/reader/src/index.ts @@ -1,2 +1,112 @@ -export { Definition } from '../../mapper/src/definition/remote.js'; -export type { Feature } from '../../mapper/src/definition/remote.js'; +import {readdir, readFile} from "node:fs/promises"; +import {join, extname} from "node:path"; + +import {FlowType} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; +import {RuntimeFunctionDefinition} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; +import {DefinitionDataType} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; + +export const enum MetaType { + FlowType = "FlowType", + DataType = "DataType", + RuntimeFunction = "RuntimeFunction", +} + +export interface DefinitionError { + definition: string; + definition_type: MetaType; + error: string; +} + +export interface Feature { + name: string; + data_types: DefinitionDataType[]; + flow_types: FlowType[]; + runtime_functions: RuntimeFunctionDefinition[]; + errors: DefinitionError[]; +} + +export class Reader { + static async fromPath(root: string): Promise { + const features = new Map(); + + for (const featureDir of await safeReadDir(root)) { + if (!featureDir.isDirectory()) continue; + const featureName = featureDir.name; + const featurePath = join(root, featureName); + + for (const typeDir of await safeReadDir(featurePath)) { + const type = toMetaType(typeDir.name); + if (!type) continue; + + const typePath = join(featurePath, typeDir.name); + const jsonPaths = await collectJsonFiles(typePath); + + for (const file of jsonPaths) { + const def = await readFile(file, "utf8"); + const f = features.get(featureName) ?? emptyFeature(featureName); + addDefinition(f, def, type); + features.set(featureName, f); + } + } + } + + return Array.from(features.values()); + } +} + +const toMetaType = (folder: string): MetaType | null => + ({ + flow_type: MetaType.FlowType, + data_type: MetaType.DataType, + runtime_definition: MetaType.RuntimeFunction + } as const)[folder] ?? null; + +const emptyFeature = (name: string): Feature => ({ + name, + data_types: [], + flow_types: [], + runtime_functions: [], + errors: [], +}); + +const safeReadDir = async (p: string) => { + try { + return await readdir(p, {withFileTypes: true}); + } catch { + return []; + } +}; + +const collectJsonFiles = async (dir: string): Promise => { + const entries = await safeReadDir(dir); + const files = entries.filter(e => e.isFile() && extname(e.name) === ".json").map(e => join(dir, e.name)); + + // include one nested level + for (const e of entries.filter(e => e.isDirectory())) { + const sub = (await safeReadDir(join(dir, e.name))) + .filter(s => s.isFile() && extname(s.name) === ".json") + .map(s => join(dir, e.name, s.name)); + files.push(...sub); + } + return files; +}; + +const addDefinition = (feature: Feature, def: string, type: MetaType) => { + try { + if (type === MetaType.DataType) feature.data_types.push(DefinitionDataType.fromJsonString(def)); + else if (type === MetaType.FlowType) feature.flow_types.push(FlowType.fromJsonString(def)); + else feature.runtime_functions.push(RuntimeFunctionDefinition.fromJsonString(def)); + } catch (err) { + feature.errors.push({ + definition: extractIdentifier(def, type), + definition_type: type, + error: err instanceof Error ? err.message : String(err), + }); + } +}; + +const extractIdentifier = (def: string, type: MetaType): string => { + const key = type === MetaType.RuntimeFunction ? "runtime_name" : "identifier"; + return def.match(new RegExp(`"${key}"\\s*:\\s*"([^"]+)"`))?.[1] ?? def; +}; + diff --git a/package/reader/src/parser.ts b/package/reader/src/parser.ts deleted file mode 100644 index 5627d58..0000000 --- a/package/reader/src/parser.ts +++ /dev/null @@ -1,116 +0,0 @@ -import {readdirSync, readFileSync} from "node:fs"; -import {FlowType} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; -import {RuntimeFunctionDefinition} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; -import {DefinitionDataType} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; -import { join } from "node:path"; - -export interface Feature { - dataTypes: DefinitionDataType[]; - flowTypes: FlowType[]; - runtimeFunctions: RuntimeFunctionDefinition[]; -} - -export const Definition = (path: string): Feature => { - - readdirSync(path, { withFileTypes: true }).forEach(file => { - const featureName = file.name.split("_")[0] - if (featureName == null) { - throw new Error("Feature name is null") - } - - const filePath = join(file.parentPath, file.name) - const content = readFileSync(filePath); - - if (file.name.includes("data_type")) { - const decoded = TucanaDataType.fromBinary(content); - dataTypes.push( - { - feature: featureName, - type: decoded, - } - ) - } - - if (file.name.includes("function")) { - const decoded = TucanaFunction.fromBinary(content); - runtimeFunctions.push( - { - feature: featureName, - func: decoded, - } - ) - } - - if (file.name.includes("flow_type")) { - const decoded = TucanaFlowType.fromBinary(content); - flowTypes.push( - { - feature: featureName, - flow: decoded, - } - ) - } - }) - - const features: Feature[] = [] - const constructed: ConstructedDataTypes = { - scannedTucanaTypes: dataTypes.map(f => f.type), - constructedDataTypes: [], - id: 0 - } - - function getFeature(name:string): Feature { - const feature = features.find((f) => f.name === name); - if (feature != undefined) { - return feature; - } - - const newFeature = { - name: name, - dataTypes: [], - flowTypes: [], - runtimeFunctions: [], - }; - - features.push(newFeature); - return newFeature; - } - - dataTypes.map(f => { - return { - name: f.feature, - type: getDataType(f.type.identifier, constructed) - } - }).forEach(dt => { - if (dt.type != null) { - const feature = getFeature(dt.name) - feature.dataTypes.push(dt.type) - } - }) - - runtimeFunctions.map(f => { - return { - name: f.feature, - type: mapFunction(f.func, constructed) - } - }).forEach(dt => { - if (dt.type != null) { - const feature = getFeature(dt.name) - feature.runtimeFunctions.push(dt.type) - } - }) - - flowTypes.map(f => { - return { - name: f.feature, - type: mapFlowType(f.flow, constructed) - } - }).forEach(dt => { - if (dt.type != null) { - const feature = getFeature(dt.name) - feature.flowTypes.push(dt.type) - } - }) - - return features; -} From 9d7ae876e6c96eb3ab798fc4624f7e4a7709ff57 Mon Sep 17 00:00:00 2001 From: raphael-goetz Date: Mon, 3 Nov 2025 16:22:53 +0100 Subject: [PATCH 4/5] feat: some small adjustments --- package/mapper/package.json | 1 - package/mapper/src/definition/mapper.ts | 88 +++++++++++++++ package/mapper/src/definition/reader.ts | 112 ++++++++++++++++++ package/mapper/src/definition/remote.ts | 119 -------------------- package/mapper/src/index.ts | 18 ++- package/mapper/src/mapper/dataTypeMapper.ts | 31 ++++- package/mapper/src/mapper/flowTypeMapper.ts | 2 +- package/mapper/src/mapper/functionMapper.ts | 2 +- 8 files changed, 246 insertions(+), 127 deletions(-) create mode 100644 package/mapper/src/definition/mapper.ts create mode 100644 package/mapper/src/definition/reader.ts delete mode 100644 package/mapper/src/definition/remote.ts diff --git a/package/mapper/package.json b/package/mapper/package.json index 062d20b..aa15720 100644 --- a/package/mapper/package.json +++ b/package/mapper/package.json @@ -33,7 +33,6 @@ "@code0-tech/tucana": "^0.0.39", "@protobuf-ts/runtime": "^2.11.1", "@protobuf-ts/runtime-rpc": "^2.11.1", - "fflate": "^0.8.2", "vite-plugin-dts": "^4.5.4" } } diff --git a/package/mapper/src/definition/mapper.ts b/package/mapper/src/definition/mapper.ts new file mode 100644 index 0000000..4b7e0a8 --- /dev/null +++ b/package/mapper/src/definition/mapper.ts @@ -0,0 +1,88 @@ +import { FlowType as TucanaFlowType } from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; +import { RuntimeFunctionDefinition as TucanaFunction } from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; +import { DefinitionDataType as TucanaDataType } from "@code0-tech/tucana/pb/shared.data_type_pb.js"; + +import type { DataType, FlowType, FunctionDefinition } from "@code0-tech/sagittarius-graphql-types"; +import { getDataType } from "../mapper/dataTypeMapper.js"; +import { mapFlowType } from "../mapper/flowTypeMapper.js"; +import { mapFunction } from "../mapper/functionMapper.js"; +import {Reader} from "./reader"; + +export interface ConstructedDataTypes { + scannedTucanaTypes: TucanaDataType[]; + constructedDataTypes: DataType[]; + id: number; +} + +export interface Feature { + name: string; + dataTypes: DataType[]; + flowTypes: FlowType[]; + runtimeFunctions: FunctionDefinition[]; +} +export function getID(constructedDataTypes: ConstructedDataTypes) { + const last = constructedDataTypes.id; + constructedDataTypes.id += 1; + return last; +} + +export async function DefinitionMapper(path: string): Promise { + const dataTypes: { feature: string; type: TucanaDataType }[] = []; + const flowTypes: { feature: string; flow: TucanaFlowType }[] = []; + const runtimeFunctions: { feature: string; func: TucanaFunction }[] = []; + + const tucanaFeature = await Reader.fromPath(path) + + tucanaFeature.forEach(feature => { + feature.data_types.forEach(dataType => { + dataTypes.push({ + feature: feature.name, + type: dataType + }) + }) + + feature.flow_types.forEach(flowType => { + flowTypes.push({ + feature: feature.name, + flow: flowType + }) + }) + + feature.runtime_functions.forEach(runtimeFunction => { + runtimeFunctions.push({ + feature: feature.name, + func: runtimeFunction + }) + }) + }) + + const constructed: ConstructedDataTypes = { + scannedTucanaTypes: dataTypes.map((d) => d.type), + constructedDataTypes: [], + id: 0, + }; + + const features: Feature[] = []; + const getFeature = (name: string): Feature => { + let f = features.find((x) => x.name === name); + if (!f) { + f = { name, dataTypes: [], flowTypes: [], runtimeFunctions: [] }; + features.push(f); + } + return f; + }; + + dataTypes + .map((f) => ({ name: f.feature, type: getDataType(f.type.identifier, constructed) })) + .forEach((dt) => dt.type && getFeature(dt.name).dataTypes.push(dt.type)); + + runtimeFunctions + .map((f) => ({ name: f.feature, type: mapFunction(f.func, constructed) })) + .forEach((rf) => rf.type && getFeature(rf.name).runtimeFunctions.push(rf.type)); + + flowTypes + .map((f) => ({ name: f.feature, type: mapFlowType(f.flow, constructed) })) + .forEach((ft) => ft.type && getFeature(ft.name).flowTypes.push(ft.type)); + + return features; +} diff --git a/package/mapper/src/definition/reader.ts b/package/mapper/src/definition/reader.ts new file mode 100644 index 0000000..82dab5b --- /dev/null +++ b/package/mapper/src/definition/reader.ts @@ -0,0 +1,112 @@ +import {readdir, readFile} from "node:fs/promises"; +import {join, extname} from "node:path"; + +import {FlowType} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; +import {RuntimeFunctionDefinition} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; +import {DefinitionDataType} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; + +export const enum MetaType { + FlowType = "FlowType", + DataType = "DataType", + RuntimeFunction = "RuntimeFunction", +} + +export interface DefinitionError { + definition: string; + definition_type: MetaType; + error: string; +} + +export interface TucanaFeature { + name: string; + data_types: DefinitionDataType[]; + flow_types: FlowType[]; + runtime_functions: RuntimeFunctionDefinition[]; + errors: DefinitionError[]; +} + +export class Reader { + static async fromPath(root: string): Promise { + const features = new Map(); + + for (const featureDir of await safeReadDir(root)) { + if (!featureDir.isDirectory()) continue; + const featureName = featureDir.name; + const featurePath = join(root, featureName); + + for (const typeDir of await safeReadDir(featurePath)) { + const type = toMetaType(typeDir.name); + if (!type) continue; + + const typePath = join(featurePath, typeDir.name); + const jsonPaths = await collectJsonFiles(typePath); + + for (const file of jsonPaths) { + const def = await readFile(file, "utf8"); + const f = features.get(featureName) ?? emptyFeature(featureName); + addDefinition(f, def, type); + features.set(featureName, f); + } + } + } + + return Array.from(features.values()); + } +} + +const toMetaType = (folder: string): MetaType | null => + ({ + flow_type: MetaType.FlowType, + data_type: MetaType.DataType, + runtime_definition: MetaType.RuntimeFunction + } as const)[folder] ?? null; + +const emptyFeature = (name: string): TucanaFeature => ({ + name, + data_types: [], + flow_types: [], + runtime_functions: [], + errors: [], +}); + +const safeReadDir = async (p: string) => { + try { + return await readdir(p, {withFileTypes: true}); + } catch { + return []; + } +}; + +const collectJsonFiles = async (dir: string): Promise => { + const entries = await safeReadDir(dir); + const files = entries.filter(e => e.isFile() && extname(e.name) === ".json").map(e => join(dir, e.name)); + + // include one nested level + for (const e of entries.filter(e => e.isDirectory())) { + const sub = (await safeReadDir(join(dir, e.name))) + .filter(s => s.isFile() && extname(s.name) === ".json") + .map(s => join(dir, e.name, s.name)); + files.push(...sub); + } + return files; +}; + +const addDefinition = (feature: TucanaFeature, def: string, type: MetaType) => { + try { + if (type === MetaType.DataType) feature.data_types.push(DefinitionDataType.fromJsonString(def)); + else if (type === MetaType.FlowType) feature.flow_types.push(FlowType.fromJsonString(def)); + else feature.runtime_functions.push(RuntimeFunctionDefinition.fromJsonString(def)); + } catch (err) { + feature.errors.push({ + definition: extractIdentifier(def, type), + definition_type: type, + error: err instanceof Error ? err.message : String(err), + }); + } +}; + +const extractIdentifier = (def: string, type: MetaType): string => { + const key = type === MetaType.RuntimeFunction ? "runtime_name" : "identifier"; + return def.match(new RegExp(`"${key}"\\s*:\\s*"([^"]+)"`))?.[1] ?? def; +}; + diff --git a/package/mapper/src/definition/remote.ts b/package/mapper/src/definition/remote.ts deleted file mode 100644 index 300ee1e..0000000 --- a/package/mapper/src/definition/remote.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { unzipSync } from "fflate"; -import { - DefinitionDataType as TucanaDataType -} from "@code0-tech/tucana/pb/shared.data_type_pb.js"; -import { - FlowType as TucanaFlowType -} from "@code0-tech/tucana/pb/shared.flow_definition_pb.js"; -import { - RuntimeFunctionDefinition as TucanaFunction -} from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; -import {DataType, FlowType, FunctionDefinition} from "@code0-tech/sagittarius-graphql-types"; -import { DefinitionDataType } from "@code0-tech/tucana/pb/shared.data_type_pb.js"; - -import { mapFlowType } from "../mapper/flowTypeMapper.js"; -import { mapFunction } from "../mapper/functionMapper.js"; -import { getDataType } from "../mapper/dataTypeMapper.js"; - -export interface ConstructedDataTypes { - scannedTucanaTypes: DefinitionDataType[]; - constructedDataTypes: DataType[]; - id: number; -} - -export interface Feature { - name: string; - dataTypes: DataType[]; - flowTypes: FlowType[]; - runtimeFunctions: FunctionDefinition[]; -} - -export function getID(constructedDataTypes: ConstructedDataTypes) { - const last = constructedDataTypes.id; - constructedDataTypes.id += 1; - return last; -} - -const definitionCache = new Map(); - -/* - * Browser version: downloads a ZIP file, unzips in memory, - * decodes the Tucana proto binaries, and constructs Feature[]. - */ -export async function DefinitionMapper(zipUrl: string): Promise { - // return cached result if available - const cached = definitionCache.get(zipUrl); - if (cached) return cached; - - // 1. fetch zip as ArrayBuffer - const res = await fetch(zipUrl); - if (!res.ok) throw new Error(`Failed to download: ${res.statusText}`); - const arrayBuffer = await res.arrayBuffer(); - const bytes = new Uint8Array(arrayBuffer); - - // 2. unzip using fflate (browser-compatible) - const zipEntries = unzipSync(bytes); - - const dataTypes: { feature: string; type: TucanaDataType }[] = []; - const runtimeFunctions: { feature: string; func: TucanaFunction }[] = []; - const flowTypes: { feature: string; flow: TucanaFlowType }[] = []; - - // 3. iterate files and decode - for (const [filename, content] of Object.entries(zipEntries)) { - if (filename.endsWith("/")) continue; // skip folder entries - - const parts = filename.split("/"); - const base = parts[parts.length - 1]; - const featureName = base.split("_")[0]; - if (!featureName) throw new Error(`Missing feature name for ${filename}`); - - if (base.includes("data_type")) { - const decoded = TucanaDataType.fromBinary(content); - dataTypes.push({ feature: featureName, type: decoded }); - } else if (base.includes("function")) { - const decoded = TucanaFunction.fromBinary(content); - runtimeFunctions.push({ feature: featureName, func: decoded }); - } else if (base.includes("flow_type")) { - const decoded = TucanaFlowType.fromBinary(content); - flowTypes.push({ feature: featureName, flow: decoded }); - } - } - - const features: Feature[] = []; - const constructed: ConstructedDataTypes = { - scannedTucanaTypes: dataTypes.map((f) => f.type), - constructedDataTypes: [], - id: 0, - }; - - function getFeature(name: string): Feature { - let f = features.find((x) => x.name === name); - if (!f) { - f = { name, dataTypes: [], flowTypes: [], runtimeFunctions: [] }; - features.push(f); - } - return f; - } - - dataTypes - .map((f) => ({ name: f.feature, type: getDataType(f.type.identifier, constructed) })) - .forEach((dt) => { - if (dt.type) getFeature(dt.name).dataTypes.push(dt.type); - }); - - runtimeFunctions - .map((f) => ({ name: f.feature, type: mapFunction(f.func, constructed) })) - .forEach((rf) => { - if (rf.type) getFeature(rf.name).runtimeFunctions.push(rf.type); - }); - - flowTypes - .map((f) => ({ name: f.feature, type: mapFlowType(f.flow, constructed) })) - .forEach((ft) => { - if (ft.type) getFeature(ft.name).flowTypes.push(ft.type); - }); - - // 5. cache result and return - definitionCache.set(zipUrl, features); - return features; -} diff --git a/package/mapper/src/index.ts b/package/mapper/src/index.ts index 5c3499d..feacd0c 100644 --- a/package/mapper/src/index.ts +++ b/package/mapper/src/index.ts @@ -1,2 +1,16 @@ -export { DefinitionMapper } from './definition/remote.js'; -export type { Feature } from './definition/remote.js'; +import {DefinitionMapper, Feature} from "./definition/mapper.js"; +import * as fs from "node:fs"; +import * as path from "node:path"; + +DefinitionMapper("../../definitions").then((value: Feature[]) => { + const functions = value.flatMap(v => v.runtimeFunctions); + const types = value.flatMap(v => v.dataTypes); + const flows = value.flatMap(v => v.flowTypes); + + const outDir = path.resolve("./export"); + fs.mkdirSync(outDir, {recursive: true}); + + fs.writeFileSync(path.join(outDir, "functions.json"), JSON.stringify(functions)); + fs.writeFileSync(path.join(outDir, "dataTypes.json"), JSON.stringify(types)); + fs.writeFileSync(path.join(outDir, "flowTypes.json"), JSON.stringify(flows)); +}); diff --git a/package/mapper/src/mapper/dataTypeMapper.ts b/package/mapper/src/mapper/dataTypeMapper.ts index 5ca2ea8..05b8481 100644 --- a/package/mapper/src/mapper/dataTypeMapper.ts +++ b/package/mapper/src/mapper/dataTypeMapper.ts @@ -5,18 +5,43 @@ import { DataTypeRulesInputTypeConfig, DataTypeRulesInputTypesConfig, DataTypeRulesItemOfCollectionConfig, DataTypeRulesNumberRangeConfig, - DataTypeRulesParentTypeConfig, DataTypeRulesRegexConfig, DataTypeRulesVariant, DataTypeVariant, - GenericCombinationStrategyType, + DataTypeRulesParentTypeConfig, DataTypeRulesRegexConfig, } from "@code0-tech/sagittarius-graphql-types"; import { DataTypeIdentifier as TucanaDataTypeIdentifier, DefinitionDataType_Variant, DefinitionDataTypeRule, GenericMapper_GenericCombinationStrategy } from "@code0-tech/tucana/pb/shared.data_type_pb.js" import {GenericMapper as TucanaGenericMapper} from "@code0-tech/tucana/pb/shared.data_type_pb.js" -import {ConstructedDataTypes, getID} from "../definition/remote.js"; +import {ConstructedDataTypes, getID} from "../definition/mapper.js"; import {getTranslationConnection} from "./translation.js"; import {Value} from "@code0-tech/tucana/pb/shared.struct_pb.js"; +enum GenericCombinationStrategyType { + And = 'AND', + Or = 'OR' +} + +enum DataTypeRulesVariant { + ContainsKey = 'CONTAINS_KEY', + ContainsType = 'CONTAINS_TYPE', + InputType = 'INPUT_TYPE', + ItemOfCollection = 'ITEM_OF_COLLECTION', + NumberRange = 'NUMBER_RANGE', + ParentType = 'PARENT_TYPE', + Regex = 'REGEX', + ReturnType = 'RETURN_TYPE' +} + +enum DataTypeVariant { + Array = 'ARRAY', + DataType = 'DATA_TYPE', + Error = 'ERROR', + Node = 'NODE', + Object = 'OBJECT', + Primitive = 'PRIMITIVE', + Type = 'TYPE' +} + function getDataType(identifier: string, constructedDataTypes: ConstructedDataTypes): DataType | null { const dataType = constructedDataTypes.constructedDataTypes.find(dt => dt.identifier === identifier) if (dataType == undefined) { diff --git a/package/mapper/src/mapper/flowTypeMapper.ts b/package/mapper/src/mapper/flowTypeMapper.ts index 5ba6654..53424e9 100644 --- a/package/mapper/src/mapper/flowTypeMapper.ts +++ b/package/mapper/src/mapper/flowTypeMapper.ts @@ -2,7 +2,7 @@ import {FlowType as TucanaFlowType, FlowTypeSetting as TucanaFlowTypeSetting} fr import {FlowType, FlowTypeSetting} from "@code0-tech/sagittarius-graphql-types"; import {getDataType} from "./dataTypeMapper.js"; import {getTranslationConnection} from "./translation.js"; -import {ConstructedDataTypes, getID} from "../definition/remote.js"; +import {ConstructedDataTypes, getID} from "../definition/mapper.js"; function mapFlowType(flowType: TucanaFlowType, constructed: ConstructedDataTypes): FlowType | null { return { diff --git a/package/mapper/src/mapper/functionMapper.ts b/package/mapper/src/mapper/functionMapper.ts index 9d813f3..221e203 100644 --- a/package/mapper/src/mapper/functionMapper.ts +++ b/package/mapper/src/mapper/functionMapper.ts @@ -4,7 +4,7 @@ import { RuntimeParameterDefinition } from "@code0-tech/tucana/pb/shared.runtime_function_pb.js"; import {getDataTypeIdentifier} from "./dataTypeMapper.js"; -import {ConstructedDataTypes, getID} from "../definition/remote.js"; +import {ConstructedDataTypes, getID} from "../definition/mapper.js"; import {getTranslationConnection} from "./translation.js"; function mapFunction(func: TucanaFunction, constructed: ConstructedDataTypes): FunctionDefinition | null { From 1ed7aa9b8eef7c432c72bf22bd5242b88311315e Mon Sep 17 00:00:00 2001 From: raphael-goetz Date: Mon, 3 Nov 2025 16:25:59 +0100 Subject: [PATCH 5/5] ref: changed working-directory of the typescript reader --- .github/workflows/ci.yml | 4 ++-- .github/workflows/release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3db2be4..5822303 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,11 +24,11 @@ jobs: - name: "Install dependencies" run: npm ci - working-directory: ./reader/ts + working-directory: ./package/reader - name: "Build project" run: npm run build - working-directory: ./reader/ts + working-directory: ./package/reader format: name: "[RUST] Format Check" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d06b2e..f09139c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/pkg-') defaults: run: - working-directory: "./reader/ts" + working-directory: "./package/reader" runs-on: ubuntu-latest steps: - uses: actions/checkout@v5