@design-sdk/figma-url 0.0.4 → 0.0.8

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Grida
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.js CHANGED
@@ -11,4 +11,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./lib"), exports);
14
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * e.g.
3
+ *
4
+ * - **ok**: (public file) - https://www.figma.com/file/Y0Gh77AqBoHH7dG1GtK3xF/grida?node-id=1545%3A247
5
+ * - **not found**: (private file) - https://www.figma.com/file/8R57Uv5Siu1ZhhGkVIyyQg/private-file-api-demo?node-id=2%3A2
6
+ *
7
+ */
8
+ export declare function isPublic(url: string): Promise<boolean>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ ///
3
+ /// simple functions to check if file is accessible by public.
4
+ ///
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.isPublic = void 0;
16
+ const analyze_url_1 = require("./analyze-url");
17
+ /**
18
+ * e.g.
19
+ *
20
+ * - **ok**: (public file) - https://www.figma.com/file/Y0Gh77AqBoHH7dG1GtK3xF/grida?node-id=1545%3A247
21
+ * - **not found**: (private file) - https://www.figma.com/file/8R57Uv5Siu1ZhhGkVIyyQg/private-file-api-demo?node-id=2%3A2
22
+ *
23
+ */
24
+ function isPublic(url) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ const type = (0, analyze_url_1.analyze)(url);
27
+ if (type == analyze_url_1.FigmaUrlType.embed || analyze_url_1.FigmaUrlType.file || analyze_url_1.FigmaUrlType.node) {
28
+ try {
29
+ const res = yield fetch(url);
30
+ return res.status == 200;
31
+ }
32
+ catch (e) {
33
+ return false;
34
+ }
35
+ }
36
+ return false;
37
+ });
38
+ }
39
+ exports.isPublic = isPublic;
@@ -16,4 +16,11 @@ export declare enum FigmaUrlType {
16
16
  */
17
17
  empty = "empty"
18
18
  }
19
- export declare function analyze(url: string): FigmaUrlType;
19
+ export declare enum FigmaFileOrNodeIdType {
20
+ nodeid = "nodeid",
21
+ maybe_nodeid = "maybe_nodeid",
22
+ fileid = "fileid",
23
+ maybe_fileid = "maybe_fileid"
24
+ }
25
+ export declare type FigmaInputAnalysisResult = FigmaUrlType | FigmaFileOrNodeIdType;
26
+ export declare function analyze(url: string): FigmaInputAnalysisResult;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyze = exports.FigmaUrlType = void 0;
3
+ exports.analyze = exports.FigmaFileOrNodeIdType = exports.FigmaUrlType = void 0;
4
4
  const constants_1 = require("./constants");
5
5
  var FigmaUrlType;
6
6
  (function (FigmaUrlType) {
@@ -21,6 +21,13 @@ var FigmaUrlType;
21
21
  */
22
22
  FigmaUrlType["empty"] = "empty";
23
23
  })(FigmaUrlType = exports.FigmaUrlType || (exports.FigmaUrlType = {}));
