@atlassian/clientside-extensions-schema 3.0.2 → 3.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.
@@ -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 = (0, tslib_1.__importDefault)(require("glob"));
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 = (0, tslib_1.__importDefault)(require("rimraf"));
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 rimrafPromise(targetDir);
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 tslib_1 = require("tslib");
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 globPromise('./scalars/**/*.js', { cwd: __dirname });
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(() => (0, tslib_1.__importStar)(require(filePath)))).default;
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 globPromise('./providedTypes/*.js', { cwd: __dirname });
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(() => (0, tslib_1.__importStar)(require(filePath)))).default;
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":";;;AAAA,6DAAwB;AACxB,+BAAiC;AAGjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,cAAI,CAAC,CAAC;AAEpC,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,WAAW,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,CACZ,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,OAAO,CAAC,qEAAa,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,WAAW,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACtC,OAAO,CAAC,qEAAa,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 { promisify } from 'util';\nimport type { Scalar } from './scalars/types';\n\nconst globPromise = promisify(glob);\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 globPromise('./scalars/**/*.js', { cwd: __dirname });\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 globPromise('./providedTypes/*.js', { cwd: __dirname });\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
+ {"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 = (0, tslib_1.__importDefault)(require("glob"));
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 globPromise(pattern, {
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":"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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 { promisify } from 'util';\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 globPromise = promisify(glob);\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 globPromise(pattern, {\n ignore: '**/node_modules/**',\n absolute: true,\n cwd,\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
+ {"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 rimrafPromise(targetDir);
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 globPromise('./scalars/**/*.js', { cwd: __dirname });
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 globPromise('./providedTypes/*.js', { cwd: __dirname });
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,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpC,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,WAAW,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/E,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,WAAW,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzF,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 { promisify } from 'util';\nimport type { Scalar } from './scalars/types';\n\nconst globPromise = promisify(glob);\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 globPromise('./scalars/**/*.js', { cwd: __dirname });\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 globPromise('./providedTypes/*.js', { cwd: __dirname });\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
+ {"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 globPromise(pattern, {
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":"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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 { promisify } from 'util';\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 globPromise = promisify(glob);\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 globPromise(pattern, {\n ignore: '**/node_modules/**',\n absolute: true,\n cwd,\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
+ {"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":";AAwCA,wBAeE"}
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":"AASA,OAAO,KAAK,EAAiB,aAAa,EAA+B,MAAM,SAAS,CAAC;AA2CzF,wBAA8B,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBA4D9E"}
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 rimrafPromise(targetDir);
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 globPromise(pattern, { cwd, ignore: '**/node_modules/**' });
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 globPromise('./scalars/**/*.js', { cwd: __dirname });
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 globPromise('./providedTypes/*.js', { cwd: __dirname });
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 globPromise(pattern, {
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.2",
3
+ "version": "3.1.0",
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.2",
90
+ "@atlassian/clientside-extensions-registry": "^3.1.0",
92
91
  "@graphql-tools/schema": "^8.0.0",
93
92
  "@graphql-tools/utils": "^8.0.0",
94
93
  "chokidar": "3.6.0",
95
- "glob": "8.1.0",
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
- "rehype-add-classes": "1.0.0",
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": ">=12.19.0"
111
+ "node": ">=20.16.0"
114
112
  },
115
- "gitHead": "a1e02a9209592bbcb13acf1524d697c42d78d328"
113
+ "gitHead": "1237d7f0c4fb95343d966f9cede9ea69d6b880a5"
116
114
  }