@immediately-run/sdk 0.1.0

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/MDXProvider.cjs +58 -0
  4. package/dist/MDXProvider.cjs.map +1 -0
  5. package/dist/MDXProvider.d.cts +6 -0
  6. package/dist/MDXProvider.d.ts +6 -0
  7. package/dist/MDXProvider.js +33 -0
  8. package/dist/MDXProvider.js.map +1 -0
  9. package/dist/RoutingSpec.cjs +17 -0
  10. package/dist/RoutingSpec.cjs.map +1 -0
  11. package/dist/RoutingSpec.d.cts +12 -0
  12. package/dist/RoutingSpec.d.ts +12 -0
  13. package/dist/RoutingSpec.js +1 -0
  14. package/dist/RoutingSpec.js.map +1 -0
  15. package/dist/TinkerableContext.cjs +30 -0
  16. package/dist/TinkerableContext.cjs.map +1 -0
  17. package/dist/TinkerableContext.d.cts +27 -0
  18. package/dist/TinkerableContext.d.ts +27 -0
  19. package/dist/TinkerableContext.js +6 -0
  20. package/dist/TinkerableContext.js.map +1 -0
  21. package/dist/boot.cjs +119 -0
  22. package/dist/boot.cjs.map +1 -0
  23. package/dist/boot.d.cts +15 -0
  24. package/dist/boot.d.ts +15 -0
  25. package/dist/boot.js +93 -0
  26. package/dist/boot.js.map +1 -0
  27. package/dist/components/FileRouter.cjs +53 -0
  28. package/dist/components/FileRouter.cjs.map +1 -0
  29. package/dist/components/FileRouter.d.cts +5 -0
  30. package/dist/components/FileRouter.d.ts +5 -0
  31. package/dist/components/FileRouter.js +29 -0
  32. package/dist/components/FileRouter.js.map +1 -0
  33. package/dist/components/Include.cjs +57 -0
  34. package/dist/components/Include.cjs.map +1 -0
  35. package/dist/components/Include.d.cts +23 -0
  36. package/dist/components/Include.d.ts +23 -0
  37. package/dist/components/Include.js +31 -0
  38. package/dist/components/Include.js.map +1 -0
  39. package/dist/components/MDXComponents.cjs +75 -0
  40. package/dist/components/MDXComponents.cjs.map +1 -0
  41. package/dist/components/MDXComponents.d.cts +10 -0
  42. package/dist/components/MDXComponents.d.ts +10 -0
  43. package/dist/components/MDXComponents.js +49 -0
  44. package/dist/components/MDXComponents.js.map +1 -0
  45. package/dist/components/MainContent.cjs +74 -0
  46. package/dist/components/MainContent.cjs.map +1 -0
  47. package/dist/components/MainContent.d.cts +16 -0
  48. package/dist/components/MainContent.d.ts +16 -0
  49. package/dist/components/MainContent.js +48 -0
  50. package/dist/components/MainContent.js.map +1 -0
  51. package/dist/components/defaults.cjs +36 -0
  52. package/dist/components/defaults.cjs.map +1 -0
  53. package/dist/components/defaults.d.cts +7 -0
  54. package/dist/components/defaults.d.ts +7 -0
  55. package/dist/components/defaults.js +11 -0
  56. package/dist/components/defaults.js.map +1 -0
  57. package/dist/components/errors.cjs +38 -0
  58. package/dist/components/errors.cjs.map +1 -0
  59. package/dist/components/errors.d.cts +5 -0
  60. package/dist/components/errors.d.ts +5 -0
  61. package/dist/components/errors.js +14 -0
  62. package/dist/components/errors.js.map +1 -0
  63. package/dist/contextUtils.cjs +60 -0
  64. package/dist/contextUtils.cjs.map +1 -0
  65. package/dist/contextUtils.d.cts +10 -0
  66. package/dist/contextUtils.d.ts +10 -0
  67. package/dist/contextUtils.js +34 -0
  68. package/dist/contextUtils.js.map +1 -0
  69. package/dist/hooks.cjs +75 -0
  70. package/dist/hooks.cjs.map +1 -0
  71. package/dist/hooks.d.cts +6 -0
  72. package/dist/hooks.d.ts +6 -0
  73. package/dist/hooks.js +50 -0
  74. package/dist/hooks.js.map +1 -0
  75. package/dist/index.cjs +35 -0
  76. package/dist/index.cjs.map +1 -0
  77. package/dist/index.d.cts +13 -0
  78. package/dist/index.d.ts +13 -0
  79. package/dist/index.js +8 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/moduleCache.cjs +66 -0
  82. package/dist/moduleCache.cjs.map +1 -0
  83. package/dist/moduleCache.d.cts +20 -0
  84. package/dist/moduleCache.d.ts +20 -0
  85. package/dist/moduleCache.js +40 -0
  86. package/dist/moduleCache.js.map +1 -0
  87. package/dist/pathUtils.cjs +63 -0
  88. package/dist/pathUtils.cjs.map +1 -0
  89. package/dist/pathUtils.d.cts +4 -0
  90. package/dist/pathUtils.d.ts +4 -0
  91. package/dist/pathUtils.js +38 -0
  92. package/dist/pathUtils.js.map +1 -0
  93. package/dist/routing.cjs +84 -0
  94. package/dist/routing.cjs.map +1 -0
  95. package/dist/routing.d.cts +15 -0
  96. package/dist/routing.d.ts +15 -0
  97. package/dist/routing.js +57 -0
  98. package/dist/routing.js.map +1 -0
  99. package/dist/sandboxTypes.cjs +17 -0
  100. package/dist/sandboxTypes.cjs.map +1 -0
  101. package/dist/sandboxTypes.d.cts +24 -0
  102. package/dist/sandboxTypes.d.ts +24 -0
  103. package/dist/sandboxTypes.js +1 -0
  104. package/dist/sandboxTypes.js.map +1 -0
  105. package/dist/sandboxUtils.cjs +46 -0
  106. package/dist/sandboxUtils.cjs.map +1 -0
  107. package/dist/sandboxUtils.d.cts +5 -0
  108. package/dist/sandboxUtils.d.ts +5 -0
  109. package/dist/sandboxUtils.js +20 -0
  110. package/dist/sandboxUtils.js.map +1 -0
  111. package/dist/urlUtils.cjs +159 -0
  112. package/dist/urlUtils.cjs.map +1 -0
  113. package/dist/urlUtils.d.cts +24 -0
  114. package/dist/urlUtils.d.ts +24 -0
  115. package/dist/urlUtils.js +124 -0
  116. package/dist/urlUtils.js.map +1 -0
  117. package/package.json +53 -0
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var urlUtils_exports = {};
20
+ __export(urlUtils_exports, {
21
+ FILES_PREFIX: () => FILES_PREFIX,
22
+ constructOuterUrl: () => constructOuterUrl,
23
+ constructUrl: () => constructUrl,
24
+ getOuterHostname: () => getOuterHostname,
25
+ getSearchParams: () => getSearchParams,
26
+ isAbsolutePath: () => isAbsolutePath,
27
+ isInternalHref: () => isInternalHref,
28
+ maybeParseUrl: () => maybeParseUrl,
29
+ parseHref: () => parseHref,
30
+ parsePath: () => parsePath,
31
+ parseTarget: () => parseTarget,
32
+ repositoryPrefixURL: () => repositoryPrefixURL
33
+ });
34
+ module.exports = __toCommonJS(urlUtils_exports);
35
+ var import_pathUtils = require("./pathUtils");
36
+ const FILES_PREFIX = "/files";
37
+ const getOuterHostname = (outerHref) => {
38
+ const url = new URL(outerHref);
39
+ return `${url.protocol}//${url.hostname}`;
40
+ };
41
+ const getSearchParams = (search) => Object.fromEntries(
42
+ [...new URLSearchParams(search ?? window.location.search).entries()]
43
+ );
44
+ const parseTarget = (target, navigation) => {
45
+ const newNavigation = { ...navigation };
46
+ let [prehash, hash] = target.split("#");
47
+ if (prehash) {
48
+ let [path, search] = prehash.split("?");
49
+ if (path) {
50
+ newNavigation.sandboxPath = path;
51
+ }
52
+ newNavigation.search = search ? search : "";
53
+ }
54
+ newNavigation.hash = hash ? hash : "";
55
+ return newNavigation;
56
+ };
57
+ const maybeParseUrl = (str) => {
58
+ try {
59
+ return new URL(str);
60
+ } catch (_) {
61
+ return null;
62
+ }
63
+ };
64
+ const isAbsolutePath = (sandboxPath) => sandboxPath.startsWith("/");
65
+ const repositoryPrefixURL = (outerHref, navigationState) => constructUrl(outerHref, {
66
+ ...navigationState,
67
+ sandboxPath: ""
68
+ });
69
+ const constructOuterUrl = (previousOuterHref, sandboxTarget, navigationState, addFilesPrefix = true) => {
70
+ if (isAbsolutePath(sandboxTarget)) {
71
+ return constructUrl(
72
+ previousOuterHref,
73
+ {
74
+ ...navigationState,
75
+ sandboxPath: addFilesPrefix ? (0, import_pathUtils.joinPaths)(FILES_PREFIX, sandboxTarget) : sandboxTarget
76
+ }
77
+ );
78
+ }
79
+ return new URL(
80
+ sandboxTarget,
81
+ constructUrl(
82
+ previousOuterHref,
83
+ navigationState
84
+ )
85
+ ).toString();
86
+ };
87
+ const isInternalHref = (outerHref, target, navigationState) => {
88
+ const parsedUrl = maybeParseUrl(target);
89
+ if (parsedUrl) {
90
+ return target.startsWith(repositoryPrefixURL(outerHref, navigationState));
91
+ }
92
+ return true;
93
+ };
94
+ const PATH_SEGMENTS = [
95
+ { name: "mode", pattern: "\\w+" },
96
+ { name: "provider", pattern: "[a-zA-Z0-9-_]+" },
97
+ { name: "namespace", pattern: "[a-zA-Z0-9-_]+" },
98
+ { name: "repository", pattern: "[a-zA-Z0-9-_]+" },
99
+ { name: "ref", pattern: "[a-zA-Z0-9-_]+" },
100
+ { name: "sandboxPath", pattern: ".*", transform: (s) => `/${s}` }
101
+ ];
102
+ const OUTER_HREF_REGEXP = new RegExp("^" + PATH_SEGMENTS.map(({ name, pattern }) => `/(?<${name}>${pattern})`).join("") + "$");
103
+ const parsePath = (pathname) => {
104
+ const matchResults = pathname.match(OUTER_HREF_REGEXP)?.groups ?? {};
105
+ return PATH_SEGMENTS.reduce((acc, { name, transform }) => {
106
+ let value = void 0;
107
+ if (name in matchResults) {
108
+ value = matchResults[name];
109
+ }
110
+ if (!value) {
111
+ value = "";
112
+ }
113
+ if (typeof value === "string") {
114
+ acc[name] = transform ? transform(value) : value;
115
+ }
116
+ return acc;
117
+ }, {});
118
+ };
119
+ const parseHref = (href) => {
120
+ const parsedUrl = new URL(href);
121
+ const pathnameState = parsePath(parsedUrl.pathname);
122
+ return {
123
+ ...pathnameState,
124
+ search: parsedUrl.search.substring(1),
125
+ hash: parsedUrl.hash.substring(1)
126
+ };
127
+ };
128
+ const stripSlashPrefix = (s) => s.startsWith("/") ? s.substring(1) : s;
129
+ const constructUrl = (outerHref, navigationState) => {
130
+ const path = PATH_SEGMENTS.map(({ name }) => {
131
+ let value = navigationState[name];
132
+ return stripSlashPrefix(value ?? "");
133
+ }).join("/");
134
+ const host = getOuterHostname(outerHref);
135
+ let url = `${host}/${path}`;
136
+ if (navigationState.search) {
137
+ url += "?" + navigationState.search;
138
+ }
139
+ if (navigationState.hash) {
140
+ url += "#" + navigationState.hash;
141
+ }
142
+ return url;
143
+ };
144
+ // Annotate the CommonJS export names for ESM import in node:
145
+ 0 && (module.exports = {
146
+ FILES_PREFIX,
147
+ constructOuterUrl,
148
+ constructUrl,
149
+ getOuterHostname,
150
+ getSearchParams,
151
+ isAbsolutePath,
152
+ isInternalHref,
153
+ maybeParseUrl,
154
+ parseHref,
155
+ parsePath,
156
+ parseTarget,
157
+ repositoryPrefixURL
158
+ });
159
+ //# sourceMappingURL=urlUtils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/urlUtils.ts"],"sourcesContent":["import { joinPaths } from \"./pathUtils\";\nimport { NavigationState, PathState } from \"./TinkerableContext\";\n\nexport const FILES_PREFIX = '/files';\n\nexport const getOuterHostname = (outerHref:string) => {\n const url = new URL(outerHref);\n return `${url.protocol}//${url.hostname}`;\n}\n\nexport const getSearchParams = (search?: string): Record<string, string> => Object.fromEntries(\n [...(new URLSearchParams(search ?? window.location.search).entries())]);\n\n\nexport const parseTarget = (target: string, navigation: NavigationState): NavigationState => {\n const newNavigation = { ...navigation };\n let [prehash, hash] = target.split(\"#\")\n if (prehash) {\n let [path, search] = prehash.split(\"?\")\n if (path) {\n newNavigation.sandboxPath = path\n }\n newNavigation.search = search ? search : '';\n }\n newNavigation.hash = hash ? hash : '';\n return newNavigation\n}\n\n\nexport const maybeParseUrl = (str: string): URL | null => {\n try {\n return new URL(str);\n } catch (_) {\n return null;\n }\n}\n\nexport const isAbsolutePath = (sandboxPath: string) => sandboxPath.startsWith('/');\n\nexport const repositoryPrefixURL = (outerHref:string, navigationState: NavigationState) => constructUrl(outerHref, {\n ...navigationState,\n sandboxPath: ''\n });\n\nexport const constructOuterUrl = (previousOuterHref:string, sandboxTarget:string, navigationState: NavigationState, addFilesPrefix=true):string => {\n if (isAbsolutePath(sandboxTarget)) {\n return constructUrl(\n previousOuterHref,\n {\n ...navigationState,\n sandboxPath: addFilesPrefix ? joinPaths(FILES_PREFIX, sandboxTarget) : sandboxTarget\n })\n }\n return (\n new URL(\n sandboxTarget,\n constructUrl(\n previousOuterHref,\n navigationState\n )\n )\n ).toString();\n}\n\nexport const isInternalHref = (outerHref:string, target: string, navigationState: NavigationState) => {\n const parsedUrl = maybeParseUrl(target);\n if (parsedUrl) {\n return target.startsWith(repositoryPrefixURL(outerHref, navigationState));\n }\n // if target is not a valid URL, then assume it's relative.\n return true;\n}\n\nexport type PathSegment = {\n name: string,\n pattern: string,\n transform?: (pathSegment: string) => string\n}\n\nconst PATH_SEGMENTS: PathSegment[] = [\n { name: 'mode', pattern: '\\\\w+' },\n { name: 'provider', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'namespace', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'repository', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'ref', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'sandboxPath', pattern: '.*', transform: s => `/${s}` }\n];\n\nconst OUTER_HREF_REGEXP = new RegExp('^' + PATH_SEGMENTS.map(({ name, pattern }) => `\\/(?<${name}>${pattern})`).join('') + \"$\");\n\n\nexport const parsePath = (pathname: string): PathState => {\n const matchResults = pathname.match(OUTER_HREF_REGEXP)?.groups ?? {};\n return PATH_SEGMENTS.reduce((acc: Partial<PathState>, { name, transform }: PathSegment) => {\n let value: string | undefined = undefined;\n if (name in matchResults) {\n value = matchResults[name];\n }\n if (!value) {\n // fall back to default value if var not present in\n value = '';\n }\n if (typeof value === 'string') {\n acc[name] = transform ? transform(value) : value;\n }\n return acc;\n }, {}) as PathState;\n}\n\nexport const parseHref = (href: string): NavigationState => {\n const parsedUrl = new URL(href);\n const pathnameState = parsePath(parsedUrl.pathname);\n return {\n ...pathnameState,\n search: parsedUrl.search.substring(1),\n hash: parsedUrl.hash.substring(1),\n } as NavigationState\n}\n\nconst stripSlashPrefix = (s: string): string => s.startsWith('/') ? s.substring(1) : s;\n\nexport const constructUrl = (outerHref:string, navigationState: NavigationState): string => {\n const path = PATH_SEGMENTS.map(({ name }) => {\n let value = navigationState[name];\n return stripSlashPrefix(value ?? '');\n }).join('/');\n const host = getOuterHostname(outerHref);\n let url = `${host}/${path}`\n if (navigationState.search) {\n url += '?' + navigationState.search\n }\n if (navigationState.hash) {\n url += '#' + navigationState.hash\n }\n return url;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,24 @@
1
+ import { NavigationState, PathState } from './TinkerableContext.cjs';
2
+ import 'react';
3
+ import './RoutingSpec.cjs';
4
+ import './sandboxTypes.cjs';
5
+
6
+ declare const FILES_PREFIX = "/files";
7
+ declare const getOuterHostname: (outerHref: string) => string;
8
+ declare const getSearchParams: (search?: string) => Record<string, string>;
9
+ declare const parseTarget: (target: string, navigation: NavigationState) => NavigationState;
10
+ declare const maybeParseUrl: (str: string) => URL | null;
11
+ declare const isAbsolutePath: (sandboxPath: string) => boolean;
12
+ declare const repositoryPrefixURL: (outerHref: string, navigationState: NavigationState) => string;
13
+ declare const constructOuterUrl: (previousOuterHref: string, sandboxTarget: string, navigationState: NavigationState, addFilesPrefix?: boolean) => string;
14
+ declare const isInternalHref: (outerHref: string, target: string, navigationState: NavigationState) => boolean;
15
+ type PathSegment = {
16
+ name: string;
17
+ pattern: string;
18
+ transform?: (pathSegment: string) => string;
19
+ };
20
+ declare const parsePath: (pathname: string) => PathState;
21
+ declare const parseHref: (href: string) => NavigationState;
22
+ declare const constructUrl: (outerHref: string, navigationState: NavigationState) => string;
23
+
24
+ export { FILES_PREFIX, type PathSegment, constructOuterUrl, constructUrl, getOuterHostname, getSearchParams, isAbsolutePath, isInternalHref, maybeParseUrl, parseHref, parsePath, parseTarget, repositoryPrefixURL };
@@ -0,0 +1,24 @@
1
+ import { NavigationState, PathState } from './TinkerableContext.js';
2
+ import 'react';
3
+ import './RoutingSpec.js';
4
+ import './sandboxTypes.js';
5
+
6
+ declare const FILES_PREFIX = "/files";
7
+ declare const getOuterHostname: (outerHref: string) => string;
8
+ declare const getSearchParams: (search?: string) => Record<string, string>;
9
+ declare const parseTarget: (target: string, navigation: NavigationState) => NavigationState;
10
+ declare const maybeParseUrl: (str: string) => URL | null;
11
+ declare const isAbsolutePath: (sandboxPath: string) => boolean;
12
+ declare const repositoryPrefixURL: (outerHref: string, navigationState: NavigationState) => string;
13
+ declare const constructOuterUrl: (previousOuterHref: string, sandboxTarget: string, navigationState: NavigationState, addFilesPrefix?: boolean) => string;
14
+ declare const isInternalHref: (outerHref: string, target: string, navigationState: NavigationState) => boolean;
15
+ type PathSegment = {
16
+ name: string;
17
+ pattern: string;
18
+ transform?: (pathSegment: string) => string;
19
+ };
20
+ declare const parsePath: (pathname: string) => PathState;
21
+ declare const parseHref: (href: string) => NavigationState;
22
+ declare const constructUrl: (outerHref: string, navigationState: NavigationState) => string;
23
+
24
+ export { FILES_PREFIX, type PathSegment, constructOuterUrl, constructUrl, getOuterHostname, getSearchParams, isAbsolutePath, isInternalHref, maybeParseUrl, parseHref, parsePath, parseTarget, repositoryPrefixURL };
@@ -0,0 +1,124 @@
1
+ import { joinPaths } from "./pathUtils";
2
+ const FILES_PREFIX = "/files";
3
+ const getOuterHostname = (outerHref) => {
4
+ const url = new URL(outerHref);
5
+ return `${url.protocol}//${url.hostname}`;
6
+ };
7
+ const getSearchParams = (search) => Object.fromEntries(
8
+ [...new URLSearchParams(search ?? window.location.search).entries()]
9
+ );
10
+ const parseTarget = (target, navigation) => {
11
+ const newNavigation = { ...navigation };
12
+ let [prehash, hash] = target.split("#");
13
+ if (prehash) {
14
+ let [path, search] = prehash.split("?");
15
+ if (path) {
16
+ newNavigation.sandboxPath = path;
17
+ }
18
+ newNavigation.search = search ? search : "";
19
+ }
20
+ newNavigation.hash = hash ? hash : "";
21
+ return newNavigation;
22
+ };
23
+ const maybeParseUrl = (str) => {
24
+ try {
25
+ return new URL(str);
26
+ } catch (_) {
27
+ return null;
28
+ }
29
+ };
30
+ const isAbsolutePath = (sandboxPath) => sandboxPath.startsWith("/");
31
+ const repositoryPrefixURL = (outerHref, navigationState) => constructUrl(outerHref, {
32
+ ...navigationState,
33
+ sandboxPath: ""
34
+ });
35
+ const constructOuterUrl = (previousOuterHref, sandboxTarget, navigationState, addFilesPrefix = true) => {
36
+ if (isAbsolutePath(sandboxTarget)) {
37
+ return constructUrl(
38
+ previousOuterHref,
39
+ {
40
+ ...navigationState,
41
+ sandboxPath: addFilesPrefix ? joinPaths(FILES_PREFIX, sandboxTarget) : sandboxTarget
42
+ }
43
+ );
44
+ }
45
+ return new URL(
46
+ sandboxTarget,
47
+ constructUrl(
48
+ previousOuterHref,
49
+ navigationState
50
+ )
51
+ ).toString();
52
+ };
53
+ const isInternalHref = (outerHref, target, navigationState) => {
54
+ const parsedUrl = maybeParseUrl(target);
55
+ if (parsedUrl) {
56
+ return target.startsWith(repositoryPrefixURL(outerHref, navigationState));
57
+ }
58
+ return true;
59
+ };
60
+ const PATH_SEGMENTS = [
61
+ { name: "mode", pattern: "\\w+" },
62
+ { name: "provider", pattern: "[a-zA-Z0-9-_]+" },
63
+ { name: "namespace", pattern: "[a-zA-Z0-9-_]+" },
64
+ { name: "repository", pattern: "[a-zA-Z0-9-_]+" },
65
+ { name: "ref", pattern: "[a-zA-Z0-9-_]+" },
66
+ { name: "sandboxPath", pattern: ".*", transform: (s) => `/${s}` }
67
+ ];
68
+ const OUTER_HREF_REGEXP = new RegExp("^" + PATH_SEGMENTS.map(({ name, pattern }) => `/(?<${name}>${pattern})`).join("") + "$");
69
+ const parsePath = (pathname) => {
70
+ const matchResults = pathname.match(OUTER_HREF_REGEXP)?.groups ?? {};
71
+ return PATH_SEGMENTS.reduce((acc, { name, transform }) => {
72
+ let value = void 0;
73
+ if (name in matchResults) {
74
+ value = matchResults[name];
75
+ }
76
+ if (!value) {
77
+ value = "";
78
+ }
79
+ if (typeof value === "string") {
80
+ acc[name] = transform ? transform(value) : value;
81
+ }
82
+ return acc;
83
+ }, {});
84
+ };
85
+ const parseHref = (href) => {
86
+ const parsedUrl = new URL(href);
87
+ const pathnameState = parsePath(parsedUrl.pathname);
88
+ return {
89
+ ...pathnameState,
90
+ search: parsedUrl.search.substring(1),
91
+ hash: parsedUrl.hash.substring(1)
92
+ };
93
+ };
94
+ const stripSlashPrefix = (s) => s.startsWith("/") ? s.substring(1) : s;
95
+ const constructUrl = (outerHref, navigationState) => {
96
+ const path = PATH_SEGMENTS.map(({ name }) => {
97
+ let value = navigationState[name];
98
+ return stripSlashPrefix(value ?? "");
99
+ }).join("/");
100
+ const host = getOuterHostname(outerHref);
101
+ let url = `${host}/${path}`;
102
+ if (navigationState.search) {
103
+ url += "?" + navigationState.search;
104
+ }
105
+ if (navigationState.hash) {
106
+ url += "#" + navigationState.hash;
107
+ }
108
+ return url;
109
+ };
110
+ export {
111
+ FILES_PREFIX,
112
+ constructOuterUrl,
113
+ constructUrl,
114
+ getOuterHostname,
115
+ getSearchParams,
116
+ isAbsolutePath,
117
+ isInternalHref,
118
+ maybeParseUrl,
119
+ parseHref,
120
+ parsePath,
121
+ parseTarget,
122
+ repositoryPrefixURL
123
+ };
124
+ //# sourceMappingURL=urlUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/urlUtils.ts"],"sourcesContent":["import { joinPaths } from \"./pathUtils\";\nimport { NavigationState, PathState } from \"./TinkerableContext\";\n\nexport const FILES_PREFIX = '/files';\n\nexport const getOuterHostname = (outerHref:string) => {\n const url = new URL(outerHref);\n return `${url.protocol}//${url.hostname}`;\n}\n\nexport const getSearchParams = (search?: string): Record<string, string> => Object.fromEntries(\n [...(new URLSearchParams(search ?? window.location.search).entries())]);\n\n\nexport const parseTarget = (target: string, navigation: NavigationState): NavigationState => {\n const newNavigation = { ...navigation };\n let [prehash, hash] = target.split(\"#\")\n if (prehash) {\n let [path, search] = prehash.split(\"?\")\n if (path) {\n newNavigation.sandboxPath = path\n }\n newNavigation.search = search ? search : '';\n }\n newNavigation.hash = hash ? hash : '';\n return newNavigation\n}\n\n\nexport const maybeParseUrl = (str: string): URL | null => {\n try {\n return new URL(str);\n } catch (_) {\n return null;\n }\n}\n\nexport const isAbsolutePath = (sandboxPath: string) => sandboxPath.startsWith('/');\n\nexport const repositoryPrefixURL = (outerHref:string, navigationState: NavigationState) => constructUrl(outerHref, {\n ...navigationState,\n sandboxPath: ''\n });\n\nexport const constructOuterUrl = (previousOuterHref:string, sandboxTarget:string, navigationState: NavigationState, addFilesPrefix=true):string => {\n if (isAbsolutePath(sandboxTarget)) {\n return constructUrl(\n previousOuterHref,\n {\n ...navigationState,\n sandboxPath: addFilesPrefix ? joinPaths(FILES_PREFIX, sandboxTarget) : sandboxTarget\n })\n }\n return (\n new URL(\n sandboxTarget,\n constructUrl(\n previousOuterHref,\n navigationState\n )\n )\n ).toString();\n}\n\nexport const isInternalHref = (outerHref:string, target: string, navigationState: NavigationState) => {\n const parsedUrl = maybeParseUrl(target);\n if (parsedUrl) {\n return target.startsWith(repositoryPrefixURL(outerHref, navigationState));\n }\n // if target is not a valid URL, then assume it's relative.\n return true;\n}\n\nexport type PathSegment = {\n name: string,\n pattern: string,\n transform?: (pathSegment: string) => string\n}\n\nconst PATH_SEGMENTS: PathSegment[] = [\n { name: 'mode', pattern: '\\\\w+' },\n { name: 'provider', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'namespace', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'repository', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'ref', pattern: '[a-zA-Z0-9-_]+' },\n { name: 'sandboxPath', pattern: '.*', transform: s => `/${s}` }\n];\n\nconst OUTER_HREF_REGEXP = new RegExp('^' + PATH_SEGMENTS.map(({ name, pattern }) => `\\/(?<${name}>${pattern})`).join('') + \"$\");\n\n\nexport const parsePath = (pathname: string): PathState => {\n const matchResults = pathname.match(OUTER_HREF_REGEXP)?.groups ?? {};\n return PATH_SEGMENTS.reduce((acc: Partial<PathState>, { name, transform }: PathSegment) => {\n let value: string | undefined = undefined;\n if (name in matchResults) {\n value = matchResults[name];\n }\n if (!value) {\n // fall back to default value if var not present in\n value = '';\n }\n if (typeof value === 'string') {\n acc[name] = transform ? transform(value) : value;\n }\n return acc;\n }, {}) as PathState;\n}\n\nexport const parseHref = (href: string): NavigationState => {\n const parsedUrl = new URL(href);\n const pathnameState = parsePath(parsedUrl.pathname);\n return {\n ...pathnameState,\n search: parsedUrl.search.substring(1),\n hash: parsedUrl.hash.substring(1),\n } as NavigationState\n}\n\nconst stripSlashPrefix = (s: string): string => s.startsWith('/') ? s.substring(1) : s;\n\nexport const constructUrl = (outerHref:string, navigationState: NavigationState): string => {\n const path = PATH_SEGMENTS.map(({ name }) => {\n let value = navigationState[name];\n return stripSlashPrefix(value ?? '');\n }).join('/');\n const host = getOuterHostname(outerHref);\n let url = `${host}/${path}`\n if (navigationState.search) {\n url += '?' + navigationState.search\n }\n if (navigationState.hash) {\n url += '#' + navigationState.hash\n }\n return url;\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@immediately-run/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Runtime SDK for code executing inside an immediately.run sandbox.",
5
+ "license": "MIT",
6
+ "repository": "github:immediately-run/immediately-run-sdk",
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.cjs"
16
+ },
17
+ "./*": {
18
+ "types": "./dist/*.d.ts",
19
+ "import": "./dist/*.js",
20
+ "require": "./dist/*.cjs"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "sideEffects": false,
27
+ "scripts": {
28
+ "build": "tsup",
29
+ "test": "jest",
30
+ "docs": "typedoc",
31
+ "prepublishOnly": "npm run build"
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^19.0.0",
35
+ "react-dom": "^19.0.0"
36
+ },
37
+ "dependencies": {
38
+ "react-error-boundary": "^6.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/jest": "^29.5.0",
42
+ "@types/react": "^19.0.0",
43
+ "@types/react-dom": "^19.0.0",
44
+ "jest": "^29.5.0",
45
+ "react": "^19.1.0",
46
+ "react-dom": "^19.1.0",
47
+ "ts-jest": "^29.1.0",
48
+ "ts-node": "^10.9.2",
49
+ "tsup": "^8.0.0",
50
+ "typedoc": "^0.27.0",
51
+ "typescript": "^5.6.0"
52
+ }
53
+ }