@ddd-tool/domain-designer-cli 0.0.0-alpha.8 → 0.1.0-beta.0

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 (28) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +105 -10
  3. package/bin/domain-designer-cli.cjs +278 -98
  4. package/package.json +19 -18
  5. package/scripts/build-ts.mjs +52 -0
  6. package/scripts/sync-ver.mjs +0 -0
  7. package/src/views/design-en.ts +18 -31
  8. package/src/views/design-zh.ts +14 -24
  9. package/src/views/index.ts +12 -4
  10. package/templates/example-agg.ts +31 -0
  11. package/templates/example.ts +91 -0
  12. package/templates/node_modules/@ddd-tool/domain-designer-core/actor.d.ts +1 -1
  13. package/templates/node_modules/@ddd-tool/domain-designer-core/common.d.ts +33 -155
  14. package/templates/node_modules/@ddd-tool/domain-designer-core/define.d.ts +258 -124
  15. package/templates/node_modules/@ddd-tool/domain-designer-core/index.d.ts +3 -203
  16. package/templates/node_modules/@ddd-tool/domain-designer-core/info.d.ts +2 -0
  17. package/templates/node_modules/@ddd-tool/domain-designer-core/note.d.ts +2 -0
  18. package/templates/node_modules/@ddd-tool/domain-designer-core/policy.d.ts +1 -1
  19. package/templates/node_modules/@ddd-tool/domain-designer-core/service.d.ts +1 -1
  20. package/templates/node_modules/@ddd-tool/domain-designer-core/system.d.ts +1 -1
  21. package/templates/node_modules/version.txt +1 -0
  22. package/tsconfig.json +6 -19
  23. package/vite.config.ts +11 -5
  24. package/bin/domain-designer-cli.cjs.map +0 -7
  25. package/templates/node_modules/@ddd-tool/domain-designer-core/desc.d.ts +0 -2
  26. package/templates/node_modules/@ddd-tool/domain-designer-core/info/field.d.ts +0 -2
  27. package/templates/node_modules/@ddd-tool/domain-designer-core/info/index.d.ts +0 -3
  28. package/templates//347/244/272/344/276/213.ts +0 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-tool/domain-designer-cli",
3
- "version": "0.0.0-alpha.8",
3
+ "version": "0.1.0-beta.0",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "type": "module",
@@ -27,31 +27,32 @@
27
27
  "repository": "https://github.com/ddd-tool/domain-designer-cli-node",
28
28
  "license": "Apache-2.0",
29
29
  "devDependencies": {
30
- "@ddd-tool/domain-designer-core": "0.0.0-alpha.8",
31
- "@ddd-tool/domain-designer-ui-component": "0.0.0-alpha.4",
32
- "@tsconfig/node22": "^22.0.0",
33
- "@types/node": "^22.10.2",
30
+ "@ddd-tool/domain-designer-core": "0.1.0-beta.1",
31
+ "@ddd-tool/domain-designer-ui-component": "0.1.0-beta.0",
32
+ "@primeuix/themes": "^1.0.0",
33
+ "@types/node": "^22.13.10",
34
34
  "@vitejs/plugin-vue": "^5.2.1",
35
35
  "@vue/tsconfig": "^0.7.0",
36
- "npm-run-all2": "^7.0.1",
36
+ "esbuild": "^0.24.2",
37
+ "npm-run-all2": "^7.0.2",
37
38
  "primeicons": "^7.0.0",
38
- "typescript": "^5.7.2",
39
- "vite": "^6.0.3",
39
+ "primevue": "^4.3.1",
40
+ "typescript": "^5.8.2",
41
+ "vite": "^6.2.1",
42
+ "vite-plugin-top-level-await": "^1.5.0",
40
43
  "vue": "^3.5.13",
41
- "vue-tsc": "^2.1.10"
42
- },
43
- "dependencies": {
44
- "@primevue/themes": "^4.2.5",
45
- "primevue": "^4.2.5"
44
+ "vue-tsc": "^2.2.8",
45
+ "zx": "^8.4.0"
46
46
  },
47
47
  "scripts": {
48
48
  "dev": "vite",
49
- "build": "run-p build:cli",
50
- "build:cli": "run-p verify && zx ./scripts/build-cli.mjs",
51
49
  "test": "run-p build:cli && run-p test:fun",
52
50
  "test:fun": "vitest",
53
- "verify": "tsc -p ./tsconfig.build-cli.json",
54
- "demo:init": "node ./bin/domain-designer-cli.cjs init --source=F:/vscode_projects/@ddd-tool/domain-designer-cli-node/demo",
55
- "demo:runWeb": "node ./bin/domain-designer-cli.cjs runWeb --source=F:/vscode_projects/@ddd-tool/domain-designer-cli-node/demo"
51
+ "verify": "tsc -p ./tsconfig.json",
52
+ "demo:init": "node ./bin/domain-designer-cli.cjs init --source=./demo",
53
+ "demo:runWeb": "node ./bin/domain-designer-cli.cjs runWeb --source=./demo",
54
+ "demo:update": "node ./bin/domain-designer-cli.cjs update --source=./demo",
55
+ "demo:info": "node ./bin/domain-designer-cli.cjs info",
56
+ "demo:genCode": "node ./bin/domain-designer-cli.cjs genCode --source=./demo"
56
57
  }
