@arikajs/storage 0.0.1

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/dist/Contracts/Filesystem.d.ts +48 -0
  4. package/dist/Contracts/Filesystem.d.ts.map +1 -0
  5. package/dist/Contracts/Filesystem.js +3 -0
  6. package/dist/Contracts/Filesystem.js.map +1 -0
  7. package/dist/Disk.d.ts +60 -0
  8. package/dist/Disk.d.ts.map +1 -0
  9. package/dist/Disk.js +119 -0
  10. package/dist/Disk.js.map +1 -0
  11. package/dist/Drivers/LocalDriver.d.ts +65 -0
  12. package/dist/Drivers/LocalDriver.d.ts.map +1 -0
  13. package/dist/Drivers/LocalDriver.js +156 -0
  14. package/dist/Drivers/LocalDriver.js.map +1 -0
  15. package/dist/Drivers/S3Driver.d.ts +67 -0
  16. package/dist/Drivers/S3Driver.d.ts.map +1 -0
  17. package/dist/Drivers/S3Driver.js +218 -0
  18. package/dist/Drivers/S3Driver.js.map +1 -0
  19. package/dist/Exceptions/FileNotFoundException.d.ts +4 -0
  20. package/dist/Exceptions/FileNotFoundException.d.ts.map +1 -0
  21. package/dist/Exceptions/FileNotFoundException.js +11 -0
  22. package/dist/Exceptions/FileNotFoundException.js.map +1 -0
  23. package/dist/StorageManager.d.ts +33 -0
  24. package/dist/StorageManager.d.ts.map +1 -0
  25. package/dist/StorageManager.js +87 -0
  26. package/dist/StorageManager.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +37 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/src/Contracts/Filesystem.d.ts +48 -0
  32. package/dist/src/Contracts/Filesystem.d.ts.map +1 -0
  33. package/dist/src/Contracts/Filesystem.js +3 -0
  34. package/dist/src/Contracts/Filesystem.js.map +1 -0
  35. package/dist/src/Disk.d.ts +60 -0
  36. package/dist/src/Disk.d.ts.map +1 -0
  37. package/dist/src/Disk.js +119 -0
  38. package/dist/src/Disk.js.map +1 -0
  39. package/dist/src/Drivers/LocalDriver.d.ts +65 -0
  40. package/dist/src/Drivers/LocalDriver.d.ts.map +1 -0
  41. package/dist/src/Drivers/LocalDriver.js +156 -0
  42. package/dist/src/Drivers/LocalDriver.js.map +1 -0
  43. package/dist/src/Drivers/S3Driver.d.ts +67 -0
  44. package/dist/src/Drivers/S3Driver.d.ts.map +1 -0
  45. package/dist/src/Drivers/S3Driver.js +218 -0
  46. package/dist/src/Drivers/S3Driver.js.map +1 -0
  47. package/dist/src/Exceptions/FileNotFoundException.d.ts +4 -0
  48. package/dist/src/Exceptions/FileNotFoundException.d.ts.map +1 -0
  49. package/dist/src/Exceptions/FileNotFoundException.js +11 -0
  50. package/dist/src/Exceptions/FileNotFoundException.js.map +1 -0
  51. package/dist/src/StorageManager.d.ts +33 -0
  52. package/dist/src/StorageManager.d.ts.map +1 -0
  53. package/dist/src/StorageManager.js +87 -0
  54. package/dist/src/StorageManager.js.map +1 -0
  55. package/dist/src/index.d.ts +9 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +37 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/tests/AdvancedStorage.test.d.ts +2 -0
  60. package/dist/tests/AdvancedStorage.test.d.ts.map +1 -0
  61. package/dist/tests/AdvancedStorage.test.js +121 -0
  62. package/dist/tests/AdvancedStorage.test.js.map +1 -0
  63. package/dist/tests/Storage.test.d.ts +2 -0
  64. package/dist/tests/Storage.test.d.ts.map +1 -0
  65. package/dist/tests/Storage.test.js +121 -0
  66. package/dist/tests/Storage.test.js.map +1 -0
  67. package/package.json +52 -0
