From 8cb594f438ab340043df88c0c977c1f40968e135 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 15 Sep 2020 16:10:48 +0800 Subject: [PATCH 1/2] feat(v2): add relative uri support --- .../src/__tests__/validationSchemas.test.ts | 3 +++ packages/docusaurus-utils-validation/src/validationSchemas.ts | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts index 4045a838e070..165dd5a3cb40 100644 --- a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts +++ b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts @@ -111,11 +111,14 @@ describe('validation schemas', () => { test('URISchema', () => { const validURL = 'https://docusaurus.io'; const doubleHash = 'https://docusaurus.io#github#/:'; + const relativeUrl = '//docusaurus.io'; const invalidURL = 'invalidURL'; const urlFromIssue = 'https://riot.im/app/#/room/#ligo-public:matrix.org'; + const {testFail, testOK} = createTestHelpers({schema: URISchema}); testOK(validURL); testOK(doubleHash); + testOK(relativeUrl); testFail(invalidURL); testOK(urlFromIssue); }); diff --git a/packages/docusaurus-utils-validation/src/validationSchemas.ts b/packages/docusaurus-utils-validation/src/validationSchemas.ts index 4e2d57dac1ac..e9c3f934472c 100644 --- a/packages/docusaurus-utils-validation/src/validationSchemas.ts +++ b/packages/docusaurus-utils-validation/src/validationSchemas.ts @@ -29,6 +29,10 @@ export const URISchema = Joi.alternatives( Joi.string().uri(), Joi.custom((val, helpers) => { try { + if (typeof val === 'string' && val.startsWith('//')) { + return val; + } + const url = new URL(val); if (url) { return val; From 0f65fd26fae42d3011b1546617a096111fb2ce6f Mon Sep 17 00:00:00 2001 From: slorber Date: Tue, 29 Sep 2020 18:52:55 +0200 Subject: [PATCH 2/2] add // protocol relative uris test case --- .../src/__tests__/validationSchemas.test.ts | 11 +++++++---- .../src/validationSchemas.ts | 4 ---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts index ff52b8b6c12d..fa3ed289d32f 100644 --- a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts +++ b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts @@ -109,21 +109,24 @@ describe('validation schemas', () => { }); test('URISchema', () => { + const {testFail, testOK} = createTestHelpers({schema: URISchema}); + const validURL = 'https://docusaurus.io'; const doubleHash = 'https://docusaurus.io#github#/:'; - const relativeUrl = '//docusaurus.io'; const invalidURL = 'spaces are invalid in a URL'; const relativeURL = 'relativeURL'; const relativeURLWithParent = '../relativeURLWithParent'; const urlFromIssue = 'https://riot.im/app/#/room/#ligo-public:matrix.org'; - - const {testFail, testOK} = createTestHelpers({schema: URISchema}); testOK(validURL); testOK(doubleHash); - testOK(relativeUrl); testFail(invalidURL); testOK(relativeURL); testOK(relativeURLWithParent); testOK(urlFromIssue); + + const protocolRelativeUrl1 = '//docusaurus.io/path'; + const protocolRelativeUrl2 = '//docusaurus.io/docs/doc1#hash'; + testOK(protocolRelativeUrl1); + testOK(protocolRelativeUrl2); }); }); diff --git a/packages/docusaurus-utils-validation/src/validationSchemas.ts b/packages/docusaurus-utils-validation/src/validationSchemas.ts index ace70e546e81..d4cee25f1cec 100644 --- a/packages/docusaurus-utils-validation/src/validationSchemas.ts +++ b/packages/docusaurus-utils-validation/src/validationSchemas.ts @@ -29,10 +29,6 @@ export const URISchema = Joi.alternatives( Joi.string().uri({allowRelative: true}), Joi.custom((val, helpers) => { try { - if (typeof val === 'string' && val.startsWith('//')) { - return val; - } - const url = new URL(val); if (url) { return val;