@spfn/cms 0.1.0-alpha.6 → 0.1.0-alpha.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/actions.d.ts +140 -6
  2. package/dist/actions.js +97 -10
  3. package/dist/actions.js.map +1 -1
  4. package/dist/client.d.ts +43 -9
  5. package/dist/client.js +406 -56
  6. package/dist/client.js.map +1 -1
  7. package/dist/contracts/labels.d.ts +149 -0
  8. package/dist/contracts/labels.js +166 -0
  9. package/dist/contracts/labels.js.map +1 -0
  10. package/dist/contracts/published-cache.d.ts +25 -0
  11. package/dist/contracts/published-cache.js +32 -0
  12. package/dist/contracts/published-cache.js.map +1 -0
  13. package/dist/contracts/values.d.ts +69 -0
  14. package/dist/contracts/values.js +100 -0
  15. package/dist/contracts/values.js.map +1 -0
  16. package/dist/entities/cms-audit-logs.d.ts +15 -70
  17. package/dist/entities/cms-audit-logs.js +75 -100
  18. package/dist/entities/cms-audit-logs.js.map +1 -1
  19. package/dist/entities/cms-draft-cache.d.ts +13 -73
  20. package/dist/entities/cms-draft-cache.js +35 -109
  21. package/dist/entities/cms-draft-cache.js.map +1 -1
  22. package/dist/entities/cms-label-values.d.ts +14 -65
  23. package/dist/entities/cms-label-values.js +78 -102
  24. package/dist/entities/cms-label-values.js.map +1 -1
  25. package/dist/entities/cms-label-versions.d.ts +16 -49
  26. package/dist/entities/cms-label-versions.js +73 -77
  27. package/dist/entities/cms-label-versions.js.map +1 -1
  28. package/dist/entities/cms-labels.d.ts +17 -14
  29. package/dist/entities/cms-labels.js +39 -45
  30. package/dist/entities/cms-labels.js.map +1 -1
  31. package/dist/entities/cms-published-cache.d.ts +14 -69
  32. package/dist/entities/cms-published-cache.js +33 -100
  33. package/dist/entities/cms-published-cache.js.map +1 -1
  34. package/dist/entities/index.d.ts +7 -10
  35. package/dist/entities/index.js +217 -9
  36. package/dist/entities/index.js.map +1 -1
  37. package/dist/generators/index.d.ts +8 -7
  38. package/dist/generators/index.js +657 -17
  39. package/dist/generators/index.js.map +1 -1
  40. package/dist/index.d.ts +134 -20
  41. package/dist/index.js +1115 -23
  42. package/dist/index.js.map +1 -1
  43. package/dist/{generators/label-sync-generator.d.ts → label-sync-generator-lQrcVfja.d.ts} +9 -6
  44. package/dist/labels/index.d.ts +31 -4
  45. package/dist/labels/index.js +31 -6
  46. package/dist/labels/index.js.map +1 -1
  47. package/dist/repositories/index.d.ts +205 -6
  48. package/dist/repositories/index.js +435 -8
  49. package/dist/repositories/index.js.map +1 -1
  50. package/dist/routes/labels/[id]/index.js +499 -89
  51. package/dist/routes/labels/[id]/index.js.map +1 -1
  52. package/dist/routes/labels/{[id] → _id_}/index.d.ts +5 -3
  53. package/dist/routes/labels/by-key/[key]/index.js +453 -29
  54. package/dist/routes/labels/by-key/[key]/index.js.map +1 -1
  55. package/dist/routes/labels/by-key/_key_/index.d.ts +10 -0
  56. package/dist/routes/labels/index.d.ts +5 -3
  57. package/dist/routes/labels/index.js +488 -68
  58. package/dist/routes/labels/index.js.map +1 -1
  59. package/dist/routes/published-cache/index.d.ts +5 -3
  60. package/dist/routes/published-cache/index.js +325 -30
  61. package/dist/routes/published-cache/index.js.map +1 -1
  62. package/dist/routes/values/[labelId]/[version]/index.js +467 -41
  63. package/dist/routes/values/[labelId]/[version]/index.js.map +1 -1
  64. package/dist/routes/values/[labelId]/index.js +463 -39
  65. package/dist/routes/values/[labelId]/index.js.map +1 -1
  66. package/dist/routes/values/_labelId_/_version_/index.d.ts +10 -0
  67. package/dist/routes/values/_labelId_/index.d.ts +10 -0
  68. package/dist/server.d.ts +17 -7
  69. package/dist/server.js +263 -252
  70. package/dist/server.js.map +1 -1
  71. package/dist/store.d.ts +8 -14
  72. package/dist/store.js +396 -198
  73. package/dist/store.js.map +1 -1
  74. package/dist/types.d.ts +14 -7
  75. package/dist/types.js +0 -6
  76. package/dist/types.js.map +1 -1
  77. package/migrations/0000_condemned_centennial.sql +89 -0
  78. package/migrations/meta/0000_snapshot.json +687 -0
  79. package/migrations/meta/_journal.json +13 -0
  80. package/package.json +33 -16
  81. package/dist/actions.d.ts.map +0 -1
  82. package/dist/client.d.ts.map +0 -1
  83. package/dist/cms.config.d.ts +0 -77
  84. package/dist/cms.config.d.ts.map +0 -1
  85. package/dist/cms.config.js +0 -111
  86. package/dist/cms.config.js.map +0 -1
  87. package/dist/entities/cms-audit-logs.d.ts.map +0 -1
  88. package/dist/entities/cms-draft-cache.d.ts.map +0 -1
  89. package/dist/entities/cms-label-values.d.ts.map +0 -1
  90. package/dist/entities/cms-label-versions.d.ts.map +0 -1
  91. package/dist/entities/cms-labels.d.ts.map +0 -1
  92. package/dist/entities/cms-published-cache.d.ts.map +0 -1
  93. package/dist/entities/index.d.ts.map +0 -1
  94. package/dist/generators/index.d.ts.map +0 -1
  95. package/dist/generators/label-sync-generator.d.ts.map +0 -1
  96. package/dist/generators/label-sync-generator.js +0 -87
  97. package/dist/generators/label-sync-generator.js.map +0 -1
  98. package/dist/helpers/locale.actions.d.ts +0 -132
  99. package/dist/helpers/locale.actions.d.ts.map +0 -1
  100. package/dist/helpers/locale.actions.js +0 -210
  101. package/dist/helpers/locale.actions.js.map +0 -1
  102. package/dist/helpers/locale.constants.d.ts +0 -10
  103. package/dist/helpers/locale.constants.d.ts.map +0 -1
  104. package/dist/helpers/locale.constants.js +0 -10
  105. package/dist/helpers/locale.constants.js.map +0 -1
  106. package/dist/helpers/locale.d.ts +0 -17
  107. package/dist/helpers/locale.d.ts.map +0 -1
  108. package/dist/helpers/locale.js +0 -20
  109. package/dist/helpers/locale.js.map +0 -1
  110. package/dist/helpers/sync.d.ts +0 -41
  111. package/dist/helpers/sync.d.ts.map +0 -1
  112. package/dist/helpers/sync.js +0 -309
  113. package/dist/helpers/sync.js.map +0 -1
  114. package/dist/index.d.ts.map +0 -1
  115. package/dist/init.d.ts +0 -31
  116. package/dist/init.d.ts.map +0 -1
  117. package/dist/init.js +0 -36
  118. package/dist/init.js.map +0 -1
  119. package/dist/labels/helpers.d.ts +0 -31
  120. package/dist/labels/helpers.d.ts.map +0 -1
  121. package/dist/labels/helpers.js +0 -60
  122. package/dist/labels/helpers.js.map +0 -1
  123. package/dist/labels/index.d.ts.map +0 -1
  124. package/dist/repositories/cms-draft-cache.repository.d.ts +0 -62
  125. package/dist/repositories/cms-draft-cache.repository.d.ts.map +0 -1
  126. package/dist/repositories/cms-draft-cache.repository.js +0 -56
  127. package/dist/repositories/cms-draft-cache.repository.js.map +0 -1
  128. package/dist/repositories/cms-label-values.repository.d.ts +0 -32
  129. package/dist/repositories/cms-label-values.repository.d.ts.map +0 -1
  130. package/dist/repositories/cms-label-values.repository.js +0 -72
  131. package/dist/repositories/cms-label-values.repository.js.map +0 -1
  132. package/dist/repositories/cms-labels.repository.d.ts +0 -53
  133. package/dist/repositories/cms-labels.repository.d.ts.map +0 -1
  134. package/dist/repositories/cms-labels.repository.js +0 -77
  135. package/dist/repositories/cms-labels.repository.js.map +0 -1
  136. package/dist/repositories/cms-published-cache.repository.d.ts +0 -53
  137. package/dist/repositories/cms-published-cache.repository.d.ts.map +0 -1
  138. package/dist/repositories/cms-published-cache.repository.js +0 -54
  139. package/dist/repositories/cms-published-cache.repository.js.map +0 -1
  140. package/dist/repositories/index.d.ts.map +0 -1
  141. package/dist/routes/labels/[id]/contract.d.ts +0 -68
  142. package/dist/routes/labels/[id]/contract.d.ts.map +0 -1
  143. package/dist/routes/labels/[id]/contract.js +0 -84
  144. package/dist/routes/labels/[id]/contract.js.map +0 -1
  145. package/dist/routes/labels/[id]/index.d.ts.map +0 -1
  146. package/dist/routes/labels/by-key/[key]/contract.d.ts +0 -24
  147. package/dist/routes/labels/by-key/[key]/contract.d.ts.map +0 -1
  148. package/dist/routes/labels/by-key/[key]/contract.js +0 -28
  149. package/dist/routes/labels/by-key/[key]/contract.js.map +0 -1
  150. package/dist/routes/labels/by-key/[key]/index.d.ts +0 -8
  151. package/dist/routes/labels/by-key/[key]/index.d.ts.map +0 -1
  152. package/dist/routes/labels/contract.d.ts +0 -59
  153. package/dist/routes/labels/contract.d.ts.map +0 -1
  154. package/dist/routes/labels/contract.js +0 -75
  155. package/dist/routes/labels/contract.js.map +0 -1
  156. package/dist/routes/labels/index.d.ts.map +0 -1
  157. package/dist/routes/published-cache/contract.d.ts +0 -25
  158. package/dist/routes/published-cache/contract.d.ts.map +0 -1
  159. package/dist/routes/published-cache/contract.js +0 -35
  160. package/dist/routes/published-cache/contract.js.map +0 -1
  161. package/dist/routes/published-cache/index.d.ts.map +0 -1
  162. package/dist/routes/values/[labelId]/[version]/contract.d.ts +0 -29
  163. package/dist/routes/values/[labelId]/[version]/contract.d.ts.map +0 -1
  164. package/dist/routes/values/[labelId]/[version]/contract.js +0 -33
  165. package/dist/routes/values/[labelId]/[version]/contract.js.map +0 -1
  166. package/dist/routes/values/[labelId]/[version]/index.d.ts +0 -8
  167. package/dist/routes/values/[labelId]/[version]/index.d.ts.map +0 -1
  168. package/dist/routes/values/[labelId]/contract.d.ts +0 -38
  169. package/dist/routes/values/[labelId]/contract.d.ts.map +0 -1
  170. package/dist/routes/values/[labelId]/contract.js +0 -59
  171. package/dist/routes/values/[labelId]/contract.js.map +0 -1
  172. package/dist/routes/values/[labelId]/index.d.ts +0 -8
  173. package/dist/routes/values/[labelId]/index.d.ts.map +0 -1
  174. package/dist/server.d.ts.map +0 -1
  175. package/dist/store.d.ts.map +0 -1
  176. package/dist/types.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spfn/cms",
