create-qs 0.0.0 → 0.8.21
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 +48 -2
- package/README.zh-CN.md +36 -0
- package/README.zh-TW.md +36 -0
- package/index.js +1883 -0
- package/package.json +33 -5
- package/template/default/.quicksilver/.gitattributes +4 -0
- package/template/default/.quicksilver/manual/en-US/00-setup.md +197 -0
- package/template/default/.quicksilver/manual/zh-CN/00-setup.md +197 -0
- package/template/default/.quicksilver/manual/zh-TW/00-setup.md +197 -0
- package/template/default/AGENTS.md +322 -0
- package/template/default/README.md +5 -0
- package/template/default/_gitignore +70 -0
- package/template/default/build.gradle.kts +5 -0
- package/template/default/eslint.config.js +137 -0
- package/template/default/gradle/repo.settings.gradle.kts +90 -0
- package/template/default/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/template/default/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/template/default/gradle.properties +15 -0
- package/template/default/gradlew +248 -0
- package/template/default/gradlew.bat +93 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/build.gradle.kts +8 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/src/main/kotlin/{{API_PACKAGE}}/AutoConfiguration.kt +25 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/src/main/resources/QUICKSILVER-INF/data/init.jsons +2 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/src/test/kotlin/{{API_PACKAGE}}/SmokeTests.kt +58 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/api/src/test/kotlin/{{API_PACKAGE}}/TestConfiguration.kt +6 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/module.yaml +8 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/package.json +25 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/src/module.ts +16 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/src/vite-env.d.ts +10 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/tsconfig.app.json +7 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/tsconfig.json +7 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/tsconfig.node.json +7 -0
- package/template/default/modules/{{MODULE_DIRECTORY}}/web/vite.config.ts +11 -0
- package/template/default/package.json +76 -0
- package/template/default/pnpm-workspace.yaml +35 -0
- package/template/default/publishing.yaml +49 -0
- package/template/default/quicksilver.yaml +13 -0
- package/template/default/run/api/build.gradle.kts +8 -0
- package/template/default/run/api/config/README.md +67 -0
- package/template/default/run/api/config/application-dev.yaml +25 -0
- package/template/default/run/api/config/application-h2.yaml +22 -0
- package/template/default/run/api/config/application-mariadb.yaml +22 -0
- package/template/default/run/api/config/application-mssql.yaml +22 -0
- package/template/default/run/api/config/application-oracle.yaml +22 -0
- package/template/default/run/api/config/application-postgresql.yaml +22 -0
- package/template/default/run/api/config/application-test.yaml +28 -0
- package/template/default/run/api/config/application.yaml +84 -0
- package/template/default/run/api/config/logback-test.xml +141 -0
- package/template/default/run/api/config/logback.xml +142 -0
- package/template/default/run/web/index.html +14 -0
- package/template/default/run/web/index.ts +6 -0
- package/template/default/run/web/package.json +18 -0
- package/template/default/run/web/static/config.js +15 -0
- package/template/default/run/web/tsconfig.app.json +4 -0
- package/template/default/run/web/tsconfig.json +7 -0
- package/template/default/run/web/tsconfig.node.json +4 -0
- package/template/default/run/web/vite.config.ts +21 -0
- package/template/default/settings.gradle.kts +19 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#
|
|
2
|
+
# By default, this file is for `run/api` subproject, so the path is relative to `run/api`
|
|
3
|
+
#
|
|
4
|
+
server:
|
|
5
|
+
port: ${API_PORT:6288}
|
|
6
|
+
# servlet.context-path: /quicksilver
|
|
7
|
+
error:
|
|
8
|
+
path: /error
|
|
9
|
+
whitelabel.enabled: false
|
|
10
|
+
|
|
11
|
+
spring:
|
|
12
|
+
application.name: Quicksilver
|
|
13
|
+
profiles.active: dev
|
|
14
|
+
test.database.replace: none
|
|
15
|
+
security.filter.dispatcher-types: request, async, error # skip security chain on forward dispatch
|
|
16
|
+
servlet.multipart:
|
|
17
|
+
max-file-size: 10MB
|
|
18
|
+
max-request-size: 10MB
|
|
19
|
+
h2.console.enabled: true
|
|
20
|
+
|
|
21
|
+
# To enable Redis
|
|
22
|
+
# redis:
|
|
23
|
+
# host: localhost
|
|
24
|
+
# port: 6379
|
|
25
|
+
# password: ""
|
|
26
|
+
# database: 0
|
|
27
|
+
# timeout: 5000ms
|
|
28
|
+
# lettuce:
|
|
29
|
+
# pool:
|
|
30
|
+
# max-active: 8
|
|
31
|
+
# max-idle: 8
|
|
32
|
+
# min-idle: 0
|
|
33
|
+
# max-wait: -1ms
|
|
34
|
+
|
|
35
|
+
logging.config: config/logback.xml
|
|
36
|
+
|
|
37
|
+
quicksilver:
|
|
38
|
+
application.mode: development # development/production
|
|
39
|
+
cluster.enabled: false
|
|
40
|
+
security.cipher.key-file: ${QUICKSILVER_CIPHER_KEY_FILE:./config/cipher.key}
|
|
41
|
+
cache:
|
|
42
|
+
type: caffeine # caffeine/redis/none
|
|
43
|
+
max-idle-seconds: 600
|
|
44
|
+
max-entities: 10000 # for caffeine only currently
|
|
45
|
+
cors:
|
|
46
|
+
allowed-origins: '*' # http://127.0.0.1:6186,http://192.168.1.100:6186 # '*' for any origin
|
|
47
|
+
allowed-headers: '' # authorization & content-type are always allowed. '' for no other headers, '*' for any header
|
|
48
|
+
token:
|
|
49
|
+
access-validity-seconds: 43200 # 43200 = 12 hours
|
|
50
|
+
refresh-validity-seconds: 2592000 # 2592000 = 30 days
|
|
51
|
+
datasource:
|
|
52
|
+
atomikos:
|
|
53
|
+
log_base_dir: local/log/atomikos # the only entry that differs from the Atomikos default (./)
|
|
54
|
+
|
|
55
|
+
# Below are the Atomikos 6.0.1 defaults, listed here only so you can find them.
|
|
56
|
+
# Uncomment an entry to change it; left commented out it follows the upstream default.
|
|
57
|
+
# tm_unique_name: qs-node1 transaction manager name; must be unique across a
|
|
58
|
+
# cluster and stable across restarts. Unset, Atomikos
|
|
59
|
+
# derives it from the host address, which is unstable
|
|
60
|
+
# in a container whose IP changes
|
|
61
|
+
# enable_logging: true turning this off gives up crash recovery
|
|
62
|
+
# force_shutdown_on_vm_exit: false true aborts in-flight transactions on JVM exit
|
|
63
|
+
# checkpoint_interval: 500 transaction log checkpoint interval (ms)
|
|
64
|
+
# serial_jta_transactions: true access XA resources serially within one transaction
|
|
65
|
+
# default_jta_timeout: 10000 default timeout of a single transaction (ms)
|
|
66
|
+
# max_timeout: 300000 largest timeout a transaction may request (ms)
|
|
67
|
+
# max_actives: 50 cap on concurrently active transactions
|
|
68
|
+
# log_base_name: tmlog transaction log file name prefix
|
|
69
|
+
# forget_orphaned_log_entries_delay: 86400000 delay before orphaned log entries are forgotten (ms)
|
|
70
|
+
# recovery_delay: 10000 recovery scan interval (ms); Atomikos defaults it to default_jta_timeout
|
|
71
|
+
# oltp_max_retries: 5 maximum commit/rollback retries
|
|
72
|
+
# oltp_retry_interval: 10000 interval between retries (ms)
|
|
73
|
+
# allow_subtransactions: true allow nested transactions
|
|
74
|
+
# logcloud_datasource_name: logCloudDS datasource name used in LogCloud mode
|
|
75
|
+
# throw_on_heuristic: false whether to throw on heuristic completion
|
|
76
|
+
# log_lock_acquisition_max_attempts: 3 maximum attempts to acquire the log lock
|
|
77
|
+
# log_lock_acquisition_retry_delay: 1000 delay between log lock attempts (ms)
|
|
78
|
+
pool:
|
|
79
|
+
min-size: 0
|
|
80
|
+
max-size: 64
|
|
81
|
+
max-idle-seconds: 600
|
|
82
|
+
max-live-seconds: 21600
|
|
83
|
+
upload:
|
|
84
|
+
directory: local/upload
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
|
2
|
+
<!DOCTYPE configuration>
|
|
3
|
+
|
|
4
|
+
<configuration scan="true" scanPeriod="30 seconds">
|
|
5
|
+
|
|
6
|
+
<import class="ch.qos.logback.core.ConsoleAppender"/>
|
|
7
|
+
<import class="ch.qos.logback.core.rolling.RollingFileAppender"/>
|
|
8
|
+
<import class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"/>
|
|
9
|
+
<import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>
|
|
10
|
+
<import class="ch.qos.logback.classic.filter.LevelFilter"/>
|
|
11
|
+
<import class="ch.qos.logback.classic.filter.ThresholdFilter"/>
|
|
12
|
+
|
|
13
|
+
<property name="console_date_format" value="HH:mm:ss.SSS"/>
|
|
14
|
+
<property name="file_date_format" value="yyyy-MM-dd'T'HH:mm:ss.SSSXXX"/>
|
|
15
|
+
<property name="file_encoder_pattern" value="%d{${file_date_format}} [%thread] %-5level %logger - %msg%n"/>
|
|
16
|
+
<property name="log_directory" value="build/test/log/application"/>
|
|
17
|
+
<property name="log_daily_directory" value="${log_directory}/%d{yyyy-MM-dd}"/>
|
|
18
|
+
<property name="max_file_size" value="100MB"/>
|
|
19
|
+
<property name="max_history" value="100"/>
|
|
20
|
+
<property name="total_size_cap" value="20GB"/>
|
|
21
|
+
|
|
22
|
+
<conversionRule conversionWord="clr" class="org.springframework.boot.logging.logback.ColorConverter"/>
|
|
23
|
+
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
|
24
|
+
|
|
25
|
+
<appender name="STDOUT" class="ConsoleAppender">
|
|
26
|
+
<encoder class="PatternLayoutEncoder">
|
|
27
|
+
<pattern>%clr(%d{${console_date_format}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%15.15t]){faint} %clr(-){faint} %clr(${LOG_CORRELATION_PATTERN:-}){faint}%clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
|
|
28
|
+
</encoder>
|
|
29
|
+
<filter class="ThresholdFilter">
|
|
30
|
+
<level>DEBUG</level>
|
|
31
|
+
</filter>
|
|
32
|
+
</appender>
|
|
33
|
+
|
|
34
|
+
<appender name="FILE_TRACE" class="RollingFileAppender">
|
|
35
|
+
<file>${log_directory}/trace.log</file>
|
|
36
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
37
|
+
<fileNamePattern>${log_daily_directory}/trace-%i.log.zip</fileNamePattern>
|
|
38
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
39
|
+
<maxHistory>${max_history}</maxHistory>
|
|
40
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
41
|
+
</rollingPolicy>
|
|
42
|
+
<encoder class="PatternLayoutEncoder">
|
|
43
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
44
|
+
</encoder>
|
|
45
|
+
<filter class="LevelFilter">
|
|
46
|
+
<level>TRACE</level>
|
|
47
|
+
<onMatch>ACCEPT</onMatch>
|
|
48
|
+
<onMismatch>DENY</onMismatch>
|
|
49
|
+
</filter>
|
|
50
|
+
</appender>
|
|
51
|
+
|
|
52
|
+
<appender name="FILE_DEBUG" class="RollingFileAppender">
|
|
53
|
+
<file>${log_directory}/debug.log</file>
|
|
54
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
55
|
+
<fileNamePattern>${log_daily_directory}/debug-%i.log.zip</fileNamePattern>
|
|
56
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
57
|
+
<maxHistory>${max_history}</maxHistory>
|
|
58
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
59
|
+
</rollingPolicy>
|
|
60
|
+
<encoder class="PatternLayoutEncoder">
|
|
61
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
62
|
+
</encoder>
|
|
63
|
+
<filter class="LevelFilter">
|
|
64
|
+
<level>DEBUG</level>
|
|
65
|
+
<onMatch>ACCEPT</onMatch>
|
|
66
|
+
<onMismatch>DENY</onMismatch>
|
|
67
|
+
</filter>
|
|
68
|
+
</appender>
|
|
69
|
+
|
|
70
|
+
<appender name="FILE_INFO" class="RollingFileAppender">
|
|
71
|
+
<file>${log_directory}/info.log</file>
|
|
72
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
73
|
+
<fileNamePattern>${log_daily_directory}/info-%i.log.zip</fileNamePattern>
|
|
74
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
75
|
+
<maxHistory>${max_history}</maxHistory>
|
|
76
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
77
|
+
</rollingPolicy>
|
|
78
|
+
<encoder class="PatternLayoutEncoder">
|
|
79
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
80
|
+
</encoder>
|
|
81
|
+
<filter class="LevelFilter">
|
|
82
|
+
<level>INFO</level>
|
|
83
|
+
<onMatch>ACCEPT</onMatch>
|
|
84
|
+
<onMismatch>DENY</onMismatch>
|
|
85
|
+
</filter>
|
|
86
|
+
</appender>
|
|
87
|
+
|
|
88
|
+
<appender name="FILE_WARN" class="RollingFileAppender">
|
|
89
|
+
<file>${log_directory}/warn.log</file>
|
|
90
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
91
|
+
<fileNamePattern>${log_daily_directory}/warn-%i.log.zip</fileNamePattern>
|
|
92
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
93
|
+
<maxHistory>${max_history}</maxHistory>
|
|
94
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
95
|
+
</rollingPolicy>
|
|
96
|
+
<encoder class="PatternLayoutEncoder">
|
|
97
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
98
|
+
</encoder>
|
|
99
|
+
<filter class="LevelFilter">
|
|
100
|
+
<level>WARN</level>
|
|
101
|
+
<onMatch>ACCEPT</onMatch>
|
|
102
|
+
<onMismatch>DENY</onMismatch>
|
|
103
|
+
</filter>
|
|
104
|
+
</appender>
|
|
105
|
+
|
|
106
|
+
<appender name="FILE_ERROR" class="RollingFileAppender">
|
|
107
|
+
<file>${log_directory}/error.log</file>
|
|
108
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
109
|
+
<fileNamePattern>${log_daily_directory}/error-%i.log.zip</fileNamePattern>
|
|
110
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
111
|
+
<maxHistory>${max_history}</maxHistory>
|
|
112
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
113
|
+
</rollingPolicy>
|
|
114
|
+
<encoder class="PatternLayoutEncoder">
|
|
115
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
116
|
+
</encoder>
|
|
117
|
+
<filter class="LevelFilter">
|
|
118
|
+
<level>ERROR</level>
|
|
119
|
+
<onMatch>ACCEPT</onMatch>
|
|
120
|
+
<onMismatch>DENY</onMismatch>
|
|
121
|
+
</filter>
|
|
122
|
+
</appender>
|
|
123
|
+
|
|
124
|
+
<logger name="quicksilver.execution" level="DEBUG"/>
|
|
125
|
+
<logger name="com.qsrun.quicksilver.core.application.security" level="DEBUG"/>
|
|
126
|
+
<logger name="com.qsrun.quicksilver.core.application.web" level="DEBUG"/>
|
|
127
|
+
<logger name="com.qsrun.quicksilver.core.application.component.UnitComponentRegistrar" level="DEBUG"/>
|
|
128
|
+
<logger name="com.qsrun.quicksilver.core.data.command.JsonRunners" level="DEBUG"/>
|
|
129
|
+
<logger name="com.qsrun.quicksilver.lib.database.sql.translation" level="TRACE"/>
|
|
130
|
+
<logger name="com.atomikos" level="WARN"/>
|
|
131
|
+
|
|
132
|
+
<root level="INFO">
|
|
133
|
+
<appender-ref ref="STDOUT"/>
|
|
134
|
+
<appender-ref ref="FILE_TRACE"/>
|
|
135
|
+
<appender-ref ref="FILE_DEBUG"/>
|
|
136
|
+
<appender-ref ref="FILE_INFO"/>
|
|
137
|
+
<appender-ref ref="FILE_WARN"/>
|
|
138
|
+
<appender-ref ref="FILE_ERROR"/>
|
|
139
|
+
</root>
|
|
140
|
+
|
|
141
|
+
</configuration>
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
|
2
|
+
<!DOCTYPE configuration>
|
|
3
|
+
|
|
4
|
+
<configuration scan="true" scanPeriod="30 seconds">
|
|
5
|
+
|
|
6
|
+
<import class="ch.qos.logback.core.ConsoleAppender"/>
|
|
7
|
+
<import class="ch.qos.logback.core.rolling.RollingFileAppender"/>
|
|
8
|
+
<import class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"/>
|
|
9
|
+
<import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>
|
|
10
|
+
<import class="ch.qos.logback.classic.filter.LevelFilter"/>
|
|
11
|
+
<import class="ch.qos.logback.classic.filter.ThresholdFilter"/>
|
|
12
|
+
|
|
13
|
+
<property name="console_date_format" value="HH:mm:ss.SSS"/>
|
|
14
|
+
<property name="file_date_format" value="yyyy-MM-dd'T'HH:mm:ss.SSSXXX"/>
|
|
15
|
+
<property name="file_encoder_pattern" value="%d{${file_date_format}} [%thread] %-5level %logger - %msg%n"/>
|
|
16
|
+
<!-- LOG_PATH is injected by Spring from logging.file.path; falls back to the default directory. -->
|
|
17
|
+
<property name="log_directory" value="${LOG_PATH:-local/log/application}"/>
|
|
18
|
+
<property name="log_daily_directory" value="${log_directory}/%d{yyyy-MM-dd}"/>
|
|
19
|
+
<property name="max_file_size" value="100MB"/>
|
|
20
|
+
<property name="max_history" value="100"/>
|
|
21
|
+
<property name="total_size_cap" value="20GB"/>
|
|
22
|
+
|
|
23
|
+
<conversionRule conversionWord="clr" class="org.springframework.boot.logging.logback.ColorConverter"/>
|
|
24
|
+
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
|
25
|
+
|
|
26
|
+
<appender name="STDOUT" class="ConsoleAppender">
|
|
27
|
+
<encoder class="PatternLayoutEncoder">
|
|
28
|
+
<pattern>%clr(%d{${console_date_format}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%15.15t]){faint} %clr(-){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
|
|
29
|
+
</encoder>
|
|
30
|
+
<filter class="ThresholdFilter">
|
|
31
|
+
<level>INFO</level>
|
|
32
|
+
</filter>
|
|
33
|
+
</appender>
|
|
34
|
+
|
|
35
|
+
<appender name="FILE_TRACE" class="RollingFileAppender">
|
|
36
|
+
<file>${log_directory}/trace.log</file>
|
|
37
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
38
|
+
<fileNamePattern>${log_daily_directory}/trace-%i.log.zip</fileNamePattern>
|
|
39
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
40
|
+
<maxHistory>${max_history}</maxHistory>
|
|
41
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
42
|
+
</rollingPolicy>
|
|
43
|
+
<encoder class="PatternLayoutEncoder">
|
|
44
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
45
|
+
</encoder>
|
|
46
|
+
<filter class="LevelFilter">
|
|
47
|
+
<level>TRACE</level>
|
|
48
|
+
<onMatch>ACCEPT</onMatch>
|
|
49
|
+
<onMismatch>DENY</onMismatch>
|
|
50
|
+
</filter>
|
|
51
|
+
</appender>
|
|
52
|
+
|
|
53
|
+
<appender name="FILE_DEBUG" class="RollingFileAppender">
|
|
54
|
+
<file>${log_directory}/debug.log</file>
|
|
55
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
56
|
+
<fileNamePattern>${log_daily_directory}/debug-%i.log.zip</fileNamePattern>
|
|
57
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
58
|
+
<maxHistory>${max_history}</maxHistory>
|
|
59
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
60
|
+
</rollingPolicy>
|
|
61
|
+
<encoder class="PatternLayoutEncoder">
|
|
62
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
63
|
+
</encoder>
|
|
64
|
+
<filter class="LevelFilter">
|
|
65
|
+
<level>DEBUG</level>
|
|
66
|
+
<onMatch>ACCEPT</onMatch>
|
|
67
|
+
<onMismatch>DENY</onMismatch>
|
|
68
|
+
</filter>
|
|
69
|
+
</appender>
|
|
70
|
+
|
|
71
|
+
<appender name="FILE_INFO" class="RollingFileAppender">
|
|
72
|
+
<file>${log_directory}/info.log</file>
|
|
73
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
74
|
+
<fileNamePattern>${log_daily_directory}/info-%i.log.zip</fileNamePattern>
|
|
75
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
76
|
+
<maxHistory>${max_history}</maxHistory>
|
|
77
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
78
|
+
</rollingPolicy>
|
|
79
|
+
<encoder class="PatternLayoutEncoder">
|
|
80
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
81
|
+
</encoder>
|
|
82
|
+
<filter class="LevelFilter">
|
|
83
|
+
<level>INFO</level>
|
|
84
|
+
<onMatch>ACCEPT</onMatch>
|
|
85
|
+
<onMismatch>DENY</onMismatch>
|
|
86
|
+
</filter>
|
|
87
|
+
</appender>
|
|
88
|
+
|
|
89
|
+
<appender name="FILE_WARN" class="RollingFileAppender">
|
|
90
|
+
<file>${log_directory}/warn.log</file>
|
|
91
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
92
|
+
<fileNamePattern>${log_daily_directory}/warn-%i.log.zip</fileNamePattern>
|
|
93
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
94
|
+
<maxHistory>${max_history}</maxHistory>
|
|
95
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
96
|
+
</rollingPolicy>
|
|
97
|
+
<encoder class="PatternLayoutEncoder">
|
|
98
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
99
|
+
</encoder>
|
|
100
|
+
<filter class="LevelFilter">
|
|
101
|
+
<level>WARN</level>
|
|
102
|
+
<onMatch>ACCEPT</onMatch>
|
|
103
|
+
<onMismatch>DENY</onMismatch>
|
|
104
|
+
</filter>
|
|
105
|
+
</appender>
|
|
106
|
+
|
|
107
|
+
<appender name="FILE_ERROR" class="RollingFileAppender">
|
|
108
|
+
<file>${log_directory}/error.log</file>
|
|
109
|
+
<rollingPolicy class="SizeAndTimeBasedRollingPolicy">
|
|
110
|
+
<fileNamePattern>${log_daily_directory}/error-%i.log.zip</fileNamePattern>
|
|
111
|
+
<maxFileSize>${max_file_size}</maxFileSize>
|
|
112
|
+
<maxHistory>${max_history}</maxHistory>
|
|
113
|
+
<totalSizeCap>${total_size_cap}</totalSizeCap>
|
|
114
|
+
</rollingPolicy>
|
|
115
|
+
<encoder class="PatternLayoutEncoder">
|
|
116
|
+
<pattern>${file_encoder_pattern}</pattern>
|
|
117
|
+
</encoder>
|
|
118
|
+
<filter class="LevelFilter">
|
|
119
|
+
<level>ERROR</level>
|
|
120
|
+
<onMatch>ACCEPT</onMatch>
|
|
121
|
+
<onMismatch>DENY</onMismatch>
|
|
122
|
+
</filter>
|
|
123
|
+
</appender>
|
|
124
|
+
|
|
125
|
+
<logger name="quicksilver.execution" level="DEBUG"/>
|
|
126
|
+
<logger name="com.qsrun.quicksilver.core.application.security" level="DEBUG"/>
|
|
127
|
+
<logger name="com.qsrun.quicksilver.core.application.web" level="DEBUG"/>
|
|
128
|
+
<logger name="com.qsrun.quicksilver.core.application.component.UnitComponentRegistrar" level="DEBUG"/>
|
|
129
|
+
<logger name="com.qsrun.quicksilver.core.data.command.JsonRunners" level="DEBUG"/>
|
|
130
|
+
<logger name="com.qsrun.quicksilver.lib.database.sql.translation" level="TRACE"/>
|
|
131
|
+
<logger name="com.atomikos" level="WARN"/>
|
|
132
|
+
|
|
133
|
+
<root level="INFO">
|
|
134
|
+
<appender-ref ref="STDOUT"/>
|
|
135
|
+
<appender-ref ref="FILE_TRACE"/>
|
|
136
|
+
<appender-ref ref="FILE_DEBUG"/>
|
|
137
|
+
<appender-ref ref="FILE_INFO"/>
|
|
138
|
+
<appender-ref ref="FILE_WARN"/>
|
|
139
|
+
<appender-ref ref="FILE_ERROR"/>
|
|
140
|
+
</root>
|
|
141
|
+
|
|
142
|
+
</configuration>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Quicksilver</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
|
|
8
|
+
<script src='/config.js'></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="app"></div>
|
|
12
|
+
<script type="module" src='index.ts'></script>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_CODE}}-web-run",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"dev:main": "vite -- modules={{PLATFORM_MODULE_CODES}},{{MODULE_CODE}}",
|
|
9
|
+
"dev:debug": "vite -d"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
{{PLATFORM_WEB_DEPENDENCIES}},
|
|
13
|
+
"{{WEB_PACKAGE_NAME}}": "workspace:*"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@qs-platform/preset-vite-web": "catalog:quicksilver"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
window.quicksilverConfig = {
|
|
2
|
+
// apiPort is left unset on purpose: dev proxies /api through Vite (see
|
|
3
|
+
// vite.config.ts), so the SPA and the API share one origin, same as in
|
|
4
|
+
// production. Setting it makes the browser call the API port directly, which
|
|
5
|
+
// splits them across two origins — third-party login does not work in that
|
|
6
|
+
// layout, because the callback page's postMessage back to the opener is
|
|
7
|
+
// dropped by the browser on a targetOrigin mismatch.
|
|
8
|
+
// apiPort: 6288, // used when apiUrl is not set: port on the current domain
|
|
9
|
+
|
|
10
|
+
// apiUrl: 'http://127.0.0.1:6288', // API base; trailing `/` is optional
|
|
11
|
+
|
|
12
|
+
// apiPath: '', // used when apiUrl is not set: path on the current domain
|
|
13
|
+
|
|
14
|
+
// baseHref: '/context',
|
|
15
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import { quicksilverServePlugins } from '@qs-platform/preset-vite-web';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
plugins: [...quicksilverServePlugins()],
|
|
6
|
+
server: {
|
|
7
|
+
open: process.env.OPEN !== 'false',
|
|
8
|
+
host: '0.0.0.0',
|
|
9
|
+
allowedHosts: true,
|
|
10
|
+
port: parseInt(process.env.PORT || '6286'),
|
|
11
|
+
strictPort: true,
|
|
12
|
+
proxy: {
|
|
13
|
+
'/api': `http://localhost:${process.env.API_PORT || '6288'}`,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
resolve: {
|
|
17
|
+
alias: [
|
|
18
|
+
{ find: /^~(.*)$/, replacement: '$1' },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
rootProject.name = "{{PROJECT_CODE}}"
|
|
2
|
+
|
|
3
|
+
pluginManagement {
|
|
4
|
+
// Where the Quicksilver plugin and the platform artifacts come from, and the login for it.
|
|
5
|
+
// See .quicksilver/manual/en-US/00-setup.md. It is applied here rather than further down so that
|
|
6
|
+
// the repository is in place before any plugin in a settings plugins {} block is resolved.
|
|
7
|
+
apply(from = "gradle/repo.settings.gradle.kts")
|
|
8
|
+
// The root plugin's version is the platform version from gradle.properties. The module and run
|
|
9
|
+
// plugins ship in the same plugin jar, so they are applied without a version.
|
|
10
|
+
plugins {
|
|
11
|
+
id("com.qsrun.quicksilver.gradle.root") version providers.gradleProperty("quicksilver.version").get()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
include("modules:{{MODULE_DIRECTORY}}")
|
|
16
|
+
project(":modules:{{MODULE_DIRECTORY}}").projectDir = file("modules/{{MODULE_DIRECTORY}}/api")
|
|
17
|
+
|
|
18
|
+
include("run")
|
|
19
|
+
project(":run").projectDir = file("run/api")
|