openxiangda-devkit-core 2.0.0-alpha.107 → 2.0.0-alpha.109

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 (53) hide show
  1. package/dist/application-services.d.ts +181 -1
  2. package/dist/application-services.d.ts.map +1 -1
  3. package/dist/application-services.js +33 -0
  4. package/dist/application-services.js.map +1 -1
  5. package/dist/application-ui-contract.d.ts +5 -0
  6. package/dist/application-ui-contract.d.ts.map +1 -0
  7. package/dist/application-ui-contract.js +149 -0
  8. package/dist/application-ui-contract.js.map +1 -0
  9. package/dist/command-registry.d.ts +2 -2
  10. package/dist/command-registry.js +1 -1
  11. package/dist/command-registry.js.map +1 -1
  12. package/dist/compiler/application-model.d.ts +60 -0
  13. package/dist/compiler/application-model.d.ts.map +1 -0
  14. package/dist/compiler/application-model.js +141 -0
  15. package/dist/compiler/application-model.js.map +1 -0
  16. package/dist/compiler/bundle.d.ts.map +1 -1
  17. package/dist/compiler/bundle.js +19 -9
  18. package/dist/compiler/bundle.js.map +1 -1
  19. package/dist/compiler/config.d.ts +19 -5
  20. package/dist/compiler/config.d.ts.map +1 -1
  21. package/dist/compiler/config.js +137 -60
  22. package/dist/compiler/config.js.map +1 -1
  23. package/dist/compiler/field-surface.js +1 -1
  24. package/dist/compiler/field-surface.js.map +1 -1
  25. package/dist/compiler/permission-review.d.ts +139 -0
  26. package/dist/compiler/permission-review.d.ts.map +1 -0
  27. package/dist/compiler/permission-review.js +131 -0
  28. package/dist/compiler/permission-review.js.map +1 -0
  29. package/dist/index.d.ts +4 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +4 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/optional-backend.d.ts +14 -0
  34. package/dist/optional-backend.d.ts.map +1 -0
  35. package/dist/optional-backend.js +145 -0
  36. package/dist/optional-backend.js.map +1 -0
  37. package/dist/workspace-loader.d.ts.map +1 -1
  38. package/dist/workspace-loader.js +16 -1
  39. package/dist/workspace-loader.js.map +1 -1
  40. package/package.json +3 -2
  41. package/templates/backend/.turbo/turbo-build.log +4 -0
  42. package/templates/backend/.turbo/turbo-check.log +4 -0
  43. package/templates/backend/.turbo/turbo-test.log +13 -0
  44. package/templates/backend/Dockerfile +20 -0
  45. package/templates/backend/node_modules/.bin/openxiangda +21 -0
  46. package/templates/backend/node_modules/.bin/tsc +21 -0
  47. package/templates/backend/node_modules/.bin/tsserver +21 -0
  48. package/templates/backend/node_modules/.bin/tsx +21 -0
  49. package/templates/backend/package.json +27 -0
  50. package/templates/backend/src/app.module.ts +23 -0
  51. package/templates/backend/src/main.ts +5 -0
  52. package/templates/backend/test/smoke.test.ts +17 -0
  53. package/templates/backend/tsconfig.json +9 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda-devkit-core",
3
- "version": "2.0.0-alpha.107",
3
+ "version": "2.0.0-alpha.109",
4
4
  "description": "Framework-neutral OpenXiangda 2.0 workspace and control-plane use cases.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,12 +22,13 @@
22
22
  },
23
23
  "files": [
24
24
  "dist/",
25
+ "templates/",
25
26
  "README.md"
26
27
  ],