3
- "version": "0.1.0-alpha.6",
3
+ "version": "0.1.0-alpha.60",
4
4
  "description": "SPFN CMS - Content Management System with type-safe labels and Next.js integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,47 +8,58 @@
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
12
13
  },
13
14
  "./server": {
14
15
  "types": "./dist/server.d.ts",
15
- "import": "./dist/server.js"
16
+ "import": "./dist/server.js",
17
+ "require": "./dist/server.js"
16
18
  },
17
19
  "./client": {
18
20
  "types": "./dist/client.d.ts",
19
- "import": "./dist/client.js"
21
+ "import": "./dist/client.js",
22
+ "require": "./dist/client.js"
20
23
  },
21
24
  "./actions": {
22
25
  "types": "./dist/actions.d.ts",
23
- "import": "./dist/actions.js"
26
+ "import": "./dist/actions.js",
27
+ "require": "./dist/actions.js"
24
28
  },
25
29
  "./store": {
26
30
  "types": "./dist/store.d.ts",
27
- "import": "./dist/store.js"
31
+ "import": "./dist/store.js",
32
+ "require": "./dist/store.js"
28
33
  },
29
34
  "./types": {
30
35
  "types": "./dist/types.d.ts",
31
- "import": "./dist/types.js"
36
+ "import": "./dist/types.js",
37
+ "require": "./dist/types.js"
32
38
  },