57
58
  }
@@ -0,0 +1,52 @@
1
+ import * as esbuild from 'esbuild'
2
+ import fs from 'fs'
3
+ import path from 'path'
4
+
5
+ // 获取命令行参数
6
+ const args = process.argv.slice(2) // 从第3个元素开始截取(跳过node和脚本路径)
7
+ // 查找并解析 --source 参数
8
+ let sourcePath = null
9
+ for (const arg of args) {
10
+ if (arg.startsWith('--source=')) {
11
+ sourcePath = arg.split('=')[1] // 提取等号后面的值
12
+ break
13
+ }
14
+ }
15
+ if (!sourcePath) {
16
+ throw new Error('missing --source=<path>')
17
+ }
18
+
19
+ if (
20
+ !fs.existsSync(path.join(sourcePath, 'node_modules')) ||
21
+ !fs.statSync(path.join(sourcePath, 'node_modules')).isDirectory() ||
22
+ fs.existsSync(path.join(sourcePath, 'package.json'))
23
+ ) {
24
+ throw new Error('not a workspace: ' + sourcePath)
25
+ }
26
+ const esmPath = path.resolve(sourcePath, '.output', 'esm')
27
+ if (fs.existsSync(esmPath)) {
28
+ fs.rmSync(esmPath, { recursive: true, force: true })
29
+ }
30
+ fs.mkdirSync(esmPath, { recursive: true })
31
+
32
+ const files = fs.readdirSync(sourcePath)
33
+ for (const file of files) {
34
+ if (file.endsWith('.ts')) {
35
+ console.log('compile', `${sourcePath.replaceAll('\\', '/')}/${file}`)
36
+ esbuild.build({
37
+ bundle: true,
38
+ entryPoints: [`${sourcePath.replaceAll('\\', '/')}/${file}`],
39
+ drop: ['debugger'],
40
+ minify: true,
41
+ outfile: `${esmPath.replaceAll('\\', '/')}/${file.replace(/\.ts$/, '.mjs')}`,
42
+ // sourcemap: true,
43
+ format: 'esm',
44
+ // format: 'cjs',
45
+ platform: 'node',
46
+ plugins: [],
47
+ target: 'node18',
48
+ // tsconfig: path.join(__dirname, '..', 'tsconfig.build-cli.json'),
49
+ tsconfig: path.join(__dirname, '..', 'tsconfig.json'),
50
+ })
51
+ }
52
+ }
File without changes
@@ -1,16 +1,17 @@
1
1
  import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
2
2
 
3
3
  const d = createDomainDesigner()
4
+ const i = d.info
4
5
 
5
6
  // user
6
7
  const user = d.actor('user', 'order user')
7
8
 
8
9
  // aggregation
9
- const userAccount = d.info.field.any('userAccount')
10
- const orderId = d.info.field.id('orderId')
11
- const orderTime = d.info.field.time('orderTime')
12
- const productPrice = d.info.field.num('productPrice')
13
- const productQuantity = d.info.field.num('productQuantity')
10
+ const userAccount = i.valueObj('userAccount')
11
+ const orderId = i.id('orderId')
12
+ const orderTime = i.valueObj('orderTime')
13
+ const productPrice = i.valueObj('productPrice')
14
+ const productQuantity = i.valueObj('productQuantity')
14
15
  const orderAmount = d.info.func('orderAmount', [productPrice, productQuantity])
