Use stable URI identifiers for JSON schemas to avoid potential race conditions.

This commit is contained in:
David Anson 2023-09-28 20:48:50 -07:00
parent dd6fe21ac7
commit 6720eadad4

View file

@ -18,10 +18,10 @@ const rules = require("../lib/rules");
const customRules = require("./rules/rules.js"); const customRules = require("./rules/rules.js");
const configSchema = require("../schema/markdownlint-config-schema.json"); const configSchema = require("../schema/markdownlint-config-schema.json");
const jsonSchemaVersion = "http://json-schema.org/draft-07/schema#";
// eslint-disable-next-line max-len
const markdownlintConfigSchemaUri = "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json";
const deprecatedRuleNames = new Set(constants.deprecatedRuleNames); const deprecatedRuleNames = new Set(constants.deprecatedRuleNames);
const jsonSchemaVersion = "http://json-schema.org/draft-07/schema#";
const configSchemaUri = "https://example.com/configSchema";
const configSchemaStrictUri = "https://example.com/configSchemaStrict";
const configSchemaStrict = { const configSchemaStrict = {
...configSchema, ...configSchema,
"additionalProperties": false "additionalProperties": false
@ -918,8 +918,8 @@ test("validateJsonUsingConfigSchemaStrict", async(t) => {
const { addSchema, validate } = const { addSchema, validate } =
// eslint-disable-next-line n/file-extension-in-import // eslint-disable-next-line n/file-extension-in-import
await import("@hyperjump/json-schema/draft-07"); await import("@hyperjump/json-schema/draft-07");
addSchema(configSchemaStrict, markdownlintConfigSchemaUri); addSchema(configSchemaStrict, configSchemaStrictUri);
const validateConfigSchema = await validate(markdownlintConfigSchemaUri); const validateConfigSchema = await validate(configSchemaStrictUri);
const configRe = const configRe =
/^[\s\S]*<!-- markdownlint-configure-file ([\s\S]*) -->[\s\S]*$/; /^[\s\S]*<!-- markdownlint-configure-file ([\s\S]*) -->[\s\S]*$/;
const ignoreFiles = new Set([ const ignoreFiles = new Set([
@ -957,9 +957,7 @@ test("validateConfigSchemaAllowsUnknownProperties", async(t) => {
const { addSchema, validate } = const { addSchema, validate } =
// eslint-disable-next-line n/file-extension-in-import // eslint-disable-next-line n/file-extension-in-import
await import("@hyperjump/json-schema/draft-07"); await import("@hyperjump/json-schema/draft-07");
const configSchemaUri = "https://example.com/configSchema";
addSchema(configSchema, configSchemaUri); addSchema(configSchema, configSchemaUri);
const configSchemaStrictUri = "https://example.com/configSchemaStrict";
addSchema(configSchemaStrict, configSchemaStrictUri); addSchema(configSchemaStrict, configSchemaStrictUri);
const testCases = [ const testCases = [
{ {
@ -994,8 +992,8 @@ test("validateConfigSchemaAppliesToUnknownProperties", async(t) => {
const { addSchema, validate } = const { addSchema, validate } =
// eslint-disable-next-line n/file-extension-in-import // eslint-disable-next-line n/file-extension-in-import
await import("@hyperjump/json-schema/draft-07"); await import("@hyperjump/json-schema/draft-07");
addSchema(configSchema, markdownlintConfigSchemaUri); addSchema(configSchema, configSchemaUri);
const validateConfigSchema = await validate(markdownlintConfigSchemaUri); const validateConfigSchema = await validate(configSchemaUri);
for (const allowed of [ true, {} ]) { for (const allowed of [ true, {} ]) {
t.true( t.true(
validateConfigSchema({ "property": allowed }, "BASIC").valid, validateConfigSchema({ "property": allowed }, "BASIC").valid,
@ -1029,9 +1027,8 @@ test("validateConfigExampleJson", async(t) => {
"utf8" "utf8"
); );
const jsonObject = JSON.parse(stripJsonComments(dataJson)); const jsonObject = JSON.parse(stripJsonComments(dataJson));
addSchema(configSchemaStrict, markdownlintConfigSchemaUri); addSchema(configSchemaStrict, configSchemaStrictUri);
const result = const result = await validate(configSchemaStrictUri, jsonObject, "BASIC");
await validate(markdownlintConfigSchemaUri, jsonObject, "BASIC");
t.true( t.true(
result.valid, result.valid,
`${fileJson}\n${JSON.stringify(result, null, 2)}` `${fileJson}\n${JSON.stringify(result, null, 2)}`