33
39
  "./labels": {
34
40
  "types": "./dist/labels/index.d.ts",
35
- "import": "./dist/labels/index.js"
41
+ "import": "./dist/labels/index.js",
42
+ "require": "./dist/labels/index.js"
36
43
  },
37
44
  "./generators": {
38
45
  "types": "./dist/generators/index.d.ts",
39
- "import": "./dist/generators/index.js"
46
+ "import": "./dist/generators/index.js",
47
+ "require": "./dist/generators/index.js"
40
48
  },
41
49
  "./codegen/generators": {
42
50
  "types": "./dist/generators/index.d.ts",
43
- "import": "./dist/generators/index.js"
51
+ "import": "./dist/generators/index.js",
52
+ "require": "./dist/generators/index.js"
44
53
  },
45
54
  "./repositories": {
46
55
  "types": "./dist/repositories/index.d.ts",
47
- "import": "./dist/repositories/index.js"
56
+ "import": "./dist/repositories/index.js",
57
+ "require": "./dist/repositories/index.js"
48
58
  }
49
59
  },
50
60
  "files": [
51
61
  "dist",
62
+ "migrations",
52
63
  "README.md"
53
64
  ],
54
65
  "keywords": [
@@ -71,16 +82,18 @@
71
82
  "./dist/entities/*.js"
72
83
  ],
