1 |
|
2 |
|
3 |
|
4 |
|
5 | 'use strict';
|
6 |
|
7 | var pkgcloud = require('pkgcloud');
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function patchBaseClass(cls) {
|
14 | var proto = cls.prototype;
|
15 | var found = false;
|
16 |
|
17 | while (proto &&
|
18 | proto.constructor !== pkgcloud.storage.Container &&
|
19 | proto.constructor !== pkgcloud.storage.File) {
|
20 | if (proto.hasOwnProperty('_setProperties')) {
|
21 | found = true;
|
22 | break;
|
23 | } else {
|
24 | proto = Object.getPrototypeOf(proto);
|
25 | }
|
26 | }
|
27 | if (!found) {
|
28 | proto = cls.prototype;
|
29 | }
|
30 | var m1 = proto._setProperties;
|
31 | proto._setProperties = function(details) {
|
32 |
|
33 | var receiver = {};
|
34 |
|
35 | Object.defineProperties(receiver, {
|
36 | client: {value: this.client},
|
37 | files: {value: this.files},
|
38 | });
|
39 | m1.call(receiver, details);
|
40 |
|
41 | for (var p in receiver) {
|
42 | this[p] = receiver[p];
|
43 | }
|
44 |
|
45 | this._rawMetadata = details;
|
46 | this._metadata = receiver;
|
47 | };
|
48 |
|
49 | proto.toJSON = function() {
|
50 | return this._metadata;
|
51 | };
|
52 |
|
53 | proto.getMetadata = function() {
|
54 | return this._metadata;
|
55 | };
|
56 |
|
57 | proto.getRawMetadata = function() {
|
58 | return this._rawMetadata;
|
59 | };
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | function patchContainerAndFileClass(provider) {
|
68 | var storageProvider = getProvider(provider).storage;
|
69 |
|
70 | patchBaseClass(storageProvider.Container);
|
71 | patchBaseClass(storageProvider.File);
|
72 | }
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 | function createClient(options) {
|
79 | options = options || {};
|
80 | var provider = options.provider || 'filesystem';
|
81 | var handler;
|
82 |
|
83 | try {
|
84 |
|
85 | handler = require('./providers/' + provider);
|
86 | } catch (err) {
|
87 |
|
88 | handler = require('pkgcloud').storage;
|
89 | }
|
90 | patchContainerAndFileClass(provider);
|
91 | return handler.createClient(options);
|
92 | }
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 | function getProvider(provider) {
|
100 | try {
|
101 |
|
102 | return require('./providers/' + provider);
|
103 | } catch (err) {
|
104 |
|
105 | return require('pkgcloud').providers[provider];
|
106 | }
|
107 | }
|
108 |
|
109 | module.exports.createClient = createClient;
|
110 | module.exports.getProvider = getProvider;
|