@atlassian/clientside-extensions-webpack-plugin 2.4.1 → 2.4.3-4bc52a8-l5um026o

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.
@@ -21,12 +21,17 @@ module.exports = class ClientsideExtensionsWebpackPlugin {
21
21
  this.outputFilename = options.xmlDescriptors;
22
22
  this.pattern = options.pattern;
23
23
  this.cwd = options.cwd || process.cwd();
24
- this.manifests = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [
24
+ utils_1.debugLog(`cwd: ${this.cwd}`);
25
+ const globFoundFiles = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [
25
26
  '**/node_modules/**',
26
27
  '**/target/**',
27
- ])
28
+ ]);
29
+ utils_1.debugLog(`Glob found (with the pattern: ${this.pattern}) these files: ${globFoundFiles}`);
30
+ const manifests = globFoundFiles
28
31
  .map((file) => ClientsideExtensionsWebpackPlugin.parseManifestFromComment(file, this.cwd))
29
32
  .filter(utils_1.isNotNull);
33
+ utils_1.debugLog(`Found the following manifests ${JSON.stringify(manifests)}`);
34
+ this.manifests = manifests;
30
35
  }
31
36
  generateEntrypoints() {
32
37
  return this.manifests.reduce((agg, manifest) => {
@@ -123,6 +128,7 @@ module.exports = class ClientsideExtensionsWebpackPlugin {
123
128
  filePath,
124
129
  ...annotations,
125
130
  };
131
+ utils_1.debugLog(`Generated manifest: ${JSON.stringify(manifest)}`);
126
132
  return manifest;
127
133
  }
128
134
  static parseManifestFromComment(file, cwd) {
@@ -1 +1 @@
1
- {"version":3,"file":"ClientsideExtensionsWebpackPlugin.js","sourceRoot":"","sources":["../../lib/ClientsideExtensionsWebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport type { Compilation, Compiler, WebpackPluginInstance } from 'webpack';\nimport glob from 'glob';\nimport kebabCase from 'lodash/kebabCase';\nimport { pd as PrettyData } from 'pretty-data';\nimport VirtualModulePlugin from 'webpack-virtual-modules';\nimport transformComment from './transform-comment';\nimport type { AnnotationKey, AnnotationParserFunction, AnnotationParserOptions, Annotations, RawAnnotations } from './annotations';\nimport annotationsParsers from './annotations';\n\nimport generateWebfragmentDescriptor from './generator/webfragmentDescriptor';\nimport generateWebpageDescriptor, { PAGE_DATA_PROVIDER_DATA_KEY } from './generator/webpageDescriptor';\nimport { generateEntrypointCode, isPageExtension } from './generator/entrypoint';\n\nimport type { ClientsideExtensionsManifest, ClientsideExtensionsOptions, DataProvider, IWrmPluginOptions } from './types';\nimport { getKeyValue, isNotNull } from './utils';\n\nimport transformConditionToConditionMapObject from './generator/conditions';\n\n// Infer the type \"Source\" which is not exposed by Webpack\ntype Asset = Compilation['assets'] extends Record<string, infer S> ? S : never;\n\ninterface IClientsideExtensionsPluginOptions {\n pattern?: string;\n cwd?: string;\n xmlDescriptors?: string;\n}\n\nexport = class ClientsideExtensionsWebpackPlugin {\n private readonly pattern: string;\n\n private readonly cwd: string;\n\n private readonly outputFilename?: string;\n\n private manifests: ClientsideExtensionsManifest[];\n\n constructor(options: IClientsideExtensionsPluginOptions = {}) {\n if (!options.pattern) {\n throw new Error('No pattern was specified to match clientside extensions');\n }\n\n this.outputFilename = options.xmlDescriptors;\n this.pattern = options.pattern;\n this.cwd = options.cwd || process.cwd();\n\n this.manifests = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [\n '**/node_modules/**',\n '**/target/**',\n ])\n .map((file) => ClientsideExtensionsWebpackPlugin.parseManifestFromComment(file, this.cwd))\n .filter(isNotNull);\n }\n\n public generateEntrypoints() {\n return this.manifests.reduce((agg, manifest) => {\n const id = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(manifest.key);\n agg[id] = ClientsideExtensionsWebpackPlugin.getFilenameForEntry(id);\n\n return agg;\n }, {} as { [key: string]: string });\n }\n\n apply(compiler: Compiler) {\n const wrmOptions = ClientsideExtensionsWebpackPlugin.getWrmWebpackPluginOptions(compiler);\n\n const extensionsOptions = this.manifests.map((manifest) => {\n return ClientsideExtensionsWebpackPlugin.manifestToPluginOptions(wrmOptions.pluginKey, manifest);\n });\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addContextToEntrypoints(extensionsOptions, wrmOptions);\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addDataProvidersToEntrypoints(extensionsOptions, wrmOptions);\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addConditionToEntrypoint(extensionsOptions, wrmOptions);\n\n const virtualModules = extensionsOptions.reduce((agg, extensionOption) => {\n const fileName = ClientsideExtensionsWebpackPlugin.getFilenameForEntry(extensionOption.id);\n agg[fileName] = generateEntrypointCode(extensionOption);\n return agg;\n }, {} as Record<string, string>);\n new VirtualModulePlugin(virtualModules).apply(compiler);\n\n compiler.hooks.compilation.tap('Tap compilation for XML generation', (compilation) => {\n const webfragmentDescriptors = extensionsOptions.map((extensionOption) => generateWebfragmentDescriptor(extensionOption));\n const webpageDescriptors = extensionsOptions.map((extensionOption) => generateWebpageDescriptor(extensionOption));\n\n const descriptors = [...webfragmentDescriptors, ...webpageDescriptors].join('');\n const xmlDescriptors = PrettyData.xml(`<clientside-extension>${descriptors}</clientside-extension>`);\n\n const xmlDescriptorDirname = path.dirname(\n path.relative(compiler.options.output.path || '', this.outputFilename || wrmOptions.xmlDescriptors),\n );\n const xmlDescriptorFilename = path.basename(this.outputFilename || 'wr-generated-clientside-extensions.xml');\n const webpanelXmlDescriptorFilename = path.join(xmlDescriptorDirname, xmlDescriptorFilename);\n\n compilation.hooks.additionalAssets.tap('Generate clientside-extension XML', () => {\n compilation.assets[webpanelXmlDescriptorFilename] = {\n source: () => Buffer.from(xmlDescriptors),\n size: () => Buffer.byteLength(xmlDescriptors),\n } as Asset;\n });\n });\n }\n\n private static addContextToEntrypoints(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n extensionOptions.forEach((extensionOption) => {\n const { contextMap } = wrmOptions;\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const context = extensionOption.extensionPoint;\n\n contextMap.set(entrypointId, [context]);\n });\n }\n\n private static addDataProvidersToEntrypoints(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n extensionOptions\n .filter((extensionOption) => Boolean(extensionOption.pageDataProvider))\n .forEach((extensionOption) => {\n const { dataProvidersMap } = wrmOptions;\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const dataProvider: DataProvider = {\n key: PAGE_DATA_PROVIDER_DATA_KEY,\n class: extensionOption.pageDataProvider!,\n };\n\n dataProvidersMap.set(entrypointId, [dataProvider]);\n });\n }\n\n private static addConditionToEntrypoint(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hasCondition = (extensionOptions: ClientsideExtensionsOptions) => Boolean(extensionOptions.condition);\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const isNotPageExtension = (extensionOptions: ClientsideExtensionsOptions) => !isPageExtension(extensionOptions);\n\n extensionOptions\n .filter(hasCondition)\n .filter(isNotPageExtension)\n .forEach((extensionOption) => {\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const conditionMap = transformConditionToConditionMapObject(extensionOption.condition!);\n\n const conditionMapPluginOption = wrmOptions.conditionMap as Map<string, object>;\n\n conditionMapPluginOption.set(entrypointId, conditionMap);\n });\n }\n\n private static transformAnnotationsIntoManifest(\n rawAnnotations: RawAnnotations,\n filePath: string,\n cwd: string,\n ): ClientsideExtensionsManifest {\n const parserOptions: AnnotationParserOptions = {\n cwd,\n filePath,\n };\n\n const annotations = {} as Annotations;\n const entries = Object.entries(annotationsParsers) as [[AnnotationKey, AnnotationParserFunction]];\n\n for (const [annotationKey, annotationParser] of entries) {\n const rawAnnotation = getKeyValue(rawAnnotations, annotationKey);\n const newAnnotations = annotationParser(rawAnnotation, rawAnnotations, parserOptions);\n\n if (newAnnotations !== null) {\n Object.assign(annotations, newAnnotations);\n }\n }\n\n const manifest: ClientsideExtensionsManifest = {\n id: ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(annotations.key),\n filePath,\n ...annotations,\n };\n\n return manifest;\n }\n\n private static parseManifestFromComment(file: string, cwd: string): ClientsideExtensionsManifest | null {\n const fileContent = fs.readFileSync(file, 'utf8');\n const annotations = transformComment(fileContent);\n\n if (!annotations) {\n console.warn(`Client-side Extension: The file: \"${file}\" does not contain meta comments. Skipping XML-descriptor generation.`);\n return null;\n }\n\n return ClientsideExtensionsWebpackPlugin.transformAnnotationsIntoManifest(annotations, file, cwd);\n }\n\n private static findFilesByPattern(pattern: string, cwd: string, ignore?: string[]) {\n return glob.sync(pattern, { absolute: true, cwd, ignore });\n }\n\n private static getWrmWebpackPluginOptions(compiler: Compiler): IWrmPluginOptions {\n const { plugins } = compiler.options;\n if (!plugins) {\n throw new Error(`Something went mighty wrong. Can't find any plugins in webpack`);\n }\n const wrmPlugin = plugins.find((p) => p.constructor.name === 'WrmPlugin');\n\n if (!wrmPlugin) {\n throw new Error(\n `Can't find the WrmPlugin. Make sure you are using this plugin only in conjunction with the atlassian-webresource-webpack-plugin`,\n );\n }\n\n return (wrmPlugin as WebpackPluginInstance & { options: IWrmPluginOptions }).options;\n }\n\n private static getFilenameForEntry(manifestId: string) {\n return `./generated-clientside-extension/${manifestId}.js`;\n }\n\n private static manifestToPluginOptions(pluginKey: string, manifest: ClientsideExtensionsManifest): ClientsideExtensionsOptions {\n const { id, key } = manifest;\n const resourceKey = `entrypoint-${id}`;\n\n return {\n ...manifest,\n pluginKey,\n entryPoint: resourceKey,\n fullyQualifiedNamespace: `${pluginKey}:${key}`,\n };\n }\n\n private static getIdFromManifestKey(key: string) {\n return kebabCase(key);\n }\n};\n"]}
1
+ {"version":3,"file":"ClientsideExtensionsWebpackPlugin.js","sourceRoot":"","sources":["../../lib/ClientsideExtensionsWebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport type { Compilation, Compiler, WebpackPluginInstance } from 'webpack';\nimport glob from 'glob';\nimport kebabCase from 'lodash/kebabCase';\nimport { pd as PrettyData } from 'pretty-data';\nimport VirtualModulePlugin from 'webpack-virtual-modules';\nimport transformComment from './transform-comment';\nimport type { AnnotationKey, AnnotationParserFunction, AnnotationParserOptions, Annotations, RawAnnotations } from './annotations';\nimport annotationsParsers from './annotations';\n\nimport generateWebfragmentDescriptor from './generator/webfragmentDescriptor';\nimport generateWebpageDescriptor, { PAGE_DATA_PROVIDER_DATA_KEY } from './generator/webpageDescriptor';\nimport { generateEntrypointCode, isPageExtension } from './generator/entrypoint';\n\nimport type { ClientsideExtensionsManifest, ClientsideExtensionsOptions, DataProvider, IWrmPluginOptions } from './types';\nimport { debugLog, getKeyValue, isNotNull } from './utils';\n\nimport transformConditionToConditionMapObject from './generator/conditions';\n\n// Infer the type \"Source\" which is not exposed by Webpack\ntype Asset = Compilation['assets'] extends Record<string, infer S> ? S : never;\n\ninterface IClientsideExtensionsPluginOptions {\n pattern?: string;\n cwd?: string;\n xmlDescriptors?: string;\n}\n\nexport = class ClientsideExtensionsWebpackPlugin {\n private readonly pattern: string;\n\n private readonly cwd: string;\n\n private readonly outputFilename?: string;\n\n private manifests: ClientsideExtensionsManifest[];\n\n constructor(options: IClientsideExtensionsPluginOptions = {}) {\n if (!options.pattern) {\n throw new Error('No pattern was specified to match clientside extensions');\n }\n\n this.outputFilename = options.xmlDescriptors;\n this.pattern = options.pattern;\n this.cwd = options.cwd || process.cwd();\n\n debugLog(`cwd: ${this.cwd}`);\n\n const globFoundFiles = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [\n '**/node_modules/**',\n '**/target/**',\n ]);\n\n debugLog(`Glob found (with the pattern: ${this.pattern}) these files: ${globFoundFiles}`);\n\n const manifests = globFoundFiles\n .map((file) => ClientsideExtensionsWebpackPlugin.parseManifestFromComment(file, this.cwd))\n .filter(isNotNull);\n\n debugLog(`Found the following manifests ${JSON.stringify(manifests)}`);\n\n this.manifests = manifests;\n }\n\n public generateEntrypoints() {\n return this.manifests.reduce((agg, manifest) => {\n const id = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(manifest.key);\n agg[id] = ClientsideExtensionsWebpackPlugin.getFilenameForEntry(id);\n\n return agg;\n }, {} as { [key: string]: string });\n }\n\n apply(compiler: Compiler) {\n const wrmOptions = ClientsideExtensionsWebpackPlugin.getWrmWebpackPluginOptions(compiler);\n\n const extensionsOptions = this.manifests.map((manifest) => {\n return ClientsideExtensionsWebpackPlugin.manifestToPluginOptions(wrmOptions.pluginKey, manifest);\n });\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addContextToEntrypoints(extensionsOptions, wrmOptions);\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addDataProvidersToEntrypoints(extensionsOptions, wrmOptions);\n\n // side effect\n ClientsideExtensionsWebpackPlugin.addConditionToEntrypoint(extensionsOptions, wrmOptions);\n\n const virtualModules = extensionsOptions.reduce((agg, extensionOption) => {\n const fileName = ClientsideExtensionsWebpackPlugin.getFilenameForEntry(extensionOption.id);\n agg[fileName] = generateEntrypointCode(extensionOption);\n return agg;\n }, {} as Record<string, string>);\n new VirtualModulePlugin(virtualModules).apply(compiler);\n\n compiler.hooks.compilation.tap('Tap compilation for XML generation', (compilation) => {\n const webfragmentDescriptors = extensionsOptions.map((extensionOption) => generateWebfragmentDescriptor(extensionOption));\n const webpageDescriptors = extensionsOptions.map((extensionOption) => generateWebpageDescriptor(extensionOption));\n\n const descriptors = [...webfragmentDescriptors, ...webpageDescriptors].join('');\n const xmlDescriptors = PrettyData.xml(`<clientside-extension>${descriptors}</clientside-extension>`);\n\n const xmlDescriptorDirname = path.dirname(\n path.relative(compiler.options.output.path || '', this.outputFilename || wrmOptions.xmlDescriptors),\n );\n const xmlDescriptorFilename = path.basename(this.outputFilename || 'wr-generated-clientside-extensions.xml');\n const webpanelXmlDescriptorFilename = path.join(xmlDescriptorDirname, xmlDescriptorFilename);\n\n compilation.hooks.additionalAssets.tap('Generate clientside-extension XML', () => {\n compilation.assets[webpanelXmlDescriptorFilename] = {\n source: () => Buffer.from(xmlDescriptors),\n size: () => Buffer.byteLength(xmlDescriptors),\n } as Asset;\n });\n });\n }\n\n private static addContextToEntrypoints(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n extensionOptions.forEach((extensionOption) => {\n const { contextMap } = wrmOptions;\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const context = extensionOption.extensionPoint;\n\n contextMap.set(entrypointId, [context]);\n });\n }\n\n private static addDataProvidersToEntrypoints(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n extensionOptions\n .filter((extensionOption) => Boolean(extensionOption.pageDataProvider))\n .forEach((extensionOption) => {\n const { dataProvidersMap } = wrmOptions;\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const dataProvider: DataProvider = {\n key: PAGE_DATA_PROVIDER_DATA_KEY,\n class: extensionOption.pageDataProvider!,\n };\n\n dataProvidersMap.set(entrypointId, [dataProvider]);\n });\n }\n\n private static addConditionToEntrypoint(extensionOptions: ClientsideExtensionsOptions[], wrmOptions: IWrmPluginOptions) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hasCondition = (extensionOptions: ClientsideExtensionsOptions) => Boolean(extensionOptions.condition);\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const isNotPageExtension = (extensionOptions: ClientsideExtensionsOptions) => !isPageExtension(extensionOptions);\n\n extensionOptions\n .filter(hasCondition)\n .filter(isNotPageExtension)\n .forEach((extensionOption) => {\n const entrypointId = ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(extensionOption.key);\n const conditionMap = transformConditionToConditionMapObject(extensionOption.condition!);\n\n const conditionMapPluginOption = wrmOptions.conditionMap as Map<string, object>;\n\n conditionMapPluginOption.set(entrypointId, conditionMap);\n });\n }\n\n private static transformAnnotationsIntoManifest(\n rawAnnotations: RawAnnotations,\n filePath: string,\n cwd: string,\n ): ClientsideExtensionsManifest {\n const parserOptions: AnnotationParserOptions = {\n cwd,\n filePath,\n };\n\n const annotations = {} as Annotations;\n const entries = Object.entries(annotationsParsers) as [[AnnotationKey, AnnotationParserFunction]];\n\n for (const [annotationKey, annotationParser] of entries) {\n const rawAnnotation = getKeyValue(rawAnnotations, annotationKey);\n const newAnnotations = annotationParser(rawAnnotation, rawAnnotations, parserOptions);\n\n if (newAnnotations !== null) {\n Object.assign(annotations, newAnnotations);\n }\n }\n\n const manifest: ClientsideExtensionsManifest = {\n id: ClientsideExtensionsWebpackPlugin.getIdFromManifestKey(annotations.key),\n filePath,\n ...annotations,\n };\n\n debugLog(`Generated manifest: ${JSON.stringify(manifest)}`);\n\n return manifest;\n }\n\n private static parseManifestFromComment(file: string, cwd: string): ClientsideExtensionsManifest | null {\n const fileContent = fs.readFileSync(file, 'utf8');\n const annotations = transformComment(fileContent);\n\n if (!annotations) {\n console.warn(`Client-side Extension: The file: \"${file}\" does not contain meta comments. Skipping XML-descriptor generation.`);\n return null;\n }\n\n return ClientsideExtensionsWebpackPlugin.transformAnnotationsIntoManifest(annotations, file, cwd);\n }\n\n private static findFilesByPattern(pattern: string, cwd: string, ignore?: string[]) {\n return glob.sync(pattern, { absolute: true, cwd, ignore });\n }\n\n private static getWrmWebpackPluginOptions(compiler: Compiler): IWrmPluginOptions {\n const { plugins } = compiler.options;\n if (!plugins) {\n throw new Error(`Something went mighty wrong. Can't find any plugins in webpack`);\n }\n const wrmPlugin = plugins.find((p) => p.constructor.name === 'WrmPlugin');\n\n if (!wrmPlugin) {\n throw new Error(\n `Can't find the WrmPlugin. Make sure you are using this plugin only in conjunction with the atlassian-webresource-webpack-plugin`,\n );\n }\n\n return (wrmPlugin as WebpackPluginInstance & { options: IWrmPluginOptions }).options;\n }\n\n private static getFilenameForEntry(manifestId: string) {\n return `./generated-clientside-extension/${manifestId}.js`;\n }\n\n private static manifestToPluginOptions(pluginKey: string, manifest: ClientsideExtensionsManifest): ClientsideExtensionsOptions {\n const { id, key } = manifest;\n const resourceKey = `entrypoint-${id}`;\n\n return {\n ...manifest,\n pluginKey,\n entryPoint: resourceKey,\n fullyQualifiedNamespace: `${pluginKey}:${key}`,\n };\n }\n\n private static getIdFromManifestKey(key: string) {\n return kebabCase(key);\n }\n};\n"]}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const lib_1 = require("comment-parser/lib");
5
5
  const camelCase_1 = tslib_1.__importDefault(require("lodash/camelCase"));
6
+ const utils_1 = require("./utils");
6
7
  const CLIENTSIDE_EXTENSION_ANNOTATION = 'clientside-extension';
7
8
  const MULTI_VALUE_ANNOTATIONS = ['condition'];
8
9
  const getClientSideExtensionAnnotations = (comments) => comments.find((comment) => comment.tags.some(({ tag }) => tag === CLIENTSIDE_EXTENSION_ANNOTATION));
@@ -11,6 +12,7 @@ const getClientSideExtensionAnnotations = (comments) => comments.find((comment)
11
12
  */
12
13
  const transformComment = (fileContent) => {
13
14
  const comments = lib_1.parse(fileContent);
15
+ utils_1.debugLog(`Parsing raw comments: ${JSON.stringify(comments)}`);
14
16
  const extensionAnnotationsComment = getClientSideExtensionAnnotations(comments);
15
17
  if (!extensionAnnotationsComment) {
16
18
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"transform-comment.js","sourceRoot":"","sources":["../../lib/transform-comment.ts"],"names":[],"mappings":";;;AACA,4CAA2D;AAC3D,yEAAyC;AAGzC,MAAM,+BAA+B,GAAG,sBAAsB,CAAC;AAC/D,MAAM,uBAAuB,GAAG,CAAC,WAAW,CAAC,CAAC;AAE9C,MAAM,iCAAiC,GAAG,CAAC,QAAiB,EAAE,EAAE,CAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC,CAAC;AAExG;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,EAAE;IAC7C,MAAM,QAAQ,GAAG,WAAY,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,2BAA2B,GAAG,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IAEhF,IAAI,CAAC,2BAA2B,EAAE;QAC9B,OAAO,IAAI,CAAC;KACf;IAED,MAAM,WAAW,GAAG,EAAoB,CAAC;IAEzC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,2BAA2B,CAAC,IAAI,EAAE;QACvE,MAAM,aAAa,GAAG,mBAAS,CAAC,GAAG,CAAkB,CAAC;QACtD,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7D,qCAAqC;QACrC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACjD,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjF,WAAW,CAAC,aAAwC,CAAC,GAAG,CAAC,GAAG,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAE/F,uCAAuC;YACvC,SAAS;SACZ;QAED,WAAW,CAAC,aAAyC,CAAC,GAAG,eAAe,CAAC;KAC5E;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import type { Block } from 'comment-parser/lib';\nimport { parse as parseComment } from 'comment-parser/lib';\nimport camelCase from 'lodash/camelCase';\nimport type { AnnotationKey, MultiValueAnnotationKey, RawAnnotations, SingleValueAnnotationKey } from './annotations';\n\nconst CLIENTSIDE_EXTENSION_ANNOTATION = 'clientside-extension';\nconst MULTI_VALUE_ANNOTATIONS = ['condition'];\n\nconst getClientSideExtensionAnnotations = (comments: Block[]) =>\n comments.find((comment) => comment.tags.some(({ tag }) => tag === CLIENTSIDE_EXTENSION_ANNOTATION));\n\n/**\n * Transforms a raw comment with annotations into annotations map\n */\nconst transformComment = (fileContent: string) => {\n const comments = parseComment(fileContent);\n const extensionAnnotationsComment = getClientSideExtensionAnnotations(comments);\n\n if (!extensionAnnotationsComment) {\n return null;\n }\n\n const annotations = {} as RawAnnotations;\n\n for (const { tag, name, description } of extensionAnnotationsComment.tags) {\n const annotationKey = camelCase(tag) as AnnotationKey;\n const annotationValue = [name, description].join(' ').trim();\n\n // Merge annotations of the same type\n if (MULTI_VALUE_ANNOTATIONS.includes(annotationKey)) {\n const prevValue = annotations[annotationKey];\n const wrappedPrevValue = Array.isArray(prevValue) ? (prevValue as string[]) : [];\n\n annotations[annotationKey as MultiValueAnnotationKey] = [...wrappedPrevValue, annotationValue];\n\n // eslint-disable-next-line no-continue\n continue;\n }\n\n annotations[annotationKey as SingleValueAnnotationKey] = annotationValue;\n }\n\n return annotations;\n};\n\nexport default transformComment;\n"]}
1
+ {"version":3,"file":"transform-comment.js","sourceRoot":"","sources":["../../lib/transform-comment.ts"],"names":[],"mappings":";;;AACA,4CAA2D;AAC3D,yEAAyC;AAEzC,mCAAmC;AAEnC,MAAM,+BAA+B,GAAG,sBAAsB,CAAC;AAC/D,MAAM,uBAAuB,GAAG,CAAC,WAAW,CAAC,CAAC;AAE9C,MAAM,iCAAiC,GAAG,CAAC,QAAiB,EAAE,EAAE,CAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC,CAAC;AAExG;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,EAAE;IAC7C,MAAM,QAAQ,GAAG,WAAY,CAAC,WAAW,CAAC,CAAC;IAE3C,gBAAQ,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE9D,MAAM,2BAA2B,GAAG,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IAEhF,IAAI,CAAC,2BAA2B,EAAE;QAC9B,OAAO,IAAI,CAAC;KACf;IAED,MAAM,WAAW,GAAG,EAAoB,CAAC;IAEzC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,2BAA2B,CAAC,IAAI,EAAE;QACvE,MAAM,aAAa,GAAG,mBAAS,CAAC,GAAG,CAAkB,CAAC;QACtD,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7D,qCAAqC;QACrC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACjD,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjF,WAAW,CAAC,aAAwC,CAAC,GAAG,CAAC,GAAG,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAE/F,uCAAuC;YACvC,SAAS;SACZ;QAED,WAAW,CAAC,aAAyC,CAAC,GAAG,eAAe,CAAC;KAC5E;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import type { Block } from 'comment-parser/lib';\nimport { parse as parseComment } from 'comment-parser/lib';\nimport camelCase from 'lodash/camelCase';\nimport type { AnnotationKey, MultiValueAnnotationKey, RawAnnotations, SingleValueAnnotationKey } from './annotations';\nimport { debugLog } from './utils';\n\nconst CLIENTSIDE_EXTENSION_ANNOTATION = 'clientside-extension';\nconst MULTI_VALUE_ANNOTATIONS = ['condition'];\n\nconst getClientSideExtensionAnnotations = (comments: Block[]) =>\n comments.find((comment) => comment.tags.some(({ tag }) => tag === CLIENTSIDE_EXTENSION_ANNOTATION));\n\n/**\n * Transforms a raw comment with annotations into annotations map\n */\nconst transformComment = (fileContent: string) => {\n const comments = parseComment(fileContent);\n\n debugLog(`Parsing raw comments: ${JSON.stringify(comments)}`);\n\n const extensionAnnotationsComment = getClientSideExtensionAnnotations(comments);\n\n if (!extensionAnnotationsComment) {\n return null;\n }\n\n const annotations = {} as RawAnnotations;\n\n for (const { tag, name, description } of extensionAnnotationsComment.tags) {\n const annotationKey = camelCase(tag) as AnnotationKey;\n const annotationValue = [name, description].join(' ').trim();\n\n // Merge annotations of the same type\n if (MULTI_VALUE_ANNOTATIONS.includes(annotationKey)) {\n const prevValue = annotations[annotationKey];\n const wrappedPrevValue = Array.isArray(prevValue) ? (prevValue as string[]) : [];\n\n annotations[annotationKey as MultiValueAnnotationKey] = [...wrappedPrevValue, annotationValue];\n\n // eslint-disable-next-line no-continue\n continue;\n }\n\n annotations[annotationKey as SingleValueAnnotationKey] = annotationValue;\n }\n\n return annotations;\n};\n\nexport default transformComment;\n"]}
package/dist/cjs/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNotNullOrUndefined = exports.isNotNull = exports.replaceKey = exports.isPageExtension = exports.getKeyValue = void 0;
3
+ exports.debugLog = exports.isNotNullOrUndefined = exports.isNotNull = exports.replaceKey = exports.isPageExtension = exports.getKeyValue = void 0;
4
4
  // Utility helper that can be used to read property from an object and provide typing
5
5
  exports.getKeyValue = (obj, key) => obj[key];
6
6
  exports.isPageExtension = (options) => Boolean(options.pageUrl);
@@ -16,4 +16,11 @@ function isNotNullOrUndefined(input) {
16
16
  return input !== undefined && input != null;
17
17
  }
18
18
  exports.isNotNullOrUndefined = isNotNullOrUndefined;
19
+ function debugLog(message) {
20
+ if (process.env.CSE_DEBUG) {
21
+ // eslint-disable-next-line prefer-rest-params,no-console
22
+ console.debug(message);
23
+ }
24
+ }
25
+ exports.debugLog = debugLog;
19
26
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":";;;AAEA,qFAAqF;AACxE,QAAA,WAAW,GAAG,CAAuB,GAAM,EAAE,GAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjE,QAAA,eAAe,GAAG,CAAC,OAAoC,EAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3G,MAAM,SAAS,GAAG,QAAQ,CAAC;AACd,QAAA,UAAU,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;IACnD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,SAAgB,SAAS,CAAI,KAAe;IACxC,OAAO,KAAK,IAAI,IAAI,CAAC;AACzB,CAAC;AAFD,8BAEC;AAED,SAAgB,oBAAoB,CAAI,KAA2B;IAC/D,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,IAAI,CAAC;AAChD,CAAC;AAFD,oDAEC","sourcesContent":["import type { ClientsideExtensionsOptions } from './types';\n\n// Utility helper that can be used to read property from an object and provide typing\nexport const getKeyValue = <T, K extends keyof T>(obj: T, key: K) => obj[key];\n\nexport const isPageExtension = (options: ClientsideExtensionsOptions): boolean => Boolean(options.pageUrl);\n\nconst KEY_REGEX = /\\$key/g;\nexport const replaceKey = (str: string, key: string) => {\n return str.replace(KEY_REGEX, key);\n};\n\nexport function isNotNull<T>(input: null | T): input is T {\n return input != null;\n}\n\nexport function isNotNullOrUndefined<T>(input: null | undefined | T): input is T {\n return input !== undefined && input != null;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":";;;AAEA,qFAAqF;AACxE,QAAA,WAAW,GAAG,CAAuB,GAAM,EAAE,GAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjE,QAAA,eAAe,GAAG,CAAC,OAAoC,EAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3G,MAAM,SAAS,GAAG,QAAQ,CAAC;AACd,QAAA,UAAU,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;IACnD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,SAAgB,SAAS,CAAI,KAAe;IACxC,OAAO,KAAK,IAAI,IAAI,CAAC;AACzB,CAAC;AAFD,8BAEC;AAED,SAAgB,oBAAoB,CAAI,KAA2B;IAC/D,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,IAAI,CAAC;AAChD,CAAC;AAFD,oDAEC;AAED,SAAgB,QAAQ,CAAC,OAAe;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;QACvB,yDAAyD;QACzD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC1B;AACL,CAAC;AALD,4BAKC","sourcesContent":["import type { ClientsideExtensionsOptions } from './types';\n\n// Utility helper that can be used to read property from an object and provide typing\nexport const getKeyValue = <T, K extends keyof T>(obj: T, key: K) => obj[key];\n\nexport const isPageExtension = (options: ClientsideExtensionsOptions): boolean => Boolean(options.pageUrl);\n\nconst KEY_REGEX = /\\$key/g;\nexport const replaceKey = (str: string, key: string) => {\n return str.replace(KEY_REGEX, key);\n};\n\nexport function isNotNull<T>(input: null | T): input is T {\n return input != null;\n}\n\nexport function isNotNullOrUndefined<T>(input: null | undefined | T): input is T {\n return input !== undefined && input != null;\n}\n\nexport function debugLog(message: String): void {\n if (process.env.CSE_DEBUG) {\n // eslint-disable-next-line prefer-rest-params,no-console\n console.debug(message);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ClientsideExtensionsWebpackPlugin.d.ts","sourceRoot":"","sources":["../../lib/ClientsideExtensionsWebpackPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,QAAQ,EAAyB,MAAM,SAAS,CAAC;AAM5E,OAAO,KAAK,EAAiF,cAAc,EAAE,MAAM,eAAe,CAAC;AAOnI,OAAO,KAAK,EAAE,4BAA4B,EAAE,2BAA2B,EAAgB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAQ1H,UAAU,kCAAkC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;;mBAWwB,kCAAkC;0BAR7B,MAAM;sBAEV,MAAM;;mBAIT,4BAA4B,EAAE;;;;wBA4BjC,QAAQ;;8CA6CiC,2BAA2B,EAAE,cAAc,iBAAiB;oDAUtD,2BAA2B,EAAE,cAAc,iBAAiB;+CAejE,2BAA2B,EAAE,cAAc,iBAAiB;qDAoBlG,cAAc,YACpB,MAAM,OACX,MAAM,GACZ,4BAA4B;mCA2Be,MAAM,OAAO,MAAM,GAAG,4BAA4B,GAAG,IAAI;gCAY5D,MAAM,OAAO,MAAM;yCAIV,QAAQ,GAAG,iBAAiB;oCAgBjC,MAAM;uCAIH,MAAM,YAAY,4BAA4B,GAAG,2BAA2B;8BAYrF,MAAM;;AA3MnD,kBA8ME"}
1
+ {"version":3,"file":"ClientsideExtensionsWebpackPlugin.d.ts","sourceRoot":"","sources":["../../lib/ClientsideExtensionsWebpackPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,QAAQ,EAAyB,MAAM,SAAS,CAAC;AAM5E,OAAO,KAAK,EAAiF,cAAc,EAAE,MAAM,eAAe,CAAC;AAOnI,OAAO,KAAK,EAAE,4BAA4B,EAAE,2BAA2B,EAAgB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAQ1H,UAAU,kCAAkC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;;mBAWwB,kCAAkC;0BAR7B,MAAM;sBAEV,MAAM;;mBAIT,4BAA4B,EAAE;;;;wBAsCjC,QAAQ;;8CA6CiC,2BAA2B,EAAE,cAAc,iBAAiB;oDAUtD,2BAA2B,EAAE,cAAc,iBAAiB;+CAejE,2BAA2B,EAAE,cAAc,iBAAiB;qDAoBlG,cAAc,YACpB,MAAM,OACX,MAAM,GACZ,4BAA4B;mCA6Be,MAAM,OAAO,MAAM,GAAG,4BAA4B,GAAG,IAAI;gCAY5D,MAAM,OAAO,MAAM;yCAIV,QAAQ,GAAG,iBAAiB;oCAgBjC,MAAM;uCAIH,MAAM,YAAY,4BAA4B,GAAG,2BAA2B;8BAYrF,MAAM;;AAvNnD,kBA0NE"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform-comment.d.ts","sourceRoot":"","sources":["../../lib/transform-comment.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA0C,cAAc,EAA4B,MAAM,eAAe,CAAC;AAQtH;;GAEG;AACH,QAAA,MAAM,gBAAgB,gBAAiB,MAAM,0BA6B5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"transform-comment.d.ts","sourceRoot":"","sources":["../../lib/transform-comment.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA0C,cAAc,EAA4B,MAAM,eAAe,CAAC;AAStH;;GAEG;AACH,QAAA,MAAM,gBAAgB,gBAAiB,MAAM,0BAgC5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -4,4 +4,5 @@ export declare const isPageExtension: (options: ClientsideExtensionsOptions) =>
4
4
  export declare const replaceKey: (str: string, key: string) => string;
5
5
  export declare function isNotNull<T>(input: null | T): input is T;
6
6
  export declare function isNotNullOrUndefined<T>(input: null | undefined | T): input is T;
7
+ export declare function debugLog(message: String): void;
7
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAG3D,eAAO,MAAM,WAAW,gDAAqD,CAAC;AAE9E,eAAO,MAAM,eAAe,YAAa,2BAA2B,KAAG,OAAmC,CAAC;AAG3G,eAAO,MAAM,UAAU,QAAS,MAAM,OAAO,MAAM,WAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAExD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAE/E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAG3D,eAAO,MAAM,WAAW,gDAAqD,CAAC;AAE9E,eAAO,MAAM,eAAe,YAAa,2BAA2B,KAAG,OAAmC,CAAC;AAG3G,eAAO,MAAM,UAAU,QAAS,MAAM,OAAO,MAAM,WAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAExD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAE/E;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK9C"}
@@ -14,7 +14,7 @@ import generateWebpageDescriptor, { PAGE_DATA_PROVIDER_DATA_KEY } from './genera
14
14
  import { generateEntrypointCode, isPageExtension } from './generator/entrypoint';
15
15
 
16
16
  import type { ClientsideExtensionsManifest, ClientsideExtensionsOptions, DataProvider, IWrmPluginOptions } from './types';
17
- import { getKeyValue, isNotNull } from './utils';
17
+ import { debugLog, getKeyValue, isNotNull } from './utils';
18
18
 
19
19
  import transformConditionToConditionMapObject from './generator/conditions';
20
20
 
@@ -45,12 +45,22 @@ export = class ClientsideExtensionsWebpackPlugin {
45
45
  this.pattern = options.pattern;
46
46
  this.cwd = options.cwd || process.cwd();
47
47
 
48
- this.manifests = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [
48
+ debugLog(`cwd: ${this.cwd}`);
49
+
50
+ const globFoundFiles = ClientsideExtensionsWebpackPlugin.findFilesByPattern(this.pattern, this.cwd, [
49
51
  '**/node_modules/**',
50
52
  '**/target/**',
51
- ])
53
+ ]);
54
+
55
+ debugLog(`Glob found (with the pattern: ${this.pattern}) these files: ${globFoundFiles}`);
56
+
57
+ const manifests = globFoundFiles
52
58
  .map((file) => ClientsideExtensionsWebpackPlugin.parseManifestFromComment(file, this.cwd))
53
59
  .filter(isNotNull);
60
+
61
+ debugLog(`Found the following manifests ${JSON.stringify(manifests)}`);
62
+
63
+ this.manifests = manifests;
54
64
  }
55
65
 
56
66
  public generateEntrypoints() {
@@ -179,6 +189,8 @@ export = class ClientsideExtensionsWebpackPlugin {
179
189
  ...annotations,
180
190
  };
181
191
 
192
+ debugLog(`Generated manifest: ${JSON.stringify(manifest)}`);
193
+
182
194
  return manifest;
183
195
  }
184
196
 
@@ -2,6 +2,7 @@ import type { Block } from 'comment-parser/lib';
2
2
  import { parse as parseComment } from 'comment-parser/lib';
3
3
  import camelCase from 'lodash/camelCase';
4
4
  import type { AnnotationKey, MultiValueAnnotationKey, RawAnnotations, SingleValueAnnotationKey } from './annotations';
5
+ import { debugLog } from './utils';
5
6
 
6
7
  const CLIENTSIDE_EXTENSION_ANNOTATION = 'clientside-extension';
7
8
  const MULTI_VALUE_ANNOTATIONS = ['condition'];
@@ -14,6 +15,9 @@ const getClientSideExtensionAnnotations = (comments: Block[]) =>
14
15
  */
15
16
  const transformComment = (fileContent: string) => {
16
17
  const comments = parseComment(fileContent);
18
+
19
+ debugLog(`Parsing raw comments: ${JSON.stringify(comments)}`);
20
+
17
21
  const extensionAnnotationsComment = getClientSideExtensionAnnotations(comments);
18
22
 
19
23
  if (!extensionAnnotationsComment) {
package/lib/utils.ts CHANGED
@@ -17,3 +17,10 @@ export function isNotNull<T>(input: null | T): input is T {
17
17
  export function isNotNullOrUndefined<T>(input: null | undefined | T): input is T {
18
18
  return input !== undefined && input != null;
19
19
  }
20
+
21
+ export function debugLog(message: String): void {
22
+ if (process.env.CSE_DEBUG) {
23
+ // eslint-disable-next-line prefer-rest-params,no-console
24
+ console.debug(message);
25
+ }
26
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlassian/clientside-extensions-webpack-plugin",
3
- "version": "2.4.1",
3
+ "version": "2.4.3-4bc52a8-l5um026o",
4
4
  "description": "Allows for simple creation of client-side extensions",
5
5
  "main": "./dist/cjs/ClientsideExtensionsWebpackPlugin.js",
6
6
  "types": "./dist/types/ClientsideExtensionsWebpackPlugin.d.ts",
@@ -71,8 +71,8 @@
71
71
  "webpack": "^4.0.0 || ^5.0.0"
72
72
  },
73
73
  "devDependencies": {
74
- "@atlassian/clientside-extensions": "^2.4.1",
75
- "@atlassian/clientside-extensions-registry": "^2.4.1",
74
+ "@atlassian/clientside-extensions": "^2.4.3-4bc52a8-l5um026o",
75
+ "@atlassian/clientside-extensions-registry": "^2.4.3-4bc52a8-l5um026o",
76
76
  "@types/glob": "7.1.4",
77
77
  "@types/lodash": "4.14.175",
78
78
  "@types/webpack": "5.28.0",
@@ -87,5 +87,5 @@
87
87
  "engines": {
88
88
  "node": ">=12.19.0"
89
89
  },
90
- "gitHead": "4c98bad371a4fff8afcef318bb67ed86727fb877"
90
+ "gitHead": "4bc52a874578f71ebd3c7dfb90d0e38c56e0c851"
91
91
  }