15
16
  const orderAggregation = d.agg(
16
17
  'orderAggregation',
@@ -19,10 +20,7 @@ const orderAggregation = d.agg(
19
20
  )
20
21
 
21
22
  // command
22
- const createOrder = d.command('createOrder', [
23
- orderAggregation.inner.orderId,
24
- userAccount,
25
- ])
23
+ const createOrder = d.command('createOrder', [orderAggregation.inner.orderId, userAccount])
26
24
  const autoDeduct = d.command('autoDeduct', [orderId])
27
25
 
28
26
  // event
@@ -42,10 +40,7 @@ rule 3:
42
40
  `
43
41
  )
44
42
  // service
45
- const autoDeductService = d.service(
46
- 'autoDeductService',
47
- 'initiate automatic payment based on payment rule'
48
- )
43
+ const autoDeductService = d.service('autoDeductService', 'initiate automatic payment based on payment rule')
49
44
  // external system
50
45
  const logisticsSystem = d.system('logisticsSystem')
51
46
  const mailSystem = d.system('mailSystem')
@@ -57,9 +52,7 @@ const createOrderFailureWorkflow = d.startWorkflow('createOrderFailure')
57
52
  user.command(createOrder).agg(orderAggregation).event(orderFailure)
58
53
  orderFailure.system(mailSystem)
59
54
 
60
- const createOrderSuccess_AutoDeductFailureWorkflow = d.startWorkflow(
61
- 'createOrderSuccess_AutoDeductFailure'
62
- )
55
+ const createOrderSuccess_AutoDeductFailureWorkflow = d.startWorkflow('createOrderSuccess_AutoDeductFailure')
63
56
  user
64
57
  .command(createOrder)
65
58
  .agg(orderAggregation)
@@ -72,9 +65,7 @@ user
72
65
  deductFailure.readModel(orderDetail)
73
66
  deductFailure.system(mailSystem)
74
67
 
75
- const createOrderSuccess_AutoDeductSuccessWorkflow = d.startWorkflow(
76
- 'createOrderSuccess_AutoDeductSuccess'
77
- )
68
+ const createOrderSuccess_AutoDeductSuccessWorkflow = d.startWorkflow('createOrderSuccess_AutoDeductSuccess')
78
69
  user
79
70
  .command(createOrder)
80
71
  .agg(orderAggregation)
@@ -95,18 +86,14 @@ d.startWorkflow('readModel')
95
86
  const userRead = d.actor('user', 'user (read model)')
96
87
  userRead.readModel(orderDetail)
97
88
 
98
- d.defineUserStory(
99
- 'as a mall user, I want to place an order and implement automatic payment to get the goods',
100
- [
101
- createOrderFailureWorkflow,
102
- createOrderSuccess_AutoDeductFailureWorkflow,
103
- createOrderSuccess_AutoDeductSuccessWorkflow,
104
- ]
105
- )
89
+ d.defineUserStory('as a mall user, I want to place an order and implement automatic payment to get the goods', [
90
+ createOrderFailureWorkflow,
91
+ createOrderSuccess_AutoDeductFailureWorkflow,
92
+ createOrderSuccess_AutoDeductSuccessWorkflow,
93
+ ])
106
94
 
107
- d.defineUserStory(
108
- 'as a mall user, I want to view the order status, so I can know the order status',
109
- [createOrderSuccess_AutoDeductSuccessWorkflow]
110
- )
95
+ d.defineUserStory('as a mall user, I want to view the order status, so I can know the order status', [
96
+ createOrderSuccess_AutoDeductSuccessWorkflow,
97
+ ])
111
98
 
112
99
  export default d
@@ -1,22 +1,19 @@
1
1
  import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
2
2
 
3
3
  const d = createDomainDesigner()
4
+ const i = d.info
4
5
 
5
6
  // 用户
6
7
  const 用户 = d.actor('用户', '下单用户')
7
8
 
8
9
  // 聚合
9
- const 用户账号 = d.info.field.any('用户账号')
10
- const 订单号 = d.info.field.id('订单号')
11
- const 下单时间 = d.info.field.time('下单时间')
12
- const 商品价格 = d.info.field.num('商品价格')
13
- const 商品数量 = d.info.field.num('商品数量')
10
+ const 用户账号 = i.valueObj('用户账号')
11
+ const 订单号 = i.id('订单号')
12
+ const 下单时间 = i.valueObj('下单时间')
13
+ const 商品价格 = i.valueObj('商品价格')
14
+ const 商品数量 = i.valueObj('商品数量')
14
15
  const 订单金额 = d.info.func('订单金额', [商品价格, 商品数量])
15
- const 订单聚合 = d.agg(
16
- '订单聚合',
17
- [订单号, 下单时间, 用户账号, 商品价格, 商品数量, 订单金额],
18
- '这是订单聚合'
19
- )
16
+ const 订单聚合 = d.agg('订单聚合', [订单号, 下单时间, 用户账号, 商品价格, 商品数量, 订单金额], '这是订单聚合')
20
17
 
21
18
  // 命令
22
19
  const 创建订单 = d.command('创建订单', [订单聚合.inner.订单号, 用户账号])
@@ -51,8 +48,7 @@ const 创建订单失败流程 = d.startWorkflow('创建订单失败')
51
48
  用户.command(创建订单).agg(订单聚合).event(下单失败)
52
49
  下单失败.system(邮件系统)
53
50
 
54
- const 创建订单成功_自动扣款失败流程 =
55
- d.startWorkflow('创建订单成功,自动扣款失败')
51
+ const 创建订单成功_自动扣款失败流程 = d.startWorkflow('创建订单成功,自动扣款失败')
56
52
  用户.command(创建订单)
57
53
  .agg(订单聚合)
58
54
  .event(下单成功)
@@ -64,8 +60,7 @@ const 创建订单成功_自动扣款失败流程 =
64
60
  扣款失败.readModel(订单详情)
65
61
  扣款失败.system(邮件系统)
66
62
 
67
- const 创建订单成功_自动扣款成功流程 =
68
- d.startWorkflow('创建订单成功,自动扣款成功')
63
+ const 创建订单成功_自动扣款成功流程 = d.startWorkflow('创建订单成功,自动扣款成功')
69
64
  用户.command(创建订单)
70
65
  .agg(订单聚合)
71
66
  .event(下单成功)
@@ -85,17 +80,12 @@ d.startWorkflow('读模型')
85
80
  const 用户读 = d.actor('用户', '用户(读模型)')
86
81
  用户读.readModel(订单详情)
87
82
 
88
- d.defineUserStory(
89
- '作为商城用户,我要下单并且实现自动扣款,以便购得心仪得商品',
90
- [
91
- 创建订单失败流程,
92
- 创建订单成功_自动扣款失败流程,
93
- 创建订单成功_自动扣款成功流程,
94
- ]
95
- )
96
-
97
- d.defineUserStory('作为商城用户,我要查看订单情况,以便了解订单状态', [
83
+ d.defineUserStory('作为商城用户,我要下单并且实现自动扣款,以便购得心仪得商品', [
84
+ 创建订单失败流程,
85
+ 创建订单成功_自动扣款失败流程,
98
86
  创建订单成功_自动扣款成功流程,
99
87
  ])
100
88
 
89
+ d.defineUserStory('作为商城用户,我要查看订单情况,以便了解订单状态', [创建订单成功_自动扣款成功流程])
90
+
101
91
  export default d
@@ -1,7 +1,15 @@
1
- import type { DomainDesigner } from '@ddd-tool/domain-designer-core'
2
- const data: Record<string, DomainDesigner> = {
3
- '示例': (await import('F:/vscode_projects/@ddd-tool/domain-designer-cli-node/demo/示例')).default,
1
+ import { type DomainDesigner, isDomainDesigner } from '@ddd-tool/domain-designer-core'
2
+
3
+ const __d1 = (await import('D:/vscode-projects/@ddd-tool/domain-designer-cli-node/demo/example-agg')).default
4
+ const __d2 = (await import('D:/vscode-projects/@ddd-tool/domain-designer-cli-node/demo/example')).default
5
+
6
+ const data: Record<string, DomainDesigner> = {}
7
+
8
+ if (isDomainDesigner(__d1)) {
9
+ data['example-agg'] = __d1
10
+ }
11
+ if (isDomainDesigner(__d2)) {
12
+ data['example'] = __d2
4
13
  }
5
14
 
6
15
  export default data
7
-
@@ -0,0 +1,31 @@
1
+ // noinspection NonAsciiCharacters
2
+
3
+ import { DomainDesigner } from '@ddd-tool/domain-designer-core'
4
+
5
+ // 1.可以将聚合与流程分开定义,避免代码混乱、同时也方便比较、思考各个聚合的内部信息
6
+ // 2.根据规则,只有工作空间根目录中默认导出了一个设计器实例的ts文件
7
+ // `export default <DomainDesigner>`
8
+ // 才会被识别为一个'数据源'。其他文件的内容可以自行编排
9
+ export function createOrderAgg(d: DomainDesigner) {
10
+ const i = d.info
11
+ const productPrice = i.valueObj('productPrice', '商品价格')
12
+ const productQuantity = i.valueObj('productQuantity', '商品数量')
13
+ return d.agg('orderAgg', [
14
+ i.id('orderId'),
15
+ 'orderTime',
16
+ ['userAccount', '用户账号'],
17
+ productPrice,
18
+ productQuantity,
19
+ i.func(
20
+ 'orderAmount',
21
+ [productPrice, productQuantity],
22
+ d.note`订单金额 = 商品单价${productPrice} x 商品数量${productQuantity}`
23
+ ),
24
+ i.version('updateTime'),
25
+ ])
26
+ }
27
+
28
+ export function createOtherAgg(d: DomainDesigner) {
29
+ const i = d.info
30
+ return d.agg('otherAgg', ['otherId'])
31
+ }
@@ -0,0 +1,91 @@
1
+ // noinspection NonAsciiCharacters
2
+
3
+ import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
4
+ import { createOrderAgg } from './example-agg'
5
+
6
+ // moduleName 用于在代码生成时指定当前领域的分包名称。
7
+ // 也可以不传参数,会默认为当前文件名,所以文件名为中文的时候要指定一下
8
+ // const d = createDomainDesigner()
9
+ const d = createDomainDesigner({ moduleName: 'order' })
10
+
11
+ const 商城用户 = d.actor('user', '商城用户')
12
+
13
+ // 聚合是在另一个ts文件中定义的,我们可以像普通esmodule项目一样正常写 import 和 export
14
+ const 订单聚合 = createOrderAgg(d)
15
+
16
+ // 下面的代码都是“代码即注释”,写起来、读起来不会有什么困难
17
+ // 需要注意的是:`订单聚合.inner.orderId`的写法并不表示谁依赖谁。
18
+ // 这只是为了在业务复杂的时候,表示“这里的orderId就是订单中的orderId”,原因如下:
19
+ // 1 这样写我们就可以借助ts的编译检查来辅助检查,有一定程度的完备性保证
20
+ // 2 在web端的展示中,相同的字段也能同时得到展示方面的加强(加粗闪烁等)
21
+ // 3 经过实践发现ide的智能提示可以轻松地“聚合.inner.字段”,一路“点”出来,
22
+ // 反而比再敲一遍省事,同时避免重复敲会犯错
23
+
24
+ const 邮件系统 = d.system('logisticsSystem', '邮件系统')
25
+ const 物流系统 = d.system('mailSystem', '物流系统')
26
+
27
+ const 创建订单失败流程 = d.startWorkflow('创建订单失败流程')
28
+ const 下单命令 = d.command('createOrderCommand', [订单聚合.inner.orderId, 订单聚合.inner.userAccount])
29
+ const 下单失败事件 = d.event('orderFailedEvent', [订单聚合.inner.orderId, 订单聚合.inner.orderTime])
30
+ 商城用户.command(下单命令).agg(订单聚合).event(下单失败事件)
31
+ 下单失败事件.system(物流系统)
32
+
33
+ const 创建订单成功_自动扣款失败流程 = d.startWorkflow('创建订单成功_自动扣款失败流程')
34
+ const 自动扣款命令 = d.command('autoDeductCommand', [订单聚合.inner.orderId])
35
+ const 下单成功事件 = d.event('orderSucceedEvent', [订单聚合.inner.orderId, 订单聚合.inner.orderTime])
36
+ const 自动扣款服务 = d.service('autoDeductService', '根据支付规则进行自动扣款')
37
+ const 支付规则 = d.policy(
38
+ 'paymentPolicy',
39
+ d.note`
40
+ 如果 ${订单聚合.inner.userAccount}启用了自动扣款服务,那么开始自动扣款
41
+ 规则 1:
42
+ 规则 2:
43
+ 规则 3:
44
+ ... ...
45
+ `
46
+ )
47
+ const 订单详情读模型 = d.readModel('orderDetailReadModel', [订单聚合.inner.orderId, 订单聚合.inner.orderTime])
48
+ const 扣款失败事件 = d.event('deductFailedEvent', [订单聚合.inner.orderId, 订单聚合.inner.orderTime])
49
+ 商城用户
50
+ .command(下单命令)
51
+ .agg(订单聚合)
52
+ .event(下单成功事件)
53
+ .policy(支付规则)
54
+ .service(自动扣款服务)
55
+ .command(自动扣款命令)
56
+ .agg(订单聚合)
57
+ .event(扣款失败事件)
58
+ 扣款失败事件.readModel(订单详情读模型)
59
+ 扣款失败事件.system(物流系统)
60
+
61
+ const 创建订单成功_自动扣款成功流程 = d.startWorkflow('创建订单成功_自动扣款成功流程')
62
+ const 扣款成功事件 = d.event('deductSucceedEvent', [订单聚合.inner.orderId, 订单聚合.inner.orderTime])
63
+ 商城用户
64
+ .command(下单命令)
65
+ .agg(订单聚合)
66
+ .event(下单成功事件)
67
+ .policy(支付规则)
68
+ .service(自动扣款服务)
69
+ .command(自动扣款命令)
70
+ .agg(订单聚合)
71
+ .event(扣款成功事件)
72
+ 扣款成功事件.readModel(订单详情读模型)
73
+ 扣款成功事件.system(邮件系统)
74
+
75
+ d.startWorkflow('未分类流程')
76
+ 商城用户.command(下单命令).agg(订单聚合).event(下单失败事件)
77
+ 下单失败事件.system(物流系统)
78
+
79
+ d.startWorkflow('readModel')
80
+ const userRead = d.actor('user', 'user (read model)')
81
+ userRead.readModel(订单详情读模型)
82
+
83
+ d.defineUserStory('作为商城用户,我要下单并且实现自动扣款,以便购得心仪得商品', [
84
+ 创建订单失败流程,
85
+ 创建订单成功_自动扣款失败流程,
86
+ 创建订单成功_自动扣款成功流程,
87
+ ])
88
+
89
+ d.defineUserStory('作为商城用户,我要查看订单情况,以便了解订单状态', [创建订单成功_自动扣款成功流程])
90
+
91
+ export default d
@@ -1,2 +1,2 @@
1
- import { DomainDesignActorProvider } from '@ddd-tool/domain-designer-core/define';
1
+ import { DomainDesignActorProvider } from './define';
2
2
  export declare function createActorProvider(designId: string): DomainDesignActorProvider;
@@ -1,10 +1,11 @@
1
- import { NonEmptyArray, DomainDesignAgg, DomainDesignAggProvider, DomainDesignCommand, DomainDesignCommandProvider, DomainDesignDescProvider, DomainDesignEvent, DomainDesignEventProvider, DomainDesignFacadeCommand, DomainDesignFacadeCommandProvider, DomainDesignInfoProvider, DomainDesignActor, DomainDesignActorProvider, DomainDesignPolicy, DomainDesignPolicyProvider, DomainDesignService, DomainDesignServiceProvider, DomainDesignSystem, DomainDesignSystemProvider, DomainDesignReadModel, DomainDesignReadModelProvider, CustomInfoArrayToInfoObject, DomainDesignInfo, DomainDesignInfoType } from '@ddd-tool/domain-designer-core/define';
1
+ import { NonEmptyArray, DomainDesignAgg, DomainDesignAggProvider, DomainDesignCommand, DomainDesignCommandProvider, DomainDesignNoteProvider, DomainDesignEvent, DomainDesignEventProvider, DomainDesignFacadeCommand, DomainDesignFacadeCommandProvider, DomainDesignInfoProvider, DomainDesignActor, DomainDesignActorProvider, DomainDesignPolicy, DomainDesignPolicyProvider, DomainDesignService, DomainDesignServiceProvider, DomainDesignSystem, DomainDesignSystemProvider, DomainDesignReadModel, DomainDesignReadModelProvider, CustomInfoArrayToInfoObject, DomainDesignInfo, DomainDesignInfoType, CustomInfo, DomainDesignOptions, DomainObjectSet, DomainDesignObject } from './define';
2
2
  export type LinkType = 'Association' | 'Dependency' | 'Aggregation' | 'Composition';
3
3
  type Rule = 'Info' | 'Actor' | 'Command' | 'FacadeCommand' | 'Agg' | 'Event' | 'Policy' | 'Service' | 'System' | 'ReadModel';
4
4
  export declare function genId(): string;
5
5
  type ContextInitializer = () => {
6
6
  id: string;
7
- createDesc: DomainDesignDescProvider;
7
+ options?: DomainDesignOptions;
8
+ createNote: DomainDesignNoteProvider;
8
9
  createInfo: DomainDesignInfoProvider;
9
10
  createActor: DomainDesignActorProvider;
10
11
  createCommand: DomainDesignCommandProvider;
@@ -20,156 +21,24 @@ export type DomainDesignInternalContext = ReturnType<typeof createInternalContex
20
21
  declare function createInternalContext(initFn: ContextInitializer): {
21
22
  startWorkflow(name: string): string;
22
23
  defineUserStory(name: string, workflowNames: NonEmptyArray<string>): void;
23
- linkTo(srcRule: Rule, srcCode: string, targetRule: Rule, targetCode: string, linkType?: LinkType): void;
24
- getId(): string;
24
+ linkTo(srcRule: Rule, srcId: string, targetRule: Rule, targetId: string, linkType?: LinkType): void;
25
+ getDesignerId(): string;
26
+ getModuleName(): string;
25
27
  getWorkflows(): Record<string, string[]>;
26
28
  getUserStories(): Record<string, string[]>;
27
29
  getLinks(): Record<string, LinkType>;
28
- getIdMap(): Record<string, object>;
29
- getCommands(): Readonly<{
30
- readonly _attributes: {
31
- __code: string;
32
- rule: "Command";
33
- name: string;
34
- infos: any;
35
- description?: Readonly<{
36
- readonly _attributes: {
37
- rule: "Desc";
38
- readonly template: TemplateStringsArray;
39
- readonly values: import("@ddd-tool/domain-designer-core/define").DomainDesignDescValue[];
40
- };
41
- }> | undefined;
42
- };
43
- inner: any;
44
- agg<AGG extends DomainDesignAgg<any>>(agg: AGG): AGG;
45
- agg<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, agg: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignAgg<CustomInfoArrayToInfoObject<ARR>>;
46
- }>[];
47
- getFacadeCommands(): Readonly<{
48
- readonly _attributes: {
49
- __code: string;
50
- rule: "FacadeCommand";
51
- name: string;
52
- infos: any;
53
- description?: Readonly<{
54
- readonly _attributes: {
55
- rule: "Desc";
56
- readonly template: TemplateStringsArray;
57
- readonly values: import("@ddd-tool/domain-designer-core/define").DomainDesignDescValue[];
58
- };
59
- }> | undefined;
60
- };
61
- inner: any;
62
- agg<AGG extends DomainDesignAgg<any>>(agg: AGG): AGG;
63
- agg<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, agg: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignAgg<CustomInfoArrayToInfoObject<ARR>>;
64
- service(service: DomainDesignService): DomainDesignService;
65
- service(name: string, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignService;
66
- }>[];
67
- getActors(): Readonly<{
68
- readonly _attributes: {
69
- __code: string;
70
- rule: "Actor";
71
- name: string;
72
- description?: import("@ddd-tool/domain-designer-core/define").DomainDesignDesc;
73
- };
74
- command<COMMAND extends DomainDesignCommand<any>>(command: COMMAND): COMMAND;
75
- command<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
76
- facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(command: FACADECMD): FACADECMD;
77
- facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
78
- readModel<READ_MODEL extends DomainDesignReadModel<any>>(readModel: READ_MODEL): READ_MODEL;
79
- readModel<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR | import("@ddd-tool/domain-designer-core/define").NonEmptyInitFunc<() => ARR>): DomainDesignReadModel<CustomInfoArrayToInfoObject<ARR>>;
80
- }>[];
81
- getEvents(): Readonly<{
82
- readonly _attributes: {
83
- __code: string;
84
- rule: "Event";
85
- name: string;
86
- infos: any;
87
- description?: Readonly<{
88
- readonly _attributes: {
89
- rule: "Desc";
90
- readonly template: TemplateStringsArray;
91
- readonly values: import("@ddd-tool/domain-designer-core/define").DomainDesignDescValue[];
92
- };
93
- }> | undefined;
94
- };
95
- inner: any;
96
- policy(policy: DomainDesignPolicy): DomainDesignPolicy;
97
- policy(name: string, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignPolicy;
98
- system(system: DomainDesignSystem): DomainDesignSystem;
99
- system(name: string, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignSystem;
100
- readModel<READ_MODEL extends DomainDesignReadModel<any>>(readModel: READ_MODEL): READ_MODEL;
101
- readModel<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR | import("@ddd-tool/domain-designer-core/define").NonEmptyInitFunc<() => ARR>): DomainDesignReadModel<CustomInfoArrayToInfoObject<ARR>>;
102
- }>[];
103
- getPolicies(): Readonly<{
104
- readonly _attributes: {
105
- __code: string;
106
- rule: "Policy";
107
- name: string;
108
- description?: import("@ddd-tool/domain-designer-core/define").DomainDesignDesc;
109
- };
110
- service(service: DomainDesignService): DomainDesignService;
111
- service(name: string, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignService;
112
- }>[];
113
- getServices(): Readonly<{
114
- readonly _attributes: {
115
- __code: string;
116
- rule: "Service";
117
- name: string;
118
- description?: import("@ddd-tool/domain-designer-core/define").DomainDesignDesc;
119
- };
120
- command<COMMAND extends DomainDesignCommand<any>>(command: COMMAND): COMMAND;
121
- command<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
122
- facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(facadeCmd: FACADECMD): FACADECMD;
123
- facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
124
- agg<AGG extends DomainDesignAgg<any>>(agg: AGG): AGG;
125
- agg<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, agg: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignAgg<CustomInfoArrayToInfoObject<ARR>>;
126
- }>[];
127
- getSystems(): Readonly<{
128
- readonly _attributes: {
129
- __code: string;
130
- rule: "System";
131
- name: string;
132
- description?: import("@ddd-tool/domain-designer-core/define").DomainDesignDesc;
133
- };
134
- command<COMMAND extends DomainDesignCommand<any>>(command: COMMAND): COMMAND;
135
- command<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
136
- facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(facadeCmd: FACADECMD): FACADECMD;
137
- facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
138
- }>[];
139
- getAggs(): Readonly<{
140
- readonly _attributes: {
141
- __code: string;
142
- rule: "Agg";
143
- name: string;
144
- infos: any;
145
- description?: Readonly<{
146
- readonly _attributes: {
147
- rule: "Desc";
148
- readonly template: TemplateStringsArray;
149
- readonly values: import("@ddd-tool/domain-designer-core/define").DomainDesignDescValue[];
150
- };
151
- }> | undefined;
152
- };
153
- inner: any;
154
- event<EVENT extends DomainDesignEvent<any>>(event: EVENT): EVENT;
155
- event<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<DomainDesignInfoType, G_NAME> | G_NAME>>(name: string, infos: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc): DomainDesignEvent<CustomInfoArrayToInfoObject<ARR>>;
156
- }>[];
157
- getReadModels(): Readonly<{
158
- readonly _attributes: {
159
- __code: string;
160
- rule: "ReadModel";
161
- name: string;
162
- infos: any;
163
- description?: Readonly<{
164
- readonly _attributes: {
165
- rule: "Desc";
166
- readonly template: TemplateStringsArray;
167
- readonly values: import("@ddd-tool/domain-designer-core/define").DomainDesignDescValue[];
168
- };
169
- }> | undefined;
170
- };
171
- inner: any;
172
- }>[];
30
+ getIdMap(): Record<string, DomainDesignObject>;
31
+ getAssociationMap(): Record<string, DomainObjectSet<DomainDesignObject>>;
32
+ getCommands(): DomainDesignCommand<any>[];
33
+ getFacadeCommands(): DomainDesignFacadeCommand<any>[];
34
+ getActors(): DomainDesignActor[];
35
+ getEvents(): DomainDesignEvent<any>[];
36
+ getPolicies(): DomainDesignPolicy[];
37
+ getServices(): DomainDesignService[];
38
+ getSystems(): DomainDesignSystem[];
39
+ getAggs(): DomainDesignAgg<any>[];
40
+ getReadModels(): DomainDesignReadModel<any>[];
41
+ registerInfo(info: DomainDesignInfo<any, any>): void;
173
42
  registerCommand(command: DomainDesignCommand<any>): void;
174
43
  registerFacadeCommand(command: DomainDesignFacadeCommand<any>): void;
175
44
  registerActor(actor: DomainDesignActor): void;
@@ -179,13 +48,22 @@ declare function createInternalContext(initFn: ContextInitializer): {
179
48
  registerSystem(system: DomainDesignSystem): void;
180
49
  registerAgg(agg: DomainDesignAgg<any>): void;
181
50
  registerReadModel(readModel: DomainDesignReadModel<any>): void;
182
- customInfoArrToInfoObj<G_NAME extends string, ARR extends NonEmptyArray<DomainDesignInfo<any, G_NAME> | G_NAME>>(arr: ARR): CustomInfoArrayToInfoObject<ARR>;
183
- createDesc: DomainDesignDescProvider;
51
+ customInfoArrToInfoObj<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(arr: ARR): CustomInfoArrayToInfoObject<ARR>;
52
+ customInfoArrToInfoArr<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(arr: ARR): DomainDesignInfo<DomainDesignInfoType, string>[];
53
+ toFormat<OBJ extends {
54
+ _attributes: {
55
+ __id: string;
56
+ name: string;
57
+ };
58
+ }>(obj: OBJ): string;
59
+ createNote: DomainDesignNoteProvider;
184
60
  info: {
185
- any: <NAME extends string>(name: NAME, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc) => DomainDesignInfo<"Any", NAME>;
186
- entity: <NAME extends string, ARR extends Array<DomainDesignInfo<DomainDesignInfoType, string> | string>>(name: NAME, infos?: ARR, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc) => DomainDesignInfo<"Entity", NAME>;
187
- func: <NAME extends string>(name: NAME, dependsOn: NonEmptyArray<import("@ddd-tool/domain-designer-core/define").DomainDesignInfoFuncDependsOn | string>, desc?: string | import("@ddd-tool/domain-designer-core/define").DomainDesignDesc) => DomainDesignInfo<"Function", NAME>;
188
- field: import("@ddd-tool/domain-designer-core/define").DomainDesignInfoFieldProvider;
61
+ document<NAME extends string>(name: NAME, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"Document", NAME>;
62
+ func<NAME extends string>(name: NAME, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"Function", NAME>;
63
+ func<NAME extends string>(name: NAME, dependsOn: NonEmptyArray<import("./define").DomainDesignInfoFuncDependsOn | string | [string, string | import("./define").DomainDesignNote]>, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"Function", NAME>;
64
+ id<NAME extends string>(name: NAME, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"Id", NAME>;
65
+ valueObj<NAME extends string>(name: NAME, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"ValueObject", NAME>;
66
+ version<NAME extends string>(name: NAME, note?: string | import("./define").DomainDesignNote): DomainDesignInfo<"Version", NAME>;
189
67
  };
190
68
  createPersion: DomainDesignActorProvider;
191
69
  createCommand: DomainDesignCommandProvider;