create-mendix-widget-gleam 1.0.5 → 1.0.7
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.
- package/README.md +9 -8
- package/package.json +1 -1
- package/src/index.mjs +32 -42
- package/src/scaffold.mjs +1 -2
- package/template/_gitignore +3 -0
- package/template/gleam.toml +1 -1
- package/template/src/{widget/__widget_name__.gleam → __widget_name__.gleam} +2 -5
- package/template/src/components/hello_world.gleam +13 -0
- package/template/src/editor_preview.gleam +12 -0
- package/template/.prettierignore +0 -1
- package/template/prettier.config.js +0 -6
- package/template/src/__WidgetName__.editorConfig.js +0 -5
- package/template/src/__WidgetName__.js +0 -6
- package/template/src/scripts/build.gleam +0 -8
- package/template/src/scripts/cmd.gleam +0 -4
- package/template/src/scripts/cmd_ffi.mjs +0 -6
- package/template/src/scripts/dev.gleam +0 -8
- package/template/src/scripts/install.gleam +0 -8
- package/template/src/scripts/lint.gleam +0 -7
- package/template/src/scripts/lint_fix.gleam +0 -7
- package/template/src/scripts/release.gleam +0 -8
- package/template/src/scripts/start.gleam +0 -8
- /package/template/src/{widget/editor_config.gleam → editor_config.gleam} +0 -0
package/README.md
CHANGED
|
@@ -22,11 +22,12 @@ npx create-mendix-widget-gleam my-widget
|
|
|
22
22
|
```
|
|
23
23
|
my-widget/
|
|
24
24
|
src/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
my_widget.gleam # 메인 위젯 모듈
|
|
26
|
+
editor_config.gleam # Studio Pro 속성 패널
|
|
27
|
+
editor_preview.gleam # Studio Pro 디자인 뷰 미리보기
|
|
28
|
+
components/
|
|
29
|
+
hello_world.gleam # Hello World 공유 컴포넌트
|
|
30
|
+
gleam.toml # Gleam 프로젝트 설정 (glendix >= 1.1.0 의존성 포함)
|
|
30
31
|
CLAUDE.md # AI 어시스턴트용 프로젝트 컨텍스트
|
|
31
32
|
```
|
|
32
33
|
|
|
@@ -36,9 +37,9 @@ React/Mendix FFI 바인딩은 프로젝트에 포함되지 않으며, [glendix](
|
|
|
36
37
|
|
|
37
38
|
```bash
|
|
38
39
|
cd my-widget
|
|
39
|
-
gleam run -m
|
|
40
|
-
gleam run -m
|
|
41
|
-
gleam run -m
|
|
40
|
+
gleam run -m glendix/install # 의존성 설치
|
|
41
|
+
gleam run -m glendix/dev # 개발 서버 시작
|
|
42
|
+
gleam run -m glendix/build # 프로덕션 빌드 (.mpk 생성)
|
|
42
43
|
```
|
|
43
44
|
|
|
44
45
|
## glendix — React + Mendix 바인딩
|
package/package.json
CHANGED
package/src/index.mjs
CHANGED
|
@@ -109,9 +109,9 @@ ${GREEN}${BOLD}프로젝트가 생성되었습니다!${RESET}
|
|
|
109
109
|
${BOLD}다음 단계:${RESET}
|
|
110
110
|
|
|
111
111
|
${CYAN}cd ${names.kebabCase}${RESET}
|
|
112
|
-
${CYAN}gleam run -m
|
|
113
|
-
${CYAN}gleam run -m
|
|
114
|
-
${CYAN}gleam run -m
|
|
112
|
+
${CYAN}gleam run -m glendix/install${RESET} ${DIM}# 의존성 설치${RESET}
|
|
113
|
+
${CYAN}gleam run -m glendix/dev${RESET} ${DIM}# 개발 서버 시작${RESET}
|
|
114
|
+
${CYAN}gleam run -m glendix/build${RESET} ${DIM}# 프로덕션 빌드${RESET}
|
|
115
115
|
`);
|
|
116
116
|
}
|
|
117
117
|
|
|
@@ -132,28 +132,18 @@ Gleam 언어로 Mendix Pluggable Widget을 개발하여 "Hello World"를 화면
|
|
|
132
132
|
- **Gleam** → JavaScript 컴파일 (target: javascript)
|
|
133
133
|
- **[glendix](https://hexdocs.pm/glendix/)** — React + Mendix Pluggable Widget API의 Gleam FFI 바인딩 (Hex 패키지)
|
|
134
134
|
- **Mendix Pluggable Widget** (React 19)
|
|
135
|
-
- **Package Manager**: ${pm} (npm 의존성은 \`gleam run -m
|
|
135
|
+
- **Package Manager**: ${pm} (npm 의존성은 \`gleam run -m glendix/install\`로 설치)
|
|
136
136
|
- **Build**: \`@mendix/pluggable-widgets-tools\` (Rollup 기반)
|
|
137
137
|
|
|
138
138
|
## Architecture
|
|
139
139
|
|
|
140
140
|
\`\`\`
|
|
141
141
|
src/
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
cmd_ffi.mjs # Node.js child_process FFI
|
|
148
|
-
install.gleam # npm 의존성 설치
|
|
149
|
-
build.gleam # 프로덕션 빌드
|
|
150
|
-
dev.gleam # 개발 서버
|
|
151
|
-
start.gleam # Mendix 테스트 프로젝트 연동
|
|
152
|
-
release.gleam # 릴리즈 빌드
|
|
153
|
-
lint.gleam # ESLint 실행
|
|
154
|
-
lint_fix.gleam # ESLint 자동 수정
|
|
155
|
-
${names.pascalCase}.js # 브릿지 진입점
|
|
156
|
-
${names.pascalCase}.editorConfig.js # 브릿지 (editorConfig)
|
|
142
|
+
${names.snakeCase}.gleam # 위젯 메인 모듈
|
|
143
|
+
editor_config.gleam # Studio Pro 속성 패널 설정
|
|
144
|
+
editor_preview.gleam # Studio Pro 디자인 뷰 미리보기
|
|
145
|
+
components/
|
|
146
|
+
hello_world.gleam # Hello World 공유 컴포넌트
|
|
157
147
|
${names.pascalCase}.xml # 위젯 속성 정의
|
|
158
148
|
package.xml # Mendix 패키지 매니페스트
|
|
159
149
|
ui/
|
|
@@ -169,11 +159,11 @@ React/Mendix FFI 바인딩은 이 프로젝트에 포함되지 않으며, [glend
|
|
|
169
159
|
## Build Pipeline
|
|
170
160
|
|
|
171
161
|
\`\`\`
|
|
172
|
-
[src
|
|
173
|
-
↓ gleam run -m
|
|
174
|
-
[build/dev/javascript/${names.snakeCase}
|
|
162
|
+
[src/*.gleam] + [glendix 패키지 (Hex)]
|
|
163
|
+
↓ gleam run -m glendix/build
|
|
164
|
+
[build/dev/javascript/${names.snakeCase}/*.mjs]
|
|
175
165
|
[build/dev/javascript/glendix/glendix/*.mjs]
|
|
176
|
-
↓
|
|
166
|
+
↓ 브릿지 JS (자동 생성)가 import
|
|
177
167
|
↓ Rollup (pluggable-widgets-tools build:web)
|
|
178
168
|
[dist/1.0.0/mendix.${names.lowerCase}.${names.pascalCase}.mpk]
|
|
179
169
|
\`\`\`
|
|
@@ -181,13 +171,13 @@ React/Mendix FFI 바인딩은 이 프로젝트에 포함되지 않으며, [glend
|
|
|
181
171
|
## Commands
|
|
182
172
|
|
|
183
173
|
\`\`\`bash
|
|
184
|
-
gleam run -m
|
|
185
|
-
gleam run -m
|
|
186
|
-
gleam run -m
|
|
187
|
-
gleam run -m
|
|
188
|
-
gleam run -m
|
|
189
|
-
gleam run -m
|
|
190
|
-
gleam run -m
|
|
174
|
+
gleam run -m glendix/install # 의존성 설치
|
|
175
|
+
gleam run -m glendix/build # 위젯 프로덕션 빌드 (.mpk 생성)
|
|
176
|
+
gleam run -m glendix/dev # 개발 서버 (HMR, port 3000)
|
|
177
|
+
gleam run -m glendix/start # Mendix 테스트 프로젝트와 연동 개발
|
|
178
|
+
gleam run -m glendix/lint # ESLint 실행
|
|
179
|
+
gleam run -m glendix/lint_fix # ESLint 자동 수정
|
|
180
|
+
gleam run -m glendix/release # 릴리즈 빌드
|
|
191
181
|
gleam build --target javascript # Gleam → JS 컴파일만
|
|
192
182
|
gleam test # Gleam 테스트 실행
|
|
193
183
|
gleam format # Gleam 코드 포맷팅
|
|
@@ -264,19 +254,19 @@ Gleam 언어로 작성된 Mendix Pluggable Widget.
|
|
|
264
254
|
### 설치
|
|
265
255
|
|
|
266
256
|
\`\`\`bash
|
|
267
|
-
gleam run -m
|
|
257
|
+
gleam run -m glendix/install
|
|
268
258
|
\`\`\`
|
|
269
259
|
|
|
270
260
|
### 개발
|
|
271
261
|
|
|
272
262
|
\`\`\`bash
|
|
273
|
-
gleam run -m
|
|
263
|
+
gleam run -m glendix/dev
|
|
274
264
|
\`\`\`
|
|
275
265
|
|
|
276
266
|
### 빌드
|
|
277
267
|
|
|
278
268
|
\`\`\`bash
|
|
279
|
-
gleam run -m
|
|
269
|
+
gleam run -m glendix/build
|
|
280
270
|
\`\`\`
|
|
281
271
|
|
|
282
272
|
빌드 결과물(\`.mpk\`)은 \`dist/\` 디렉토리에 생성됩니다.
|
|
@@ -284,10 +274,10 @@ gleam run -m scripts/build
|
|
|
284
274
|
### 기타 명령어
|
|
285
275
|
|
|
286
276
|
\`\`\`bash
|
|
287
|
-
gleam run -m
|
|
288
|
-
gleam run -m
|
|
289
|
-
gleam run -m
|
|
290
|
-
gleam run -m
|
|
277
|
+
gleam run -m glendix/start # Mendix 테스트 프로젝트 연동
|
|
278
|
+
gleam run -m glendix/lint # ESLint 실행
|
|
279
|
+
gleam run -m glendix/lint_fix # ESLint 자동 수정
|
|
280
|
+
gleam run -m glendix/release # 릴리즈 빌드
|
|
291
281
|
gleam build --target javascript # Gleam → JS 컴파일만
|
|
292
282
|
gleam test # 테스트 실행
|
|
293
283
|
gleam format # 코드 포맷팅
|
|
@@ -297,11 +287,11 @@ gleam format # 코드 포맷팅
|
|
|
297
287
|
|
|
298
288
|
\`\`\`
|
|
299
289
|
src/
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
290
|
+
${names.snakeCase}.gleam # 메인 위젯 모듈
|
|
291
|
+
editor_config.gleam # Studio Pro 속성 패널
|
|
292
|
+
editor_preview.gleam # Studio Pro 디자인 뷰 미리보기
|
|
293
|
+
components/
|
|
294
|
+
hello_world.gleam # Hello World 공유 컴포넌트
|
|
305
295
|
${names.pascalCase}.xml # 위젯 속성 정의
|
|
306
296
|
\`\`\`
|
|
307
297
|
|
package/src/scaffold.mjs
CHANGED
|
@@ -42,8 +42,7 @@ function replaceContent(content, names, pmConfig) {
|
|
|
42
42
|
.replace(/\{\{LOWERCASE\}\}/g, names.lowerCase)
|
|
43
43
|
.replace(/\{\{DISPLAY_NAME\}\}/g, names.displayName)
|
|
44
44
|
.replace(/\{\{KEBAB_CASE\}\}/g, names.kebabCase)
|
|
45
|
-
|
|
46
|
-
.replace(/\{\{RUNNER\}\}/g, pmConfig.runner);
|
|
45
|
+
;
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
/**
|
package/template/_gitignore
CHANGED
package/template/gleam.toml
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// Mendix Pluggable Widget - "Hello World"
|
|
2
2
|
// React 함수형 컴포넌트: fn(JsProps) -> ReactElement
|
|
3
3
|
|
|
4
|
+
import components/hello_world
|
|
4
5
|
import glendix/mendix
|
|
5
6
|
import glendix/react.{type JsProps, type ReactElement}
|
|
6
|
-
import glendix/react/html
|
|
7
|
-
import glendix/react/prop
|
|
8
7
|
|
|
9
8
|
/// 위젯 메인 함수 - Mendix 런타임이 React 컴포넌트로 호출
|
|
10
9
|
pub fn widget(props: JsProps) -> ReactElement {
|
|
11
10
|
let sample_text = mendix.get_string_prop(props, "sampleText")
|
|
12
|
-
|
|
13
|
-
react.text("Hello " <> sample_text),
|
|
14
|
-
])
|
|
11
|
+
hello_world.render(sample_text)
|
|
15
12
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Hello World 컴포넌트
|
|
2
|
+
// 위젯 런타임과 Studio Pro 미리보기에서 공유
|
|
3
|
+
|
|
4
|
+
import glendix/react.{type ReactElement}
|
|
5
|
+
import glendix/react/html
|
|
6
|
+
import glendix/react/prop
|
|
7
|
+
|
|
8
|
+
/// Hello World UI 렌더링
|
|
9
|
+
pub fn render(sample_text: String) -> ReactElement {
|
|
10
|
+
html.div(prop.new() |> prop.class("widget-hello-world"), [
|
|
11
|
+
react.text("Hello " <> sample_text),
|
|
12
|
+
])
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Mendix Studio Pro 디자인 뷰 미리보기
|
|
2
|
+
// Studio Pro에서 위젯의 시각적 미리보기를 렌더링
|
|
3
|
+
|
|
4
|
+
import components/hello_world
|
|
5
|
+
import glendix/mendix
|
|
6
|
+
import glendix/react.{type JsProps, type ReactElement}
|
|
7
|
+
|
|
8
|
+
/// Studio Pro 디자인 뷰 미리보기 - 위젯의 시각적 표현을 렌더링
|
|
9
|
+
pub fn preview(props: JsProps) -> ReactElement {
|
|
10
|
+
let sample_text = mendix.get_string_prop(props, "sampleText")
|
|
11
|
+
hello_world.render(sample_text)
|
|
12
|
+
}
|
package/template/.prettierignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
tests/testProject/
|
|
File without changes
|