27
28
  "dependencies": {
28
29
  "ajv": "8.20.0",
29
30
  "cron-parser": "5.4.0",
30
- "openxiangda-contracts": "2.0.0-alpha.84",
31
+ "openxiangda-contracts": "2.0.0-alpha.85",
31
32
  "esbuild": "0.28.2",
32
33
  "typescript": "5.9.3",
33
34
  "undici": "6.28.0"
@@ -0,0 +1,4 @@
1
+
2
+ > @app/server@0.1.0 build /Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/templates/application/apps/server
3
+ > tsc -p tsconfig.json
4
+
@@ -0,0 +1,4 @@
1
+
2
+ > @app/server@0.1.0 check /Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/templates/application/apps/server
3
+ > tsc -p tsconfig.json --noEmit
4
+
@@ -0,0 +1,13 @@
1
+
2
+ > @app/server@0.1.0 test /Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/templates/application/apps/server
3
+ > tsx --test test/*.test.ts
4
+
5
+ ✔ the clean server template only owns platform bootstrap (0.600583ms)
6
+ ℹ tests 1
7
+ ℹ suites 0
8
+ ℹ pass 1
9
+ ℹ fail 0
10
+ ℹ cancelled 0
11
+ ℹ skipped 0
12
+ ℹ todo 0
13
+ ℹ duration_ms 148.307875
@@ -0,0 +1,20 @@
1
+ FROM node:22-alpine AS build
2
+ WORKDIR /workspace
3
+ RUN corepack enable
4
+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.base.json ./
5
+ COPY apps/server/package.json apps/server/package.json
6
+ COPY packages/contracts/package.json packages/contracts/package.json
7
+ RUN node -e "const fs=require('node:fs'); const p=JSON.parse(fs.readFileSync('package.json','utf8')); delete p.devDependencies; fs.writeFileSync('package.json', JSON.stringify(p));"
8
+ RUN pnpm --filter @app/server --filter @app/contracts install --no-frozen-lockfile --ignore-scripts
9
+ COPY apps/server apps/server
10
+ COPY packages/contracts packages/contracts
11
+ RUN pnpm --filter @app/server... build
12
+ RUN pnpm --filter @app/server deploy --prod --legacy --ignore-scripts /output
13
+
14
+ FROM node:22-alpine AS runtime
15
+ ENV NODE_ENV=production
16
+ WORKDIR /app
17
+ COPY --from=build --chown=1000:1000 /output /app
18
+ USER 1000:1000
19
+ EXPOSE 3000
20
+ CMD ["node", "dist/main.js"]
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/openxiangda/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/openxiangda/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/node_modules:/Users/caijie/project/xiangda/node_modules:/Users/caijie/project/node_modules:/Users/caijie/node_modules:/Users/node_modules:/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/openxiangda/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/openxiangda/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/packages/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/node_modules:/Users/caijie/project/xiangda/node_modules:/Users/caijie/project/node_modules:/Users/caijie/node_modules:/Users/node_modules:/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../openxiangda/bin/run.js" "$@"
19
+ else
20
+ exec node "$basedir/../openxiangda/bin/run.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsc" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules/tsx/dist/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules/tsx/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules/tsx/dist/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules/tsx/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/tsx@4.23.12/node_modules:/Users/caijie/project/xiangda/sy-lowcode-main/tools/openxiangda-v2/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../tsx/dist/cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../tsx/dist/cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@app/server",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "tsx watch src/main.ts",
8
+ "check": "tsc -p tsconfig.json --noEmit",
9
+ "test": "tsx --test test/*.test.ts",
10
+ "build": "tsc -p tsconfig.json",
11
+ "start": "node dist/main.js"
12
+ },
13
+ "dependencies": {
14
+ "@app/contracts": "workspace:*",
15
+ "@nestjs/common": "11.1.29",
16
+ "@nestjs/core": "11.1.29",
17
+ "@nestjs/platform-fastify": "11.1.29",
18
+ "openxiangda": "workspace:*",
19
+ "reflect-metadata": "0.2.2",
20
+ "rxjs": "7.8.2"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "24.13.3",
24
+ "tsx": "4.23.12",
25
+ "typescript": "5.9.3"
26
+ }
27
+ }
@@ -0,0 +1,23 @@
1
+ import { Module } from '@nestjs/common';
2
+ import {
3
+ eventHandlerManifest,
4
+ eventSchemas,
5
+ eventSubscriptionCodes,
6
+ } from '@app/contracts';
7
+ import {
8
+ OpenXiangdaModule,
9
+ eventSigningSecretsFromEnvironment,
10
+ } from 'openxiangda/nest';
11
+
12
+ @Module({
13
+ imports: [
14
+ OpenXiangdaModule.forApplication({
15
+ eventHandlerManifest,
16
+ eventSchemas,
17
+ eventSigningSecrets: eventSigningSecretsFromEnvironment(
18
+ eventSubscriptionCodes
19
+ ),
20
+ }),
21
+ ],
22
+ })
23
+ export class AppModule {}
@@ -0,0 +1,5 @@
1
+ import 'reflect-metadata';
2
+ import { bootstrapOpenXiangdaApplication } from 'openxiangda/nest';
3
+ import { AppModule } from './app.module.js';
4
+
5
+ await bootstrapOpenXiangdaApplication(AppModule);
@@ -0,0 +1,17 @@
1
+ import assert from 'node:assert/strict';
2
+ import { readFileSync } from 'node:fs';
3
+ import test from 'node:test';
4
+
5
+ test('the clean server template only owns platform bootstrap', () => {
6
+ const source = readFileSync(new URL('../src/app.module.ts', import.meta.url), 'utf8');
7
+ const main = readFileSync(new URL('../src/main.ts', import.meta.url), 'utf8');
8
+ assert.match(source, /OpenXiangdaModule\.forApplication/);
9
+ assert.doesNotMatch(source, /OPENXIANGDA_(?:APP_CODE|ENVIRONMENT_ID|OAUTH_CLIENT_ID)/);
10
+ assert.match(source, /eventHandlerManifest/);
11
+ assert.match(source, /eventSigningSecretsFromEnvironment/);
12
+ assert.match(main, /bootstrapOpenXiangdaApplication\(AppModule\)/);
13
+ assert.doesNotMatch(main, /NestFactory|FastifyAdapter/);
14
+ const legacyMarkers = ['oauth' + 'Client', 'Workflow', 'instrument' + '-context'];
15
+ assert.doesNotMatch(source, new RegExp(legacyMarkers.join('|')));
16
+ assert.doesNotMatch(source, /createData|updateData|deleteData|queryData/);
17
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src",
6
+ "sourceMap": true
7
+ },
8
+ "include": ["src/**/*.ts"]
9
+ }