@atlassian/clientside-extensions-schema 3.0.2 → 3.0.3
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/dist/cjs/bin/generate-from-schema.js +5 -8
- package/dist/cjs/bin/generate-from-schema.js.map +1 -1
- package/dist/cjs/graphql-definition.js +24 -8
- package/dist/cjs/graphql-definition.js.map +1 -1
- package/dist/cjs/loader/schema-loader.js +3 -4
- package/dist/cjs/loader/schema-loader.js.map +1 -1
- package/dist/esm/bin/generate-from-schema.js +5 -8
- package/dist/esm/bin/generate-from-schema.js.map +1 -1
- package/dist/esm/graphql-definition.js +3 -5
- package/dist/esm/graphql-definition.js.map +1 -1
- package/dist/esm/loader/schema-loader.js +3 -4
- package/dist/esm/loader/schema-loader.js.map +1 -1
- package/dist/types/graphql-definition.d.ts.map +1 -1
- package/dist/types/loader/schema-loader.d.ts.map +1 -1
- package/lib/bin/generate-from-schema.ts +5 -9
- package/lib/graphql-definition.ts +3 -6
- package/lib/loader/schema-loader.ts +3 -5
- package/package.json +7 -9
|
@@ -2,19 +2,16 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const glob_1 =
|
|
6
|
-
const util_1 = require("util");
|
|
5
|
+
const glob_1 = require("glob");
|
|
7
6
|
const yargs_1 = (0, tslib_1.__importDefault)(require("yargs"));
|
|
8
7
|
const path_1 = (0, tslib_1.__importDefault)(require("path"));
|
|
9
8
|
const fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
10
9
|
const mkdirp_1 = (0, tslib_1.__importDefault)(require("mkdirp"));
|
|
11
|
-
const rimraf_1 =
|
|
10
|
+
const rimraf_1 = require("rimraf");
|
|
12
11
|
const chokidar_1 = (0, tslib_1.__importDefault)(require("chokidar"));
|
|
13
12
|
const lodash_snakecase_1 = (0, tslib_1.__importDefault)(require("lodash.snakecase"));
|
|
14
13
|
const code_generator_1 = (0, tslib_1.__importDefault)(require("../code-generator/code-generator"));
|
|
15
14
|
const schema_1 = require("../utils/schema");
|
|
16
|
-
const globPromise = (0, util_1.promisify)(glob_1.default);
|
|
17
|
-
const rimrafPromise = (0, util_1.promisify)(rimraf_1.default);
|
|
18
15
|
const appendExtension = (baseFileName, extension) => {
|
|
19
16
|
return `${baseFileName}.${extension}`;
|
|
20
17
|
};
|
|
@@ -63,13 +60,13 @@ ${e}`);
|
|
|
63
60
|
}
|
|
64
61
|
};
|
|
65
62
|
const cleanupTargetDir = async (targetDir) => {
|
|
66
|
-
await
|
|
63
|
+
await (0, rimraf_1.rimraf)(targetDir);
|
|
67
64
|
};
|
|
68
65
|
const getProvidedTypesPaths = async (options) => {
|
|
69
66
|
let paths = [];
|
|
70
67
|
const { providedTypes: pattern, cwd } = options;
|
|
71
68
|
if (pattern) {
|
|
72
|
-
paths = await
|
|
69
|
+
paths = await (0, glob_1.glob)(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
73
70
|
if (!paths.length) {
|
|
74
71
|
console.warn(`Schema code generator: Provided pattern "${pattern}" could not find any files with GraphQL provided types`);
|
|
75
72
|
}
|
|
@@ -79,7 +76,7 @@ const getProvidedTypesPaths = async (options) => {
|
|
|
79
76
|
const generate = async (options, providedTypesPaths) => {
|
|
80
77
|
const { glob: pattern, cwd, strictMode, validatorOnly } = options;
|
|
81
78
|
// TODO: Extract all this
|
|
82
|
-
const resultFiles = await
|
|
79
|
+
const resultFiles = await (0, glob_1.glob)(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
83
80
|
const absoluteFilePaths = resultFiles.map((filePath) => path_1.default.resolve(path_1.default.join(cwd, filePath)));
|
|
84
81
|
// eslint-disable-next-line no-restricted-syntax
|
|
85
82
|
for (const absolutePath of absoluteFilePaths) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-from-schema.js","sourceRoot":"","sources":["../../../lib/bin/generate-from-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport glob from 'glob';\nimport { promisify } from 'util';\nimport yargs from 'yargs';\nimport path from 'path';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp';\nimport rimraf from 'rimraf';\nimport chokidar from 'chokidar';\nimport snakeCase from 'lodash.snakecase';\nimport generateCode from '../code-generator/code-generator';\nimport { loadSchema } from '../utils/schema';\n\nimport type { FileWriter, GeneratorOptions } from '../code-generator/code-generator';\n\nconst globPromise = promisify(glob);\nconst rimrafPromise = promisify(rimraf);\n\nconst appendExtension = (baseFileName: string, extension: string) => {\n return `${baseFileName}.${extension}`;\n};\n\nconst getGeneratorTargetDirectory = (filePath: string) => {\n return path.join(path.dirname(filePath), 'generated');\n};\n\nconst ensureFileName = (name: string) => {\n return snakeCase(name) as string;\n};\n\nconst bustCacheForFile = (filePath: string) => {\n delete require.cache[require.resolve(filePath)]; // watch mode cache busting\n};\n\nconst toRelativeIfExists = (filePath: string) => {\n if (!filePath) {\n return null;\n }\n\n return `./${filePath}`;\n};\n\nconst writeContentsToFile =\n (targetDirectory: string): FileWriter =>\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const baseFilename = ensureFileName(baseIdentifier);\n const wrapperFileNameTs = path.join(targetDirectory, appendExtension(baseFilename, 'ts'));\n const wrapperFileNameJs = path.join(targetDirectory, appendExtension(baseFilename, 'js'));\n await mkdirp(path.dirname(wrapperFileNameTs));\n await fs.promises.writeFile(wrapperFileNameTs, typescriptCode, 'utf8');\n await fs.promises.writeFile(wrapperFileNameJs, javascriptCode, 'utf8');\n\n return toRelativeIfExists(baseFilename);\n };\n\nconst generateContentForSchemaFile = async (filePath: string, generatorOptions: GeneratorOptions) => {\n bustCacheForFile(filePath);\n const schemaData = await loadSchema(filePath);\n if (!schemaData) {\n return;\n }\n const targetDirectory = getGeneratorTargetDirectory(filePath);\n try {\n await generateCode(schemaData, generatorOptions, writeContentsToFile(targetDirectory), true);\n } catch (e) {\n console.error(`Something went wrong trying to generate the hooks for your extension point specified at \"${filePath}\".\nIf this persists, feel free to raise an issue with us at: https://bitbucket.org/atlassian/atlassian-clientside-extensions/issues\n\nProvided Schema:\n${schemaData}\nOriginal Error:\n${e}`);\n }\n};\n\nconst cleanupTargetDir = async (targetDir: string) => {\n await rimrafPromise(targetDir);\n};\n\ntype Options = yargs.Arguments<{\n glob: string;\n cwd: string;\n watch: boolean;\n providedTypes: string;\n strictMode: boolean;\n validatorOnly: boolean;\n}>;\n\nconst getProvidedTypesPaths = async (options: Options): Promise<string[]> => {\n let paths: string[] = [];\n const { providedTypes: pattern, cwd } = options;\n\n if (pattern) {\n paths = await globPromise(pattern, { cwd, ignore: '**/node_modules/**' });\n\n if (!paths.length) {\n console.warn(`Schema code generator: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n }\n\n return paths;\n};\n\nconst generate = async (options: Options, providedTypesPaths: string[]) => {\n const { glob: pattern, cwd, strictMode, validatorOnly } = options;\n\n // TODO: Extract all this\n const resultFiles = await globPromise(pattern, { cwd, ignore: '**/node_modules/**' });\n const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n // we have to run this first to remove all preexisting directories before generating any files\n // eslint-disable-next-line no-await-in-loop\n await cleanupTargetDir(getGeneratorTargetDirectory(absolutePath));\n }\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode,\n validatorOnly,\n };\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n bustCacheForFile(absolutePath);\n // eslint-disable-next-line no-await-in-loop\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n};\n\nconst run = async (options: Options) => {\n // TODO: Refactor this part to be more smart about watching changes in provided types\n let providedTypesPaths = await getProvidedTypesPaths(options);\n\n await generate(options, providedTypesPaths);\n\n if (options.watch) {\n console.log('Schema code generator watching for changes....');\n chokidar\n .watch([options.glob, options.providedTypes], {\n cwd: options.cwd,\n ignored: (changedFilePath: string) => {\n return changedFilePath.includes('node_modules');\n },\n })\n .on('all', async (eventName: string, filePath: string) => {\n // eslint-disable-next-line no-console\n console.log(`Schema code generator detected changes. Rebuilding \"${filePath}\"...`);\n const absolutePath = path.resolve(path.join(options.cwd, filePath));\n if (eventName !== 'unlink') {\n bustCacheForFile(absolutePath);\n\n // TODO: Refactor this part to be more smart about watching changes in provided types\n providedTypesPaths = await getProvidedTypesPaths(options);\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode: options.strictMode,\n validatorOnly: options.validatorOnly,\n };\n\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n });\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [options]',\n 'Generate hooks and other related code based on provided schema.',\n (builder) => {\n builder\n .option('glob', {\n describe: `Glob pattern to find schemas.`,\n type: 'string',\n demandOption: true,\n })\n .option('strict-mode', {\n describe: 'Toggles validation strict mode',\n type: 'boolean',\n default: true,\n })\n .option('provided-types', {\n describe: `Glob pattern to find provided types for schemas.`,\n type: 'string',\n default: '',\n })\n /** @since 2.1.0 */\n .option('validator-only', {\n describe: `Only generate validators for the given schema files.`,\n type: 'boolean',\n default: false,\n })\n .option('watch', {\n describe: `Continuously watch for and generate on changes.`,\n type: 'boolean',\n default: false,\n })\n .option('cwd', {\n describe: `The cwd in which the glob is searching for schemas. Defaults to process.cwd()`,\n type: 'string',\n default: process.cwd(),\n });\n },\n run,\n )\n .help().argv; // for --help and -h to work\n"]}
|
|
1
|
+
{"version":3,"file":"generate-from-schema.js","sourceRoot":"","sources":["../../../lib/bin/generate-from-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { glob } from 'glob';\nimport yargs from 'yargs';\nimport path from 'path';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp';\nimport { rimraf } from 'rimraf';\nimport chokidar from 'chokidar';\nimport snakeCase from 'lodash.snakecase';\nimport generateCode from '../code-generator/code-generator';\nimport { loadSchema } from '../utils/schema';\n\nimport type { FileWriter, GeneratorOptions } from '../code-generator/code-generator';\n\nconst appendExtension = (baseFileName: string, extension: string) => {\n return `${baseFileName}.${extension}`;\n};\n\nconst getGeneratorTargetDirectory = (filePath: string) => {\n return path.join(path.dirname(filePath), 'generated');\n};\n\nconst ensureFileName = (name: string) => {\n return snakeCase(name) as string;\n};\n\nconst bustCacheForFile = (filePath: string) => {\n delete require.cache[require.resolve(filePath)]; // watch mode cache busting\n};\n\nconst toRelativeIfExists = (filePath: string) => {\n if (!filePath) {\n return null;\n }\n\n return `./${filePath}`;\n};\n\nconst writeContentsToFile =\n (targetDirectory: string): FileWriter =>\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const baseFilename = ensureFileName(baseIdentifier);\n const wrapperFileNameTs = path.join(targetDirectory, appendExtension(baseFilename, 'ts'));\n const wrapperFileNameJs = path.join(targetDirectory, appendExtension(baseFilename, 'js'));\n await mkdirp(path.dirname(wrapperFileNameTs));\n await fs.promises.writeFile(wrapperFileNameTs, typescriptCode, 'utf8');\n await fs.promises.writeFile(wrapperFileNameJs, javascriptCode, 'utf8');\n\n return toRelativeIfExists(baseFilename);\n };\n\nconst generateContentForSchemaFile = async (filePath: string, generatorOptions: GeneratorOptions) => {\n bustCacheForFile(filePath);\n const schemaData = await loadSchema(filePath);\n if (!schemaData) {\n return;\n }\n const targetDirectory = getGeneratorTargetDirectory(filePath);\n try {\n await generateCode(schemaData, generatorOptions, writeContentsToFile(targetDirectory), true);\n } catch (e) {\n console.error(`Something went wrong trying to generate the hooks for your extension point specified at \"${filePath}\".\nIf this persists, feel free to raise an issue with us at: https://bitbucket.org/atlassian/atlassian-clientside-extensions/issues\n\nProvided Schema:\n${schemaData}\nOriginal Error:\n${e}`);\n }\n};\n\nconst cleanupTargetDir = async (targetDir: string) => {\n await rimraf(targetDir);\n};\n\ntype Options = yargs.Arguments<{\n glob: string;\n cwd: string;\n watch: boolean;\n providedTypes: string;\n strictMode: boolean;\n validatorOnly: boolean;\n}>;\n\nconst getProvidedTypesPaths = async (options: Options): Promise<string[]> => {\n let paths: string[] = [];\n const { providedTypes: pattern, cwd } = options;\n\n if (pattern) {\n paths = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });\n\n if (!paths.length) {\n console.warn(`Schema code generator: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n }\n\n return paths;\n};\n\nconst generate = async (options: Options, providedTypesPaths: string[]) => {\n const { glob: pattern, cwd, strictMode, validatorOnly } = options;\n\n // TODO: Extract all this\n const resultFiles = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });\n const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n // we have to run this first to remove all preexisting directories before generating any files\n // eslint-disable-next-line no-await-in-loop\n await cleanupTargetDir(getGeneratorTargetDirectory(absolutePath));\n }\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode,\n validatorOnly,\n };\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n bustCacheForFile(absolutePath);\n // eslint-disable-next-line no-await-in-loop\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n};\n\nconst run = async (options: Options) => {\n // TODO: Refactor this part to be more smart about watching changes in provided types\n let providedTypesPaths = await getProvidedTypesPaths(options);\n\n await generate(options, providedTypesPaths);\n\n if (options.watch) {\n console.log('Schema code generator watching for changes....');\n chokidar\n .watch([options.glob, options.providedTypes], {\n cwd: options.cwd,\n ignored: (changedFilePath: string) => {\n return changedFilePath.includes('node_modules');\n },\n })\n .on('all', async (eventName: string, filePath: string) => {\n // eslint-disable-next-line no-console\n console.log(`Schema code generator detected changes. Rebuilding \"${filePath}\"...`);\n const absolutePath = path.resolve(path.join(options.cwd, filePath));\n if (eventName !== 'unlink') {\n bustCacheForFile(absolutePath);\n\n // TODO: Refactor this part to be more smart about watching changes in provided types\n providedTypesPaths = await getProvidedTypesPaths(options);\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode: options.strictMode,\n validatorOnly: options.validatorOnly,\n };\n\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n });\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [options]',\n 'Generate hooks and other related code based on provided schema.',\n (builder) => {\n builder\n .option('glob', {\n describe: `Glob pattern to find schemas.`,\n type: 'string',\n demandOption: true,\n })\n .option('strict-mode', {\n describe: 'Toggles validation strict mode',\n type: 'boolean',\n default: true,\n })\n .option('provided-types', {\n describe: `Glob pattern to find provided types for schemas.`,\n type: 'string',\n default: '',\n })\n /** @since 2.1.0 */\n .option('validator-only', {\n describe: `Only generate validators for the given schema files.`,\n type: 'boolean',\n default: false,\n })\n .option('watch', {\n describe: `Continuously watch for and generate on changes.`,\n type: 'boolean',\n default: false,\n })\n .option('cwd', {\n describe: `The cwd in which the glob is searching for schemas. Defaults to process.cwd()`,\n type: 'string',\n default: process.cwd(),\n });\n },\n run,\n )\n .help().argv; // for --help and -h to work\n"]}
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const glob_1 = (0, tslib_1.__importDefault)(require("glob"));
|
|
5
|
-
const util_1 = require("util");
|
|
6
|
-
const globPromise = (0, util_1.promisify)(glob_1.default);
|
|
22
|
+
const glob_1 = require("glob");
|
|
7
23
|
const scalarToDefinitionString = (scalar) => {
|
|
8
24
|
return `
|
|
9
25
|
"""
|
|
@@ -14,16 +30,16 @@ scalar ${scalar.name}
|
|
|
14
30
|
`;
|
|
15
31
|
};
|
|
16
32
|
const getScalars = async () => {
|
|
17
|
-
const scalarFiles = await
|
|
33
|
+
const scalarFiles = await (0, glob_1.glob)('./scalars/**/*.js', { cwd: __dirname, dotRelative: true });
|
|
18
34
|
const scalars = (await Promise.all(scalarFiles.map(async (filePath) => {
|
|
19
|
-
return (await Promise.resolve().then(() =>
|
|
35
|
+
return (await Promise.resolve().then(() => __importStar(require(filePath)))).default;
|
|
20
36
|
}))).filter(Boolean);
|
|
21
37
|
return scalars.map(scalarToDefinitionString).join('\n\n');
|
|
22
38
|
};
|
|
23
39
|
const getProvidedTypes = async () => {
|
|
24
|
-
const providedTypesFiles = await
|
|
40
|
+
const providedTypesFiles = await (0, glob_1.glob)('./providedTypes/*.js', { cwd: __dirname, dotRelative: true });
|
|
25
41
|
const providedTypes = await Promise.all(providedTypesFiles.map(async (filePath) => {
|
|
26
|
-
return (await Promise.resolve().then(() =>
|
|
42
|
+
return (await Promise.resolve().then(() => __importStar(require(filePath)))).default;
|
|
27
43
|
}));
|
|
28
44
|
return providedTypes.join('\n\n');
|
|
29
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-definition.js","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphql-definition.js","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAG5B,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,EAAE;IAChD,OAAO;;EAET,MAAM,CAAC,WAAW;WACT,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;;SAE3G,MAAM,CAAC,IAAI;CACnB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,WAAW,GAAG,MAAM,IAAA,WAAI,EAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,CACZ,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,OAAO,CAAC,wDAAa,QAAQ,GAAC,CAAC,CAAC,OAAiB,CAAC;IACtD,CAAC,CAAC,CACL,CACJ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IAChC,MAAM,kBAAkB,GAAG,MAAM,IAAA,WAAI,EAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACtC,OAAO,CAAC,wDAAa,QAAQ,GAAC,CAAC,CAAC,OAAiB,CAAC;IACtD,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,kBAAe,KAAK,IAAI,EAAE;IACtB,MAAM,iBAAiB,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7C,MAAM,wBAAwB,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1D,OAAO;;;;EAIT,iBAAiB;;;;;EAKjB,wBAAwB;CACzB,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { glob } from 'glob';\nimport type { Scalar } from './scalars/types';\n\nconst scalarToDefinitionString = (scalar: Scalar) => {\n return `\n\"\"\"\n${scalar.description}\nExample: ${typeof scalar.defaultExample === 'string' ? JSON.stringify(scalar.defaultExample) : scalar.defaultExample}\n\"\"\"\nscalar ${scalar.name}\n`;\n};\n\nconst getScalars = async () => {\n const scalarFiles = await glob('./scalars/**/*.js', { cwd: __dirname, dotRelative: true });\n const scalars = (\n await Promise.all(\n scalarFiles.map(async (filePath) => {\n return (await import(filePath)).default as Scalar;\n }),\n )\n ).filter(Boolean);\n\n return scalars.map(scalarToDefinitionString).join('\\n\\n');\n};\n\nconst getProvidedTypes = async () => {\n const providedTypesFiles = await glob('./providedTypes/*.js', { cwd: __dirname, dotRelative: true });\n const providedTypes = await Promise.all(\n providedTypesFiles.map(async (filePath) => {\n return (await import(filePath)).default as string;\n }),\n );\n\n return providedTypes.join('\\n\\n');\n};\n\nexport default async () => {\n const scalarDefinitions = await getScalars();\n const providedTypesDefinitions = await getProvidedTypes();\n\n return `\n###########################################################\n# GENERATED: Scalar definitions for clientside extensions #\n###########################################################\n${scalarDefinitions}\n\n############################################################################\n# GENERATED: Other provided types, enums, unions for clientside extensions #\n############################################################################\n${providedTypesDefinitions}\n`;\n};\n"]}
|
|
@@ -2,22 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const loader_utils_1 = require("loader-utils");
|
|
5
|
-
const glob_1 =
|
|
5
|
+
const glob_1 = require("glob");
|
|
6
6
|
const schema_utils_1 = require("schema-utils");
|
|
7
|
-
const util_1 = require("util");
|
|
8
7
|
const code_generator_1 = (0, tslib_1.__importDefault)(require("../code-generator/code-generator"));
|
|
9
8
|
const loader_schema_json_1 = (0, tslib_1.__importDefault)(require("./loader-schema.json"));
|
|
10
|
-
const globPromise = (0, util_1.promisify)(glob_1.default);
|
|
11
9
|
const toFilename = (loaderContext, identifier, content) => (0, loader_utils_1.interpolateName)(loaderContext, `${identifier}.[contenthash].js`, {
|
|
12
10
|
context: loaderContext.rootContext,
|
|
13
11
|
content,
|
|
14
12
|
});
|
|
15
13
|
const fileStore = new Map();
|
|
16
14
|
const findProvidedTypes = async (pattern, cwd) => {
|
|
17
|
-
const providedTypes = await
|
|
15
|
+
const providedTypes = await (0, glob_1.glob)(pattern, {
|
|
18
16
|
ignore: '**/node_modules/**',
|
|
19
17
|
absolute: true,
|
|
20
18
|
cwd,
|
|
19
|
+
dotRelative: true,
|
|
21
20
|
});
|
|
22
21
|
if (!providedTypes.length) {
|
|
23
22
|
console.warn(`CSE schema-loader: Provided pattern "${pattern}" could not find any files with GraphQL provided types`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":";;;AAAA,+CAAuE;AACvE
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOptions, interpolateName, parseQuery } from 'loader-utils';\nimport { glob } from 'glob';\nimport { validate } from 'schema-utils';\n\nimport type { Schema } from 'schema-utils/declarations/validate';\nimport type { GeneratorOptions } from '../code-generator/code-generator';\nimport generateCode from '../code-generator/code-generator';\nimport schema from './loader-schema.json';\nimport type { LoaderOptions, LoaderContext, LoaderCallback, QueryObject } from './types';\n\nconst toFilename = (loaderContext: LoaderContext, identifier: string, content: string) =>\n interpolateName(loaderContext, `${identifier}.[contenthash].js`, {\n context: loaderContext.rootContext,\n content,\n });\n\nconst fileStore = new Map<string, string>();\n\nconst findProvidedTypes = async (pattern: string, cwd?: string): Promise<string[]> => {\n const providedTypes = await glob(pattern, {\n ignore: '**/node_modules/**',\n absolute: true,\n cwd,\n dotRelative: true,\n });\n\n if (!providedTypes.length) {\n console.warn(`CSE schema-loader: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n\n return providedTypes;\n};\n\n// We need a way to serialize and convert Windows OS style path before outputting it as a string. The webpack loader had issues when the \"\\\"\n// directory separator character was not escaped and as a result the file path end-up glued together e.g. \"C:foobarfile.graphql\".\n// The solution is either to convert this path \"C:\\foo\\bar\\file.graphql\" to \"C:\\\\foo\\\\bar\\\\file.graphql\"\n// or to a unix style \"C:/foo/bar/file.graphql\"\nconst serializePath = (filePath: string): string => {\n return filePath.replace(/\\\\/g, '\\\\\\\\');\n};\n\n// The full name of the webpack GraphQL loader we are referencing in the generated code\nconst graphqlLoaderPath = '@atlassian/clientside-extensions-schema/loader';\n\nconst defaultLoaderOptions: LoaderOptions = {\n providedTypes: '',\n strictMode: true,\n};\n\n// get's a \"this\" context so !MUST! be a \"function\" and !NOT! an arrow-function\nexport default async function schemaLoader(this: LoaderContext, content: string) {\n const callback = this.async() as LoaderCallback;\n\n // Get and validate loader options\n const loaderOptions: Readonly<LoaderOptions> = getOptions(this);\n\n validate(schema as Schema, loaderOptions, { name: 'CSE schema-loader' });\n\n const { providedTypes: providedTypesPattern, strictMode }: LoaderOptions = { ...defaultLoaderOptions, ...loaderOptions };\n\n // Get provided types\n let providedTypesPaths: string[] = [];\n\n if (providedTypesPattern) {\n providedTypesPaths = await findProvidedTypes(providedTypesPattern, loaderOptions.cwd);\n\n // Track custom type files\n providedTypesPaths.forEach((file: string) => this.addDependency(file));\n }\n\n // Run schema compiler\n const loaderContext = this as LoaderContext;\n\n if (this.resourceQuery) {\n const rqOptions = parseQuery(this.resourceQuery) as QueryObject;\n\n if (rqOptions.subfile && fileStore.has(rqOptions.subfile)) {\n callback(null, fileStore.get(rqOptions.subfile));\n return;\n }\n\n callback(new Error(`CSE Schema-loader: Unknown subfile ${rqOptions.subfile} requested.`));\n return;\n }\n\n try {\n const generatorOptions: Partial<GeneratorOptions> = {\n providedTypesPaths,\n strictMode,\n };\n\n const [, , generatedJavascript] = await generateCode(\n content,\n generatorOptions,\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const filename = toFilename(loaderContext, baseIdentifier, javascriptCode);\n fileStore.set(filename, javascriptCode);\n\n const resourcePath = serializePath(loaderContext.resourcePath);\n\n return `!!${graphqlLoaderPath}!${resourcePath}?subfile=${filename}`;\n },\n false,\n );\n callback(null, generatedJavascript);\n } catch (err) {\n const error = err as Error;\n\n callback(error);\n }\n}\n"]}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import glob from 'glob';
|
|
3
|
-
import { promisify } from 'util';
|
|
2
|
+
import { glob } from 'glob';
|
|
4
3
|
import yargs from 'yargs';
|
|
5
4
|
import path from 'path';
|
|
6
5
|
import fs from 'fs';
|
|
7
6
|
import mkdirp from 'mkdirp';
|
|
8
|
-
import rimraf from 'rimraf';
|
|
7
|
+
import { rimraf } from 'rimraf';
|
|
9
8
|
import chokidar from 'chokidar';
|
|
10
9
|
import snakeCase from 'lodash.snakecase';
|
|
11
10
|
import generateCode from '../code-generator/code-generator';
|
|
12
11
|
import { loadSchema } from '../utils/schema';
|
|
13
|
-
const globPromise = promisify(glob);
|
|
14
|
-
const rimrafPromise = promisify(rimraf);
|
|
15
12
|
const appendExtension = (baseFileName, extension) => {
|
|
16
13
|
return `${baseFileName}.${extension}`;
|
|
17
14
|
};
|
|
@@ -60,13 +57,13 @@ ${e}`);
|
|
|
60
57
|
}
|
|
61
58
|
};
|
|
62
59
|
const cleanupTargetDir = async (targetDir) => {
|
|
63
|
-
await
|
|
60
|
+
await rimraf(targetDir);
|
|
64
61
|
};
|
|
65
62
|
const getProvidedTypesPaths = async (options) => {
|
|
66
63
|
let paths = [];
|
|
67
64
|
const { providedTypes: pattern, cwd } = options;
|
|
68
65
|
if (pattern) {
|
|
69
|
-
paths = await
|
|
66
|
+
paths = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
70
67
|
if (!paths.length) {
|
|
71
68
|
console.warn(`Schema code generator: Provided pattern "${pattern}" could not find any files with GraphQL provided types`);
|
|
72
69
|
}
|
|
@@ -76,7 +73,7 @@ const getProvidedTypesPaths = async (options) => {
|
|
|
76
73
|
const generate = async (options, providedTypesPaths) => {
|
|
77
74
|
const { glob: pattern, cwd, strictMode, validatorOnly } = options;
|
|
78
75
|
// TODO: Extract all this
|
|
79
|
-
const resultFiles = await
|
|
76
|
+
const resultFiles = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
80
77
|
const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));
|
|
81
78
|
// eslint-disable-next-line no-restricted-syntax
|
|
82
79
|
for (const absolutePath of absoluteFilePaths) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-from-schema.js","sourceRoot":"","sources":["../../../lib/bin/generate-from-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport glob from 'glob';\nimport { promisify } from 'util';\nimport yargs from 'yargs';\nimport path from 'path';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp';\nimport rimraf from 'rimraf';\nimport chokidar from 'chokidar';\nimport snakeCase from 'lodash.snakecase';\nimport generateCode from '../code-generator/code-generator';\nimport { loadSchema } from '../utils/schema';\n\nimport type { FileWriter, GeneratorOptions } from '../code-generator/code-generator';\n\nconst globPromise = promisify(glob);\nconst rimrafPromise = promisify(rimraf);\n\nconst appendExtension = (baseFileName: string, extension: string) => {\n return `${baseFileName}.${extension}`;\n};\n\nconst getGeneratorTargetDirectory = (filePath: string) => {\n return path.join(path.dirname(filePath), 'generated');\n};\n\nconst ensureFileName = (name: string) => {\n return snakeCase(name) as string;\n};\n\nconst bustCacheForFile = (filePath: string) => {\n delete require.cache[require.resolve(filePath)]; // watch mode cache busting\n};\n\nconst toRelativeIfExists = (filePath: string) => {\n if (!filePath) {\n return null;\n }\n\n return `./${filePath}`;\n};\n\nconst writeContentsToFile =\n (targetDirectory: string): FileWriter =>\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const baseFilename = ensureFileName(baseIdentifier);\n const wrapperFileNameTs = path.join(targetDirectory, appendExtension(baseFilename, 'ts'));\n const wrapperFileNameJs = path.join(targetDirectory, appendExtension(baseFilename, 'js'));\n await mkdirp(path.dirname(wrapperFileNameTs));\n await fs.promises.writeFile(wrapperFileNameTs, typescriptCode, 'utf8');\n await fs.promises.writeFile(wrapperFileNameJs, javascriptCode, 'utf8');\n\n return toRelativeIfExists(baseFilename);\n };\n\nconst generateContentForSchemaFile = async (filePath: string, generatorOptions: GeneratorOptions) => {\n bustCacheForFile(filePath);\n const schemaData = await loadSchema(filePath);\n if (!schemaData) {\n return;\n }\n const targetDirectory = getGeneratorTargetDirectory(filePath);\n try {\n await generateCode(schemaData, generatorOptions, writeContentsToFile(targetDirectory), true);\n } catch (e) {\n console.error(`Something went wrong trying to generate the hooks for your extension point specified at \"${filePath}\".\nIf this persists, feel free to raise an issue with us at: https://bitbucket.org/atlassian/atlassian-clientside-extensions/issues\n\nProvided Schema:\n${schemaData}\nOriginal Error:\n${e}`);\n }\n};\n\nconst cleanupTargetDir = async (targetDir: string) => {\n await rimrafPromise(targetDir);\n};\n\ntype Options = yargs.Arguments<{\n glob: string;\n cwd: string;\n watch: boolean;\n providedTypes: string;\n strictMode: boolean;\n validatorOnly: boolean;\n}>;\n\nconst getProvidedTypesPaths = async (options: Options): Promise<string[]> => {\n let paths: string[] = [];\n const { providedTypes: pattern, cwd } = options;\n\n if (pattern) {\n paths = await globPromise(pattern, { cwd, ignore: '**/node_modules/**' });\n\n if (!paths.length) {\n console.warn(`Schema code generator: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n }\n\n return paths;\n};\n\nconst generate = async (options: Options, providedTypesPaths: string[]) => {\n const { glob: pattern, cwd, strictMode, validatorOnly } = options;\n\n // TODO: Extract all this\n const resultFiles = await globPromise(pattern, { cwd, ignore: '**/node_modules/**' });\n const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n // we have to run this first to remove all preexisting directories before generating any files\n // eslint-disable-next-line no-await-in-loop\n await cleanupTargetDir(getGeneratorTargetDirectory(absolutePath));\n }\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode,\n validatorOnly,\n };\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n bustCacheForFile(absolutePath);\n // eslint-disable-next-line no-await-in-loop\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n};\n\nconst run = async (options: Options) => {\n // TODO: Refactor this part to be more smart about watching changes in provided types\n let providedTypesPaths = await getProvidedTypesPaths(options);\n\n await generate(options, providedTypesPaths);\n\n if (options.watch) {\n console.log('Schema code generator watching for changes....');\n chokidar\n .watch([options.glob, options.providedTypes], {\n cwd: options.cwd,\n ignored: (changedFilePath: string) => {\n return changedFilePath.includes('node_modules');\n },\n })\n .on('all', async (eventName: string, filePath: string) => {\n // eslint-disable-next-line no-console\n console.log(`Schema code generator detected changes. Rebuilding \"${filePath}\"...`);\n const absolutePath = path.resolve(path.join(options.cwd, filePath));\n if (eventName !== 'unlink') {\n bustCacheForFile(absolutePath);\n\n // TODO: Refactor this part to be more smart about watching changes in provided types\n providedTypesPaths = await getProvidedTypesPaths(options);\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode: options.strictMode,\n validatorOnly: options.validatorOnly,\n };\n\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n });\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [options]',\n 'Generate hooks and other related code based on provided schema.',\n (builder) => {\n builder\n .option('glob', {\n describe: `Glob pattern to find schemas.`,\n type: 'string',\n demandOption: true,\n })\n .option('strict-mode', {\n describe: 'Toggles validation strict mode',\n type: 'boolean',\n default: true,\n })\n .option('provided-types', {\n describe: `Glob pattern to find provided types for schemas.`,\n type: 'string',\n default: '',\n })\n /** @since 2.1.0 */\n .option('validator-only', {\n describe: `Only generate validators for the given schema files.`,\n type: 'boolean',\n default: false,\n })\n .option('watch', {\n describe: `Continuously watch for and generate on changes.`,\n type: 'boolean',\n default: false,\n })\n .option('cwd', {\n describe: `The cwd in which the glob is searching for schemas. Defaults to process.cwd()`,\n type: 'string',\n default: process.cwd(),\n });\n },\n run,\n )\n .help().argv; // for --help and -h to work\n"]}
|
|
1
|
+
{"version":3,"file":"generate-from-schema.js","sourceRoot":"","sources":["../../../lib/bin/generate-from-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { glob } from 'glob';\nimport yargs from 'yargs';\nimport path from 'path';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp';\nimport { rimraf } from 'rimraf';\nimport chokidar from 'chokidar';\nimport snakeCase from 'lodash.snakecase';\nimport generateCode from '../code-generator/code-generator';\nimport { loadSchema } from '../utils/schema';\n\nimport type { FileWriter, GeneratorOptions } from '../code-generator/code-generator';\n\nconst appendExtension = (baseFileName: string, extension: string) => {\n return `${baseFileName}.${extension}`;\n};\n\nconst getGeneratorTargetDirectory = (filePath: string) => {\n return path.join(path.dirname(filePath), 'generated');\n};\n\nconst ensureFileName = (name: string) => {\n return snakeCase(name) as string;\n};\n\nconst bustCacheForFile = (filePath: string) => {\n delete require.cache[require.resolve(filePath)]; // watch mode cache busting\n};\n\nconst toRelativeIfExists = (filePath: string) => {\n if (!filePath) {\n return null;\n }\n\n return `./${filePath}`;\n};\n\nconst writeContentsToFile =\n (targetDirectory: string): FileWriter =>\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const baseFilename = ensureFileName(baseIdentifier);\n const wrapperFileNameTs = path.join(targetDirectory, appendExtension(baseFilename, 'ts'));\n const wrapperFileNameJs = path.join(targetDirectory, appendExtension(baseFilename, 'js'));\n await mkdirp(path.dirname(wrapperFileNameTs));\n await fs.promises.writeFile(wrapperFileNameTs, typescriptCode, 'utf8');\n await fs.promises.writeFile(wrapperFileNameJs, javascriptCode, 'utf8');\n\n return toRelativeIfExists(baseFilename);\n };\n\nconst generateContentForSchemaFile = async (filePath: string, generatorOptions: GeneratorOptions) => {\n bustCacheForFile(filePath);\n const schemaData = await loadSchema(filePath);\n if (!schemaData) {\n return;\n }\n const targetDirectory = getGeneratorTargetDirectory(filePath);\n try {\n await generateCode(schemaData, generatorOptions, writeContentsToFile(targetDirectory), true);\n } catch (e) {\n console.error(`Something went wrong trying to generate the hooks for your extension point specified at \"${filePath}\".\nIf this persists, feel free to raise an issue with us at: https://bitbucket.org/atlassian/atlassian-clientside-extensions/issues\n\nProvided Schema:\n${schemaData}\nOriginal Error:\n${e}`);\n }\n};\n\nconst cleanupTargetDir = async (targetDir: string) => {\n await rimraf(targetDir);\n};\n\ntype Options = yargs.Arguments<{\n glob: string;\n cwd: string;\n watch: boolean;\n providedTypes: string;\n strictMode: boolean;\n validatorOnly: boolean;\n}>;\n\nconst getProvidedTypesPaths = async (options: Options): Promise<string[]> => {\n let paths: string[] = [];\n const { providedTypes: pattern, cwd } = options;\n\n if (pattern) {\n paths = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });\n\n if (!paths.length) {\n console.warn(`Schema code generator: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n }\n\n return paths;\n};\n\nconst generate = async (options: Options, providedTypesPaths: string[]) => {\n const { glob: pattern, cwd, strictMode, validatorOnly } = options;\n\n // TODO: Extract all this\n const resultFiles = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });\n const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n // we have to run this first to remove all preexisting directories before generating any files\n // eslint-disable-next-line no-await-in-loop\n await cleanupTargetDir(getGeneratorTargetDirectory(absolutePath));\n }\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode,\n validatorOnly,\n };\n\n // eslint-disable-next-line no-restricted-syntax\n for (const absolutePath of absoluteFilePaths) {\n bustCacheForFile(absolutePath);\n // eslint-disable-next-line no-await-in-loop\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n};\n\nconst run = async (options: Options) => {\n // TODO: Refactor this part to be more smart about watching changes in provided types\n let providedTypesPaths = await getProvidedTypesPaths(options);\n\n await generate(options, providedTypesPaths);\n\n if (options.watch) {\n console.log('Schema code generator watching for changes....');\n chokidar\n .watch([options.glob, options.providedTypes], {\n cwd: options.cwd,\n ignored: (changedFilePath: string) => {\n return changedFilePath.includes('node_modules');\n },\n })\n .on('all', async (eventName: string, filePath: string) => {\n // eslint-disable-next-line no-console\n console.log(`Schema code generator detected changes. Rebuilding \"${filePath}\"...`);\n const absolutePath = path.resolve(path.join(options.cwd, filePath));\n if (eventName !== 'unlink') {\n bustCacheForFile(absolutePath);\n\n // TODO: Refactor this part to be more smart about watching changes in provided types\n providedTypesPaths = await getProvidedTypesPaths(options);\n\n const generatorOptions: GeneratorOptions = {\n providedTypesPaths,\n strictMode: options.strictMode,\n validatorOnly: options.validatorOnly,\n };\n\n await generateContentForSchemaFile(absolutePath, generatorOptions);\n }\n });\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [options]',\n 'Generate hooks and other related code based on provided schema.',\n (builder) => {\n builder\n .option('glob', {\n describe: `Glob pattern to find schemas.`,\n type: 'string',\n demandOption: true,\n })\n .option('strict-mode', {\n describe: 'Toggles validation strict mode',\n type: 'boolean',\n default: true,\n })\n .option('provided-types', {\n describe: `Glob pattern to find provided types for schemas.`,\n type: 'string',\n default: '',\n })\n /** @since 2.1.0 */\n .option('validator-only', {\n describe: `Only generate validators for the given schema files.`,\n type: 'boolean',\n default: false,\n })\n .option('watch', {\n describe: `Continuously watch for and generate on changes.`,\n type: 'boolean',\n default: false,\n })\n .option('cwd', {\n describe: `The cwd in which the glob is searching for schemas. Defaults to process.cwd()`,\n type: 'string',\n default: process.cwd(),\n });\n },\n run,\n )\n .help().argv; // for --help and -h to work\n"]}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import glob from 'glob';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
|
-
const globPromise = promisify(glob);
|
|
1
|
+
import { glob } from 'glob';
|
|
4
2
|
const scalarToDefinitionString = (scalar) => {
|
|
5
3
|
return `
|
|
6
4
|
"""
|
|
@@ -11,14 +9,14 @@ scalar ${scalar.name}
|
|
|
11
9
|
`;
|
|
12
10
|
};
|
|
13
11
|
const getScalars = async () => {
|
|
14
|
-
const scalarFiles = await
|
|
12
|
+
const scalarFiles = await glob('./scalars/**/*.js', { cwd: __dirname, dotRelative: true });
|
|
15
13
|
const scalars = (await Promise.all(scalarFiles.map(async (filePath) => {
|
|
16
14
|
return (await import(filePath)).default;
|
|
17
15
|
}))).filter(Boolean);
|
|
18
16
|
return scalars.map(scalarToDefinitionString).join('\n\n');
|
|
19
17
|
};
|
|
20
18
|
const getProvidedTypes = async () => {
|
|
21
|
-
const providedTypesFiles = await
|
|
19
|
+
const providedTypesFiles = await glob('./providedTypes/*.js', { cwd: __dirname, dotRelative: true });
|
|
22
20
|
const providedTypes = await Promise.all(providedTypesFiles.map(async (filePath) => {
|
|
23
21
|
return (await import(filePath)).default;
|
|
24
22
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-definition.js","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"graphql-definition.js","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,EAAE;IAChD,OAAO;;EAET,MAAM,CAAC,WAAW;WACT,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;;SAE3G,MAAM,CAAC,IAAI;CACnB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,CACZ,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC;IACtD,CAAC,CAAC,CACL,CACJ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IAChC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACtC,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC;IACtD,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,eAAe,KAAK,IAAI,EAAE;IACtB,MAAM,iBAAiB,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7C,MAAM,wBAAwB,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1D,OAAO;;;;EAIT,iBAAiB;;;;;EAKjB,wBAAwB;CACzB,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { glob } from 'glob';\nimport type { Scalar } from './scalars/types';\n\nconst scalarToDefinitionString = (scalar: Scalar) => {\n return `\n\"\"\"\n${scalar.description}\nExample: ${typeof scalar.defaultExample === 'string' ? JSON.stringify(scalar.defaultExample) : scalar.defaultExample}\n\"\"\"\nscalar ${scalar.name}\n`;\n};\n\nconst getScalars = async () => {\n const scalarFiles = await glob('./scalars/**/*.js', { cwd: __dirname, dotRelative: true });\n const scalars = (\n await Promise.all(\n scalarFiles.map(async (filePath) => {\n return (await import(filePath)).default as Scalar;\n }),\n )\n ).filter(Boolean);\n\n return scalars.map(scalarToDefinitionString).join('\\n\\n');\n};\n\nconst getProvidedTypes = async () => {\n const providedTypesFiles = await glob('./providedTypes/*.js', { cwd: __dirname, dotRelative: true });\n const providedTypes = await Promise.all(\n providedTypesFiles.map(async (filePath) => {\n return (await import(filePath)).default as string;\n }),\n );\n\n return providedTypes.join('\\n\\n');\n};\n\nexport default async () => {\n const scalarDefinitions = await getScalars();\n const providedTypesDefinitions = await getProvidedTypes();\n\n return `\n###########################################################\n# GENERATED: Scalar definitions for clientside extensions #\n###########################################################\n${scalarDefinitions}\n\n############################################################################\n# GENERATED: Other provided types, enums, unions for clientside extensions #\n############################################################################\n${providedTypesDefinitions}\n`;\n};\n"]}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { getOptions, interpolateName, parseQuery } from 'loader-utils';
|
|
2
|
-
import glob from 'glob';
|
|
2
|
+
import { glob } from 'glob';
|
|
3
3
|
import { validate } from 'schema-utils';
|
|
4
|
-
import { promisify } from 'util';
|
|
5
4
|
import generateCode from '../code-generator/code-generator';
|
|
6
5
|
import schema from './loader-schema.json';
|
|
7
|
-
const globPromise = promisify(glob);
|
|
8
6
|
const toFilename = (loaderContext, identifier, content) => interpolateName(loaderContext, `${identifier}.[contenthash].js`, {
|
|
9
7
|
context: loaderContext.rootContext,
|
|
10
8
|
content,
|
|
11
9
|
});
|
|
12
10
|
const fileStore = new Map();
|
|
13
11
|
const findProvidedTypes = async (pattern, cwd) => {
|
|
14
|
-
const providedTypes = await
|
|
12
|
+
const providedTypes = await glob(pattern, {
|
|
15
13
|
ignore: '**/node_modules/**',
|
|
16
14
|
absolute: true,
|
|
17
15
|
cwd,
|
|
16
|
+
dotRelative: true,
|
|
18
17
|
});
|
|
19
18
|
if (!providedTypes.length) {
|
|
20
19
|
console.warn(`CSE schema-loader: Provided pattern "${pattern}" could not find any files with GraphQL provided types`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOptions, interpolateName, parseQuery } from 'loader-utils';\nimport { glob } from 'glob';\nimport { validate } from 'schema-utils';\n\nimport type { Schema } from 'schema-utils/declarations/validate';\nimport type { GeneratorOptions } from '../code-generator/code-generator';\nimport generateCode from '../code-generator/code-generator';\nimport schema from './loader-schema.json';\nimport type { LoaderOptions, LoaderContext, LoaderCallback, QueryObject } from './types';\n\nconst toFilename = (loaderContext: LoaderContext, identifier: string, content: string) =>\n interpolateName(loaderContext, `${identifier}.[contenthash].js`, {\n context: loaderContext.rootContext,\n content,\n });\n\nconst fileStore = new Map<string, string>();\n\nconst findProvidedTypes = async (pattern: string, cwd?: string): Promise<string[]> => {\n const providedTypes = await glob(pattern, {\n ignore: '**/node_modules/**',\n absolute: true,\n cwd,\n dotRelative: true,\n });\n\n if (!providedTypes.length) {\n console.warn(`CSE schema-loader: Provided pattern \"${pattern}\" could not find any files with GraphQL provided types`);\n }\n\n return providedTypes;\n};\n\n// We need a way to serialize and convert Windows OS style path before outputting it as a string. The webpack loader had issues when the \"\\\"\n// directory separator character was not escaped and as a result the file path end-up glued together e.g. \"C:foobarfile.graphql\".\n// The solution is either to convert this path \"C:\\foo\\bar\\file.graphql\" to \"C:\\\\foo\\\\bar\\\\file.graphql\"\n// or to a unix style \"C:/foo/bar/file.graphql\"\nconst serializePath = (filePath: string): string => {\n return filePath.replace(/\\\\/g, '\\\\\\\\');\n};\n\n// The full name of the webpack GraphQL loader we are referencing in the generated code\nconst graphqlLoaderPath = '@atlassian/clientside-extensions-schema/loader';\n\nconst defaultLoaderOptions: LoaderOptions = {\n providedTypes: '',\n strictMode: true,\n};\n\n// get's a \"this\" context so !MUST! be a \"function\" and !NOT! an arrow-function\nexport default async function schemaLoader(this: LoaderContext, content: string) {\n const callback = this.async() as LoaderCallback;\n\n // Get and validate loader options\n const loaderOptions: Readonly<LoaderOptions> = getOptions(this);\n\n validate(schema as Schema, loaderOptions, { name: 'CSE schema-loader' });\n\n const { providedTypes: providedTypesPattern, strictMode }: LoaderOptions = { ...defaultLoaderOptions, ...loaderOptions };\n\n // Get provided types\n let providedTypesPaths: string[] = [];\n\n if (providedTypesPattern) {\n providedTypesPaths = await findProvidedTypes(providedTypesPattern, loaderOptions.cwd);\n\n // Track custom type files\n providedTypesPaths.forEach((file: string) => this.addDependency(file));\n }\n\n // Run schema compiler\n const loaderContext = this as LoaderContext;\n\n if (this.resourceQuery) {\n const rqOptions = parseQuery(this.resourceQuery) as QueryObject;\n\n if (rqOptions.subfile && fileStore.has(rqOptions.subfile)) {\n callback(null, fileStore.get(rqOptions.subfile));\n return;\n }\n\n callback(new Error(`CSE Schema-loader: Unknown subfile ${rqOptions.subfile} requested.`));\n return;\n }\n\n try {\n const generatorOptions: Partial<GeneratorOptions> = {\n providedTypesPaths,\n strictMode,\n };\n\n const [, , generatedJavascript] = await generateCode(\n content,\n generatorOptions,\n async (baseIdentifier: string, typescriptCode: string, javascriptCode: string) => {\n const filename = toFilename(loaderContext, baseIdentifier, javascriptCode);\n fileStore.set(filename, javascriptCode);\n\n const resourcePath = serializePath(loaderContext.resourcePath);\n\n return `!!${graphqlLoaderPath}!${resourcePath}?subfile=${filename}`;\n },\n false,\n );\n callback(null, generatedJavascript);\n } catch (err) {\n const error = err as Error;\n\n callback(error);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-definition.d.ts","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"graphql-definition.d.ts","sourceRoot":"","sources":["../../lib/graphql-definition.ts"],"names":[],"mappings":";AAqCA,wBAeE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../lib/loader/schema-loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAiB,aAAa,EAA+B,MAAM,SAAS,CAAC;AA0CzF,wBAA8B,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBA4D9E"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import glob from 'glob';
|
|
3
|
-
import { promisify } from 'util';
|
|
2
|
+
import { glob } from 'glob';
|
|
4
3
|
import yargs from 'yargs';
|
|
5
4
|
import path from 'path';
|
|
6
5
|
import fs from 'fs';
|
|
7
6
|
import mkdirp from 'mkdirp';
|
|
8
|
-
import rimraf from 'rimraf';
|
|
7
|
+
import { rimraf } from 'rimraf';
|
|
9
8
|
import chokidar from 'chokidar';
|
|
10
9
|
import snakeCase from 'lodash.snakecase';
|
|
11
10
|
import generateCode from '../code-generator/code-generator';
|
|
@@ -13,9 +12,6 @@ import { loadSchema } from '../utils/schema';
|
|
|
13
12
|
|
|
14
13
|
import type { FileWriter, GeneratorOptions } from '../code-generator/code-generator';
|
|
15
14
|
|
|
16
|
-
const globPromise = promisify(glob);
|
|
17
|
-
const rimrafPromise = promisify(rimraf);
|
|
18
|
-
|
|
19
15
|
const appendExtension = (baseFileName: string, extension: string) => {
|
|
20
16
|
return `${baseFileName}.${extension}`;
|
|
21
17
|
};
|
|
@@ -74,7 +70,7 @@ ${e}`);
|
|
|
74
70
|
};
|
|
75
71
|
|
|
76
72
|
const cleanupTargetDir = async (targetDir: string) => {
|
|
77
|
-
await
|
|
73
|
+
await rimraf(targetDir);
|
|
78
74
|
};
|
|
79
75
|
|
|
80
76
|
type Options = yargs.Arguments<{
|
|
@@ -91,7 +87,7 @@ const getProvidedTypesPaths = async (options: Options): Promise<string[]> => {
|
|
|
91
87
|
const { providedTypes: pattern, cwd } = options;
|
|
92
88
|
|
|
93
89
|
if (pattern) {
|
|
94
|
-
paths = await
|
|
90
|
+
paths = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
95
91
|
|
|
96
92
|
if (!paths.length) {
|
|
97
93
|
console.warn(`Schema code generator: Provided pattern "${pattern}" could not find any files with GraphQL provided types`);
|
|
@@ -105,7 +101,7 @@ const generate = async (options: Options, providedTypesPaths: string[]) => {
|
|
|
105
101
|
const { glob: pattern, cwd, strictMode, validatorOnly } = options;
|
|
106
102
|
|
|
107
103
|
// TODO: Extract all this
|
|
108
|
-
const resultFiles = await
|
|
104
|
+
const resultFiles = await glob(pattern, { cwd, ignore: '**/node_modules/**', dotRelative: true });
|
|
109
105
|
const absoluteFilePaths = resultFiles.map((filePath) => path.resolve(path.join(cwd, filePath)));
|
|
110
106
|
|
|
111
107
|
// eslint-disable-next-line no-restricted-syntax
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import glob from 'glob';
|
|
2
|
-
import { promisify } from 'util';
|
|
1
|
+
import { glob } from 'glob';
|
|
3
2
|
import type { Scalar } from './scalars/types';
|
|
4
3
|
|
|
5
|
-
const globPromise = promisify(glob);
|
|
6
|
-
|
|
7
4
|
const scalarToDefinitionString = (scalar: Scalar) => {
|
|
8
5
|
return `
|
|
9
6
|
"""
|
|
@@ -15,7 +12,7 @@ scalar ${scalar.name}
|
|
|
15
12
|
};
|
|
16
13
|
|
|
17
14
|
const getScalars = async () => {
|
|
18
|
-
const scalarFiles = await
|
|
15
|
+
const scalarFiles = await glob('./scalars/**/*.js', { cwd: __dirname, dotRelative: true });
|
|
19
16
|
const scalars = (
|
|
20
17
|
await Promise.all(
|
|
21
18
|
scalarFiles.map(async (filePath) => {
|
|
@@ -28,7 +25,7 @@ const getScalars = async () => {
|
|
|
28
25
|
};
|
|
29
26
|
|
|
30
27
|
const getProvidedTypes = async () => {
|
|
31
|
-
const providedTypesFiles = await
|
|
28
|
+
const providedTypesFiles = await glob('./providedTypes/*.js', { cwd: __dirname, dotRelative: true });
|
|
32
29
|
const providedTypes = await Promise.all(
|
|
33
30
|
providedTypesFiles.map(async (filePath) => {
|
|
34
31
|
return (await import(filePath)).default as string;
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import { getOptions, interpolateName, parseQuery } from 'loader-utils';
|
|
2
|
-
import glob from 'glob';
|
|
2
|
+
import { glob } from 'glob';
|
|
3
3
|
import { validate } from 'schema-utils';
|
|
4
4
|
|
|
5
5
|
import type { Schema } from 'schema-utils/declarations/validate';
|
|
6
|
-
import { promisify } from 'util';
|
|
7
6
|
import type { GeneratorOptions } from '../code-generator/code-generator';
|
|
8
7
|
import generateCode from '../code-generator/code-generator';
|
|
9
8
|
import schema from './loader-schema.json';
|
|
10
9
|
import type { LoaderOptions, LoaderContext, LoaderCallback, QueryObject } from './types';
|
|
11
10
|
|
|
12
|
-
const globPromise = promisify(glob);
|
|
13
|
-
|
|
14
11
|
const toFilename = (loaderContext: LoaderContext, identifier: string, content: string) =>
|
|
15
12
|
interpolateName(loaderContext, `${identifier}.[contenthash].js`, {
|
|
16
13
|
context: loaderContext.rootContext,
|
|
@@ -20,10 +17,11 @@ const toFilename = (loaderContext: LoaderContext, identifier: string, content: s
|
|
|
20
17
|
const fileStore = new Map<string, string>();
|
|
21
18
|
|
|
22
19
|
const findProvidedTypes = async (pattern: string, cwd?: string): Promise<string[]> => {
|
|
23
|
-
const providedTypes = await
|
|
20
|
+
const providedTypes = await glob(pattern, {
|
|
24
21
|
ignore: '**/node_modules/**',
|
|
25
22
|
absolute: true,
|
|
26
23
|
cwd,
|
|
24
|
+
dotRelative: true,
|
|
27
25
|
});
|
|
28
26
|
|
|
29
27
|
if (!providedTypes.length) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlassian/clientside-extensions-schema",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Implements the handling of extension-schemas used for validation, code-generation and documentation.",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"homepage": "https://bitbucket.org/atlassian/atlassian-clientside-extensions#readme",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"verify": "tsc --noEmit -p tsconfig.all.json",
|
|
71
71
|
"watch": "tsc --watch -p tsconfig.cjs.json",
|
|
72
72
|
"test": "jest",
|
|
73
|
-
"test:webpack4": "WEBPACK_4=true jest",
|
|
73
|
+
"test:webpack4": "env NODE_OPTIONS=--openssl-legacy-provider WEBPACK_4=true jest",
|
|
74
74
|
"test:watch": "jest --watch"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
@@ -79,7 +79,6 @@
|
|
|
79
79
|
"@types/lodash.camelcase": "4.3.6",
|
|
80
80
|
"@types/lodash.snakecase": "4.1.6",
|
|
81
81
|
"@types/mkdirp": "1.0.2",
|
|
82
|
-
"@types/rimraf": "3.0.2",
|
|
83
82
|
"@types/webpack": "5.28.0",
|
|
84
83
|
"jest": "27.3.1",
|
|
85
84
|
"jest-in-case": "1.0.2",
|
|
@@ -88,19 +87,18 @@
|
|
|
88
87
|
"webpack-4": "npm:webpack@4.46.0"
|
|
89
88
|
},
|
|
90
89
|
"dependencies": {
|
|
91
|
-
"@atlassian/clientside-extensions-registry": "^3.0.
|
|
90
|
+
"@atlassian/clientside-extensions-registry": "^3.0.3",
|
|
92
91
|
"@graphql-tools/schema": "^8.0.0",
|
|
93
92
|
"@graphql-tools/utils": "^8.0.0",
|
|
94
93
|
"chokidar": "3.6.0",
|
|
95
|
-
"glob": "
|
|
94
|
+
"glob": "11.0.0",
|
|
96
95
|
"graphql": "^16.0.0",
|
|
97
96
|
"gray-matter": "4.0.3",
|
|
98
97
|
"loader-utils": "2.0.4",
|
|
99
98
|
"lodash.camelcase": "^4.3.0",
|
|
100
99
|
"lodash.snakecase": "4.1.1",
|
|
101
100
|
"mkdirp": "1.0.4",
|
|
102
|
-
"
|
|
103
|
-
"rimraf": "3.0.2",
|
|
101
|
+
"rimraf": "6.0.0",
|
|
104
102
|
"schema-utils": "3.1.1",
|
|
105
103
|
"tslib": "^2.2.0",
|
|
106
104
|
"typescript": "4.5.2",
|
|
@@ -110,7 +108,7 @@
|
|
|
110
108
|
"webpack": "^4.0.0 || ^5.0.0"
|
|
111
109
|
},
|
|
112
110
|
"engines": {
|
|
113
|
-
"node": ">=
|
|
111
|
+
"node": ">=20.16.0"
|
|
114
112
|
},
|
|
115
|
-
"gitHead": "
|
|
113
|
+
"gitHead": "1237d7f0c4fb95343d966f9cede9ea69d6b880a5"
|
|
116
114
|
}
|