@sealpixel/plugin-redact 1.0.0-rc.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.
- package/README.md +3 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { OperationBase, Rect, SourcePx } from '@sealpixel/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export type RedactMode = 'pixelate' | 'blur';
|
|
4
|
+
export type RedactRegion = {
|
|
5
|
+
kind: 'rect';
|
|
6
|
+
rect: Rect;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'path';
|
|
9
|
+
points: [number, number][];
|
|
10
|
+
};
|
|
11
|
+
export interface Redaction {
|
|
12
|
+
/** Stable id used by update and remove. */
|
|
13
|
+
id: string;
|
|
14
|
+
region: RedactRegion;
|
|
15
|
+
mode: RedactMode;
|
|
16
|
+
/** Pixelate cell size or blur diameter, in source pixels. */
|
|
17
|
+
amount: SourcePx;
|
|
18
|
+
}
|
|
19
|
+
export interface RedactDoc {
|
|
20
|
+
regions: Redaction[];
|
|
21
|
+
}
|
|
22
|
+
export interface RedactAddOp extends OperationBase<'redact.add'> {
|
|
23
|
+
region: RedactRegion;
|
|
24
|
+
mode: RedactMode;
|
|
25
|
+
amount: SourcePx;
|
|
26
|
+
/** Id of the new redaction. Defaults to the op id. */
|
|
27
|
+
regionId?: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface RedactUpdateOp extends OperationBase<'redact.update'> {
|
|
30
|
+
regionId: string;
|
|
31
|
+
region?: RedactRegion | undefined;
|
|
32
|
+
mode?: RedactMode | undefined;
|
|
33
|
+
amount?: SourcePx | undefined;
|
|
34
|
+
}
|
|
35
|
+
export interface RedactRemoveOp extends OperationBase<'redact.remove'> {
|
|
36
|
+
regionId: string;
|
|
37
|
+
}
|
|
38
|
+
export type RedactClearOp = OperationBase<'redact.clear'>;
|
|
39
|
+
declare module '@sealpixel/core' {
|
|
40
|
+
interface OperationRegistry {
|
|
41
|
+
'redact.add': RedactAddOp;
|
|
42
|
+
'redact.update': RedactUpdateOp;
|
|
43
|
+
'redact.remove': RedactRemoveOp;
|
|
44
|
+
'redact.clear': RedactClearOp;
|
|
45
|
+
}
|
|
46
|
+
interface DocumentRegistry {
|
|
47
|
+
redact: RedactDoc;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export declare const RegionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
51
|
+
kind: z.ZodLiteral<"rect">;
|
|
52
|
+
rect: z.ZodObject<{
|
|
53
|
+
x: z.ZodNumber;
|
|
54
|
+
y: z.ZodNumber;
|
|
55
|
+
width: z.ZodNumber;
|
|
56
|
+
height: z.ZodNumber;
|
|
57
|
+
}, z.core.$strict>;
|
|
58
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
59
|
+
kind: z.ZodLiteral<"path">;
|
|
60
|
+
points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
61
|
+
}, z.core.$strict>], "kind">;
|
|
62
|
+
export declare const redactAdd: import("@sealpixel/core").OperationDef<RedactDoc, RedactAddOp>;
|
|
63
|
+
export declare const redactUpdate: import("@sealpixel/core").OperationDef<RedactDoc, RedactUpdateOp>;
|
|
64
|
+
export declare const redactRemove: import("@sealpixel/core").OperationDef<RedactDoc, RedactRemoveOp>;
|
|
65
|
+
export declare const redactClear: import("@sealpixel/core").OperationDef<RedactDoc, RedactClearOp>;
|
|
66
|
+
export interface RedactOptions {
|
|
67
|
+
/** Redaction modes offered. */
|
|
68
|
+
modes: RedactMode[];
|
|
69
|
+
/** Region shapes the user may draw. */
|
|
70
|
+
shapes: ('rect' | 'path')[];
|
|
71
|
+
defaultMode: RedactMode;
|
|
72
|
+
/** Pixel cell size or blur radius a new region starts with, in source px. */
|
|
73
|
+
defaultAmount: number;
|
|
74
|
+
amountRange: {
|
|
75
|
+
min: number;
|
|
76
|
+
max: number;
|
|
77
|
+
step: number;
|
|
78
|
+
};
|
|
79
|
+
/** Enforce modes, shapes and amount range in logs (client and server). */
|
|
80
|
+
enforce: boolean;
|
|
81
|
+
}
|
|
82
|
+
export declare const RedactOptionsSchema: z.ZodObject<{
|
|
83
|
+
modes: z.ZodArray<z.ZodEnum<{
|
|
84
|
+
pixelate: "pixelate";
|
|
85
|
+
blur: "blur";
|
|
86
|
+
}>>;
|
|
87
|
+
shapes: z.ZodArray<z.ZodEnum<{
|
|
88
|
+
rect: "rect";
|
|
89
|
+
path: "path";
|
|
90
|
+
}>>;
|
|
91
|
+
defaultMode: z.ZodEnum<{
|
|
92
|
+
pixelate: "pixelate";
|
|
93
|
+
blur: "blur";
|
|
94
|
+
}>;
|
|
95
|
+
defaultAmount: z.ZodNumber;
|
|
96
|
+
amountRange: z.ZodObject<{
|
|
97
|
+
min: z.ZodNumber;
|
|
98
|
+
max: z.ZodNumber;
|
|
99
|
+
step: z.ZodNumber;
|
|
100
|
+
}, z.core.$strict>;
|
|
101
|
+
enforce: z.ZodBoolean;
|
|
102
|
+
}, z.core.$strict>;
|
|
103
|
+
export declare const REDACT_DEFAULT_OPTIONS: RedactOptions;
|
|
104
|
+
export declare const redactPlugin: import("@sealpixel/plugin-sdk").ConfigurablePlugin<"redact", RedactDoc, RedactOptions>;
|
|
105
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa,CAAC,YAAY,CAAC;IAC9D,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AACD,MAAM,WAAW,cAAe,SAAQ,aAAa,CAAC,eAAe,CAAC;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC/B;AACD,MAAM,WAAW,cAAe,SAAQ,aAAa,CAAC,eAAe,CAAC;IACpE,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AAE1D,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,iBAAiB;QACzB,YAAY,EAAE,WAAW,CAAC;QAC1B,eAAe,EAAE,cAAc,CAAC;QAChC,eAAe,EAAE,cAAc,CAAC;QAChC,cAAc,EAAE,aAAa,CAAC;KAC/B;IACD,UAAU,gBAAgB;QACxB,MAAM,EAAE,SAAS,CAAC;KACnB;CACF;AAMD,eAAO,MAAM,YAAY;;;;;;;;;;;4BAWvB,CAAC;AAKH,eAAO,MAAM,SAAS,gEAkBpB,CAAC;AAEH,eAAO,MAAM,YAAY,mEAwBvB,CAAC;AAEH,eAAO,MAAM,YAAY,mEAMvB,CAAC;AAEH,eAAO,MAAM,WAAW,kEAItB,CAAC;AAEH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,uCAAuC;IACvC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B,WAAW,EAAE,UAAU,CAAC;IACxB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;kBAiB7B,CAAC;AAEJ,eAAO,MAAM,sBAAsB,EAAE,aAOpC,CAAC;AAEF,eAAO,MAAM,YAAY,wFAsCvB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { defineOperation, definePlugin } from '@sealpixel/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const unit = z.number().min(0).max(1);
|
|
4
|
+
const RectSchema = z
|
|
5
|
+
.object({ x: unit, y: unit, width: z.number().gt(0).max(1), height: z.number().gt(0).max(1) })
|
|
6
|
+
.strict();
|
|
7
|
+
export const RegionSchema = z.discriminatedUnion('kind', [
|
|
8
|
+
z.object({ kind: z.literal('rect'), rect: RectSchema }).strict(),
|
|
9
|
+
z
|
|
10
|
+
.object({
|
|
11
|
+
kind: z.literal('path'),
|
|
12
|
+
points: z
|
|
13
|
+
.array(z.tuple([unit, unit]))
|
|
14
|
+
.min(3)
|
|
15
|
+
.max(2000),
|
|
16
|
+
})
|
|
17
|
+
.strict(),
|
|
18
|
+
]);
|
|
19
|
+
const ModeSchema = z.enum(['pixelate', 'blur']);
|
|
20
|
+
const AmountSchema = z.number().gt(0).max(4096);
|
|
21
|
+
const base = { id: z.string().min(1), at: z.number().optional() };
|
|
22
|
+
export const redactAdd = defineOperation({
|
|
23
|
+
type: 'redact.add',
|
|
24
|
+
schema: z
|
|
25
|
+
.object({
|
|
26
|
+
type: z.literal('redact.add'),
|
|
27
|
+
...base,
|
|
28
|
+
region: RegionSchema,
|
|
29
|
+
mode: ModeSchema,
|
|
30
|
+
amount: AmountSchema,
|
|
31
|
+
regionId: z.string().min(1).optional(),
|
|
32
|
+
})
|
|
33
|
+
.strict(),
|
|
34
|
+
reduce: (slice, op) => ({
|
|
35
|
+
regions: [
|
|
36
|
+
...slice.regions.filter((r) => r.id !== (op.regionId ?? op.id)),
|
|
37
|
+
{ id: op.regionId ?? op.id, region: op.region, mode: op.mode, amount: op.amount },
|
|
38
|
+
],
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
export const redactUpdate = defineOperation({
|
|
42
|
+
type: 'redact.update',
|
|
43
|
+
schema: z
|
|
44
|
+
.object({
|
|
45
|
+
type: z.literal('redact.update'),
|
|
46
|
+
...base,
|
|
47
|
+
regionId: z.string().min(1),
|
|
48
|
+
region: RegionSchema.optional(),
|
|
49
|
+
mode: ModeSchema.optional(),
|
|
50
|
+
amount: AmountSchema.optional(),
|
|
51
|
+
})
|
|
52
|
+
.strict(),
|
|
53
|
+
reduce: (slice, op) => ({
|
|
54
|
+
regions: slice.regions.map((r) => r.id === op.regionId
|
|
55
|
+
? {
|
|
56
|
+
...r,
|
|
57
|
+
region: op.region ?? r.region,
|
|
58
|
+
mode: op.mode ?? r.mode,
|
|
59
|
+
amount: op.amount ?? r.amount,
|
|
60
|
+
}
|
|
61
|
+
: r),
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
export const redactRemove = defineOperation({
|
|
65
|
+
type: 'redact.remove',
|
|
66
|
+
schema: z
|
|
67
|
+
.object({ type: z.literal('redact.remove'), ...base, regionId: z.string().min(1) })
|
|
68
|
+
.strict(),
|
|
69
|
+
reduce: (slice, op) => ({ regions: slice.regions.filter((r) => r.id !== op.regionId) }),
|
|
70
|
+
});
|
|
71
|
+
export const redactClear = defineOperation({
|
|
72
|
+
type: 'redact.clear',
|
|
73
|
+
schema: z.object({ type: z.literal('redact.clear'), ...base }).strict(),
|
|
74
|
+
reduce: () => ({ regions: [] }),
|
|
75
|
+
});
|
|
76
|
+
export const RedactOptionsSchema = z
|
|
77
|
+
.object({
|
|
78
|
+
modes: z.array(ModeSchema).min(1),
|
|
79
|
+
shapes: z.array(z.enum(['rect', 'path'])).min(1),
|
|
80
|
+
defaultMode: ModeSchema,
|
|
81
|
+
defaultAmount: AmountSchema,
|
|
82
|
+
amountRange: z
|
|
83
|
+
.object({ min: AmountSchema, max: AmountSchema, step: z.number().positive() })
|
|
84
|
+
.strict()
|
|
85
|
+
.refine((r) => r.min < r.max, 'min must be below max'),
|
|
86
|
+
enforce: z.boolean(),
|
|
87
|
+
})
|
|
88
|
+
.strict()
|
|
89
|
+
.refine((o) => o.modes.includes(o.defaultMode), 'defaultMode must be one of modes')
|
|
90
|
+
.refine((o) => o.defaultAmount >= o.amountRange.min && o.defaultAmount <= o.amountRange.max, 'defaultAmount must lie within amountRange');
|
|
91
|
+
export const REDACT_DEFAULT_OPTIONS = {
|
|
92
|
+
modes: ['pixelate', 'blur'],
|
|
93
|
+
shapes: ['rect', 'path'],
|
|
94
|
+
defaultMode: 'pixelate',
|
|
95
|
+
defaultAmount: 12,
|
|
96
|
+
amountRange: { min: 2, max: 128, step: 1 },
|
|
97
|
+
enforce: false,
|
|
98
|
+
};
|
|
99
|
+
export const redactPlugin = definePlugin({
|
|
100
|
+
id: 'redact',
|
|
101
|
+
version: 1,
|
|
102
|
+
operations: [redactAdd, redactUpdate, redactRemove, redactClear],
|
|
103
|
+
initialDocument: { regions: [] },
|
|
104
|
+
stage: { name: 'redact', order: 200 },
|
|
105
|
+
toPlan: (doc) => doc.regions.length === 0
|
|
106
|
+
? null
|
|
107
|
+
: { regions: doc.regions.map((r) => ({ region: r.region, mode: r.mode, amount: r.amount })) },
|
|
108
|
+
kernel: { kind: 'core' },
|
|
109
|
+
options: {
|
|
110
|
+
schema: RedactOptionsSchema,
|
|
111
|
+
defaults: REDACT_DEFAULT_OPTIONS,
|
|
112
|
+
describe: {
|
|
113
|
+
modes: 'Redaction modes offered (pixelate, blur).',
|
|
114
|
+
shapes: 'Region shapes the user may draw (rect, path).',
|
|
115
|
+
defaultMode: 'Mode a new region starts with.',
|
|
116
|
+
defaultAmount: 'Cell size or blur radius a new region starts with, in source px.',
|
|
117
|
+
amountRange: 'Amounts accepted with enforce; the UI has no slider, new regions use defaultAmount.',
|
|
118
|
+
enforce: 'Reject regions with modes, shapes or amounts outside the options.',
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
validate: (op, { options }) => {
|
|
122
|
+
if ((op.type !== 'redact.add' && op.type !== 'redact.update') || !options.enforce)
|
|
123
|
+
return null;
|
|
124
|
+
const o = op;
|
|
125
|
+
if (o.mode !== undefined && !options.modes.includes(o.mode))
|
|
126
|
+
return `mode "${o.mode}" is not offered`;
|
|
127
|
+
if (o.region !== undefined && !options.shapes.includes(o.region.kind))
|
|
128
|
+
return `region shape "${o.region.kind}" is not offered`;
|
|
129
|
+
if (o.amount !== undefined &&
|
|
130
|
+
(o.amount < options.amountRange.min - 1e-9 || o.amount > options.amountRange.max + 1e-9))
|
|
131
|
+
return `amount must stay within ${options.amountRange.min}..${options.amountRange.max}`;
|
|
132
|
+
return null;
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sealpixel/plugin-redact",
|
|
3
|
+
"version": "1.0.0-rc.0",
|
|
4
|
+
"description": "Pixelate or blur rectangular and freeform regions. Built for anonymisation: cells snap to the source grid so proxy and full renders match.",
|
|
5
|
+
"license": "BUSL-1.1",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/9feet/sealpixel.git",
|
|
9
|
+
"directory": "packages/plugins/redact"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://docs.sealpixel.dev",
|
|
12
|
+
"bugs": "https://github.com/9feet/sealpixel/issues",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"sealpixel-plugin"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"default": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./package.json": "./package.json"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.build.json",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
|
+
"test": "vitest run"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@sealpixel/plugin-sdk": "workspace:*"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@sealpixel/core": "workspace:*",
|
|
39
|
+
"zod": "^4.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@sealpixel/config": "workspace:*",
|
|
43
|
+
"@sealpixel/core": "workspace:*",
|
|
44
|
+
"@types/node": "^24.0.0",
|
|
45
|
+
"typescript": "^5.9.0",
|
|
46
|
+
"vitest": "^4.0.0",
|
|
47
|
+
"zod": "^4.0.0"
|
|
48
|
+
}
|
|
49
|
+
}
|