24
+ var FigmaFileOrNodeIdType;
25
+ (function (FigmaFileOrNodeIdType) {
26
+ FigmaFileOrNodeIdType["nodeid"] = "nodeid";
27
+ FigmaFileOrNodeIdType["maybe_nodeid"] = "maybe_nodeid";
28
+ FigmaFileOrNodeIdType["fileid"] = "fileid";
29
+ FigmaFileOrNodeIdType["maybe_fileid"] = "maybe_fileid";
30
+ })(FigmaFileOrNodeIdType = exports.FigmaFileOrNodeIdType || (exports.FigmaFileOrNodeIdType = {}));
24
31
  function analyze(url) {
25
32
  var _a;
26
33
  if (!url) {
@@ -33,6 +40,36 @@ function analyze(url) {
33
40
  _u = new URL(url);
34
41
  }
35
42
  catch (_) {
43
+ const maybeidlike = url;
44
+ if (maybeidlike.length > 0) {
45
+ if (maybeidlike.includes(":") || maybeidlike.includes("%3A")) {
46
+ let _target = maybeidlike;
47
+ // "%3A" is ":" as in url encoding
48
+ if (_target.includes("%3A")) {
49
+ // decode value, assuming it is url encoded
50
+ _target = decodeURI(_target);
51
+ }
52
+ // 2. run regex
53
+ if (_target.match(/[0-9]+:[0-9]+/) !== null) {
54
+ return FigmaFileOrNodeIdType.maybe_nodeid;
55
+ }
56
+ }
57
+ // e.g. kLzb7R9xYuuphfX4TssVNe
58
+ // e.g. 4hqwYFw6FKw1njvzEl3VUh
59
+ // fileid is 22 chars at this point.
60
+ else if (maybeidlike.length >= 22) {
61
+ const _taget = decodeURI(maybeidlike);
62
+ // figma file id does not contain special characters. it's like mongodb id
63
+ if (_taget.match(/[a-zA-Z0-9]/) !== null) {
64
+ if (_taget.length == 22) {
65
+ return FigmaFileOrNodeIdType.fileid;
66
+ }
67
+ else {
68
+ return FigmaFileOrNodeIdType.maybe_fileid;
69
+ }
70
+ }
71
+ }
72
+ }
36
73
  throw `this url cannot be analyzed. this is not a valid url string - "${url}"`;
37
74
  }
38
75
  //
@@ -60,4 +97,3 @@ function analyze(url) {
60
97
  }
61
98
  }
62
99
  exports.analyze = analyze;
63
- //# sourceMappingURL=analyze-url.js.map
@@ -0,0 +1 @@
1
+ export declare function isSameDesignUrl(url1: string, url2: string): boolean;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSameDesignUrl = void 0;
4
+ const analyze_url_1 = require("./analyze-url");
5
+ const parse_url_1 = require("./parse-url");
6
+ function isSameDesignUrl(url1, url2) {
7
+ const analysis = (0, analyze_url_1.analyze)(url1);
8
+ switch (analysis) {
9
+ case analyze_url_1.FigmaUrlType.embed:
10
+ case analyze_url_1.FigmaUrlType.empty:
11
+ case analyze_url_1.FigmaUrlType.file:
12
+ return false;
13
+ case analyze_url_1.FigmaUrlType.node:
14
+ const parsed = (0, parse_url_1.parseFileAndNodeId)(url1);
15
+ const _this_parsed = (0, parse_url_1.parseFileAndNodeId)(url2);
16
+ return (_this_parsed.file === parsed.file && _this_parsed.node === parsed.node);
17
+ }
18
+ }
19
+ exports.isSameDesignUrl = isSameDesignUrl;
@@ -28,4 +28,3 @@ exports.__FIGMA_DEMO_DEFAULT_FILE_ID = "Y0Gh77AqBoHH7dG1GtK3xF";
28
28
  exports.__FIGMA_DEMO_DEFAULT_FILE_URL = "https://www.figma.com/file/Y0Gh77AqBoHH7dG1GtK3xF/";
29
29
  exports.__FIGMA_DEMO_DEFAULT_FILE_NODE_URL = "https://www.figma.com/file/Y0Gh77AqBoHH7dG1GtK3xF/?node-id=264%3A49";
30
30
  // ======================================================================================================
31
- //# sourceMappingURL=constants.js.map
@@ -10,7 +10,7 @@ const constants_1 = require("./constants");
10
10
  */
11
11
  function embed(src) {
12
12
  const url = builEmbedableSourceUrl(src);
13
- const urltype = analyze_url_1.analyze(url);
13
+ const urltype = (0, analyze_url_1.analyze)(url);
14
14
  switch (urltype) {
15
15
  case analyze_url_1.FigmaUrlType.embed:
16
16
  return url;
@@ -19,6 +19,8 @@ function embed(src) {
19
19
  return _build(url);
20
20
  case analyze_url_1.FigmaUrlType.node:
21
21
  return _build(url);
22
+ case analyze_url_1.FigmaUrlType.empty:
23
+ return;
22
24
  }
23
25
  }
24
26
  exports.embed = embed;
@@ -52,4 +54,3 @@ function builEmbedableSourceUrl(src) {
52
54
  }
53
55
  }
54
56
  exports.builEmbedableSourceUrl = builEmbedableSourceUrl;
55
- //# sourceMappingURL=embed-url.js.map
@@ -1,5 +1,7 @@
1
1
  export * from "./embed-url";
2
2
  export * from "./parse-url";
3
+ export * from "./access-check";
3
4
  export * from "./analyze-url";
4
5
  export * from "./target-node-config";
5
6
  export * from "./constants";
7
+ export * from "./compare-url";
package/dist/lib/index.js CHANGED
@@ -12,7 +12,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./embed-url"), exports);
14
14
  __exportStar(require("./parse-url"), exports);
15
+ __exportStar(require("./access-check"), exports);
15
16
  __exportStar(require("./analyze-url"), exports);
16
17
  __exportStar(require("./target-node-config"), exports);
17
18
  __exportStar(require("./constants"), exports);
18
- //# sourceMappingURL=index.js.map
19
+ __exportStar(require("./compare-url"), exports);
@@ -42,4 +42,3 @@ function parseFileAndNodeId(url) {
42
42
  }
43
43
  }
44
44
  exports.parseFileAndNodeId = parseFileAndNodeId;
45
- //# sourceMappingURL=parse-url.js.map
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=target-node-config.js.map
package/package.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "name": "@design-sdk/figma-url",
3
- "version": "0.0.4",
3
+ "version": "0.0.8",
4
4
  "description": "Figma url utils for sharing & embeding and url inspection",
5
5
  "license": "MIT",
6
- "main": "dist/index.js",
6
+ "private": false,
7
7
  "homepage": "https://github.com/gridaco/design-sdk",
8
8
  "repository": "https://github.com/gridaco/design-sdk",
9
+ "authors": [
10
+ "grida.co",
11
+ "softmarshmallow <universe@grida.co>"
12
+ ],
9
13
  "scripts": {
10
- "prepack": "yarn test && tsc",
14
+ "clean": "rimraf dist",
15
+ "build": "yarn clean && tsc",
11
16
  "test": "jest"
12
17
  },
13
18
  "files": [
@@ -20,5 +25,6 @@
20
25
  ],
21
26
  "publishConfig": {
22
27
  "access": "public"
23
- }
24
- }
28
+ },
29
+ "gitHead": "e0abc41876d7c290b3dc1a9b355e5e9e7aa0c332"
30
+ }