@@ -0,0 +1,121 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const node_test_1 = require("node:test");
37
+ const assert = __importStar(require("node:assert"));
38
+ const fs = __importStar(require("fs/promises"));
39
+ const path = __importStar(require("path"));
40
+ const src_1 = require("../src");
41
+ (0, node_test_1.describe)('Arika Storage', () => {
42
+ const testRoot = path.join(process.cwd(), 'test-storage');
43
+ let storage;
44
+ (0, node_test_1.beforeEach)(async () => {
45
+ // Create test storage directory
46
+ await fs.mkdir(testRoot, { recursive: true });
47
+ // Configure storage
48
+ const config = {
49
+ default: 'local',
50
+ disks: {
51
+ local: {
52
+ driver: 'local',
53
+ root: testRoot
54
+ },
55
+ public: {
56
+ driver: 'local',
57
+ root: path.join(testRoot, 'public'),
58
+ url: '/storage'
59
+ }
60
+ }
61
+ };
62
+ storage = new src_1.StorageManager(config);
63
+ });
64
+ (0, node_test_1.afterEach)(async () => {
65
+ // Clean up test storage directory
66
+ try {
67
+ await fs.rm(testRoot, { recursive: true, force: true });
68
+ }
69
+ catch (error) {
70
+ // Ignore cleanup errors
71
+ }
72
+ });
73
+ (0, node_test_1.it)('puts and gets file content', async () => {
74
+ await storage.put('test.txt', 'Hello Arika');
75
+ const content = await storage.get('test.txt');
76
+ assert.strictEqual(content.toString(), 'Hello Arika');
77
+ });
78
+ (0, node_test_1.it)('checks if file exists', async () => {
79
+ await storage.put('exists.txt', 'content');
80
+ const exists = await storage.exists('exists.txt');
81
+ assert.strictEqual(exists, true);
82
+ const notExists = await storage.exists('not-exists.txt');
83
+ assert.strictEqual(notExists, false);
84
+ });
85
+ (0, node_test_1.it)('deletes files', async () => {
86
+ await storage.put('delete-me.txt', 'content');
87
+ assert.strictEqual(await storage.exists('delete-me.txt'), true);
88
+ await storage.delete('delete-me.txt');
89
+ assert.strictEqual(await storage.exists('delete-me.txt'), false);
90
+ });
91
+ (0, node_test_1.it)('throws FileNotFoundException for missing files', async () => {
92
+ await assert.rejects(async () => await storage.get('missing.txt'), src_1.FileNotFoundException);
93
+ });
94
+ (0, node_test_1.it)('works with different disks', async () => {
95
+ await storage.disk('local').put('local.txt', 'local content');
96
+ await storage.disk('public').put('public.txt', 'public content');
97
+ const localContent = await storage.disk('local').get('local.txt');
98
+ const publicContent = await storage.disk('public').get('public.txt');
99
+ assert.strictEqual(localContent.toString(), 'local content');
100
+ assert.strictEqual(publicContent.toString(), 'public content');
101
+ });
102
+ (0, node_test_1.it)('generates URLs for files', async () => {
103
+ await storage.disk('public').put('image.png', 'fake image');
104
+ const url = storage.disk('public').url('image.png');
105
+ assert.strictEqual(url, '/storage/image.png');
106
+ });
107
+ (0, node_test_1.it)('handles nested directories', async () => {
108
+ await storage.put('nested/deep/file.txt', 'nested content');
109
+ const exists = await storage.exists('nested/deep/file.txt');
110
+ assert.strictEqual(exists, true);
111
+ const content = await storage.get('nested/deep/file.txt');
112
+ assert.strictEqual(content.toString(), 'nested content');
113
+ });
114
+ (0, node_test_1.it)('handles Buffer content', async () => {
115
+ const buffer = Buffer.from('binary content');
116
+ await storage.put('binary.dat', buffer);
117
+ const retrieved = await storage.get('binary.dat');
118
+ assert.deepStrictEqual(retrieved, buffer);
119
+ });
120
+ });
121
+ //# sourceMappingURL=Storage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Storage.test.js","sourceRoot":"","sources":["../../tests/Storage.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@arikajs/storage",
3
+ "version": "0.0.1",
4
+ "description": "Filesystem abstraction layer for the ArikaJS framework.",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc -p tsconfig.json",
10
+ "build:tests": "tsc -p tsconfig.test.json",
11
+ "clean": "rm -rf dist",
12
+ "prepare": "echo skip",
13
+ "test": "npm run build && npm run build:tests && node --test 'dist/tests/**/*.test.js'",
14
+ "test:watch": "npm run build && npm run build:tests && node --test --watch 'dist/tests/**/*.test.js'"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "keywords": [
20
+ "arika",
21
+ "arika-js",
22
+ "framework",
23
+ "storage",
24
+ "filesystem",
25
+ "file",
26
+ "disk",
27
+ "driver"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20.0.0"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/arikajs/storage.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/arikajs/storage/issues"
38
+ },
39
+ "homepage": "https://github.com/arikajs/storage#readme",
40
+ "devDependencies": {
41
+ "@types/mime-types": "^3.0.1",
42
+ "@types/node": "^20.11.24",
43
+ "typescript": "^5.3.3"
44
+ },
45
+ "author": "Prakash Tank",
46
+ "dependencies": {
47
+ "@aws-sdk/client-s3": "^3.986.0",
48
+ "@aws-sdk/s3-request-presigner": "^3.992.0",
49
+ "@arikajs/middleware": "^0.0.1",
50
+ "mime-types": "^3.0.2"
51
+ }
52
+ }