6 Commits

11 changed files with 293 additions and 130 deletions

View File

@@ -1,8 +1,8 @@
{
"moduleCode": "order",
"candidateVersion": "1.0.0-rc.1",
"buildRevision": 1,
"buildChecksum": "5cf032fdac2b0403fbcad8b44b326a29141ba556bbbb9710ac9329b5d7c031dd",
"schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23",
"branchName": "release/1.0.0-rc.1"
"candidateVersion": "1.0.3-rc.4",
"buildRevision": 4,
"buildChecksum": "2a71834164916225ca2386606bdd12ee9fc3cbba9f70b4bb4e539d29ec55288d",
"schemaInputChecksum": "2f81018529e651ab1eb6225f4190427e62d6a09d983f52faeaa401e7fed5cdb3",
"branchName": "release/1.0.3-rc.4"
}

5
bootstrap.js vendored
View File

@@ -11,10 +11,11 @@ function loadGeneratedSaasModule() {
return require('./dist/saas/generated').GeneratedSaasModule;
}
async function start() {
await prepareSaasServiceHost({
async function start(options = {}) {
const session = await prepareSaasServiceHost({
generated: loadGeneratedSaasModule(),
});
if (options.verifySession) await options.verifySession(session);
requireExactReleaseEnvironment();
return Bootstrap.configure({
baseDir: path.join(__dirname, 'dist'),

View File

@@ -10,22 +10,24 @@
"build": "rimraf dist && mwtsc --cleanOutDir",
"publish": "cool saas-model finalize",
"start": "node bootstrap.js",
"start:stable": "node start-stable.js",
"test:stable": "node --test test/start-stable.test.cjs",
"test:business": "node --test test/orders-business-outcome.test.cjs",
"start:local": "cross-env NODE_ENV=local SAAS_RUNTIME_BOOTSTRAP_LOCAL_FALLBACK_ENABLED=true node bootstrap.js",
"verify:packages": "node scripts/verify-local-packages.cjs",
"start:frozen": "node start-frozen.js",
"start:stable": "node start-stable.js",
"test:stable": "node --test test/start-stable.test.cjs"
"start:frozen": "node start-frozen.js"
},
"coolSaas": {
"lifecycle": {
"dev": "pnpm run build && pnpm run start:local",
"test": "pnpm run typecheck",
"build": "pnpm run build"
"test": "pnpm run typecheck && pnpm run test:stable && pnpm run test:business",
"build": "pnpm run build",
"artifactDir": "dist"
}
},
"dependencies": {
"@cool-midway/module-runtime": "9.1.1",
"@cool-midway/rpc": "9.1.2",
"@cool-midway/module-runtime": "9.0.4",
"@cool-midway/rpc": "9.0.7",
"@midwayjs/bootstrap": "^3.20.3",
"@midwayjs/core": "^3.20.3",
"@midwayjs/koa": "^3.20.3",
@@ -36,7 +38,7 @@
"typeorm": "npm:@cool-midway/typeorm@0.3.20"
},
"devDependencies": {
"@cool-midway/core": "8.1.1",
"@cool-midway/core": "8.1.0",
"@types/node": "22.10.7",
"cross-env": "^7.0.3",
"mwtsc": "^1.16.0",

34
pnpm-lock.yaml generated
View File

@@ -9,11 +9,11 @@ importers:
.:
dependencies:
'@cool-midway/module-runtime':
specifier: 9.1.1
version: 9.1.1(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)
specifier: 9.0.4
version: 9.0.4(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)
'@cool-midway/rpc':
specifier: 9.1.2
version: 9.1.2(@cool-midway/module-runtime@9.1.1(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24))(@midwayjs/validate@3.20.24)(debug@4.4.3)
specifier: 9.0.7
version: 9.0.7(@cool-midway/module-runtime@9.0.4(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24))(@midwayjs/validate@3.20.24)(debug@4.4.3)
'@midwayjs/bootstrap':
specifier: ^3.20.3
version: 3.20.24
@@ -40,8 +40,8 @@ importers:
version: '@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7))'
devDependencies:
'@cool-midway/core':
specifier: 8.1.1
version: 8.1.1(debug@4.4.3)
specifier: 8.1.0
version: 8.1.0(debug@4.4.3)
'@types/node':
specifier: 22.10.7
version: 22.10.7
@@ -68,20 +68,20 @@ packages:
resolution: {integrity: sha512-Bl43bVCUm0V+w1wkfOicRfiHHZtaH1mQCp06baNapG86uC7OiXwMrml5+cvZD+mYSHdP07qUxtqkL8oUhrgAfg==}
engines: {node: '>=8.0.0'}
'@cool-midway/core@8.1.1':
resolution: {integrity: sha512-Kf4x3IrWnBM5o2k3hdHhDt7ujBG7MLn5JXV4o8glKEh4pqdzgoe/HgTcEvtdpIRvy80MsnIt5ZlH1Eq54qV4uQ==}
'@cool-midway/core@8.1.0':
resolution: {integrity: sha512-FrkiZE4/QtTAePAaHh2pX5gEhz5r1VP9OrYX7El+Z6OJi6tvfak6kl9PBhUw/5Kln6/T+c3RE3QRXeEBAtA4ow==}
hasBin: true
'@cool-midway/module-runtime@9.1.1':
resolution: {integrity: sha512-OHJzqJX6ktnelL1J6k/7forr6TujDuLHBQ/Z21ueGiEdtvfQ3cHKjhYFEp6WwgeISECxGOxGdGyASPP3cV6jXQ==}
'@cool-midway/module-runtime@9.0.4':
resolution: {integrity: sha512-+AymfzB+dQthDSkR72JIcwJrWqwhsa+oyewDYMIma2xPkKaXYvBb/3gi9qzW/08z4w+xmmoKKNcFBXcIc9DOVg==}
peerDependencies:
'@midwayjs/core': '>=3.20.0'
typeorm: '>=0.3.20'
'@cool-midway/rpc@9.1.2':
resolution: {integrity: sha512-WVR+zsMtojllK9LsI1Kx3VUMgEzvKLuxWVkOudyxzjLwWF4VU2/hnRN6tPJA1mBoSSJCxaSrbF0tZwbeWxcgzQ==}
'@cool-midway/rpc@9.0.7':
resolution: {integrity: sha512-1k7ta0SEk1+DOegpJKnp3eEtfYnd2s8LyiLZScPUF87JCDjWyZwTZnDx8MbCN3wLJf7UeCiFHDpIZ2XxNJWK9Q==}
peerDependencies:
'@cool-midway/module-runtime': '>=9.1.1 <10'
'@cool-midway/module-runtime': '>=9.0.4 <10'
'@midwayjs/validate': '>=3.20.0'
'@cool-midway/typeorm@0.3.20':
@@ -2470,7 +2470,7 @@ snapshots:
dependencies:
lockfile: 1.0.4
'@cool-midway/core@8.1.1(debug@4.4.3)':
'@cool-midway/core@8.1.0(debug@4.4.3)':
dependencies:
'@cool-midway/cache-manager-fs-hash': 7.0.0
'@midwayjs/cache-manager': 3.20.24
@@ -2493,14 +2493,14 @@ snapshots:
- supports-color
- utf-8-validate
'@cool-midway/module-runtime@9.1.1(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)':
'@cool-midway/module-runtime@9.0.4(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)':
dependencies:
'@midwayjs/core': 3.20.24
typeorm: '@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7))'
'@cool-midway/rpc@9.1.2(@cool-midway/module-runtime@9.1.1(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24))(@midwayjs/validate@3.20.24)(debug@4.4.3)':
'@cool-midway/rpc@9.0.7(@cool-midway/module-runtime@9.0.4(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24))(@midwayjs/validate@3.20.24)(debug@4.4.3)':
dependencies:
'@cool-midway/module-runtime': 9.1.1(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)
'@cool-midway/module-runtime': 9.0.4(@cool-midway/typeorm@0.3.20(ioredis@5.11.1)(mysql2@3.24.3(@types/node@22.10.7)))(@midwayjs/core@3.20.24)
'@midwayjs/validate': 3.20.24
ioredis: 5.11.1
moleculer: 0.14.36(debug@4.4.3)(ioredis@5.11.1)

View File

@@ -3,9 +3,9 @@
"packages": [
{
"name": "@cool-midway/core",
"version": "8.1.1",
"sha256": "6c09ffbbf29bfd70cb8487ae1fa91f24b0cd27131676c6a92afbffc17ad2ce53",
"integrity": "sha512-Kf4x3IrWnBM5o2k3hdHhDt7ujBG7MLn5JXV4o8glKEh4pqdzgoe/HgTcEvtdpIRvy80MsnIt5ZlH1Eq54qV4uQ==",
"version": "8.1.0",
"sha256": "782b2f1f14a87dc62f92c6e832bd367f01cd549b17c6186b6567fb2b45250078",
"integrity": "sha512-FrkiZE4/QtTAePAaHh2pX5gEhz5r1VP9OrYX7El+Z6OJi6tvfak6kl9PBhUw/5Kln6/T+c3RE3QRXeEBAtA4ow==",
"files": {
"dist/controller/base.js": "c68dcb2ee7fe99389039333a5618cc3dfaf0ac87365b24b1bb443b670e81a46d",
"dist/entity/base.js": "8363fa0ab183aae1cce4555070bb8b7cd454274fe873e80467371f54ea5c47af",
@@ -43,18 +43,17 @@
"dist/bin/saas-dev-watch-files.js": "bf9aae8a5f413403c7850ada4bdf11e22a4c6708b7bcb27ba130af410289fd22",
"dist/bin/saas-dev-watch-process.js": "d4d44ccaa2a739c5e36518dd40456cb2c3bdf778a1de0f1017cc57c8d0a03e65",
"dist/bin/saas-dev-watch.js": "0d075d75e5f662eb06672d271a9aa67e99e233c6989f0fa140d713e8657b9cbb",
"dist/bin/saas-model.js": "481096526967c7757cb21f2a295c2f06d88502879ac797a5985343ee16fd3934",
"dist/bin/saas-model.js": "c7c3c3f70e754d18b8f6c8bbc22fc6d30fc03139bcb629448cf36fa434fef82a",
"dist/bin/saas-release-artifact.js": "fae63fa5cadd726f0b0548bd7e6ed3572bae051b0a2fafd93aac73d09da5a671",
"dist/bin/saas-release-finalize.js": "c0a49a01bd93817d383fd9175d8dc3ff1a8ea099ac9fc655943bd657bbd8e446",
"dist/bin/saas-release-http.js": "11fe166ec5a3efc930c987afb1dabbdb2ce3ac796baec7ee88d3d922f8f18d24",
"dist/bin/saas-release-resume.js": "599011aa4911ef625cacea1cf50db61835873f014d507032ba7fe444368977e9",
"dist/bin/saas-release-finalize.js": "9833b9d9196553295aa8b00a24a929b9c817740cbc9228b881b1c683340f02e3",
"dist/bin/saas-release-resume.js": "b01f3efe047cb1497593cd1d663ca96be2fa14812c06bee01b9f5e9d513d4148",
"dist/service/sqlite.js": "7afa7127967f13211b6314f8a1baa03e8ca9eb3e5fb1b0958efbe70d3595a29b",
"dist/cache/store.js": "3281e7851cd86dce35ab4db9b1915e00e11ff72cea7d1113b27721f0a547f04c",
"dist/decorator/tag.js": "9db13ad2fefc16675b87545fd994297c0250975e3d4ab057111e95554068089b",
"dist/decorator/transaction.js": "39bef98a66b7a2c28af8c820671a0962ae9d12442a5bac67f0613e13a8ee91d1",
"dist/entity/typeorm.js": "e1829a29ff62787a3fa7c206f6695098e260dd94363619dcf9800c3ab61a6f75",
"dist/exception/validate.js": "be57f7f715f714dde594013860fc14a18db5115ad8be754ecfb8532d4d8440d6",
"package.json": "0b8037effa5789740ef58ce8c648254c2f8d8a3be2ba475851f2634b8b26c01a",
"package.json": "b90f4ac1a45fc63e34958b180d406af54b0f5ac63987c0cbc16327fb1715a2e0",
"dist/controller/base.d.ts": "011b63eec356a69520b6a733f0dc5b2280f302c91f9c3c04fdc77b541340ab04",
"dist/entity/base.d.ts": "50960ab93ad375f7e8296b3f8263d7def0c7af3ae4b7d35cc55612fb38fec9c8",
"dist/exception/base.d.ts": "3e24d6c029e0f29a863b24b7d0f0509c7b0a3fbc74ee1aba4eb486ecd127e6ed",
@@ -95,7 +94,6 @@
"dist/bin/saas-model.d.ts": "bfa30029644bc94fc5c3926939f935d770029b322e8bf18d9282459ecedd8329",
"dist/bin/saas-release-artifact.d.ts": "4bd3770b85215304ba752b543ace28524aa05ad44cfe21b43c6bfd264ad85eb1",
"dist/bin/saas-release-finalize.d.ts": "315fb866b0a1a7832b02bb2a64c3162fecde0d1741d977a538171c6562e3c6c7",
"dist/bin/saas-release-http.d.ts": "e6983f5ab45670fb1c17df30ffb9e1771751ab979b6eb9dd9053000178119196",
"dist/bin/saas-release-resume.d.ts": "9c42f26f074cf919e57c7f06d89a9c4838a85f3fe0b59e1fcf44ad6842e3d274",
"dist/service/sqlite.d.ts": "7490be15aa4189a9c54a47169e7f3f0b745c0a0a4ddb3aae3ebbabb35353a0a1",
"dist/cache/store.d.ts": "a0adf1432d64d871ed02adcf0a9665b30143fba768326ff4e791ea51e9db8880",
@@ -104,88 +102,88 @@
"dist/entity/typeorm.d.ts": "78ca457d1f1a9e47efdfcb1b140d27019677c776b8ded7e8fc43127c9a844127",
"dist/exception/validate.d.ts": "d34062b220d8cdfd38aabc595c935c7bcc35182c1ad7ff549b49a282a52473c5"
},
"fileCount": 99,
"fileCount": 97,
"credentialScanPassed": true,
"registry": "https://npm.blendercg.art/",
"tarball": "https://npm.blendercg.art/@cool-midway/core/-/core-8.1.1.tgz"
"tarball": "https://npm.blendercg.art/@cool-midway/core/-/core-8.1.0.tgz"
},
{
"name": "@cool-midway/module-runtime",
"version": "9.1.1",
"sha256": "b4ef3ceb929ec2575f1858be5f85b5cc470e4e942b6a00fb25886874993a8144",
"integrity": "sha512-OHJzqJX6ktnelL1J6k/7forr6TujDuLHBQ/Z21ueGiEdtvfQ3cHKjhYFEp6WwgeISECxGOxGdGyASPP3cV6jXQ==",
"version": "9.0.4",
"registry": "https://npm.blendercg.art/",
"tarball": "https://npm.blendercg.art/@cool-midway/module-runtime/-/module-runtime-9.0.4.tgz",
"integrity": "sha512-+AymfzB+dQthDSkR72JIcwJrWqwhsa+oyewDYMIma2xPkKaXYvBb/3gi9qzW/08z4w+xmmoKKNcFBXcIc9DOVg==",
"sha256": "f6d0434f25d273790ce0f4cc251acd6bec2d9f68309e636db5d42c5935f443f4",
"files": {
"dist/action.js": "86b35ec3d9d020f253cfa42f8030444da39a9742f6480c94010cc342056e0e4a",
"dist/adapter.js": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
"dist/business-reject.js": "1bea195b38fbcce97512400be8fe43f01596a03aa5ea5d6546346064c2cd1b03",
"dist/configuration.js": "fed0a7dc7e6aa6e233f8d66109589b15ccd6b0f3fdd46dc6d55bbd8c38b45311",
"dist/connection.js": "dc44aef513160623b1282b174e5bd17bc5ddeefcdaac1d328b23e061d7516f67",
"dist/consumer.js": "2f3b54f49775eacdf977642cb0a06505fffaaff6300527fd283751ad9c7c27d0",
"dist/connection.js": "f265f332bc5ce7a95382dade696a738ccaf8be58865a1ffb457115cad0b5605b",
"dist/consumer.js": "d687ab5017176e3082ba368f7885c8a1ee6b5246345d33a6f75e3d0a9760ac55",
"dist/context.js": "eb2b3c97119f94c7f52498b591b7e63fe51b1ef8194b3b9cf6dbea6d0af555e7",
"dist/crud-host.js": "19ab92b9744f8cb671c4dcbfce288160c60e008f14a0b018f38a1c0de55aa4b8",
"dist/crud.js": "235a6ce66b54373c80bbba8ea444162ef44e8fa34863cb30be59b62b8a008043",
"dist/data.js": "e54a8d582fadefd9dc75eec049d3eee1c80fb92ed656d46d384fc48d8ae4d7d0",
"dist/crud.js": "4d6affec833831e20e21c5bba4cbdd993454e33bab62af53891d6ce6b4720576",
"dist/data.js": "575f801b991a7c35af9a9d8b33374976bb8e87948f3fee6ba10b45e957bcb15a",
"dist/error.js": "f2dced066aef06c895d00285ecf69d52203bfce1635539a4b8c88d9de2a733d3",
"dist/event-writer-migration.js": "deee4d33d7c3049f2ab9f6a9605cfea17aaf9536db7d3d1305f4903d48ff5e4f",
"dist/event-writer.js": "e45f62209d263b2be11a25680352c4e8dd7690b655f2f9ee007d9f1f6b8646b0",
"dist/event-writer.js": "99b400c196b3422c8e831e22352cbdf39c917511e81c2c5874ba0fc9aa970224",
"dist/decorator/event.js": "3801cf45836398239734611d4c58ea0261d32e870544a770e7ad667704aad143",
"dist/executor.js": "4dc904785a8bd385e98f239e1517cc33fb3e4c96807fffd1393b22ec93ff025a",
"dist/executor.js": "9886faf012b7a975352e481ee74b7f20d8572e24ee634e059372766989dae8fd",
"dist/generated-module.js": "84739644067c446863ad34166602d0dcec9212661c61cbeea5bfe85a113b4c0a",
"dist/index.js": "c0de3d4fae6a2f28f5ee89519c1daf7c36dc7bcc13aeccc0372999fec4b703c9",
"dist/injected-action.js": "3fdee7be7fee4e07c41884cbc43cb23bbd1dd4ef0ffe49fee37c53f2a8d8ca97",
"dist/injected-crud.js": "5f4593c1b12a50765f4112381a0db9f732202b908f84b6f13225da7a567eba0c",
"dist/internal.js": "2d5ee68295abbaaf9a74aa7fb805cb1be70702354e1c058a2eb02fa11d1561e1",
"dist/inventory.js": "7c6ce797200ad627dd9374e1ad70638ff11f7483c5fd98e9adef6992b1a1aee9",
"dist/internal.js": "f17a9720f74d54ffe2186cafe87157dce3ce00c3186d1f7837df7144a42adae6",
"dist/inventory.js": "c97c12ecb113302e4d21deef52a6d6b6b477ae2e192853d664211e19f539cd74",
"dist/json-schema.js": "ef1a378710cfc285679fdb8130750169bc09e19611a2e577ef081b44e5f2eeb0",
"dist/managed-action.js": "fb42b5f0b1992e2b2b3f5176081a2de06cac020ca3ed744f46d93f094cfe96dd",
"dist/model.js": "9e548ad45b0cac4642ae9437cbcd52a6deb5dd316de5242ce601c2765f68554a",
"dist/outbox.js": "f53bd5ddae974ef735488f7065bae6744074107318a8868605284875ee3037ed",
"dist/projection-consumer.js": "31749ce9649d486ba374643fe896b4ed4ff586725ee886cfe41103fc36c71cb2",
"dist/projection-fanout.js": "6c00a2b6bd6a243b76e9286a8241067f648cfb66ad412f70c2230a70eace2a0a",
"dist/outbox.js": "08b9a8e367e2af4c39dd6d55b018e2109bfe3492cdf99cae2aa383b06b602eca",
"dist/projection-consumer.js": "f58face6f749d8711cf5d3ea70545060f0f808e508a1a838ea6544e2baafca4a",
"dist/projection-fanout.js": "85ae64701bc82ef810241b1703a4ca4cdff532f3184c55072de668953bc7a886",
"dist/projection-observability.js": "1329606a57df9efb5916df8e700680007c3aa4533dcd28b659ca37d6167056ea",
"dist/read-model.js": "bc4b50718df2120b2620d969be91cc6bf85dfeab77c70085b5d047ce60ec78ba",
"dist/read-model.js": "038c095d2452474d01e44e2dc1f4321ea193293b6777154e2a82d07af1cf5ced",
"dist/readonly-sql.js": "2ad61f3b5159ef5d62a8cc3f1d35210058d78629ff4d1dd2ba7ca109781c7b32",
"dist/result-normalizer.js": "2c8da8f3926a3631e92479fbb8ef25865eba56df2934ec5066917333a21aab60",
"dist/runtime-id.js": "90d0991517b910067d85a47f49fa4148a40282236d03d52a80d02fe1de512dfb",
"dist/safe-error.js": "8404ea72f5d44bf3016cd6a0e3ac9a010869ac1b9c1d166ae953f0d7c0e67c6d",
"dist/saga-contract.js": "22fd8729982dfa9e7824e0fc6c27a0839989c8f2ca70853d1a985b4df2bc4324",
"dist/saga.js": "5d86cf0e8e762fdc5a41c30a7220400ab4c1d30ae8e50ca3c468eabf918abc6e",
"dist/saga.js": "f6f14c5f5bdc692998855fa0ec698b1c5092d2eb626198af47e2b382f3c655cd",
"dist/schema.js": "85a08a3fcf152697af3806dfebc3a3127a11c9b3a6fff543645e235e147467ae",
"dist/tenant-deployment-execution.js": "e31d9e0fffb3a915e048af4f5d13f4143736c4598a9d5e1a07dfdac36a669faf",
"dist/tenant-deployment.js": "39b09bc8baa6f9ddea00566c2005d37759464a88c5478272c90d05ce8ffd2237",
"dist/types.js": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
"dist/workflow-reply-authority.js": "90ad7bbd35bcc4a0a788d33721cdbc3ec54f5c28ebce288317a40152de50bb10",
"dist/workflow.js": "79e25c6e0dc24c6b2277c18b02bedf4fda60754947ae1917b0b9cb2eecb53af3",
"dist/write-fence.js": "95c6af20da75ca92a0149023ebbc515525ddbcd50da3e284209b77536bc2a5f2",
"package.json": "62519527981f22831f9ade24a8c38f8541fb64ebcfdc0905386f9b2dc5fc802c",
"package.json": "58342d3e7e87a7196d4066c789ca91acae542a7252cf33f787586ab31a0a91a5",
"dist/action.d.ts": "8d0c6d6055c1acc4a6a6e70fdb83a70a81693965b20adf2afa0290245cd649cd",
"adapter.d.ts": "ffa850716087cae3e3ef5f5bb54835143d16bcb3ad42b044c0f16aba08209074",
"dist/adapter.d.ts": "f70f53cb90da78d4423f46debfea6d922068ea4f70fb063b53135d6538af1eb2",
"dist/adapter.d.ts": "5d69aa3eeeb1406731554f9eec8c770b7e83fe92994dc205a2b6df74ab1bd841",
"dist/business-reject.d.ts": "dfa50bf278f47097aebfb6958ff80df127f0af978031653ad20d485e119b1f93",
"dist/configuration.d.ts": "5603f82c62078b962be9f9a32690a66572cc41bd9e6cda38d0fe7f53ad63e14a",
"dist/connection.d.ts": "418b87c47ef482112b60515d8e16d44789350529ad215a69a24baa0127a0695c",
"dist/consumer.d.ts": "3eb6943931d02f655a5a6194ef919017af4b7aaad4c56fd689c4ae4f220fc44b",
"dist/connection.d.ts": "b9ef495c9d54c0b0b3c47b2955dce1d3c31aaa32367fb4a4fb28aa21f128730b",
"dist/consumer.d.ts": "8c3a5ddee80f5eb59d72711ece771edb11829e5d8060ac70e879edab9179cb4d",
"dist/context.d.ts": "90d189268561122a6619fb1ab406e19610bd07631e0ab4be8a7e302cfbe2dc74",
"dist/crud-host.d.ts": "9db03a23d96f3e982814ccc432209ffb36923bdc0e44b971121eb6c71a720364",
"dist/crud.d.ts": "ac9c86a22ac52a19314707eac25e4a148b25fcfc9e6b0b68c9be05685cc0524e",
"dist/data.d.ts": "7a0a42b4f3bb4c437168ec7a0ed8cb85380dfb17598629abd95c373be91db352",
"dist/error.d.ts": "6d60304de29698609218d9fdd421a9f17b31399d412ae19b3287fe6b1669a89a",
"dist/error.d.ts": "890eaac4c178a55c7e4c4c606a31584e9dc29da3baeebf97e5d45d734813b924",
"dist/event-writer-migration.d.ts": "dd22ca345f7b15a5297b4c0d2265d1fe81fbb4507455c6aacfd037d85e7acf93",
"dist/event-writer.d.ts": "a3808988437bc0633a718d6600dfb3a2a930f25be7daeb69d61c2f55aa2b7171",
"dist/decorator/event.d.ts": "23cb20746ac54b5846774e03496c4f335c265773c044795ea07d727e7fe4859b",
"dist/executor.d.ts": "7756e63e7ab4b2bdbafdf6d4ecbbf8a53e019a9883fef4c2045b9653264dc09d",
"dist/executor.d.ts": "223273e6ab47dec868be23b1bfdd24b479eb47d8fb8eb903cc9e41c253925c5a",
"dist/generated-module.d.ts": "91a115bf54da00ca545f675a6f5cd1b5230c15028f9ac44afeafc034d7e5edd9",
"dist/index.d.ts": "97ebc39d085af1c4ecccaf80c6581f9b44a725be3e2d3b0aacf809738379edd4",
"index.d.ts": "4b4662b528dcdf65aea4f64db2ec4cc5f1ab9ca27ace965f7f3824cedcd12ec6",
"dist/injected-action.d.ts": "1fa4714aeceeba0ec6c5bfc1b7afcfe1c92bb5000e77db6a82122395535a2532",
"dist/injected-crud.d.ts": "b4a9f3c9756f6b13534ec2a643a905a5e9374ab3f5a6aeeb33b7a6cb9b481ef5",
"dist/internal.d.ts": "a27c0213bb73fbd20543c42946a90d5ebd5c4ba298383bea21da894a9cbac265",
"dist/internal.d.ts": "9d2e7f91b5cbaa2ff2dcd7af9ce462bc952f922f5a925092ea97d64957dc2f88",
"internal.d.ts": "647bd0edcc65c231dc7d03cf81bbd77b9dd063f1d9747abaee3ef10f449871e2",
"dist/inventory.d.ts": "a947c0471139debd82c71092952027b5e645dcf6b04de6a5706630fd7ac388d2",
"dist/json-schema.d.ts": "13da8d4cdc571ca7b38c5ae7af9a5877ead2dc2d66cbca9f4a5a20069b8bfdea",
"dist/managed-action.d.ts": "41f457e76b0cefba70b909dd36d33515a81e95414f67e63af8e975e7349ba136",
"dist/model.d.ts": "c51700d1bf5d5c76d281979f05592b8004bd036a5d6b0f74bb583a1e219e5ddc",
"dist/outbox.d.ts": "db0ec4dbf5bb3e8bc01cf3cfb488713fac72bb35ae7d1b5684bbb64e786a0560",
"dist/model.d.ts": "365b9e72920161a8b21775ab2541cd9aa31380f608bb57da01d7797e10433fc5",
"dist/outbox.d.ts": "ff1ac6f4eed5b7f1c6001ce286d5eb92a78b118688f3fa554264cd9175bb2a3e",
"dist/projection-consumer.d.ts": "4e7c0f6cdbce1abb3a73c57aec0af7898f1f70d1e6007c384da6efb083695e2a",
"dist/projection-fanout.d.ts": "e222a92545786e5e8708b9f858a9cb7f840b83c88e04b4d86c63d804801f1683",
"dist/projection-observability.d.ts": "185d60d16b64d7b0c59838ee9aaa3de558411d71d09c697f7cfc31816d83560a",
@@ -197,56 +195,52 @@
"dist/saga-contract.d.ts": "1598b7adf45652f32557de74c912049f7cdf97326420c0fef3b762d256bcca88",
"dist/saga.d.ts": "da12bdaef5c5d082ddae56c7e355831ae948bb77c9fb9a9ffa5d671201110231",
"dist/schema.d.ts": "63f1460c8975047963048c5bae295a80f2e63f5e7e9110ff9ac6bd40f881303d",
"dist/tenant-deployment-execution.d.ts": "24fc97eea039f0a0dc910ff8a66640d33e69863608c9b7d24ee6310f72c72b3e",
"dist/tenant-deployment.d.ts": "e5f9a36d380989714a88058f9d29ce43e8c7d638a23c80618f6cf9eeba2403ac",
"dist/types.d.ts": "60f6dc5014a611c5ba12aaa8a616c153291ac1ef172786775673f7269a6b6939",
"dist/types.d.ts": "a22b2d986097a6d1b7cce7dcd9815807a9d46e3ba98cbba06783cba9d8839928",
"dist/workflow-reply-authority.d.ts": "45c5b1071f779397e4a870f9663eab2c0b1fea22df6901b314201ca0549efd51",
"dist/workflow.d.ts": "305566d5e30723285b2f4cc227577a8c003a7dd9f1628796fa8fe825c45874fa",
"dist/write-fence.d.ts": "1623b1129c45481d165b604f7ca8090bfdc4eef278aab1a3dc1740cbf42bae15"
},
"fileCount": 90,
"credentialScanPassed": true,
"registry": "https://npm.blendercg.art/",
"tarball": "https://npm.blendercg.art/@cool-midway/module-runtime/-/module-runtime-9.1.1.tgz"
}
},
{
"name": "@cool-midway/rpc",
"version": "9.1.2",
"sha256": "624b6bfa6f6ae05bfee779acf22913492a1a3bd7e6ca36c1670da08e6de232d6",
"integrity": "sha512-WVR+zsMtojllK9LsI1Kx3VUMgEzvKLuxWVkOudyxzjLwWF4VU2/hnRN6tPJA1mBoSSJCxaSrbF0tZwbeWxcgzQ==",
"version": "9.0.7",
"registry": "https://npm.blendercg.art/",
"tarball": "https://npm.blendercg.art/@cool-midway/rpc/-/rpc-9.0.7.tgz",
"integrity": "sha512-1k7ta0SEk1+DOegpJKnp3eEtfYnd2s8LyiLZScPUF87JCDjWyZwTZnDx8MbCN3wLJf7UeCiFHDpIZ2XxNJWK9Q==",
"sha256": "227a2a6775d6dc1b0caa64537578f569e4808b99a361e5a953192fc14eb8a236",
"files": {
"dist/action-registry.js": "04f77c61445d47f66eaad984ee8e059a38bb0e610d2f584f5754d5a0ead105c5",
"dist/saas-host/bootstrap.js": "a53eb6f40c7a7c2427fbcd0cde78e8985f64dda15fcff1843e8957f5e7086271",
"dist/caller-context.js": "688a823ed382ded556ef7c8d6b151d7e9f65fef56781f7d2ba9443b83877b680",
"dist/circuit-breaker.js": "a128b6103704a74463f2765ee9fd97d10baec694abcd550f004570b29c1e65e0",
"dist/circuit-breaker.js": "0fe32c6019007dc9499c7566abecb63741ade5a70a336501d922986da50a5fc7",
"dist/codec.js": "1ba6e712f9c7c643267928ffdf6a3997d7d4ed52d51b8082f34938b75b48d127",
"dist/config/config.default.js": "8afe036a5ac3e4c1a382dddc1bec0a5599129977c2c28fc4d9f3777791f5444b",
"dist/saas-host/config.js": "ae96df84c49d25ba2dc2651b2ae24106a9bc173fa1788e8362940c5a63462023",
"dist/configuration.js": "8e0ad7f8b784a39e6859fe18fb5fda56d44fa82d45ab15c9095ab2072d8187a3",
"dist/saas-host/configuration.js": "555560131fe84336cc967de372afc2af842cfce7de43f0e8b1e0384a90259872",
"dist/saas-host/control-plane.js": "d85048f065219754517d7e523df8b12553b8793ed5112744d086019876845ce3",
"dist/saas-host/control-plane.js": "5ef87b9e5fbeabed216a3100b83070fb510e545b1bdda687ed99db00c175125d",
"dist/saas-host/credential-store.js": "126587a35efbe86516eed33c26f98f394ad388061397511eefb30879acedbb6f",
"dist/error.js": "8ab6a31e98e83ffbb105b9e33ea8801d9120c3192f5d94f6e782bcc4fc1c87a9",
"dist/event-transport.js": "c056c6c1ab9e5aa9b24b659f03045f64c852ec9e5ac2603d92dcb1baedbc88c2",
"dist/identity.js": "063718c26403ad5d8c6f8737f7351332f6ce5ddde9ee7ebf128e2085d8d70b25",
"dist/event-transport.js": "9d6f80a784f29ac260a6bc4c95fa4356a39a5ae773665fb1e7e288c7202c77b3",
"dist/identity.js": "fbaa0c3b1c7a09ebb6b7ade4989c96b97db80bf0048a9059f054f048f78bc905",
"dist/index.js": "26d61f60277e769fa7f9379fc2a98af9840296ea7c4d0e65c8c354bf70d37bdd",
"dist/saas-host/index.js": "897d19161dac81262025c9533d4b7cafe0c163198d91f8a792173314c796a97e",
"dist/saas-host/index.js": "ca038796a56260424afbea02215180fa319208403ddd2e5027901eb927277823",
"dist/injected-action.js": "92fdaaa784e64b0babbcba16a941d3569367a47ccdc2137d7afc415e542f7bc9",
"dist/managed-runtime.js": "1985cb709666c9f6bba561b1756cbc2420fd068e138f82180712a3c577760373",
"dist/mode.js": "b986fe6d3623d6baad7ecd44496c1fa681203c934013af8baaa330ba371fc75d",
"dist/saas-host/providers.js": "383fa29072c77f41e556e1c847b99c1f0e685e93dccf4ee41449802d6dde3219",
"dist/saas-host/providers.js": "03398be5a9bf2e84d0d11681905ac8c6e4d1594dabf5709ee82f201e432be46d",
"dist/redis.js": "871b8b7f906a83ce032b8a23d93471fed49c0e2a5baa5be3fab392a8e80eef9c",
"dist/decorator/rpc.js": "14552fea525d683fc459fab2d9b846af70ec77aa4032e275dcf3b0d09288cedc",
"dist/rpc.js": "b7606c7051b4b036c7218ad872b6297583e393fb51dc83fb606503350af78b2b",
"dist/rpc.js": "d0480036151719b4474418917da075f59a2ed3dda6f8c0533f3ac6737c7af529",
"dist/runtime-log.js": "672e35f1bb2c648ae58d2c55f724997a1e2a45bd2e62a8cd8180283f31d8b093",
"dist/saas-host/runtime.js": "c21adbf03a7c6e2b05885011ccb33e0fe259b295fbeeec0b681b2504d209b685",
"dist/saas-host/runtime.js": "7a3e79d3b8b195f5de38eb22e40dcd8d284a58fac26cf8f6231c3c636bcc5d65",
"saas-host.js": "7c191f478052db1c7e876cf33aad154f879a33fa194f1cd1d216d949598dd09b",
"dist/saas-host/security.js": "f25567da27233ebc3ad88ba3a0769163afeaf38b8f1eb92733446e3b5b9ab626",
"dist/signer.js": "c8e64492947deec7bf277b3f7b56a5024928a0956bcc57ea62a3c1a10a47792c",
"dist/signer.js": "a941011019527562c3ea2c1373523dbdeabb793d1a1dfdbb6a68d97022510916",
"dist/test.js": "5386504311845b9dc3fe230d3c5a3b5ab3c6d36154add15e91d32d8442c25157",
"dist/types.js": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
"dist/workflow-recovery.js": "d423e33df1cca07250036ec6b61aaa7fcddea1e1440450487da13f01b16b26f0",
"package.json": "42ed936eafa84ce842c19bcb62970688fa9dee3030c071fc7eff5d33424e646f",
"package.json": "dbc19381b0f400b9b3c70c15bdf7673c615c82a97cf319b61beb8c4109d240ce",
"dist/action-registry.d.ts": "40231dd8299c0bfae1b006105d49945eb2f20a40334856db32e4b7cc2851398b",
"dist/saas-host/bootstrap.d.ts": "f639edef99770f091ac90e737a0ab2c857830241a8996171492768d108ad43f0",
"dist/caller-context.d.ts": "3f58cb5d653e2d5179996c3302dddc5c4bfdc3ff2ac501ca8d6dcedb4cb606d5",
@@ -256,34 +250,30 @@
"dist/config/config.default.d.ts": "42220f9e583d1e7294df9d24a6849b55f95ad04294209833a6d86e0a7fe7c211",
"dist/configuration.d.ts": "0a0c26f470cacf671444db225efb4433d8fb097d6e97f6f22bb4bbc9aebbb89d",
"dist/saas-host/configuration.d.ts": "2b18a8a64cceb9a9c5b0e5d5485e1f125a504bda01c9884a5920d17ab3d6c88c",
"dist/saas-host/control-plane.d.ts": "913fd7adc8886fdb9abce6e7d44e6a13ea75bf84b613efbdb512e47c788b746a",
"dist/saas-host/control-plane.d.ts": "9c096d15d2e6a4ed33b41393e45e8895f1baaaa16630304c0cb3fc272db5baec",
"dist/saas-host/credential-store.d.ts": "f4a9120e4aefcabb78903697fa30a5e7fcef9c8eeb347a0d8fae60c7f94c1f9d",
"dist/error.d.ts": "f89c87f491f25efd6fe247423b50dfc14908bb478cc5daf32a0e37e0cab3135b",
"dist/event-transport.d.ts": "db3aad6cb1ed297c3cbc785101a26577beabae23e8255e18e993a9c0d42849e8",
"dist/event-transport.d.ts": "27ebe825bcfe6cd78fd1ca3f05cbb9a3315b5e075f0f3250c2e95ed2ed7fd1dd",
"dist/identity.d.ts": "5e7a2f9cbe80816cad22f678663f814f89e2295ecfb0b6d7436a8a1efb166f7c",
"dist/index.d.ts": "d4ac7f2d87a93a50263ccbb3da781dcf4d3db9775ae5ba316327862f0c007d69",
"dist/saas-host/index.d.ts": "14845d92d00654415eaccca39da6ec4f347ac98ca2c3ed2f0df7aa36db8fdf2c",
"dist/saas-host/index.d.ts": "2e5e01089a7a42c312456f44054a33a426ef18572affd687e79a90acb58956c9",
"index.d.ts": "b764a7488d90d3db5bc04ed44bbe06994574d25c052a139c15e9b11ffe1be954",
"dist/injected-action.d.ts": "10954865dd4ddd1f1bfd867e151d4fda993547fc206346d5ccf39a241d40527e",
"dist/managed-runtime.d.ts": "f9c4f933c09ee7488d05cad68cd411de8239998a48738f2a90988aff6f691379",
"dist/mode.d.ts": "cf6a400f1498ce1102c70f47719d6c58dfe3555a8aacce03eb09c7ea38c8d2b7",
"dist/saas-host/providers.d.ts": "afa7ac804915450d7fba5ac210ea86191d1f3ee1c5fa82305aabe6028716087c",
"dist/saas-host/providers.d.ts": "fc511f33e5c2e977ed485dd0ff8e3f3d2fa52675596e2a112393e27d87c9740e",
"dist/redis.d.ts": "794e9c53f6c36494562d1685483d826794af29218244d2692e2ce9e1a20163eb",
"dist/decorator/rpc.d.ts": "eee9097a4845b107033ca9234ef8e6f089e03f130243250641bf0f8746b26725",
"dist/rpc.d.ts": "fe9bd78835b1ecc2d47a819712e5bc43d6528e26aa44ff6e2b1d2dba910f05b9",
"dist/rpc.d.ts": "4f69d0c71471a53acfff1a92fbae44dd141213dd4151546d92765273ef843d31",
"dist/runtime-log.d.ts": "2ae04a0fad229a7b2c207667f77492881898bdd5ed4199f0402bf5df2a4072d4",
"dist/saas-host/runtime.d.ts": "20f2ce0293b4fa315af93e334901f2f6acffa9867f8e60ae62a78a984dda129b",
"saas-host.d.ts": "cdc6609dcbb75e109b15e8644a4db268f303d23005a6338078ec215eef15a530",
"dist/saas-host/security.d.ts": "e03aa4553fe661b2c89f5c062c68050d6350f14bc7879485540b497dc880adf7",
"dist/signer.d.ts": "b0859783023e91f0326a702c91780cb436f5e726a8cc04860b3a408b81130cae",
"dist/test.d.ts": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"dist/types.d.ts": "2d704471fd8d08abceb0e4db0901f56398d206717e6cc199d0260aea783d669c",
"dist/types.d.ts": "e5904d4dbe91e8b334ebd80d87c02c5e400db65afbe65e55d04a0c29e8793706",
"dist/workflow-recovery.d.ts": "dbcd593dee5a100614b68eb33fb89b1efd9bf5cb5f01879dc4990eb2fdd1a2cb"
},
"fileCount": 66,
"credentialScanPassed": true,
"registry": "https://npm.blendercg.art/",
"tarball": "https://npm.blendercg.art/@cool-midway/rpc/-/rpc-9.1.2.tgz"
}
}
]
}

View File

@@ -20,9 +20,9 @@ export class Orders extends SaasTableModel<OrdersRow> {
static readonly definition = defineSaasTableModel({
"kind": "table",
"moduleCode": "order",
"revision": 1,
"schemaVersion": 1,
"schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23",
"revision": 4,
"schemaVersion": 4,
"schemaInputChecksum": "2f81018529e651ab1eb6225f4190427e62d6a09d983f52faeaa401e7fed5cdb3",
"tableCode": "orders",
"fields": [
{

View File

@@ -4,9 +4,9 @@ import { defineGeneratedSaasModule } from '@cool-midway/module-runtime';
export const GeneratedSaasModule = defineGeneratedSaasModule({
"formatVersion": 2,
"moduleCode": "order",
"revision": 1,
"schemaVersion": 1,
"schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23",
"runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce",
"revision": 4,
"schemaVersion": 4,
"schemaInputChecksum": "2f81018529e651ab1eb6225f4190427e62d6a09d983f52faeaa401e7fed5cdb3",
"runtimeContractChecksum": "5db136ddcc92c2ce13847180ddc564121c9e4249c2d43e720ac4dbe5a2ff9344",
"implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b"
});

View File

@@ -83,10 +83,10 @@ export const SaasActions = {
"actionChecksum": "3978a7ba9a3e0f91842031fd323ec63b3816eef68cb8dc82ffad6d187de8b7ea",
"outputChecksum": "fe644424ef6a9e462b56edc9f70f48bb218783c69469469d4310de48589a0df5",
"contractVersion": 1,
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1"
"providerReleaseVersion": "1.0.3-rc.4"
}),
GoodsReleaseStock: defineInjectedSaasAction<DemoGoodsReleaseStockInput, DemoGoodsReleaseStockOutput>({
"kind": "action",
@@ -148,10 +148,10 @@ export const SaasActions = {
"outputChecksum": "a632b9f89518c3c17861454b74173a4880d5e8482639d3ff7f761aee4d061bd9",
"contractVersion": 1,
"commandEventType": "saas.workflow.demo.goods.releaseStock",
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1",
"providerReleaseVersion": "1.0.3-rc.4",
"commandEventContractChecksum": "18a727b91cf9410c3b7ac14e3a8799dbbfa8937f84667bfe7e31e21e662396be"
}),
GoodsReserveStock: defineInjectedSaasAction<DemoGoodsReserveStockInput, DemoGoodsReserveStockOutput>({
@@ -208,10 +208,10 @@ export const SaasActions = {
"outputChecksum": "545bd8b0bf6eb8670b21497236038187ee0f1df1544a318b16a399458fcb796e",
"contractVersion": 1,
"commandEventType": "saas.workflow.demo.goods.reserveStock",
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1",
"providerReleaseVersion": "1.0.3-rc.4",
"commandEventContractChecksum": "ffbecad3a3d63b8bf92fde701dfaa11c8502a2c5f9f6bbb89b755e214024c3ae"
})
}

View File

@@ -1,11 +1,11 @@
{
"manifestVersion": 1,
"moduleCode": "order",
"revision": 1,
"revision": 4,
"schemaChecksum": null,
"schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23",
"schemaInputChecksum": "2f81018529e651ab1eb6225f4190427e62d6a09d983f52faeaa401e7fed5cdb3",
"actionManifestChecksum": null,
"runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce",
"runtimeContractChecksum": "5db136ddcc92c2ce13847180ddc564121c9e4249c2d43e720ac4dbe5a2ff9344",
"implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b",
"actions": [
"OrdersAdd",

View File

@@ -1,13 +1,13 @@
{
"formatVersion": 2,
"moduleCode": "order",
"revision": 1,
"revision": 4,
"releaseVersion": null,
"schemaVersion": 1,
"schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23",
"schemaVersion": 4,
"schemaInputChecksum": "2f81018529e651ab1eb6225f4190427e62d6a09d983f52faeaa401e7fed5cdb3",
"schemaChecksum": null,
"actionManifestChecksum": null,
"runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce",
"runtimeContractChecksum": "5db136ddcc92c2ce13847180ddc564121c9e4249c2d43e720ac4dbe5a2ff9344",
"implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b",
"models": [
{
@@ -2031,10 +2031,10 @@
"actionChecksum": "3978a7ba9a3e0f91842031fd323ec63b3816eef68cb8dc82ffad6d187de8b7ea",
"outputChecksum": "fe644424ef6a9e462b56edc9f70f48bb218783c69469469d4310de48589a0df5",
"contractVersion": 1,
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1"
"providerReleaseVersion": "1.0.3-rc.4"
}
},
{
@@ -2101,10 +2101,10 @@
"outputChecksum": "a632b9f89518c3c17861454b74173a4880d5e8482639d3ff7f761aee4d061bd9",
"contractVersion": 1,
"commandEventType": "saas.workflow.demo.goods.releaseStock",
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1",
"providerReleaseVersion": "1.0.3-rc.4",
"commandEventContractChecksum": "18a727b91cf9410c3b7ac14e3a8799dbbfa8937f84667bfe7e31e21e662396be"
}
},
@@ -2166,10 +2166,10 @@
"outputChecksum": "545bd8b0bf6eb8670b21497236038187ee0f1df1544a318b16a399458fcb796e",
"contractVersion": 1,
"commandEventType": "saas.workflow.demo.goods.reserveStock",
"providerReleaseId": 38,
"providerReleaseId": 46,
"consumerModuleCode": "order",
"providerModuleCode": "demo",
"providerReleaseVersion": "1.0.0-rc.1",
"providerReleaseVersion": "1.0.3-rc.4",
"commandEventContractChecksum": "ffbecad3a3d63b8bf92fde701dfaa11c8502a2c5f9f6bbb89b755e214024c3ae"
}
}
@@ -2209,8 +2209,8 @@
},
"additionalProperties": false
},
"providerReleaseId": 38,
"providerReleaseVersion": "1.0.0-rc.1"
"providerReleaseId": 46,
"providerReleaseVersion": "1.0.3-rc.4"
}
],
"crud": [

View File

@@ -0,0 +1,170 @@
'use strict';
// Exercise the actual TypeScript service, with only its injected CRUD/Action
// collaborators stubbed. No application bootstrap, network, database or dist
// writes are needed; generated contracts and decorators remain the real ones.
require('reflect-metadata');
const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const ts = require('typescript');
const { SaasBusinessReject, ModuleRuntimeError } = require('@cool-midway/module-runtime');
const sourceRoot = path.resolve(__dirname, '../src');
const previousTsLoader = require.extensions['.ts'];
let OrdersService;
try {
require.extensions['.ts'] = (module, filename) => {
assert.ok(filename.startsWith(sourceRoot + path.sep), 'only this service source tree is compiled in memory');
const compiled = ts.transpileModule(fs.readFileSync(filename, 'utf8'), {
fileName: filename,
compilerOptions: { target: ts.ScriptTarget.ES2018, module: ts.ModuleKind.CommonJS,
experimentalDecorators: true, emitDecoratorMetadata: true, esModuleInterop: true },
});
module._compile(compiled.outputText, filename);
};
({ OrdersService } = require('../src/service/orders.ts'));
} finally {
if (previousTsLoader) require.extensions['.ts'] = previousTsLoader;
else delete require.extensions['.ts'];
}
function fixture(overrides = {}) {
const state = {
goods: { id: '24', status: 1, price: '12.50', stock: 20 },
order: { id: '27', order_no: 'UNIT-ORDER', goods_id: '24', quantity: 3, amount: '37.50', status: 'confirmed' },
calls: [], ...overrides,
};
const service = new OrdersService();
service.batchInfo = async input => { state.calls.push(['batchInfo', input]); return { list: state.goods ? [state.goods] : [] }; };
service.reserveStock = async input => { state.calls.push(['reserveStock', input]); return { goodsId: input.goodsId, remainingStock: 17 }; };
service.releaseStock = async input => { state.calls.push(['releaseStock', input]); return { goodsId: input.goodsId, currentStock: 20 }; };
service.orders = {
lock: async input => {state.calls.push(['lock',input]);return state.order;},
info: async () => assert.fail('missing-record lookup must not invoke the nonnullable info contract'),
list: async input => { state.calls.push(['list', input]); return state.order ? [state.order] : []; },
add: async input => { state.calls.push(['add', input]); return { id: '27', ...input, ...state.addResult }; },
update: async input => { state.calls.push(['update', input]); return { affected: 1 }; },
};
service.workflow = {start: async input => {state.calls.push(['workflow',input]);return {sagaId:'test-saga'};}};
return { service, state };
}
const createInput = { orderNo: 'UNIT-ORDER', goodsId: 24, quantity: 3 };
const business = code => error => error instanceof SaasBusinessReject && !(error instanceof ModuleRuntimeError) && error.code === code;
const contract = error => error instanceof ModuleRuntimeError && !(error instanceof SaasBusinessReject) &&
error.errorCode === 'MODULE_ACTION_INPUT_INVALID' && error.statusCode === 409;
const noWrites = state => assert.ok(state.calls.every(([name]) => !['reserveStock', 'releaseStock', 'add', 'update'].includes(name)));
test('the existing locked list contract authorizes ID filtering and valid empty-array results', () => {
const lock = JSON.parse(fs.readFileSync(path.join(sourceRoot, 'saas/generated/order/saas-schema.lock.json'), 'utf8'));
const model = lock.models.find(item => item.tableCode === 'orders');
assert.equal(model.fields.find(field => field.code === 'id').filterable, true);
const list = lock.actions.find(item => item.manifestDescriptor.name === 'orders.list').manifestDescriptor;
assert.equal(list.inputSchema.properties.where.properties.id.type, 'string');
assert.equal(list.inputSchema.properties.take.minimum, 1);
assert.equal(list.outputSchema.type, 'array');
assert.ok(list.tables.some(table => table.tableCode === 'orders' && table.select === true && table.fields.includes('id')));
});
test('unlisted goods is an explicit GOODS_UNAVAILABLE business rejection before any write', async () => {
const f = fixture({ goods: { id: '24', status: 0, price: '12.50' } });
await assert.rejects(f.service.createOrder(createInput), business('GOODS_UNAVAILABLE'));
noWrites(f.state);
});
test('missing goods is GOODS_NOT_FOUND in both order creation and details', async t => {
for (const method of ['createOrder', 'detailWithGoods']) await t.test(method, async () => {
const f = fixture({ goods: null });
await assert.rejects(f.service[method](method === 'createOrder' ? createInput : { id: 27 }), business('GOODS_NOT_FOUND'));
noWrites(f.state);
});
});
test('missing order is ORDER_NOT_FOUND in details and cancellation', async t => {
for (const method of ['detailWithGoods', 'cancelOrder']) await t.test(method, async () => {
const f = fixture({ order: null });
await assert.rejects(f.service[method]({ id: 27 }), business('ORDER_NOT_FOUND'));
assert.deepEqual(f.state.calls, method === 'cancelOrder' ? [['lock',{id:'27'}]] : [['list', { where: { id: '27' }, take: 1 }]]);
noWrites(f.state);
});
});
test('malformed goods status and price remain contract errors, not business warnings', async t => {
for (const [label, patch] of [['fractional status', { status: 1.2 }], ['invalid status', { status: 'bad' }],
['invalid price', { price: '12.5oops' }], ['nonfinite price', { price: Infinity }]]) {
await t.test(label, async () => {
const f = fixture(); Object.assign(f.state.goods, patch);
await assert.rejects(f.service.createOrder(createInput), contract);
noWrites(f.state);
});
}
});
test('unsafe stored goods IDs remain contract failures before a cross-module call', async t => {
for (const id of ['0', '-1', '1.5', '9007199254740992', 'bad']) await t.test(id, async () => {
const f = fixture(); f.state.order.goods_id = id;
await assert.rejects(f.service.detailWithGoods({ id: 27 }), contract);
assert.deepEqual(f.state.calls.map(([name]) => name), ['list']);
});
});
test('invalid generated order ID or amount stays a contract error after mocked CRUD', async t => {
for (const [label, addResult] of [['unsafe order ID', { id: '9007199254740992' }], ['nonfinite amount', { amount: 'NaN' }]]) {
await t.test(label, async () => {
const f = fixture({ addResult });
await assert.rejects(f.service.createOrder(createInput), contract);
assert.deepEqual(f.state.calls.map(([name]) => name), ['batchInfo', 'add', 'workflow']);
});
}
});
test('failure to persist workflow propagates to the enclosing transaction', async () => {
const f = fixture();
const downstream = new SaasBusinessReject('INSUFFICIENT_STOCK', '库存不足');
f.service.workflow.start = async () => { throw downstream; };
await assert.rejects(f.service.createOrder(createInput), error => error === downstream);
assert.equal(f.state.calls.some(([name]) => name === 'reserveStock'), false);
});
test('list contract and database failures propagate unchanged instead of becoming ORDER_NOT_FOUND', async t => {
for (const error of [new ModuleRuntimeError('MODULE_ACTION_OUTPUT_INVALID', 'invalid list output', 500),
new ModuleRuntimeError('MODULE_ACTION_FORBIDDEN', 'list access denied', 403), new Error('database unavailable')]) {
await t.test(error.message, async () => {
const f = fixture();
f.service.orders.list = async () => { throw error; };
await assert.rejects(f.service.detailWithGoods({ id: 27 }), observed => observed === error && !(observed instanceof SaasBusinessReject));
noWrites(f.state);
});
}
});
test('creation persists pending intent and starts durable workflow without a synchronous stock write', async () => {
const f = fixture();
assert.deepEqual(await f.service.createOrder(createInput), { id: 27, orderNo: 'UNIT-ORDER', amount: 37.5, status: 'pending_reservation' });
assert.deepEqual(f.state.calls.map(([name]) => name), ['batchInfo', 'add', 'workflow']);
const flow=f.state.calls[2][1];
assert.equal(flow.type,'order.create@1');
assert.deepEqual(flow.steps[0].input,{goodsId:24,quantity:3});
assert.deepEqual(flow.outcomes.completed,{id:'27',status:'confirmed'});
assert.deepEqual(flow.outcomes.failed,{id:'27',status:'rejected'});
});
test('cancellation locks state and persists release workflow; terminal and pending repeats are inert', async () => {
const f = fixture();
assert.deepEqual(await f.service.cancelOrder({ id: 27 }), { id: 27, status: 'cancel_pending', restoredStock: 0 });
assert.deepEqual(f.state.calls.map(([name]) => name), ['lock', 'update', 'workflow']);
const repeated = fixture(); repeated.state.order.status = 'cancelled';
assert.deepEqual(await repeated.service.cancelOrder({ id: 27 }), { id: 27, status: 'cancelled', restoredStock: 0 });
assert.deepEqual(repeated.state.calls.map(([name]) => name), ['lock']);
const pending=fixture(); pending.state.order.status='cancel_pending';
assert.equal((await pending.service.cancelOrder({id:27})).status,'cancel_pending');
assert.deepEqual(pending.state.calls.map(([name])=>name),['lock']);
});
test('legacy or unconfirmed orders cannot manufacture a stock release', async () => {
for (const status of ['created','pending_reservation','rejected','manual_review']) {
const f=fixture();f.state.order.status=status;
await assert.rejects(f.service.cancelOrder({id:27}),business('ORDER_STATE_CONFLICT'));
noWrites(f.state);
}
});