73
84
  "routes": {
74
- "basePath": "/cms",
75
85
  "dir": "./dist/routes"
76
86
  },
87
+ "migrations": {
88
+ "dir": "./migrations"
89
+ },
77
90
  "setupMessage": " 📚 Next steps:\n 1. Import CMS components: import { useLabels } from '@spfn/cms'\n 2. View labels in Drizzle Studio: pnpm spfn db studio\n 3. CMS API available at: http://localhost:8790/cms\n 4. Learn more: https://github.com/spfnio/spfn"
78
91
  },
79
92
  "peerDependencies": {
80
93
  "drizzle-orm": "^0.44.0",
81
94
  "next": "^15.0.0",
82
95
  "react": "^18.0.0 || ^19.0.0",
83
- "@spfn/core": "0.1.0-alpha.52"
96
+ "@spfn/core": "0.1.0-alpha.60"
84
97
  },
85
98
  "dependencies": {
86
99
  "@sinclair/typebox": "^0.34.0",
@@ -89,13 +102,17 @@
89
102
  },
90
103
  "devDependencies": {
91
104
  "@types/react": "^19",
105
+ "drizzle-kit": "^0.31.6",
92
106
  "drizzle-typebox": "^0.1.0",
107
+ "glob": "^11.0.3",
93
108
  "tsup": "^8.3.5",
109
+ "tsx": "^4.19.2",
94
110
  "typescript": "^5"
95
111
  },
96
112
  "scripts": {
97
- "build": "tsc",
98
- "watch": "tsc --watch",
99
- "clean": "rm -rf dist"
113
+ "build": "npm run db:generate && tsup",
114
+ "watch": "tsup --watch",
115
+ "clean": "rm -rf dist migrations",
116
+ "db:generate": "drizzle-kit generate && tsx scripts/post-generate.ts"
100
117
  }
