1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Urls = void 0;
|
4 | var common_1 = require("../common");
|
5 | var ROUTES_1 = require("../ROUTES");
|
6 | var Uri_1 = require("../Uri");
|
7 | var Url_1 = require("./Url");
|
8 | var util = require("./util");
|
9 | var Urls = (function () {
|
10 | function Urls(input) {
|
11 | var _this = this;
|
12 | this.toUrl = function (path, options) {
|
13 | if (options === void 0) { options = {}; }
|
14 | var query = options.query;
|
15 | var origin = _this.origin;
|
16 | return new Url_1.Url({ origin: origin, path: path, query: query });
|
17 | };
|
18 | var origin = Url_1.Url.parse(input).origin;
|
19 | this.hostname = origin.hostname;
|
20 | this.host = origin.host;
|
21 | this.protocol = origin.protocol;
|
22 | this.port = origin.port;
|
23 | this.origin = origin.toString();
|
24 | }
|
25 | Urls.create = function (input) {
|
26 | return new Urls(input);
|
27 | };
|
28 | Object.defineProperty(Urls.prototype, "sys", {
|
29 | get: function () {
|
30 | var toUrl = this.toUrl;
|
31 | return {
|
32 | get info() {
|
33 | return toUrl('.sys');
|
34 | },
|
35 | get uid() {
|
36 | return toUrl('.uid');
|
37 | },
|
38 | };
|
39 | },
|
40 | enumerable: false,
|
41 | configurable: true
|
42 | });
|
43 | Object.defineProperty(Urls.prototype, "local", {
|
44 | get: function () {
|
45 | var toUrl = this.toUrl;
|
46 | return {
|
47 | get fs() {
|
48 | return toUrl("/local/fs");
|
49 | },
|
50 | };
|
51 | },
|
52 | enumerable: false,
|
53 | configurable: true
|
54 | });
|
55 | Object.defineProperty(Urls.prototype, "fn", {
|
56 | get: function () {
|
57 | var self = this;
|
58 | var toUrl = this.toUrl;
|
59 | var throwOnHostMistmatch = function (bundle) {
|
60 | if (util.stripHttp(bundle.host) !== self.host) {
|
61 | throw new Error("Host mismatch ('" + bundle.host + "' should be '" + self.host + "')");
|
62 | }
|
63 | };
|
64 | var trimDir = function (dir) { return (dir || '').trim().replace(/^\/*/, '').replace(/\/*$/, ''); };
|
65 | var bundle = {
|
66 | manifest: function (bundle) {
|
67 | throwOnHostMistmatch(bundle);
|
68 | var FILENAME = common_1.constants.BUNDLE.MANIFEST.FILENAME;
|
69 | var dir = trimDir(bundle.dir);
|
70 | var filename = dir ? dir + "/" + FILENAME : FILENAME;
|
71 | return self.cell(bundle.uri).file.byName(filename);
|
72 | },
|
73 | files: function (bundle) {
|
74 | throwOnHostMistmatch(bundle);
|
75 | var dir = trimDir(bundle.dir);
|
76 | var url = self.cell(bundle.uri).files.list;
|
77 | url = dir ? url.query({ filter: dir + "/**" }) : url;
|
78 | return url;
|
79 | },
|
80 | };
|
81 | return {
|
82 | bundle: bundle,
|
83 | get run() {
|
84 | return toUrl("/fn:run");
|
85 | },
|
86 | };
|
87 | },
|
88 | enumerable: false,
|
89 | configurable: true
|
90 | });
|
91 | Urls.prototype.ns = function (input) {
|
92 | var toUrl = this.toUrl;
|
93 | var id = (typeof input === 'string' ? input : input.id) || '';
|
94 | if (!id.includes(':')) {
|
95 | id = "ns:" + id;
|
96 | }
|
97 | var uri = Uri_1.Uri.parse(id);
|
98 | var type = uri.parts.type;
|
99 | if (uri.error) {
|
100 | throw new Error(uri.error.message);
|
101 | }
|
102 | if (type === 'NS') {
|
103 | id = uri.parts.id;
|
104 | }
|
105 | else if (type === 'CELL') {
|
106 | id = uri.parts.ns;
|
107 | }
|
108 | else {
|
109 | var err = "The id for the namespace is a URI, but not of type \"ns:\" or \"cell:\" (\"" + id + "\")";
|
110 | throw new Error(err);
|
111 | }
|
112 | return {
|
113 | uri: uri.toString(),
|
114 | get info() {
|
115 | return toUrl("/ns:" + id);
|
116 | },
|
117 | };
|
118 | };
|
119 | Urls.prototype.cell = function (input) {
|
120 | var toUrl = this.toUrl;
|
121 | var uri = Uri_1.Uri.cell(input);
|
122 | var ns = uri.ns, key = uri.key, type = uri.type;
|
123 | if (type !== 'CELL') {
|
124 | var err = "The given URI is a " + type + " not a CELL (\"" + input.toString() + "\")";
|
125 | throw new Error(err);
|
126 | }
|
127 | var api = {
|
128 | uri: uri.toString(),
|
129 | get info() {
|
130 | return toUrl("/cell:" + ns + ":" + key);
|
131 | },
|
132 | files: {
|
133 | get list() {
|
134 | return toUrl("/cell:" + ns + ":" + key + "/fs");
|
135 | },
|
136 | get delete() {
|
137 | return toUrl("/cell:" + ns + ":" + key + "/fs");
|
138 | },
|
139 | get copy() {
|
140 | return toUrl("/cell:" + ns + ":" + key + "/fs:copy");
|
141 | },
|
142 | get upload() {
|
143 | return toUrl("/cell:" + ns + ":" + key + "/fs:upload");
|
144 | },
|
145 | get uploaded() {
|
146 | return toUrl("/cell:" + ns + ":" + key + "/fs:uploaded");
|
147 | },
|
148 | },
|
149 | file: {
|
150 | toString: function () {
|
151 | return "/cell:" + ns + ":" + key + "/fs/";
|
152 | },
|
153 | byName: function (filename) {
|
154 | filename = (filename || '').trim();
|
155 | if (!filename) {
|
156 | throw new Error("Filename not provided.");
|
157 | }
|
158 | return toUrl("/cell:" + ns + ":" + key + "/fs/" + filename);
|
159 | },
|
160 | byFileUri: function (fileUri, fileExtension) {
|
161 | fileExtension = (fileExtension || '').trim();
|
162 | var uri = Uri_1.Uri.file(fileUri);
|
163 | if (uri.type !== 'FILE') {
|
164 | throw new Error("The given URI [" + fileUri + "] is not of type [file:]");
|
165 | }
|
166 | var ext = (fileExtension || '').trim().replace(/^\.*/, '');
|
167 | var filename = ("" + uri.file + (ext ? "." + ext : '')).trim();
|
168 | if (!filename) {
|
169 | throw new Error("File uri/name could not be derived..");
|
170 | }
|
171 | var file = "file:" + filename;
|
172 | return toUrl("/cell:" + ns + ":" + key + "/" + file);
|
173 | },
|
174 | },
|
175 | };
|
176 | return api;
|
177 | };
|
178 | Urls.prototype.row = function (input) {
|
179 | var toUrl = this.toUrl;
|
180 | var uri = Uri_1.Uri.row(input);
|
181 | var ns = uri.ns, key = uri.key, type = uri.type;
|
182 | if (type !== 'ROW') {
|
183 | var err = "The given URI is a " + type + " not a ROW (\"" + input.toString() + "\")";
|
184 | throw new Error(err);
|
185 | }
|
186 | return {
|
187 | uri: uri.toString(),
|
188 | get info() {
|
189 | return toUrl("/cell:" + ns + ":" + key);
|
190 | },
|
191 | };
|
192 | };
|
193 | Urls.prototype.column = function (input) {
|
194 | var toUrl = this.toUrl;
|
195 | var uri = Uri_1.Uri.column(input);
|
196 | var ns = uri.ns, key = uri.key, type = uri.type;
|
197 | if (type !== 'COLUMN') {
|
198 | var err = "The given URI is a " + type + " not a COLUMN (\"" + input.toString() + "\")";
|
199 | throw new Error(err);
|
200 | }
|
201 | return {
|
202 | uri: uri.toString(),
|
203 | get info() {
|
204 | return toUrl("/cell:" + ns + ":" + key);
|
205 | },
|
206 | };
|
207 | };
|
208 | Urls.prototype.file = function (input) {
|
209 | var toUrl = this.toUrl;
|
210 | var uri = Uri_1.Uri.file(input);
|
211 | if (uri.type !== 'FILE') {
|
212 | var err = "The given URI is not of type \"file:\" (\"" + input.toString() + "\")";
|
213 | throw new Error(err);
|
214 | }
|
215 | var id = uri.id;
|
216 | return {
|
217 | uri: uri.toString(),
|
218 | get info() {
|
219 | return toUrl("/file:" + id + "/info");
|
220 | },
|
221 | get download() {
|
222 | return toUrl("/file:" + id);
|
223 | },
|
224 | get delete() {
|
225 | return toUrl("/file:" + id);
|
226 | },
|
227 | get uploaded() {
|
228 | return toUrl("/file:" + id + "/uploaded");
|
229 | },
|
230 | };
|
231 | };
|
232 | Urls.routes = ROUTES_1.ROUTES;
|
233 | Urls.Uri = Uri_1.Uri;
|
234 | Urls.Url = Url_1.Url;
|
235 | Urls.parse = Url_1.Url.parse;
|
236 | return Urls;
|
237 | }());
|
238 | exports.Urls = Urls;
|