{ "name": "xiaoshu-angular", "version": "0.0.0", "scripts": { "ng": "ng", "start": "npm run start:mobile", "start:mobile": "ng serve xiaoshu-mobile --proxy-config proxy.conf.cjs --port 4200", "start:admin": "ng serve xiaoshu-admin --proxy-config proxy.conf.cjs --port 4300", "build": "npm run build:mobile && npm run build:admin", "build:mobile": "ng build xiaoshu-mobile", "build:admin": "ng build xiaoshu-admin", "parity:generate": "node scripts/generate-source-parity.mjs", "parity:check": "node scripts/generate-source-parity.mjs --check", "admin-coverage:generate": "node scripts/generate-admin-coverage.mjs", "admin-coverage:check": "node scripts/generate-admin-coverage.mjs --check", "admin-icons:generate": "node scripts/generate-admin-icon-catalog.mjs", "admin-icons:check": "node scripts/generate-admin-icon-catalog.mjs --check", "cloud:validate": "node scripts/deploy-admin-functions.mjs --validate", "cloud:indexes:app": "node scripts/ensure-app-performance-indexes.mjs", "cloud:deploy": "node scripts/deploy-admin-functions.mjs", "cloud:smoke": "node scripts/smoke-admin-functions.mjs", "ops:smoke": "node scripts/smoke-operations-functions.mjs", "payroll:verify-source": "node scripts/verify-payroll-source.mjs", "payroll:backfill": "node scripts/backfill-payroll-lessons.mjs", "app:schema:ensure": "node scripts/ensure-app-member-schemas.mjs", "app:resources:smoke": "node scripts/smoke-app-member-resources.mjs", "app:performance:smoke": "node scripts/smoke-app-performance-read.mjs", "app:actions:audit": "node scripts/audit-app-cloud-actions.mjs", "reading:prompts:sync": "node scripts/sync-reading-prompts.mjs", "reading:ai:configure": "node scripts/configure-reading-ai.mjs", "reading:users:merge": "node scripts/merge-reading-users.mjs", "sync-bridge:build": "dotnet build legacy-sync-bridge/Xiaoshu.LegacySyncBridge.csproj", "sync-bridge:publish": "dotnet publish legacy-sync-bridge/Xiaoshu.LegacySyncBridge.csproj -c Release -r win-x64 --self-contained true -o dist/legacy-sync-bridge-win-x64", "sync-bridge:package": "npm run sync-bridge:publish && bash legacy-sync-bridge/deployment/package.sh", "sync-bridge:smoke": "dotnet build legacy-sync-bridge/Xiaoshu.LegacySyncBridge.csproj -c Release --no-restore && node scripts/smoke-legacy-sync-bridge.mjs", "sync-worker:once": "node scripts/run-legacy-sync-worker.mjs --once", "sync-worker:start": "node scripts/run-legacy-sync-worker.mjs", "test:sync-worker": "node --test scripts/tests/legacy-sync-worker.test.mjs", "watch": "npm run watch:mobile", "watch:mobile": "ng build xiaoshu-mobile --watch --configuration development", "watch:admin": "ng build xiaoshu-admin --watch --configuration development", "test": "npm run test:mobile && npm run test:admin", "test:mobile": "ng test xiaoshu-mobile", "test:admin": "ng test xiaoshu-admin", "test:ci": "npm run test:mobile:ci && npm run test:admin:ci", "test:mobile:ci": "ng test xiaoshu-mobile --no-watch --no-progress --browsers=ChromeHeadless", "test:admin:ci": "ng test xiaoshu-admin --no-watch --no-progress --browsers=ChromeHeadless", "test:review-rewards": "node --test scripts/tests/review-rewards.test.mjs", "review-rewards:migrate": "node scripts/migrate-review-rewards.mjs", "test:member-enrollment": "node --test scripts/tests/member-enrollment.test.mjs scripts/tests/member-enrollment-gateway.test.mjs", "members:migrate": "node scripts/migrate-member-enrollment.mjs", "members:smoke": "node scripts/smoke-member-enrollment.mjs", "test:payroll-integrity": "node --test scripts/tests/payroll-integrity.test.mjs", "payroll:integrity:migrate": "node scripts/migrate-payroll-integrity.mjs", "release:admin:prepare": "node scripts/release-admin-web.mjs --prepare", "release:admin:verify": "node scripts/release-admin-web.mjs --verify", "test:admin-release": "node --test scripts/tests/admin-release.test.mjs" }, "private": true, "dependencies": { "@angular/animations": "^18.2.0", "@angular/common": "^18.2.0", "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", "@angular/forms": "^18.2.0", "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "html2pdf.js": "^0.10.3", "jspdf": "^3.0.4", "lucide-angular": "^0.468.0", "mustache": "^4.2.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "xlsx": "^0.18.5", "zone.js": "~0.14.10" }, "devDependencies": { "@angular-devkit/build-angular": "^18.2.21", "@angular/cli": "^18.2.21", "@angular/compiler-cli": "^18.2.0", "@electric-sql/pglite": "^0.5.8", "@types/jasmine": "~5.1.0", "@types/mustache": "^4.2.6", "jasmine-core": "~5.2.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.5.2" } }