101
118
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,SAAS,EACT,SAAS,EACT,UAAU,GACb,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,MAAM;IACf;;OAEG;;QAEC;;;WAGG;kCACc;YAAE,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAA;SAAE;;;;;;;;;;;;;;;QAG7E;;;WAGG;oCACgB;YAAE,MAAM,EAAE,aAAa,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAA;SAAE;;;;;;;;;;;;QAG/E;;;WAGG;mCACe;YAAE,IAAI,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;SAAE;;;;;;;;;;;;;QAG7E;;;WAGG;mCACe;YACd,MAAM,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3D;;;;;;;;;;;;QAGD;;;WAGG;mCACe;YAAE,MAAM,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAA;SAAE;;;;;;;IAIrF;;OAEG;;QAEC;;;WAGG;gCACY;YAAE,KAAK,EAAE,aAAa,CAAC,OAAO,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAA;SAAE;;;;;;;;;;;;CAGhF,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,77 +0,0 @@
1
- /**
2
- * CMS Configuration Module
3
- *
4
- * 환경변수 기반 CMS 설정 관리
5
- * - SPFN_CMS_DEFAULT_LOCALE: 기본 언어 (기본값: 'ko')
6
- * - SPFN_CMS_SUPPORTED_LOCALES: 지원 언어 목록, 쉼표로 구분 (기본값: 'ko,en')
7
- * - SPFN_CMS_DETECT_BROWSER_LANGUAGE: 브라우저 언어 자동 감지 (기본값: 'false')
8
- */
9
- /**
10
- * CMS 설정 타입
11
- */
12
- export interface CmsConfig {
13
- /**
14
- * 기본 언어 코드
15
- * @example 'ko', 'en', 'ja'
16
- */
17
- defaultLocale: string;
18
- /**
19
- * 지원하는 언어 목록
20
- * @example ['ko', 'en', 'ja']
21
- */
22
- supportedLocales: string[];
23
- /**
24
- * 브라우저 언어 자동 감지 여부
25
- * @default false
26
- */
27
- detectBrowserLanguage: boolean;
28
- }
29
- /**
30
- * CMS 설정 조회
31
- *
32
- * @returns 현재 CMS 설정
33
- *
34
- * @example
35
- * ```tsx
36
- * import { getCmsConfig } from '@spfn/cms';
37
- *
38
- * const config = getCmsConfig();
39
- * console.log(config.defaultLocale); // 'ko'
40
- * console.log(config.supportedLocales); // ['ko', 'en']
41
- * ```
42
- */
43
- export declare function getCmsConfig(): Readonly<CmsConfig>;
44
- /**
45
- * CMS 설정 변경 (런타임 오버라이드)
46
- *
47
- * 환경변수 설정을 런타임에 오버라이드합니다.
48
- * 주로 테스트나 특수한 경우에 사용됩니다.
49
- *
50
- * @param config - 변경할 설정 (부분 업데이트 가능)
51
- *
52
- * @example
53
- * ```tsx
54
- * import { configureCms } from '@spfn/cms';
55
- *
56
- * // 앱 초기화 시 (선택적)
57
- * configureCms({
58
- * defaultLocale: 'en',
59
- * supportedLocales: ['en', 'ko', 'ja'],
60
- * detectBrowserLanguage: true,
61
- * });
62
- * ```
63
- */
64
- export declare function configureCms(config: Partial<CmsConfig>): void;
65
- /**
66
- * 설정 초기화 (환경변수에서 재로드)
67
- *
68
- * @example
69
- * ```tsx
70
- * import { resetCmsConfig } from '@spfn/cms';
71
- *
72
- * // 환경변수 설정으로 되돌리기
73
- * resetCmsConfig();
74
- * ```
75
- */
76
- export declare function resetCmsConfig(): void;
77
- //# sourceMappingURL=cms.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.config.d.ts","sourceRoot":"","sources":["../src/cms.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IAEtB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAClC;AAoDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC,CAGlD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAiB7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
@@ -1,111 +0,0 @@
1
- /**
2
- * CMS Configuration Module
3
- *
4
- * 환경변수 기반 CMS 설정 관리
5
- * - SPFN_CMS_DEFAULT_LOCALE: 기본 언어 (기본값: 'ko')
6
- * - SPFN_CMS_SUPPORTED_LOCALES: 지원 언어 목록, 쉼표로 구분 (기본값: 'ko,en')
7
- * - SPFN_CMS_DETECT_BROWSER_LANGUAGE: 브라우저 언어 자동 감지 (기본값: 'false')
8
- */
9
- /**
10
- * 환경변수 읽기 헬퍼
11
- */
12
- function getEnvVar(key, defaultValue) {
13
- return process.env[key] || defaultValue;
14
- }
15
- /**
16
- * 환경변수에서 boolean 읽기
17
- */
18
- function getEnvBoolean(key, defaultValue) {
19
- const value = process.env[key];
20
- if (value === undefined)
21
- return defaultValue;
22
- return value === 'true' || value === '1';
23
- }
24
- /**
25
- * 환경변수에서 설정 로드
26
- */
27
- function loadConfigFromEnv() {
28
- const defaultLocale = getEnvVar('SPFN_CMS_DEFAULT_LOCALE', 'en');
29
- const supportedLocalesStr = getEnvVar('SPFN_CMS_SUPPORTED_LOCALES', 'en,ko');
30
- const detectBrowserLanguage = getEnvBoolean('SPFN_CMS_DETECT_BROWSER_LANGUAGE', true);
31
- const supportedLocales = supportedLocalesStr
32
- .split(',')
33
- .map(locale => locale.trim())
34
- .filter(locale => locale.length > 0);
35
- // 기본 언어가 지원 목록에 없으면 추가
36
- if (!supportedLocales.includes(defaultLocale)) {
37
- supportedLocales.unshift(defaultLocale);
38
- }
39
- return {
40
- defaultLocale,
41
- supportedLocales,
42
- detectBrowserLanguage,
43
- };
44
- }
45
- /**
46
- * 현재 설정 (환경변수에서 초기화)
47
- */
48
- let currentConfig = loadConfigFromEnv();
49
- /**
50
- * CMS 설정 조회
51
- *
52
- * @returns 현재 CMS 설정
53
- *
54
- * @example
55
- * ```tsx
56
- * import { getCmsConfig } from '@spfn/cms';
57
- *
58
- * const config = getCmsConfig();
59
- * console.log(config.defaultLocale); // 'ko'
60
- * console.log(config.supportedLocales); // ['ko', 'en']
61
- * ```
62
- */
63
- export function getCmsConfig() {
64
- return currentConfig;
65
- }
66
- /**
67
- * CMS 설정 변경 (런타임 오버라이드)
68
- *
69
- * 환경변수 설정을 런타임에 오버라이드합니다.
70
- * 주로 테스트나 특수한 경우에 사용됩니다.
71
- *
72
- * @param config - 변경할 설정 (부분 업데이트 가능)
73
- *
74
- * @example
75
- * ```tsx
76
- * import { configureCms } from '@spfn/cms';
77
- *
78
- * // 앱 초기화 시 (선택적)
79
- * configureCms({
80
- * defaultLocale: 'en',
81
- * supportedLocales: ['en', 'ko', 'ja'],
82
- * detectBrowserLanguage: true,
83
- * });
84
- * ```
85
- */
86
- export function configureCms(config) {
87
- currentConfig = {
88
- ...currentConfig,
89
- ...config,
90
- };
91
- // 기본 언어가 지원 목록에 있는지 확인
92
- if (config.defaultLocale && !currentConfig.supportedLocales.includes(config.defaultLocale)) {
93
- console.warn(`[CMS Config] Default locale '${config.defaultLocale}' not in supported locales, adding automatically.`, `Supported locales: [${currentConfig.supportedLocales.join(', ')}]`);
94
- currentConfig.supportedLocales.unshift(config.defaultLocale);
95
- }
96
- }
97
- /**
98
- * 설정 초기화 (환경변수에서 재로드)
99
- *
100
- * @example
101
- * ```tsx
102
- * import { resetCmsConfig } from '@spfn/cms';
103
- *
104
- * // 환경변수 설정으로 되돌리기
105
- * resetCmsConfig();
106
- * ```
107
- */
108
- export function resetCmsConfig() {
109
- currentConfig = loadConfigFromEnv();
110
- }
111
- //# sourceMappingURL=cms.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.config.js","sourceRoot":"","sources":["../src/cms.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0BH;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,YAAoB;IAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,YAAqB;IAErD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IAEtB,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,mBAAmB,GAAG,SAAS,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,aAAa,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;IAEtF,MAAM,gBAAgB,GAAG,mBAAmB;SACvC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzC,uBAAuB;IACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC7C,CAAC;QACG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACH,aAAa;QACb,gBAAgB;QAChB,qBAAqB;KACxB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,IAAI,aAAa,GAAc,iBAAiB,EAAE,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY;IAExB,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B;IAEnD,aAAa,GAAG;QACZ,GAAG,aAAa;QAChB,GAAG,MAAM;KACZ,CAAC;IAEF,uBAAuB;IACvB,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAC1F,CAAC;QACG,OAAO,CAAC,IAAI,CACR,gCAAgC,MAAM,CAAC,aAAa,mDAAmD,EACvG,uBAAuB,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtE,CAAC;QAEF,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc;IAE1B,aAAa,GAAG,iBAAiB,EAAE,CAAC;AACxC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-audit-logs.d.ts","sourceRoot":"","sources":["../../src/entities/cms-audit-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCvB,CAAC;AAGH,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-draft-cache.d.ts","sourceRoot":"","sources":["../../src/entities/cms-draft-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCxB,CAAC;AAGH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-values.d.ts","sourceRoot":"","sources":["../../src/entities/cms-label-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CzB,CAAC;AAGH,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,YAAY,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-versions.d.ts","sourceRoot":"","sources":["../../src/entities/cms-label-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC3B,CAAC;AAGH,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-labels.d.ts","sourceRoot":"","sources":["../../src/entities/cms-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CpB,CAAC;AAGH,MAAM,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-published-cache.d.ts","sourceRoot":"","sources":["../../src/entities/cms-published-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC5B,CAAC;AAGH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,YAAY,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,OAAO,iBAAiB,CAAC,YAAY,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,UAAU;;CAEtB,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"label-sync-generator.d.ts","sourceRoot":"","sources":["../../src/generators/label-sync-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtE,MAAM,WAAW,wBAAwB;IAErC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAEhD,IAAI,SAAgB;IACpB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,GAAE,wBAA6B;IAKjD;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,EAAE,CAK5B;IAEK,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiElD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAGrF"}
@@ -1,87 +0,0 @@
1
- /**
2
- * Label Sync Generator
3
- *
4
- * File-based label sync with JSON definitions
5
- *
6
- * Structure:
7
- * cms/labels/
8
- * layout/ # Section name
9
- * nav.json # Label definitions
10
- * footer.json
11
- * homepage/
12
- * hero.json
13
- */
14
- import { logger } from '@spfn/core';
15
- import { join } from 'path';
16
- import { syncAll, loadLabelsFromJson } from '../helpers/sync.js';
17
- const syncLogger = logger.child('label-sync');
18
- export class LabelSyncGenerator {
19
- name = 'label-sync';
20
- labelsDir;
21
- constructor(config = {}) {
22
- this.labelsDir = config.labelsDir ?? 'src/cms/labels';
23
- }
24
- /**
25
- * Watch patterns for label definition files
26
- */
27
- get watchPatterns() {
28
- return [
29
- `${this.labelsDir}/**/*.json`,
30
- ];
31
- }
32
- async generate(options) {
33
- const isDevelopment = process.env.NODE_ENV !== 'production';
34
- if (options.debug) {
35
- syncLogger.info('Starting label sync...');
36
- }
37
- try {
38
- const labelsPath = join(options.cwd, this.labelsDir);
39
- // Load labels from JSON files
40
- const sections = loadLabelsFromJson(labelsPath);
41
- if (sections.length === 0) {
42
- syncLogger.warn(`No labels found in ${labelsPath}`);
43
- return;
44
- }
45
- syncLogger.info(`Found ${sections.length} sections`);
46
- // Sync all sections
47
- const results = await syncAll(sections, {
48
- verbose: options.debug ?? false,
49
- updateExisting: isDevelopment,
50
- });
51
- const totalCreated = results.reduce((sum, r) => sum + r.created, 0);
52
- const totalUpdated = results.reduce((sum, r) => sum + r.updated, 0);
53
- const totalErrors = results.reduce((sum, r) => sum + r.errors.length, 0);
54
- if (options.debug || totalCreated > 0 || totalUpdated > 0) {
55
- syncLogger.info('Label sync completed', {
56
- sections: results.length,
57
- created: totalCreated,
58
- updated: totalUpdated,
59
- errors: totalErrors,
60
- });
61
- }
62
- // Log errors if any
63
- if (totalErrors > 0) {
64
- results.forEach((result) => {
65
- result.errors.forEach((error) => {
66
- syncLogger.error(`[${result.section}] ${error.key}: ${error.error}`);
67
- });
68
- });
69
- }
70
- }
71
- catch (error) {
72
- syncLogger.error('Label sync failed', error instanceof Error ? error : new Error(String(error)));
73
- }
74
- }
75
- async onFileChange(filePath, event) {
76
- syncLogger.info(`Label file ${event}`, { file: filePath });
77
- // Re-sync all labels when any label file changes
78
- await this.generate({ cwd: process.cwd(), debug: true });
79
- }
80
- }
81
- /**
82
- * Create label sync generator instance
83
- */
84
- export function createLabelSyncGenerator(config) {
85
- return new LabelSyncGenerator(config);
86
- }
87
- //# sourceMappingURL=label-sync-generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label-sync-generator.js","sourceRoot":"","sources":["../../src/generators/label-sync-generator.ts"],"names":[],"mappings":"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"}
@@ -1,132 +0,0 @@
1
- /**
2
- * 현재 locale 가져오기 (Server Action)
3
- *
4
- * 서버/클라이언트 컴포넌트 모두에서 사용 가능
5
- *
6
- * 우선순위:
7
- * 1. 쿠키 (사용자가 명시적으로 선택한 언어)
8
- * 2. 브라우저 언어 감지 (설정에서 활성화된 경우)
9
- * 3. 시스템 기본 언어 (CMS 설정)
10
- *
11
- * @returns 현재 locale (예: 'ko', 'en')
12
- *
13
- * @example
14
- * ```tsx
15
- * // Server Component
16
- * import { getLocale } from '@spfn/cms';
17
- *
18
- * export default async function Page()
19
- * {
20
- * const locale = await getLocale();
21
- * return <div>Current locale: {locale}</div>;
22
- * }
23
- * ```
24
- *
25
- * @example
26
- * ```tsx
27
- * // Client Component
28
- * 'use client';
29
- * import { getLocale } from '@spfn/cms/client';
30
- *
31
- * export default function LanguageSwitcher()
32
- * {
33
- * const [locale, setLocale] = useState('');
34
- *
35
- * useEffect(() => {
36
- * getLocale().then(setLocale);
37
- * }, []);
38
- *
39
- * return <div>Current locale: {locale}</div>;
40
- * }
41
- * ```
42
- */
43
- export declare function getLocale(): Promise<string>;
44
- /**
45
- * Locale 설정하기 (Server Action)
46
- *
47
- * 서버/클라이언트 컴포넌트 모두에서 사용 가능
48
- * 쿠키에 locale을 저장합니다.
49
- *
50
- * @param locale - 설정할 locale (예: 'ko', 'en')
51
- * @throws {Error} 지원하지 않는 locale인 경우
52
- *
53
- * @example
54
- * ```tsx
55
- * // Server Component (Server Action)
56
- * import { setLocale } from '@spfn/cms';
57
- *
58
- * export default async function Page()
59
- * {
60
- * await setLocale('en');
61
- * return <div>Locale changed</div>;
62
- * }
63
- * ```
64
- *
65
- * @example
66
- * ```tsx
67
- * // Client Component (Server Action)
68
- * 'use client';
69
- * import { setLocale } from '@spfn/cms/client';
70
- *
71
- * export default function LanguageSwitcher()
72
- * {
73
- * const handleChange = async (newLocale: string) =>
74
- * {
75
- * await setLocale(newLocale);
76
- * window.location.reload(); // 페이지 새로고침
77
- * };
78
- *
79
- * return (
80
- * <button onClick={() => handleChange('en')}>
81
- * Switch to English
82
- * </button>
83
- * );
84
- * }
85
- * ```
86
- */
87
- export declare function setLocale(locale: string): Promise<void>;
88
- /**
89
- * 지원하는 locale 목록 가져오기 (Server Action)
90
- *
91
- * 서버/클라이언트 컴포넌트 모두에서 사용 가능
92
- *
93
- * @returns 지원하는 locale 배열 (예: ['ko', 'en', 'ja'])
94
- *
95
- * @example
96
- * ```tsx
97
- * // Server Component
98
- * import { getLocales } from '@spfn/cms';
99
- *
100
- * export default async function Page()
101
- * {
102
- * const locales = await getLocales();
103
- * return <div>Supported: {locales.join(', ')}</div>;
104
- * }
105
- * ```
106
- *
107
- * @example
108
- * ```tsx
109
- * // Client Component
110
- * 'use client';
111
- * import { getLocales } from '@spfn/cms/client';
112
- *
113
- * export default function LanguageSwitcher()
114
- * {
115
- * const [locales, setLocales] = useState<string[]>([]);
116
- *
117
- * useEffect(() => {
118
- * getLocales().then(setLocales);
119
- * }, []);
120
- *
121
- * return (
122
- * <div>
123
- * {locales.map(locale => (
124
- * <button key={locale}>{locale}</button>
125
- * ))}
126
- * </div>
127
- * );
128
- * }
129
- * ```
130
- */
131
- export declare function getLocales(): Promise<string[]>;
132
- //# sourceMappingURL=locale.actions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"locale.actions.d.ts","sourceRoot":"","sources":["../../src/helpers/locale.actions.ts"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAIpD"}