[Claude Code Desktop 자동 설치 환경]
- setup/CLAUDE.md: 트리거 키워드 + 설치 패키지 설명
- setup/.claude/skills/guardia-install/SKILL.md: 6단계 설치 오케스트레이터
Phase 0: 의도 파악 → Phase 1: OS 감지 → Phase 2: 사전 확인
Phase 3: 설치 실행 → Phase 4: 라이선스 발급 → Phase 5: 검증 → Phase 6: 완료보고
[통합 자동 설치 스크립트]
- setup/install_auto.sh: Linux 통합 (OS 자동 감지 ubuntu/centos/rhel)
- --license trial30|trial7|<key> 파라미터
- 설치 완료 후 GUARDiA 자동 실행 + 브라우저 자동 열기
- --test 검증 모드
- setup/install_auto.ps1: Windows 통합 (ASCII 전용, PS 5.1 호환)
- 설치 후 NSSM 서비스 자동 시작 + 브라우저 자동 열기
- -Test 파라미터로 검증 전용 실행
[라이선스 엔진 개선]
- core/license.py: generate_trial_key(days=None) 파라미터 추가
- TRIAL_DURATION_DAYS = TRIAL_DURATION_DAYS 환경변수로 조정 가능
- routers/license.py: TrialRequest.days 필드 + 30일 체험판 지원
POST /api/license/trial {"days": 30} 로 30일 발급
사용자 경험:
1. setup/ 폴더를 새 PC에 복사
2. Claude Code Desktop 열고 해당 폴더 open
3. "GUARDiA 시스템 1달 사용자로 설치해 줘" 입력
4. 자동으로 OS 감지 → 설치 → 30일 라이선스 → 브라우저 열림
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
155 lines
4.0 KiB
JSON
155 lines
4.0 KiB
JSON
{
|
|
"name": "react-intersection-observer",
|
|
"version": "9.16.0",
|
|
"description": "Monitor if a component is inside the viewport, using IntersectionObserver API",
|
|
"type": "commonjs",
|
|
"source": "src/index.tsx",
|
|
"main": "dist/index.js",
|
|
"module": "dist/esm/index.js",
|
|
"types": "dist/index.d.ts",
|
|
"exports": {
|
|
"./test-utils": {
|
|
"import": {
|
|
"types": "./test-utils/index.d.mts",
|
|
"default": "./test-utils/index.mjs"
|
|
},
|
|
"require": {
|
|
"types": "./test-utils/index.d.ts",
|
|
"default": "./test-utils/index.js"
|
|
}
|
|
},
|
|
".": {
|
|
"import": {
|
|
"types": "./dist/index.d.mts",
|
|
"default": "./dist/index.mjs"
|
|
},
|
|
"require": {
|
|
"types": "./dist/index.d.ts",
|
|
"default": "./dist/index.js"
|
|
}
|
|
}
|
|
},
|
|
"files": ["dist", "test-utils"],
|
|
"author": "Daniel Schmidt",
|
|
"license": "MIT",
|
|
"sideEffects": false,
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/thebuilder/react-intersection-observer.git"
|
|
},
|
|
"packageManager": "pnpm@10.5.2+sha512.da9dc28cd3ff40d0592188235ab25d3202add8a207afbedc682220e4a0029ffbff4562102b9e6e46b4e3f9e8bd53e6d05de48544b0c57d4b0179e22c76d1199b",
|
|
"scripts": {
|
|
"prebuild": "rm -rf dist lib",
|
|
"build": "tsup && mkdir dist/esm && cp dist/index.mjs dist/esm/index.js",
|
|
"postbuild": "attw --pack && publint && size-limit",
|
|
"dev": "run-p dev:*",
|
|
"dev:package": "tsup src/index.tsx --watch",
|
|
"dev:storybook": "pnpm --filter storybook dev",
|
|
"release": "bumpp && npm publish",
|
|
"lint": "biome check .",
|
|
"version": "pnpm build",
|
|
"storybook:build": "pnpm build && pnpm --filter storybook build",
|
|
"test": "vitest",
|
|
"test:browser": "vitest --workspace=vitest.workspace.ts"
|
|
},
|
|
"keywords": [
|
|
"react",
|
|
"component",
|
|
"hooks",
|
|
"viewport",
|
|
"intersection",
|
|
"observer",
|
|
"lazy load",
|
|
"inview",
|
|
"useInView",
|
|
"useIntersectionObserver"
|
|
],
|
|
"release": {
|
|
"branches": [
|
|
"main",
|
|
{
|
|
"name": "beta",
|
|
"prerelease": true
|
|
}
|
|
],
|
|
"plugins": [
|
|
"@semantic-release/commit-analyzer",
|
|
"@semantic-release/release-notes-generator",
|
|
"@semantic-release/npm",
|
|
"@semantic-release/github"
|
|
]
|
|
},
|
|
"simple-git-hooks": {
|
|
"pre-commit": "npx lint-staged"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,json,css,md,ts,tsx}": [
|
|
"biome check --apply --no-errors-on-unmatched --files-ignore-unknown=true"
|
|
]
|
|
},
|
|
"size-limit": [
|
|
{
|
|
"path": "dist/index.mjs",
|
|
"name": "InView",
|
|
"import": "{ InView }",
|
|
"limit": "1.8 kB"
|
|
},
|
|
{
|
|
"path": "dist/index.mjs",
|
|
"name": "useInView",
|
|
"import": "{ useInView }",
|
|
"limit": "1.3 kB"
|
|
},
|
|
{
|
|
"path": "dist/index.mjs",
|
|
"name": "observe",
|
|
"import": "{ observe }",
|
|
"limit": "1 kB"
|
|
}
|
|
],
|
|
"peerDependencies": {
|
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@arethetypeswrong/cli": "^0.17.4",
|
|
"@biomejs/biome": "^1.9.4",
|
|
"@size-limit/preset-small-lib": "^11.2.0",
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.2.0",
|
|
"@types/react": "^19.0.10",
|
|
"@types/react-dom": "^19.0.4",
|
|
"@vitejs/plugin-react": "^4.3.4",
|
|
"@vitest/browser": "^3.0.7",
|
|
"@vitest/coverage-istanbul": "^3.0.7",
|
|
"bumpp": "^10.0.3",
|
|
"lint-staged": "^15.4.3",
|
|
"microbundle": "^0.15.1",
|
|
"npm-run-all": "^4.1.5",
|
|
"playwright": "^1.50.1",
|
|
"publint": "^0.3.8",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"simple-git-hooks": "^2.11.1",
|
|
"size-limit": "^11.2.0",
|
|
"tsup": "^8.4.0",
|
|
"typescript": "^5.8.2",
|
|
"vitest": "^3.0.7"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"react-dom": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"pnpm": {
|
|
"allowedDeprecatedVersions": {
|
|
"rollup-plugin-terser": "*",
|
|
"sourcemap-codec": "*",
|
|
"source-map-resolve": "*",
|
|
"source-map-url": "*",
|
|
"stable": "*",
|
|
"urix": "*"
|
|
}
|
|
}
|
|
}
|