create-windy 0.2.17 → 0.2.18
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 +4 -3
- package/dist/cli.js +68 -18
- package/package.json +1 -1
- package/template/.windy-template.json +2 -2
- package/template/AGENTS.md +11 -1
- package/template/README.md +8 -5
- package/template/apps/server/Dockerfile +3 -3
- package/template/apps/server/src/index.ts +8 -14
- package/template/apps/server/src/settings/drizzle-watermark-repository.integration.test.ts +57 -0
- package/template/apps/server/src/settings/drizzle-watermark-repository.ts +62 -0
- package/template/apps/server/src/settings/runtime.ts +30 -3
- package/template/apps/server/src/settings/watermark-repository.ts +32 -0
- package/template/apps/server/src/settings/watermark-routes.test.ts +203 -0
- package/template/apps/server/src/settings/watermark-routes.ts +134 -0
- package/template/apps/web/runtime-server.test.ts +4 -4
- package/template/apps/web/src/composables/useWatermarkSettings.ts +75 -33
- package/template/apps/web/src/composables/useWatermarkSettings.webtest.ts +86 -0
- package/template/apps/web/src/composables/watermark-settings.ts +9 -35
- package/template/apps/web/src/composables/watermark-settings.webtest.ts +8 -32
- package/template/apps/web/src/layout/GlobalWatermark.layering.webtest.ts +81 -0
- package/template/apps/web/src/layout/GlobalWatermark.vue +34 -31
- package/template/apps/web/src/layout/GlobalWatermark.webtest.ts +58 -7
- package/template/apps/web/src/pages/settings/GlobalSettingsPage.vue +1 -1
- package/template/apps/web/src/pages/settings/WatermarkSettingsSection.vue +40 -18
- package/template/apps/web/src/services/platform-settings-api.ts +25 -2
- package/template/apps/web/vite.config.ts +3 -1
- package/template/docker-compose.yml +19 -6
- package/template/docs/platform/platform-shell-settings.md +24 -3
- package/template/docs/platform/web-system-crud.md +2 -2
- package/template/drizzle.config.ts +1 -1
- package/template/package.json +4 -1
- package/template/packages/database/drizzle/0031_panoramic_typhoid_mary.sql +12 -0
- package/template/packages/database/drizzle/meta/0031_snapshot.json +7387 -0
- package/template/packages/database/drizzle/meta/_journal.json +8 -1
- package/template/packages/database/src/schema/platform-settings.ts +16 -1
- package/template/packages/modules/src/system-api-permissions.ts +4 -0
- package/template/packages/modules/src/system-api-watermark.ts +26 -0
- package/template/packages/modules/src/system-features.ts +1 -1
- package/template/packages/modules/src/system-watermark-policy.test.ts +31 -0
- package/template/packages/shared/src/platform-settings.ts +13 -0
|
@@ -218,6 +218,13 @@
|
|
|
218
218
|
"when": 1784160403893,
|
|
219
219
|
"tag": "0030_governed_export_constraints",
|
|
220
220
|
"breakpoints": true
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"idx": 31,
|
|
224
|
+
"version": "7",
|
|
225
|
+
"when": 1784837513572,
|
|
226
|
+
"tag": "0031_panoramic_typhoid_mary",
|
|
227
|
+
"breakpoints": true
|
|
221
228
|
}
|
|
222
229
|
]
|
|
223
|
-
}
|
|
230
|
+
}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
export {};
|
|
3
3
|
|
|
4
4
|
// @windy-module system.configuration begin
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
ModuleConfigDiffEntry,
|
|
7
|
+
ModuleConfigValues,
|
|
8
|
+
} from "@southwind-ai/shared";
|
|
6
9
|
import {
|
|
7
10
|
index,
|
|
8
11
|
integer,
|
|
@@ -15,6 +18,7 @@ import {
|
|
|
15
18
|
// @windy-module system.configuration end
|
|
16
19
|
// @windy-module system.settings begin
|
|
17
20
|
import {
|
|
21
|
+
boolean,
|
|
18
22
|
pgTable as settingsTable,
|
|
19
23
|
text,
|
|
20
24
|
varchar as settingsVarchar,
|
|
@@ -33,6 +37,17 @@ export const platformBrandingSettings = settingsTable(
|
|
|
33
37
|
...auditColumns,
|
|
34
38
|
},
|
|
35
39
|
);
|
|
40
|
+
|
|
41
|
+
export const platformWatermarkPolicies = settingsTable(
|
|
42
|
+
"platform_watermark_policies",
|
|
43
|
+
{
|
|
44
|
+
id: settingsVarchar("id", { length: 64 }).primaryKey(),
|
|
45
|
+
enabled: boolean("enabled").notNull(),
|
|
46
|
+
businessPagesEnabled: boolean("business_pages_enabled").notNull(),
|
|
47
|
+
customContent: settingsVarchar("custom_content", { length: 80 }).notNull(),
|
|
48
|
+
...auditColumns,
|
|
49
|
+
},
|
|
50
|
+
);
|
|
36
51
|
// @windy-module system.settings end
|
|
37
52
|
|
|
38
53
|
// @windy-module system.configuration begin
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { ApiPermissionBinding } from "@southwind-ai/shared";
|
|
2
2
|
import { binding, resourceBindings } from "./system-api-binding.js";
|
|
3
|
+
// @windy-module system.settings begin
|
|
4
|
+
import { watermarkApiPermissionBindings } from "./system-api-watermark.js";
|
|
5
|
+
// @windy-module system.settings end
|
|
3
6
|
// @windy-module system.data-governance begin
|
|
4
7
|
import { dataGovernanceApiPermissionBindings } from "./system-api-data-governance.js";
|
|
5
8
|
// @windy-module system.data-governance end
|
|
@@ -109,6 +112,7 @@ export function systemApiPermissionBindings(): ApiPermissionBinding[] {
|
|
|
109
112
|
"system.settings.manage",
|
|
110
113
|
"system.settings",
|
|
111
114
|
),
|
|
115
|
+
...watermarkApiPermissionBindings(),
|
|
112
116
|
// @windy-module system.settings end
|
|
113
117
|
// @windy-module system.configuration begin
|
|
114
118
|
binding(
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ApiPermissionBinding } from "@southwind-ai/shared";
|
|
2
|
+
import { binding } from "./system-api-binding.js";
|
|
3
|
+
|
|
4
|
+
export function watermarkApiPermissionBindings(): ApiPermissionBinding[] {
|
|
5
|
+
return [
|
|
6
|
+
binding(
|
|
7
|
+
"GET",
|
|
8
|
+
"/api/platform/watermark-policy",
|
|
9
|
+
"system.watermark.read",
|
|
10
|
+
undefined,
|
|
11
|
+
true,
|
|
12
|
+
),
|
|
13
|
+
binding(
|
|
14
|
+
"GET",
|
|
15
|
+
"/api/system/settings/watermark",
|
|
16
|
+
"system.watermark.read",
|
|
17
|
+
"system.watermark",
|
|
18
|
+
),
|
|
19
|
+
binding(
|
|
20
|
+
"PUT",
|
|
21
|
+
"/api/system/settings/watermark",
|
|
22
|
+
"system.watermark.manage",
|
|
23
|
+
"system.watermark",
|
|
24
|
+
),
|
|
25
|
+
];
|
|
26
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { systemFoundationModule } from "./system-modules.js";
|
|
3
|
+
|
|
4
|
+
describe("水印策略能力注册", () => {
|
|
5
|
+
test("注册公开只读入口和受控管理接口", () => {
|
|
6
|
+
const bindings = systemFoundationModule().apiPermissions;
|
|
7
|
+
|
|
8
|
+
expect(bindings).toEqual(
|
|
9
|
+
expect.arrayContaining([
|
|
10
|
+
expect.objectContaining({
|
|
11
|
+
method: "GET",
|
|
12
|
+
path: "/api/platform/watermark-policy",
|
|
13
|
+
permissionKey: "system.watermark.read",
|
|
14
|
+
anonymous: true,
|
|
15
|
+
}),
|
|
16
|
+
expect.objectContaining({
|
|
17
|
+
method: "GET",
|
|
18
|
+
path: "/api/system/settings/watermark",
|
|
19
|
+
permissionKey: "system.watermark.read",
|
|
20
|
+
featureKey: "system.watermark",
|
|
21
|
+
}),
|
|
22
|
+
expect.objectContaining({
|
|
23
|
+
method: "PUT",
|
|
24
|
+
path: "/api/system/settings/watermark",
|
|
25
|
+
permissionKey: "system.watermark.manage",
|
|
26
|
+
featureKey: "system.watermark",
|
|
27
|
+
}),
|
|
28
|
+
]),
|
|
29
|
+
);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -3,3 +3,16 @@ export interface PlatformBrandingSettings {
|
|
|
3
3
|
logoUrl?: string;
|
|
4
4
|
description?: string;
|
|
5
5
|
}
|
|
6
|
+
|
|
7
|
+
export interface PlatformWatermarkPolicy {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
businessPagesEnabled: boolean;
|
|
10
|
+
customContent: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const DEFAULT_PLATFORM_WATERMARK_POLICY: Readonly<PlatformWatermarkPolicy> =
|
|
14
|
+
{
|
|
15
|
+
enabled: true,
|
|
16
|
+
businessPagesEnabled: false,
|
|
17
|
+
customContent: "",
|
|
18
|
+
};
|