@pixzle/core 0.0.18 → 0.0.20

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 (92) hide show
  1. package/dist/block-operations.cjs +146 -0
  2. package/dist/block-operations.d.cts +56 -0
  3. package/dist/block-operations.d.ts.map +1 -0
  4. package/dist/block-operations.js +20 -14
  5. package/dist/block-operations.js.map +1 -1
  6. package/dist/block-utils.cjs +86 -0
  7. package/dist/block-utils.d.cts +47 -0
  8. package/dist/block-utils.d.ts.map +1 -0
  9. package/dist/block-utils.js +14 -6
  10. package/dist/block-utils.js.map +1 -1
  11. package/dist/cjs/block-operations.d.ts +56 -0
  12. package/dist/cjs/block-operations.d.ts.map +1 -0
  13. package/dist/cjs/block-operations.js +146 -0
  14. package/dist/cjs/block-operations.js.map +1 -0
  15. package/dist/cjs/block-utils.d.ts +47 -0
  16. package/dist/cjs/block-utils.d.ts.map +1 -0
  17. package/dist/cjs/block-utils.js +86 -0
  18. package/dist/cjs/block-utils.js.map +1 -0
  19. package/dist/cjs/constants.d.ts +8 -0
  20. package/dist/cjs/constants.d.ts.map +1 -0
  21. package/dist/cjs/constants.js +11 -0
  22. package/dist/cjs/constants.js.map +1 -0
  23. package/dist/cjs/helpers.d.ts +45 -0
  24. package/dist/cjs/helpers.d.ts.map +1 -0
  25. package/dist/cjs/helpers.js +101 -0
  26. package/dist/cjs/helpers.js.map +1 -0
  27. package/dist/cjs/index.d.ts +8 -0
  28. package/dist/cjs/index.d.ts.map +1 -0
  29. package/dist/cjs/index.js +27 -0
  30. package/dist/cjs/index.js.map +1 -0
  31. package/dist/cjs/package.json +1 -0
  32. package/dist/cjs/types.d.ts +65 -0
  33. package/dist/cjs/types.d.ts.map +1 -0
  34. package/dist/cjs/types.js +3 -0
  35. package/dist/cjs/types.js.map +1 -0
  36. package/dist/cjs/validators.d.ts +16 -0
  37. package/dist/cjs/validators.d.ts.map +1 -0
  38. package/dist/cjs/validators.js +48 -0
  39. package/dist/cjs/validators.js.map +1 -0
  40. package/dist/constants.cjs +11 -0
  41. package/dist/constants.d.cts +8 -0
  42. package/dist/constants.d.ts.map +1 -0
  43. package/dist/constants.js +5 -2
  44. package/dist/constants.js.map +1 -1
  45. package/dist/esm/block-operations.d.ts +56 -0
  46. package/dist/esm/block-operations.d.ts.map +1 -0
  47. package/dist/esm/block-operations.js +140 -0
  48. package/dist/esm/block-operations.js.map +1 -0
  49. package/dist/esm/block-utils.d.ts +47 -0
  50. package/dist/esm/block-utils.d.ts.map +1 -0
  51. package/dist/esm/block-utils.js +78 -0
  52. package/dist/esm/block-utils.js.map +1 -0
  53. package/dist/esm/constants.d.ts +8 -0
  54. package/dist/esm/constants.d.ts.map +1 -0
  55. package/dist/esm/constants.js +8 -0
  56. package/dist/esm/constants.js.map +1 -0
  57. package/dist/esm/helpers.d.ts +45 -0
  58. package/dist/esm/helpers.d.ts.map +1 -0
  59. package/dist/esm/helpers.js +93 -0
  60. package/dist/esm/helpers.js.map +1 -0
  61. package/dist/esm/index.d.ts +8 -0
  62. package/dist/esm/index.d.ts.map +1 -0
  63. package/dist/esm/index.js +9 -0
  64. package/dist/esm/index.js.map +1 -0
  65. package/dist/esm/types.d.ts +65 -0
  66. package/dist/esm/types.d.ts.map +1 -0
  67. package/dist/esm/types.js +2 -0
  68. package/dist/esm/types.js.map +1 -0
  69. package/dist/esm/validators.d.ts +16 -0
  70. package/dist/esm/validators.d.ts.map +1 -0
  71. package/dist/esm/validators.js +44 -0
  72. package/dist/esm/validators.js.map +1 -0
  73. package/dist/helpers.cjs +101 -0
  74. package/dist/helpers.d.cts +45 -0
  75. package/dist/helpers.d.ts.map +1 -0
  76. package/dist/helpers.js +14 -6
  77. package/dist/helpers.js.map +1 -1
  78. package/dist/index.cjs +27 -0
  79. package/dist/index.d.cts +8 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +25 -7
  82. package/dist/index.js.map +1 -1
  83. package/dist/types.cjs +3 -0
  84. package/dist/types.d.cts +65 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +2 -1
  87. package/dist/validators.cjs +48 -0
  88. package/dist/validators.d.cts +16 -0
  89. package/dist/validators.d.ts.map +1 -0
  90. package/dist/validators.js +8 -4
  91. package/dist/validators.js.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ export interface ShuffleOptions {
2
+ /** Image paths (e.g., ["image1.png", "image2.png"]) */
3
+ imagePaths: string[];
4
+ /** Fragmentation config */
5
+ config?: FragmentationConfig;
6
+ /** Output directory (e.g., "./output/fragments") */
7
+ outputDir: string;
8
+ }
9
+ export interface RestoreOptions {
10
+ /** Image paths (e.g., ["fragment1.png", "fragment2.png"]) */
11
+ imagePaths: string[];
12
+ /** Manifest path (e.g., "./output/fragments/manifest.json") */
13
+ manifestPath: string;
14
+ /** Output directory (e.g., "./output/restored") */
15
+ outputDir: string;
16
+ }
17
+ export interface FragmentationConfig {
18
+ /** Pixel block size (e.g., 10x10 to 10) */
19
+ blockSize?: number;
20
+ /** Prefix for fragment files (optional, default: "fragment") */
21
+ prefix?: string;
22
+ /** Random seed (auto-generated if not specified) */
23
+ seed?: number | string;
24
+ /** Preserve original file name (optional, default: false) */
25
+ preserveName?: boolean;
26
+ /** Shuffle blocks across all images instead of within each image independently (optional, default: false) */
27
+ crossImageShuffle?: boolean;
28
+ }
29
+ /**
30
+ * Information about the image before fragmentation.
31
+ * This includes dimensions, channels, and block counts.
32
+ */
33
+ export interface ImageInfo {
34
+ /** Width */
35
+ w: number;
36
+ /** Height */
37
+ h: number;
38
+ /** Number of channels */
39
+ c: number;
40
+ /** Number of blocks X */
41
+ x: number;
42
+ /** Number of blocks Y */
43
+ y: number;
44
+ /** Original file name in base64 encoding (optional) */
45
+ name?: string;
46
+ }
47
+ export interface ManifestData {
48
+ /** UUID */
49
+ id: string;
50
+ /** Version */
51
+ version: string;
52
+ /** Timestamp */
53
+ timestamp: string;
54
+ /** Config */
55
+ config: Required<FragmentationConfig>;
56
+ /** Image information */
57
+ images: ImageInfo[];
58
+ }
59
+ export interface FragmentationResult {
60
+ /** Manifest data */
61
+ manifest: ManifestData;
62
+ /** Fragmented images */
63
+ fragmentedImages: Buffer[];
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6GAA6G;IAC7G,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACtC,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { ImageInfo, ManifestData } from "./types";
2
+ /**
3
+ * Validates that the number of fragment images matches the number of images in the manifest
4
+ * @param fragmentImages - Array of fragment images (file paths or buffers)
5
+ * @param manifest - The manifest data containing image information
6
+ * @throws {Error} When the counts don't match
7
+ */
8
+ export declare function validateFragmentImageCount(fragmentImages: (string | Buffer)[], manifest: ManifestData): void;
9
+ /**
10
+ * Validates that there are no duplicate file names in the image infos
11
+ * @param imageInfos - Array of image information objects
12
+ * @param preserveName - Whether name preservation is enabled
13
+ * @throws {Error} When duplicate file names are detected
14
+ */
15
+ export declare function validateFileNames(imageInfos: ImageInfo[], preserveName: boolean): void;
16
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CASN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,EAAE,OAAO,GACpB,IAAI,CAuBN"}
@@ -0,0 +1,44 @@
1
+ import { decodeFileName } from "./helpers";
2
+ /**
3
+ * Validates that the number of fragment images matches the number of images in the manifest
4
+ * @param fragmentImages - Array of fragment images (file paths or buffers)
5
+ * @param manifest - The manifest data containing image information
6
+ * @throws {Error} When the counts don't match
7
+ */
8
+ export function validateFragmentImageCount(fragmentImages, manifest) {
9
+ const manifestImageCount = manifest.images.length;
10
+ const fragmentImageCount = fragmentImages.length;
11
+ if (manifestImageCount !== fragmentImageCount) {
12
+ throw new Error(`Fragment image count mismatch: expected ${manifestImageCount} but got ${fragmentImageCount}`);
13
+ }
14
+ }
15
+ /**
16
+ * Validates that there are no duplicate file names in the image infos
17
+ * @param imageInfos - Array of image information objects
18
+ * @param preserveName - Whether name preservation is enabled
19
+ * @throws {Error} When duplicate file names are detected
20
+ */
21
+ export function validateFileNames(imageInfos, preserveName) {
22
+ if (!preserveName || imageInfos.length <= 1) {
23
+ return;
24
+ }
25
+ const nameSet = new Set();
26
+ for (const info of imageInfos) {
27
+ if (info.name !== undefined) {
28
+ // Decode base64 to get original name for comparison
29
+ let decodedName;
30
+ try {
31
+ decodedName = decodeFileName(info.name);
32
+ }
33
+ catch {
34
+ // If decoding fails, treat as already decoded (backward compatibility)
35
+ decodedName = info.name;
36
+ }
37
+ if (nameSet.has(decodedName)) {
38
+ throw new Error(`Duplicate file name detected: ${decodedName}`);
39
+ }
40
+ nameSet.add(decodedName);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAAmC,EACnC,QAAsB;IAEtB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAClD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IAEjD,IAAI,kBAAkB,KAAK,kBAAkB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,2CAA2C,kBAAkB,YAAY,kBAAkB,EAAE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAuB,EACvB,YAAqB;IAErB,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,oDAAoD;YACpD,IAAI,WAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;gBACvE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeFileName = encodeFileName;
4
+ exports.decodeFileName = decodeFileName;
5
+ exports.generateFileName = generateFileName;
6
+ exports.generateFragmentFileName = generateFragmentFileName;
7
+ exports.generateRestoredFileName = generateRestoredFileName;
8
+ exports.generateRestoredOriginalFileName = generateRestoredOriginalFileName;
9
+ /**
10
+ * Encode file name to base64 for safe storage (cross-platform)
11
+ * @param name - Original file name
12
+ * @returns Base64 encoded file name
13
+ */
14
+ function encodeFileName(name) {
15
+ // Use TextEncoder for UTF-8 encoding (available in both browser and Node.js)
16
+ const encoder = new TextEncoder();
17
+ const bytes = encoder.encode(name);
18
+ // Convert bytes to binary string for btoa (cross-platform)
19
+ // Use loop to avoid stack overflow with large arrays
20
+ let binaryString = "";
21
+ for (let i = 0; i < bytes.length; i++) {
22
+ const byte = bytes[i];
23
+ binaryString += String.fromCharCode(byte);
24
+ }
25
+ return btoa(binaryString);
26
+ }
27
+ /**
28
+ * Decode file name from base64 (cross-platform)
29
+ * @param encodedName - Base64 encoded file name
30
+ * @returns Decoded original file name
31
+ */
32
+ function decodeFileName(encodedName) {
33
+ // Use atob for base64 decoding (cross-platform)
34
+ const binaryString = atob(encodedName);
35
+ // Convert binary string to bytes
36
+ const bytes = Uint8Array.from(binaryString, (c) => c.charCodeAt(0));
37
+ // Use TextDecoder for UTF-8 decoding (available in both browser and Node.js)
38
+ const decoder = new TextDecoder();
39
+ return decoder.decode(bytes);
40
+ }
41
+ /**
42
+ * Generate a file name with prefix, 1-based zero-padded index, and extension
43
+ * @param manifest - Manifest data
44
+ * @param index - Index number (0-based, but output is 1-based)
45
+ * @param options - Options for the file name
46
+ * @param options.isFragmented - Whether the fragment is fragmented
47
+ * @returns File name (e.g., img_1.png.enc)
48
+ */
49
+ function generateFileName(manifest, index, options = {
50
+ isFragmented: false,
51
+ }) {
52
+ const prefix = manifest.config.prefix;
53
+ const totalLength = manifest.images.length;
54
+ const extension = "png";
55
+ const numDigits = String(totalLength).length;
56
+ const paddedIndex = String(index + 1).padStart(numDigits, "0");
57
+ const filenameSuffix = options.isFragmented ? "_fragmented" : "";
58
+ const filename = `${prefix}_${paddedIndex}${filenameSuffix}`;
59
+ return `${filename}.${extension}`;
60
+ }
61
+ /**
62
+ * Generate a fragment file name
63
+ * @param manifest - Manifest data
64
+ * @param index - Index number (0-based, but output is 1-based)
65
+ * @returns Fragment file name (e.g., img_1_fragmented.png)
66
+ */
67
+ function generateFragmentFileName(manifest, index) {
68
+ return generateFileName(manifest, index, {
69
+ isFragmented: true,
70
+ });
71
+ }
72
+ /**
73
+ * Generate a restored file name
74
+ * @param manifest - Manifest data
75
+ * @param index - Index number (0-based, but output is 1-based)
76
+ * @returns Restored file name (e.g., img_1.png)
77
+ */
78
+ function generateRestoredFileName(manifest, index) {
79
+ return generateFileName(manifest, index, {
80
+ isFragmented: false,
81
+ });
82
+ }
83
+ /**
84
+ * Generate a restored original file name
85
+ * @param imageInfo - Image information
86
+ * @returns Restored original file name
87
+ */
88
+ function generateRestoredOriginalFileName(imageInfo) {
89
+ if (!imageInfo.name) {
90
+ return undefined;
91
+ }
92
+ try {
93
+ const decodedName = decodeFileName(imageInfo.name);
94
+ return decodedName ? `${decodedName}.png` : undefined;
95
+ }
96
+ catch {
97
+ // Fallback: if decoding fails, treat as already decoded (backward compatibility)
98
+ return `${imageInfo.name}.png`;
99
+ }
100
+ }
101
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1,45 @@
1
+ import type { ManifestData } from "./types";
2
+ /**
3
+ * Encode file name to base64 for safe storage (cross-platform)
4
+ * @param name - Original file name
5
+ * @returns Base64 encoded file name
6
+ */
7
+ export declare function encodeFileName(name: string): string;
8
+ /**
9
+ * Decode file name from base64 (cross-platform)
10
+ * @param encodedName - Base64 encoded file name
11
+ * @returns Decoded original file name
12
+ */
13
+ export declare function decodeFileName(encodedName: string): string;
14
+ /**
15
+ * Generate a file name with prefix, 1-based zero-padded index, and extension
16
+ * @param manifest - Manifest data
17
+ * @param index - Index number (0-based, but output is 1-based)
18
+ * @param options - Options for the file name
19
+ * @param options.isFragmented - Whether the fragment is fragmented
20
+ * @returns File name (e.g., img_1.png.enc)
21
+ */
22
+ export declare function generateFileName(manifest: ManifestData, index: number, options?: {
23
+ isFragmented: boolean;
24
+ }): string;
25
+ /**
26
+ * Generate a fragment file name
27
+ * @param manifest - Manifest data
28
+ * @param index - Index number (0-based, but output is 1-based)
29
+ * @returns Fragment file name (e.g., img_1_fragmented.png)
30
+ */
31
+ export declare function generateFragmentFileName(manifest: ManifestData, index: number): string;
32
+ /**
33
+ * Generate a restored file name
34
+ * @param manifest - Manifest data
35
+ * @param index - Index number (0-based, but output is 1-based)
36
+ * @returns Restored file name (e.g., img_1.png)
37
+ */
38
+ export declare function generateRestoredFileName(manifest: ManifestData, index: number): string;
39
+ /**
40
+ * Generate a restored original file name
41
+ * @param imageInfo - Image information
42
+ * @returns Restored original file name
43
+ */
44
+ export declare function generateRestoredOriginalFileName(imageInfo: ManifestData["images"][number]): string | undefined;
45
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,YAAY,EAAE,OAAO,CAAC;CAGvB,GACA,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,GACZ,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,GACZ,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GACxC,MAAM,GAAG,SAAS,CAWpB"}
package/dist/helpers.js CHANGED
@@ -1,9 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeFileName = encodeFileName;
4
+ exports.decodeFileName = decodeFileName;
5
+ exports.generateFileName = generateFileName;
6
+ exports.generateFragmentFileName = generateFragmentFileName;
7
+ exports.generateRestoredFileName = generateRestoredFileName;
8
+ exports.generateRestoredOriginalFileName = generateRestoredOriginalFileName;
1
9
  /**
2
10
  * Encode file name to base64 for safe storage (cross-platform)
3
11
  * @param name - Original file name
4
12
  * @returns Base64 encoded file name
5
13
  */
6
- export function encodeFileName(name) {
14
+ function encodeFileName(name) {
7
15
  // Use TextEncoder for UTF-8 encoding (available in both browser and Node.js)
8
16
  const encoder = new TextEncoder();
9
17
  const bytes = encoder.encode(name);
@@ -21,7 +29,7 @@ export function encodeFileName(name) {
21
29
  * @param encodedName - Base64 encoded file name
22
30
  * @returns Decoded original file name
23
31
  */
24
- export function decodeFileName(encodedName) {
32
+ function decodeFileName(encodedName) {
25
33
  // Use atob for base64 decoding (cross-platform)
26
34
  const binaryString = atob(encodedName);
27
35
  // Convert binary string to bytes
@@ -38,7 +46,7 @@ export function decodeFileName(encodedName) {
38
46
  * @param options.isFragmented - Whether the fragment is fragmented
39
47
  * @returns File name (e.g., img_1.png.enc)
40
48
  */
41
- export function generateFileName(manifest, index, options = {
49
+ function generateFileName(manifest, index, options = {
42
50
  isFragmented: false,
43
51
  }) {
44
52
  const prefix = manifest.config.prefix;
@@ -56,7 +64,7 @@ export function generateFileName(manifest, index, options = {
56
64
  * @param index - Index number (0-based, but output is 1-based)
57
65
  * @returns Fragment file name (e.g., img_1_fragmented.png)
58
66
  */
59
- export function generateFragmentFileName(manifest, index) {
67
+ function generateFragmentFileName(manifest, index) {
60
68
  return generateFileName(manifest, index, {
61
69
  isFragmented: true,
62
70
  });
@@ -67,7 +75,7 @@ export function generateFragmentFileName(manifest, index) {
67
75
  * @param index - Index number (0-based, but output is 1-based)
68
76
  * @returns Restored file name (e.g., img_1.png)
69
77
  */
70
- export function generateRestoredFileName(manifest, index) {
78
+ function generateRestoredFileName(manifest, index) {
71
79
  return generateFileName(manifest, index, {
72
80
  isFragmented: false,
73
81
  });
@@ -77,7 +85,7 @@ export function generateRestoredFileName(manifest, index) {
77
85
  * @param imageInfo - Image information
78
86
  * @returns Restored original file name
79
87
  */
80
- export function generateRestoredOriginalFileName(imageInfo) {
88
+ function generateRestoredOriginalFileName(imageInfo) {
81
89
  if (!imageInfo.name) {
82
90
  return undefined;
83
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DEFAULT_FRAGMENTATION_CONFIG = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./constants"), exports);
20
+ __exportStar(require("./helpers"), exports);
21
+ __exportStar(require("./block-utils"), exports);
22
+ __exportStar(require("./block-operations"), exports);
23
+ __exportStar(require("./validators"), exports);
24
+ // Re-export constants with old name for backward compatibility
25
+ var constants_1 = require("./constants");
26
+ Object.defineProperty(exports, "DEFAULT_FRAGMENTATION_CONFIG", { enumerable: true, get: function () { return constants_1.DEFAULT_FRAGMENTATION_CONFIG; } });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,8 @@
1
+ export * from "./types";
2
+ export * from "./constants";
3
+ export * from "./helpers";
4
+ export * from "./block-utils";
5
+ export * from "./block-operations";
6
+ export * from "./validators";
7
+ export { DEFAULT_FRAGMENTATION_CONFIG } from "./constants";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,27 @@
1
- export * from "./types";
2
- export * from "./constants";
3
- export * from "./helpers";
4
- export * from "./block-utils";
5
- export * from "./block-operations";
6
- export * from "./validators";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DEFAULT_FRAGMENTATION_CONFIG = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./constants"), exports);
20
+ __exportStar(require("./helpers"), exports);
21
+ __exportStar(require("./block-utils"), exports);
22
+ __exportStar(require("./block-operations"), exports);
23
+ __exportStar(require("./validators"), exports);
7
24
  // Re-export constants with old name for backward compatibility
8
- export { DEFAULT_FRAGMENTATION_CONFIG } from "./constants";
25
+ var constants_1 = require("./constants");
26
+ Object.defineProperty(exports, "DEFAULT_FRAGMENTATION_CONFIG", { enumerable: true, get: function () { return constants_1.DEFAULT_FRAGMENTATION_CONFIG; } });
9
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAE7B,+DAA+D;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B;AAC1B,gDAA8B;AAC9B,qDAAmC;AACnC,+CAA6B;AAE7B,+DAA+D;AAC/D,yCAA2D;AAAlD,yHAAA,4BAA4B,OAAA"}
package/dist/types.cjs ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,65 @@
1
+ export interface ShuffleOptions {
2
+ /** Image paths (e.g., ["image1.png", "image2.png"]) */
3
+ imagePaths: string[];
4
+ /** Fragmentation config */
5
+ config?: FragmentationConfig;
6
+ /** Output directory (e.g., "./output/fragments") */
7
+ outputDir: string;
8
+ }
9
+ export interface RestoreOptions {
10
+ /** Image paths (e.g., ["fragment1.png", "fragment2.png"]) */
11
+ imagePaths: string[];
12
+ /** Manifest path (e.g., "./output/fragments/manifest.json") */
13
+ manifestPath: string;
14
+ /** Output directory (e.g., "./output/restored") */
15
+ outputDir: string;
16
+ }
17
+ export interface FragmentationConfig {
18
+ /** Pixel block size (e.g., 10x10 to 10) */
19
+ blockSize?: number;
20
+ /** Prefix for fragment files (optional, default: "fragment") */
21
+ prefix?: string;
22
+ /** Random seed (auto-generated if not specified) */
23
+ seed?: number | string;
24
+ /** Preserve original file name (optional, default: false) */
25
+ preserveName?: boolean;
26
+ /** Shuffle blocks across all images instead of within each image independently (optional, default: false) */
27
+ crossImageShuffle?: boolean;
28
+ }
29
+ /**
30
+ * Information about the image before fragmentation.
31
+ * This includes dimensions, channels, and block counts.
32
+ */
33
+ export interface ImageInfo {
34
+ /** Width */
35
+ w: number;
36
+ /** Height */
37
+ h: number;
38
+ /** Number of channels */
39
+ c: number;
40
+ /** Number of blocks X */
41
+ x: number;
42
+ /** Number of blocks Y */
43
+ y: number;
44
+ /** Original file name in base64 encoding (optional) */
45
+ name?: string;
46
+ }
47
+ export interface ManifestData {
48
+ /** UUID */
49
+ id: string;
50
+ /** Version */
51
+ version: string;
52
+ /** Timestamp */
53
+ timestamp: string;
54
+ /** Config */
55
+ config: Required<FragmentationConfig>;
56
+ /** Image information */
57
+ images: ImageInfo[];
58
+ }
59
+ export interface FragmentationResult {
60
+ /** Manifest data */
61
+ manifest: ManifestData;
62
+ /** Fragmented images */
63
+ fragmentedImages: Buffer[];
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6GAA6G;IAC7G,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACtC,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B"}
package/dist/types.js CHANGED
@@ -1,2 +1,3 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
2
3
  //# sourceMappingURL=types.js.map
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFragmentImageCount = validateFragmentImageCount;
4
+ exports.validateFileNames = validateFileNames;
5
+ const helpers_1 = require("./helpers");
6
+ /**
7
+ * Validates that the number of fragment images matches the number of images in the manifest
8
+ * @param fragmentImages - Array of fragment images (file paths or buffers)
9
+ * @param manifest - The manifest data containing image information
10
+ * @throws {Error} When the counts don't match
11
+ */
12
+ function validateFragmentImageCount(fragmentImages, manifest) {
13
+ const manifestImageCount = manifest.images.length;
14
+ const fragmentImageCount = fragmentImages.length;
15
+ if (manifestImageCount !== fragmentImageCount) {
16
+ throw new Error(`Fragment image count mismatch: expected ${manifestImageCount} but got ${fragmentImageCount}`);
17
+ }
18
+ }
19
+ /**
20
+ * Validates that there are no duplicate file names in the image infos
21
+ * @param imageInfos - Array of image information objects
22
+ * @param preserveName - Whether name preservation is enabled
23
+ * @throws {Error} When duplicate file names are detected
24
+ */
25
+ function validateFileNames(imageInfos, preserveName) {
26
+ if (!preserveName || imageInfos.length <= 1) {
27
+ return;
28
+ }
29
+ const nameSet = new Set();
30
+ for (const info of imageInfos) {
31
+ if (info.name !== undefined) {
32
+ // Decode base64 to get original name for comparison
33
+ let decodedName;
34
+ try {
35
+ decodedName = (0, helpers_1.decodeFileName)(info.name);
36
+ }
37
+ catch {
38
+ // If decoding fails, treat as already decoded (backward compatibility)
39
+ decodedName = info.name;
40
+ }
41
+ if (nameSet.has(decodedName)) {
42
+ throw new Error(`Duplicate file name detected: ${decodedName}`);
43
+ }
44
+ nameSet.add(decodedName);
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1,16 @@
1
+ import type { ImageInfo, ManifestData } from "./types";
2
+ /**
3
+ * Validates that the number of fragment images matches the number of images in the manifest
4
+ * @param fragmentImages - Array of fragment images (file paths or buffers)
5
+ * @param manifest - The manifest data containing image information
6
+ * @throws {Error} When the counts don't match
7
+ */
8
+ export declare function validateFragmentImageCount(fragmentImages: (string | Buffer)[], manifest: ManifestData): void;
9
+ /**
10
+ * Validates that there are no duplicate file names in the image infos
11
+ * @param imageInfos - Array of image information objects
12
+ * @param preserveName - Whether name preservation is enabled
13
+ * @throws {Error} When duplicate file names are detected
14
+ */
15
+ export declare function validateFileNames(imageInfos: ImageInfo[], preserveName: boolean): void;
16
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CASN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,EAAE,OAAO,GACpB,IAAI,CAuBN"}
@@ -1,11 +1,15 @@
1
- import { decodeFileName } from "./helpers";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFragmentImageCount = validateFragmentImageCount;
4
+ exports.validateFileNames = validateFileNames;
5
+ const helpers_1 = require("./helpers");
2
6
  /**
3
7
  * Validates that the number of fragment images matches the number of images in the manifest
4
8
  * @param fragmentImages - Array of fragment images (file paths or buffers)
5
9
  * @param manifest - The manifest data containing image information
6
10
  * @throws {Error} When the counts don't match
7
11
  */
8
- export function validateFragmentImageCount(fragmentImages, manifest) {
12
+ function validateFragmentImageCount(fragmentImages, manifest) {
9
13
  const manifestImageCount = manifest.images.length;
10
14
  const fragmentImageCount = fragmentImages.length;
11
15
  if (manifestImageCount !== fragmentImageCount) {
@@ -18,7 +22,7 @@ export function validateFragmentImageCount(fragmentImages, manifest) {
18
22
  * @param preserveName - Whether name preservation is enabled
19
23
  * @throws {Error} When duplicate file names are detected
20
24
  */
21
- export function validateFileNames(imageInfos, preserveName) {
25
+ function validateFileNames(imageInfos, preserveName) {
22
26
  if (!preserveName || imageInfos.length <= 1) {
23
27
  return;
24
28
  }
@@ -28,7 +32,7 @@ export function validateFileNames(imageInfos, preserveName) {
28
32
  // Decode base64 to get original name for comparison
29
33
  let decodedName;
30
34
  try {
31
- decodedName = decodeFileName(info.name);
35
+ decodedName = (0, helpers_1.decodeFileName)(info.name);
32
36
  }
33
37
  catch {
34
38
  // If decoding fails, treat as already decoded (backward compatibility)