Files
genieacs/package.json
Zaid Humaimidi 6f3ce6f7c8 refactor: replace array-based expressions with typed class hierarchy
Replace the old Lisp-like array expression representation
(["AND", ["PARAM", ...], ...]) with a class hierarchy rooted in
an abstract Expression class (Literal, Parameter, Binary, Unary,
FunctionCall, Conditional). This gives compile-time type safety
to expression construction, evaluation, and pattern matching.

Key changes:
- New lib/common/expression.ts defines the class hierarchy with
  map/evaluate/toString methods
- Rewrite parser as hand-rolled recursive descent, removing the
  parsimmon dependency
- Extend Path with a colon separator to unify parameter identity
  and attributes into a single address space (e.g.
  "Device.WiFi.SSID.1.Name:writable"). The colon field tracks
  how many trailing segments are attribute qualifiers. PathSet
  rewritten with separate param/attr segment indexes
- Flatten device attribute representation in the UI to
  colon-delimited keys mirroring the new path syntax
2026-03-12 14:58:20 -07:00

81 lines
2.3 KiB
JSON

{
"name": "genieacs",
"version": "1.3.0-dev",
"description": "A TR-069 Auto Configuration Server (ACS)",
"repository": {
"type": "git",
"url": "https://github.com/genieacs/genieacs.git"
},
"homepage": "https://genieacs.com",
"keywords": [
"TR-069",
"CWMP",
"ACS"
],
"author": {
"name": "GenieACS Inc.",
"url": "https://genieacs.com"
},
"license": "AGPL-3.0",
"private": true,
"bin": {
"genieacs-cwmp": "bin/genieacs-cwmp",
"genieacs-fs": "bin/genieacs-fs",
"genieacs-nbi": "bin/genieacs-nbi",
"genieacs-ui": "bin/genieacs-ui"
},
"dependencies": {
"@breejs/later": "^4.2.0",
"@koa/bodyparser": "^5.1.2",
"@koa/router": "^13.1.1",
"bson": "^4.7.2",
"espresso-iisojs": "^1.0.8",
"iconv-lite": "^0.6.3",
"ipaddr.js": "^2.3.0",
"jsonwebtoken": "^9.0.3",
"koa": "^2.16.4",
"koa-compress": "^5.2.0",
"koa-jwt": "^4.0.3",
"koa-send": "^5.0.1",
"mongodb": "^4.16.0",
"seedrandom": "^3.0.5"
},
"devDependencies": {
"@codemirror/commands": "^6.10.2",
"@codemirror/lang-javascript": "^6.2.5",
"@codemirror/lang-yaml": "^6.1.2",
"@codemirror/language": "^6.12.2",
"@codemirror/state": "^6.5.4",
"@codemirror/view": "^6.39.16",
"@eslint/js": "^10.0.1",
"@tailwindcss/cli": "^4.2.1",
"@tailwindcss/forms": "^0.5.11",
"@types/jsonwebtoken": "^9.0.10",
"@types/koa": "^2.15.0",
"@types/koa-compress": "^4.0.7",
"@types/mithril": "^2.2.7",
"@types/node": "^25.3.5",
"@types/seedrandom": "^3.0.8",
"esbuild": "^0.27.4",
"eslint": "^10.0.3",
"eslint-config-prettier": "^10.1.8",
"globals": "^17.4.0",
"mithril": "^2.3.8",
"prettier": "^3.8.1",
"sql.js": "^1.14.1",
"svgo": "^3.3.3",
"tailwindcss": "^4.2.1",
"typescript": "^5.9.3",
"typescript-eslint": "^8.56.1",
"yaml": "^1.10.2"
},
"engines": {
"node": ">=12.13.0"
},
"scripts": {
"test": "esbuild --log-level=warning --bundle --platform=node --target=node18 --packages=external --sourcemap=inline --outdir=test test/*.ts && node --test --enable-source-maps test/*.js && rm test/*.js",
"lint": "esbuild build/lint.ts --bundle --platform=node --target=node16 --packages=external | node",
"build": "esbuild build/build.ts --bundle --platform=node --target=node12 --packages=external | node"
}
}