Skip to content

Commit d2c67cb

Browse files
committed
Added types to transform utilities
1 parent 8882eb4 commit d2c67cb

File tree

7 files changed

+119
-48
lines changed

7 files changed

+119
-48
lines changed

packages/url-utils/src/utils/absolute-to-relative.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
// @ts-nocheck
21
// require the whatwg compatible URL library (same behaviour in node and browser)
3-
const {URL} = require('url');
4-
const stripSubdirectoryFromPath = require('./strip-subdirectory-from-path');
2+
import {URL} from 'url';
3+
import stripSubdirectoryFromPath from './strip-subdirectory-from-path';
4+
5+
interface AbsoluteToRelativeOptions {
6+
ignoreProtocol?: boolean;
7+
withoutSubdirectory?: boolean;
8+
assetsOnly?: boolean;
9+
staticImageUrlPrefix?: string;
10+
}
511

612
/**
713
* Convert an absolute URL to a root-relative path if it matches the supplied root domain.
@@ -13,8 +19,8 @@ const stripSubdirectoryFromPath = require('./strip-subdirectory-from-path');
1319
* @param {boolean} [options.withoutSubdirectory=false] Strip the root subdirectory from the returned path
1420
* @returns {string} The passed-in url or a relative path
1521
*/
16-
const absoluteToRelative = function absoluteToRelative(url, rootUrl, _options = {}) {
17-
const defaultOptions = {
22+
const absoluteToRelative = function absoluteToRelative(url: string, rootUrl: string, _options: AbsoluteToRelativeOptions = {}): string {
23+
const defaultOptions: Required<AbsoluteToRelativeOptions> = {
1824
ignoreProtocol: true,
1925
withoutSubdirectory: false,
2026
assetsOnly: false,
@@ -29,21 +35,25 @@ const absoluteToRelative = function absoluteToRelative(url, rootUrl, _options =
2935
}
3036
}
3137

32-
let parsedUrl;
33-
let parsedRoot;
38+
let parsedUrl: URL;
39+
let parsedRoot: URL | undefined;
3440

3541
try {
3642
parsedUrl = new URL(url, 'http://relative');
3743
parsedRoot = parsedUrl.origin === 'null' ? undefined : new URL(rootUrl || parsedUrl.origin);
3844

3945
// return the url as-is if it was relative or non-http
40-
if (parsedUrl.origin === 'null' || parsedUrl.origin === 'http://relative') {
46+
if (parsedUrl.origin === 'null' || parsedUrl.origin === 'http://relative' || !parsedRoot) {
4147
return url;
4248
}
4349
} catch (e) {
4450
return url;
4551
}
4652

53+
if (!parsedRoot) {
54+
return url;
55+
}
56+
4757
const matchesHost = parsedUrl.host === parsedRoot.host;
4858
const matchesProtocol = parsedUrl.protocol === parsedRoot.protocol;
4959
const matchesPath = parsedUrl.pathname.indexOf(parsedRoot.pathname) === 0;
@@ -61,4 +71,5 @@ const absoluteToRelative = function absoluteToRelative(url, rootUrl, _options =
6171
return url;
6272
};
6373

74+
export default absoluteToRelative;
6475
module.exports = absoluteToRelative;

packages/url-utils/src/utils/absolute-to-transform-ready.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
// @ts-nocheck
2-
const absoluteToRelative = require('./absolute-to-relative');
1+
import absoluteToRelative from './absolute-to-relative';
32

4-
const absoluteToTransformReady = function (url, root, _options) {
5-
const defaultOptions = {
3+
interface AbsoluteToTransformReadyOptions {
4+
replacementStr?: string;
5+
withoutSubdirectory?: boolean;
6+
}
7+
8+
const absoluteToTransformReady = function (url: string, root: string, _options: AbsoluteToTransformReadyOptions = {}): string {
9+
const defaultOptions: Required<AbsoluteToTransformReadyOptions> = {
610
replacementStr: '__GHOST_URL__',
711
withoutSubdirectory: true
812
};
@@ -37,4 +41,5 @@ const absoluteToTransformReady = function (url, root, _options) {
3741
return `${options.replacementStr}${relativeUrl}`;
3842
};
3943

44+
export default absoluteToTransformReady;
4045
module.exports = absoluteToTransformReady;

packages/url-utils/src/utils/index.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,17 @@ import isSSL from './is-ssl';
55
import replacePermalink from './replace-permalink';
66
import stripSubdirectoryFromPath from './strip-subdirectory-from-path';
77
import urlJoin from './url-join';
8+
import absoluteToRelative from './absolute-to-relative';
9+
import absoluteToTransformReady from './absolute-to-transform-ready';
10+
import relativeToAbsolute from './relative-to-absolute';
11+
import relativeToTransformReady from './relative-to-transform-ready';
12+
import toTransformReady from './to-transform-ready';
13+
import transformReadyToAbsolute from './transform-ready-to-absolute';
14+
import transformReadyToRelative from './transform-ready-to-relative';
815

916
module.exports = {
10-
absoluteToRelative: require('./absolute-to-relative'),
11-
absoluteToTransformReady: require('./absolute-to-transform-ready'),
17+
absoluteToRelative,
18+
absoluteToTransformReady,
1219
deduplicateDoubleSlashes,
1320
deduplicateSubdirectory,
1421
htmlAbsoluteToRelative: require('./html-absolute-to-relative'),
@@ -35,12 +42,12 @@ module.exports = {
3542
plaintextAbsoluteToTransformReady: require('./plaintext-absolute-to-transform-ready'),
3643
plaintextRelativeToTransformReady: require('./plaintext-relative-to-transform-ready'),
3744
plaintextToTransformReady: require('./plaintext-to-transform-ready'),
38-
relativeToAbsolute: require('./relative-to-absolute'),
39-
relativeToTransformReady: require('./relative-to-transform-ready'),
45+
relativeToAbsolute,
46+
relativeToTransformReady,
4047
replacePermalink,
4148
stripSubdirectoryFromPath,
42-
toTransformReady: require('./to-transform-ready'),
43-
transformReadyToAbsolute: require('./transform-ready-to-absolute'),
44-
transformReadyToRelative: require('./transform-ready-to-relative'),
49+
toTransformReady,
50+
transformReadyToAbsolute,
51+
transformReadyToRelative,
4552
urlJoin
4653
};

packages/url-utils/src/utils/relative-to-transform-ready.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,42 @@
1-
// @ts-nocheck
2-
const relativeToAbsolute = require('./relative-to-absolute');
3-
4-
const relativeToTransformReady = function (url, root, itemPath, _options) {
1+
import {URL} from 'url';
2+
import relativeToAbsolute from './relative-to-absolute';
3+
4+
interface RelativeToTransformReadyOptions {
5+
replacementStr?: string;
6+
staticImageUrlPrefix?: string;
7+
secure?: boolean;
8+
}
9+
10+
const relativeToTransformReady = function (
11+
url: string,
12+
root: string,
13+
itemPath?: string | RelativeToTransformReadyOptions | null,
14+
_options?: RelativeToTransformReadyOptions
15+
): string {
516
// itemPath is optional, if it's an object may be the options param instead
6-
if (typeof itemPath === 'object' && !_options) {
7-
_options = itemPath;
8-
itemPath = null;
17+
let actualItemPath: string | null = null;
18+
let actualOptions: RelativeToTransformReadyOptions;
19+
20+
if (itemPath && typeof itemPath === 'object' && !_options) {
21+
actualOptions = itemPath;
22+
actualItemPath = null;
23+
} else {
24+
actualOptions = _options || {};
25+
actualItemPath = typeof itemPath === 'string' ? itemPath : null;
926
}
1027

11-
const defaultOptions = {
28+
const defaultOptions: Required<RelativeToTransformReadyOptions> = {
1229
replacementStr: '__GHOST_URL__',
13-
staticImageUrlPrefix: 'content/images'
30+
staticImageUrlPrefix: 'content/images',
31+
secure: false
1432
};
1533
const overrideOptions = {
1634
secure: false
1735
};
18-
const options = Object.assign({}, defaultOptions, _options, overrideOptions);
36+
const options = Object.assign({}, defaultOptions, actualOptions, overrideOptions);
1937

2038
// convert to absolute
21-
const absoluteUrl = relativeToAbsolute(url, root, itemPath, options);
39+
const absoluteUrl = relativeToAbsolute(url, root, actualItemPath, options);
2240

2341
if (absoluteUrl === url) {
2442
return url;
@@ -40,4 +58,5 @@ const relativeToTransformReady = function (url, root, itemPath, _options) {
4058
return url;
4159
};
4260

61+
export default relativeToTransformReady;
4362
module.exports = relativeToTransformReady;
Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
1-
// @ts-nocheck
2-
const relativeToAbsolute = require('./relative-to-absolute');
3-
const absoluteToTransformReady = require('./absolute-to-transform-ready');
4-
5-
function toTransformReady(url, siteUrl, itemPath, options) {
6-
if (typeof itemPath === 'object' && !options) {
7-
options = itemPath;
8-
itemPath = null;
1+
import relativeToAbsolute from './relative-to-absolute';
2+
import absoluteToTransformReady from './absolute-to-transform-ready';
3+
4+
interface ToTransformReadyOptions {
5+
replacementStr?: string;
6+
withoutSubdirectory?: boolean;
7+
assetsOnly?: boolean;
8+
staticImageUrlPrefix?: string;
9+
secure?: boolean;
10+
}
11+
12+
function toTransformReady(
13+
url: string,
14+
siteUrl: string,
15+
itemPath?: string | ToTransformReadyOptions | null,
16+
options?: ToTransformReadyOptions
17+
): string {
18+
let actualItemPath: string | null = null;
19+
let actualOptions: ToTransformReadyOptions;
20+
21+
if (itemPath && typeof itemPath === 'object' && !options) {
22+
actualOptions = itemPath;
23+
actualItemPath = null;
24+
} else {
25+
actualOptions = options || {};
26+
actualItemPath = typeof itemPath === 'string' ? itemPath : null;
927
}
10-
const absoluteUrl = relativeToAbsolute(url, siteUrl, itemPath, options);
11-
return absoluteToTransformReady(absoluteUrl, siteUrl, options);
28+
const absoluteUrl = relativeToAbsolute(url, siteUrl, actualItemPath, actualOptions);
29+
return absoluteToTransformReady(absoluteUrl, siteUrl, actualOptions);
1230
}
1331

32+
export default toTransformReady;
1433
module.exports = toTransformReady;

packages/url-utils/src/utils/transform-ready-to-absolute.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
// @ts-nocheck
2-
function escapeRegExp(string) {
1+
function escapeRegExp(string: string): string {
32
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
43
}
54

6-
const transformReadyToAbsolute = function (str = '', root, _options = {}) {
7-
const defaultOptions = {
5+
interface TransformReadyToAbsoluteOptions {
6+
replacementStr?: string;
7+
}
8+
9+
const transformReadyToAbsolute = function (str: string = '', root: string, _options: TransformReadyToAbsoluteOptions = {}): string {
10+
const defaultOptions: Required<TransformReadyToAbsoluteOptions> = {
811
replacementStr: '__GHOST_URL__'
912
};
1013
const options = Object.assign({}, defaultOptions, _options);
@@ -18,4 +21,5 @@ const transformReadyToAbsolute = function (str = '', root, _options = {}) {
1821
return str.replace(replacementRegex, root.replace(/\/$/, ''));
1922
};
2023

24+
export default transformReadyToAbsolute;
2125
module.exports = transformReadyToAbsolute;

packages/url-utils/src/utils/transform-ready-to-relative.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
// @ts-nocheck
2-
function escapeRegExp(string) {
1+
import {URL} from 'url';
2+
3+
function escapeRegExp(string: string): string {
34
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
45
}
56

6-
const transformReadyToRelative = function (str = '', root, _options = {}) {
7-
const defaultOptions = {
7+
interface TransformReadyToRelativeOptions {
8+
replacementStr?: string;
9+
}
10+
11+
const transformReadyToRelative = function (str: string = '', root: string, _options: TransformReadyToRelativeOptions = {}): string {
12+
const defaultOptions: Required<TransformReadyToRelativeOptions> = {
813
replacementStr: '__GHOST_URL__'
914
};
1015
const options = Object.assign({}, defaultOptions, _options);
@@ -22,4 +27,5 @@ const transformReadyToRelative = function (str = '', root, _options = {}) {
2227
return str.replace(replacementRegex, subdir);
2328
};
2429

30+
export default transformReadyToRelative;
2531
module.exports = transformReadyToRelative;

0 commit comments

Comments
 (0)