{ "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:nightly": "node scripts/run-nightly-direct-sync.mjs", "sync-worker:once": "node scripts/run-nightly-direct-sync.mjs", "sync-worker:start": "node scripts/run-nightly-direct-sync.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", "test:lesson-workflow": "node --test scripts/tests/lesson-workflow.test.mjs", "lessons:migrate": "node scripts/migrate-lesson-workflow.mjs", "lessons:smoke": "node scripts/smoke-mobile-teaching-flow.mjs", "sync-worker:install-mac": "node scripts/install-direct-sync-launchagent.mjs", "test:direct-sync": "node --test scripts/tests/direct-nightly-sync.test.mjs scripts/tests/review-rewards.test.mjs", "test:server": "node --test --test-concurrency=2 scripts/tests/*.test.mjs", "app:actions:audit:local": "node scripts/audit-app-cloud-actions.mjs --local", "verify:local": "npm run test:ci && npm run test:server && npm run build && npm run cloud:validate && npm run app:actions:audit:local" }, "private": true, "dependencies": { "@angular/animations": "20.3.33", "@angular/common": "20.3.33", "@angular/compiler": "20.3.33", "@angular/core": "20.3.33", "@angular/forms": "20.3.33", "@angular/platform-browser": "20.3.33", "@angular/platform-browser-dynamic": "20.3.33", "@angular/router": "20.3.33", "html2pdf.js": "0.14.0", "jspdf": "4.2.1", "lucide-angular": "1.0.0", "mustache": "^4.2.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", "zone.js": "~0.15.1" }, "devDependencies": { "@angular-devkit/build-angular": "20.3.39", "@angular/cli": "20.3.39", "@angular/compiler-cli": "20.3.33", "@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.9.3" }, "overrides": { "webpack-dev-middleware": "7.4.5", "sockjs": { "uuid": "^11.1.1" } } }