UNPKG

8.45 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Urls = void 0;
4var common_1 = require("../common");
5var ROUTES_1 = require("../ROUTES");
6var Uri_1 = require("../Uri");
7var Url_1 = require("./Url");
8var util = require("./util");
9var 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}());
238exports.Urls = Urls;