@trackunit/iris-app-webpack-plugin 0.0.130 → 0.0.132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.132](https://github.com/Trackunit/manager/compare/iris-app-webpack-plugin/0.0.131...iris-app-webpack-plugin/0.0.132) (2023-10-02)
6
+
7
+ ## [0.0.131](https://github.com/Trackunit/manager/compare/iris-app-webpack-plugin/0.0.130...iris-app-webpack-plugin/0.0.131) (2023-09-27)
8
+
5
9
  ## [0.0.130](https://github.com/Trackunit/manager/compare/iris-app-webpack-plugin/0.0.129...iris-app-webpack-plugin/0.0.130) (2023-09-21)
6
10
 
7
11
  ### Dependency Updates
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app-webpack-plugin",
3
- "version": "0.0.130",
3
+ "version": "0.0.132",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "repository": "https://github.com/Trackunit/manager",
6
6
  "engines": {
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "csp-header": "^5.1.0",
11
11
  "@trackunit/iris-app-api": "0.0.117",
12
- "tslib": "2.4.1"
12
+ "tslib": "1.10.0"
13
13
  },
14
14
  "main": "./src/index.js",
15
15
  "type": "commonjs"
@@ -64,11 +64,10 @@ class TrackunitIrisAppWebpackPlugin {
64
64
  manifestJson.extensions = this.options.manifest.extensions;
65
65
  (_b = this.options.manifest.extensions) === null || _b === void 0 ? void 0 : _b.forEach(extension => {
66
66
  var _a, _b, _c;
67
- const translationKey = (extension.type !== "IRIS_APP_SETTINGS_EXTENSION" &&
67
+ const translationKey = extension.type !== "IRIS_APP_SETTINGS_EXTENSION" &&
68
68
  extension.type !== "WIDGET_EXTENSION" &&
69
69
  extension.menuItem &&
70
- extension.menuItem.name) ||
71
- (extension.type === "WIDGET_EXTENSION" && extension.header && extension.header.name);
70
+ extension.menuItem.name;
72
71
  if (translationKey) {
73
72
  if (isTranslationKey(translationKey)) {
74
73
  const menuItemName = translationKey;
@@ -84,25 +83,42 @@ class TrackunitIrisAppWebpackPlugin {
84
83
  });
85
84
  delete menuItemName.key;
86
85
  }
87
- if (extension.type === "REPORT_EXTENSION" && isTranslationKey((_a = extension.menuItem) === null || _a === void 0 ? void 0 : _a.description)) {
88
- const description = extension.menuItem.description;
89
- const menuItemDescriptionKey = description.key;
86
+ }
87
+ const headerTranslationKey = extension.type === "WIDGET_EXTENSION" && extension.header && extension.header.name;
88
+ if (headerTranslationKey) {
89
+ if (isTranslationKey(headerTranslationKey)) {
90
+ const menuItemName = headerTranslationKey;
91
+ const menuItemNameKey = menuItemName.key;
90
92
  iris_app_api_1.languageKeys.forEach(langugageCode => {
91
93
  const translationFilePath = path.join(extension.sourceRoot, "locales", langugageCode, "translation.json");
92
94
  if (fs.existsSync(translationFilePath)) {
93
95
  const translations = JSON.parse(fs.readFileSync(translationFilePath, "utf8"));
94
96
  //@ts-ignore - suppressImplicitAnyIndexErrors
95
97
  // Here we substitute the translation key with the actual translation
96
- extension.menuItem.description[langugageCode] = translations[menuItemDescriptionKey];
98
+ extension.header.name[langugageCode] = translations[menuItemNameKey];
97
99
  }
98
100
  });
99
- delete description.key;
101
+ delete menuItemName.key;
100
102
  }
101
103
  }
104
+ if (extension.type === "REPORT_EXTENSION" && isTranslationKey((_a = extension.menuItem) === null || _a === void 0 ? void 0 : _a.description)) {
105
+ const description = extension.menuItem.description;
106
+ const menuItemDescriptionKey = description.key;
107
+ iris_app_api_1.languageKeys.forEach(langugageCode => {
108
+ const translationFilePath = path.join(extension.sourceRoot, "locales", langugageCode, "translation.json");
109
+ if (fs.existsSync(translationFilePath)) {
110
+ const translations = JSON.parse(fs.readFileSync(translationFilePath, "utf8"));
111
+ //@ts-ignore - suppressImplicitAnyIndexErrors
112
+ // Here we substitute the translation key with the actual translation
113
+ extension.menuItem.description[langugageCode] = translations[menuItemDescriptionKey];
114
+ }
115
+ });
116
+ delete description.key;
117
+ }
102
118
  if (extension.type === "ASSET_HOME_EXTENSION" || extension.type === "FLEET_EXTENSION") {
103
119
  if ((_b = extension.conditions) === null || _b === void 0 ? void 0 : _b.brand) {
104
120
  if (Array.isArray(extension.conditions.brand)) {
105
- extension.conditions.brand.map(brand => {
121
+ extension.conditions.brand.forEach(brand => {
106
122
  if (typeof brand !== "string") {
107
123
  brand.pattern = brand.pattern.toString();
108
124
  }
@@ -114,7 +130,7 @@ class TrackunitIrisAppWebpackPlugin {
114
130
  }
115
131
  if ((_c = extension.conditions) === null || _c === void 0 ? void 0 : _c.model) {
116
132
  if (Array.isArray(extension.conditions.model)) {
117
- extension.conditions.model.map(model => {
133
+ extension.conditions.model.forEach(model => {
118
134
  if (typeof model !== "string") {
119
135
  model.pattern = model.pattern.toString();
120
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TrackunitIrisAppWebpackPlugin.js","sourceRoot":"","sources":["../../../../../../libs/iris-app-sdk/iris-app-webpack-plugin/src/lib/TrackunitIrisAppWebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { irisAppCspInput, IrisAppManifest, languageKeys, TranslationKey, Translations } from \"@trackunit/iris-app-api\";\nimport { getCSP } from \"csp-header\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as wp from \"webpack\";\n\ninterface ITrackunitIrisAppWebpackPluginOptions {\n nxRootDir: string;\n appDir: string;\n manifest: IrisAppManifest;\n}\n\nconst isTranslationKey = (object: string | Translations | TranslationKey | undefined): object is TranslationKey => {\n return !!(object as { key?: string })?.key;\n};\n\n/**\n * Webpack plugin that generates a manifest.json file\n */\nexport class TrackunitIrisAppWebpackPlugin {\n /**\n * @param options - Plugin options\n */\n public constructor(private options: ITrackunitIrisAppWebpackPluginOptions) {}\n\n /**\n Webpack plugin for generating a Markdown file from app manifest and index HTML file.\n *\n @class\n @public\n @param {object} options - Plugin options object\n @param {string} options.appDir - Directory path where the app resides\n @param {object} options.manifest - Object containing the app's manifest\n */\n public apply(compiler: wp.Compiler) {\n const pluginName = TrackunitIrisAppWebpackPlugin.name;\n\n // webpack module instance can be accessed from the compiler object,\n // this ensures that correct version of the module is used\n // (do not require/import the webpack or any symbols from it directly).\n const { webpack } = compiler;\n\n // Compilation object gives us reference to some useful constants.\n const { Compilation } = webpack;\n\n // RawSource is one of the \"sources\" classes that should be used\n // to represent asset sources in compilation.\n const { RawSource } = webpack.sources;\n\n // Tapping to the \"thisCompilation\" hook in order to further tap\n // to the compilation process on an earlier stage.\n compiler.hooks.thisCompilation.tap(pluginName, (compilation: wp.Compilation) => {\n // Tapping to the assets processing pipeline on a specific stage.\n compilation.hooks.processAssets.tap(\n {\n name: pluginName,\n\n // Using one of the later asset processing stages to ensure\n // that all assets were already added to the compilation by other plugins.\n stage: Compilation.PROCESS_ASSETS_STAGE_DERIVED,\n },\n async assets => {\n // \"assets\" is an object that contains all assets\n // in the compilation, the keys of the object are pathnames of the assets\n // and the values are file sources.\n\n // Iterating over all the assets and\n // generating content for our Markdown file.\n if (!this.options?.manifest) {\n throw Error(\"you must provide a app manifest\");\n }\n const manifest = this.options.manifest;\n const indexContents = fs.readFileSync(path.join(__dirname, \"index.html\"), \"utf8\");\n\n const manifestJson = this.options.manifest;\n manifestJson.extensions = this.options.manifest.extensions;\n\n this.options.manifest.extensions?.forEach(extension => {\n const translationKey =\n (extension.type !== \"IRIS_APP_SETTINGS_EXTENSION\" &&\n extension.type !== \"WIDGET_EXTENSION\" &&\n extension.menuItem &&\n extension.menuItem.name) ||\n (extension.type === \"WIDGET_EXTENSION\" && extension.header && extension.header.name);\n if (translationKey) {\n if (isTranslationKey(translationKey)) {\n const menuItemName = translationKey;\n const menuItemNameKey = menuItemName.key;\n\n languageKeys.forEach(langugageCode => {\n const translationFilePath = path.join(\n extension.sourceRoot,\n \"locales\",\n langugageCode,\n \"translation.json\"\n );\n if (fs.existsSync(translationFilePath)) {\n const translations = JSON.parse(fs.readFileSync(translationFilePath, \"utf8\"));\n //@ts-ignore - suppressImplicitAnyIndexErrors\n // Here we substitute the translation key with the actual translation\n extension.menuItem.name[langugageCode] = translations[menuItemNameKey];\n }\n });\n delete (menuItemName as { key?: string }).key;\n }\n if (extension.type === \"REPORT_EXTENSION\" && isTranslationKey(extension.menuItem?.description)) {\n const description = extension.menuItem.description;\n const menuItemDescriptionKey = description.key;\n\n languageKeys.forEach(langugageCode => {\n const translationFilePath = path.join(\n extension.sourceRoot,\n \"locales\",\n langugageCode,\n \"translation.json\"\n );\n if (fs.existsSync(translationFilePath)) {\n const translations = JSON.parse(fs.readFileSync(translationFilePath, \"utf8\"));\n //@ts-ignore - suppressImplicitAnyIndexErrors\n // Here we substitute the translation key with the actual translation\n extension.menuItem.description[langugageCode] = translations[menuItemDescriptionKey];\n }\n });\n delete (description as { key?: string }).key;\n }\n }\n if (extension.type === \"ASSET_HOME_EXTENSION\" || extension.type === \"FLEET_EXTENSION\") {\n if (extension.conditions?.brand) {\n if (Array.isArray(extension.conditions.brand)) {\n extension.conditions.brand.map(brand => {\n if (typeof brand !== \"string\") {\n brand.pattern = brand.pattern.toString();\n }\n });\n } else if (typeof extension.conditions.brand !== \"string\") {\n extension.conditions.brand.pattern = extension.conditions.brand.pattern.toString();\n }\n }\n if (extension.conditions?.model) {\n if (Array.isArray(extension.conditions.model)) {\n extension.conditions.model.map(model => {\n if (typeof model !== \"string\") {\n model.pattern = model.pattern.toString();\n }\n });\n } else if (typeof extension.conditions.model !== \"string\") {\n extension.conditions.model.pattern = extension.conditions.model.pattern.toString();\n }\n }\n }\n });\n\n manifestJson.extensions = this.options.manifest.extensions;\n compilation.emitAsset(\"manifest.json\", new RawSource(JSON.stringify(manifestJson, null, 2)));\n\n const packageJson = fs.readFileSync(`${this.options.appDir}/package.json`, \"utf8\");\n compilation.emitAsset(\"package.json\", new RawSource(packageJson));\n\n const csp = getCSP(irisAppCspInput(manifest.validDomains));\n\n let html = indexContents.replace(\"{{cspContent}}\", csp);\n html = html.replace(\"{{scope}}\", JSON.parse(packageJson).name);\n // Adding new asset to the compilation, so it would be automatically\n // generated by the webpack in the output directory.\n compilation.emitAsset(\"index.html\", new RawSource(html));\n }\n );\n });\n }\n}\n"]}
1
+ {"version":3,"file":"TrackunitIrisAppWebpackPlugin.js","sourceRoot":"","sources":["../../../../../../libs/iris-app-sdk/iris-app-webpack-plugin/src/lib/TrackunitIrisAppWebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { irisAppCspInput, IrisAppManifest, languageKeys, TranslationKey, Translations } from \"@trackunit/iris-app-api\";\nimport { getCSP } from \"csp-header\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as wp from \"webpack\";\n\ninterface ITrackunitIrisAppWebpackPluginOptions {\n nxRootDir: string;\n appDir: string;\n manifest: IrisAppManifest;\n}\n\nconst isTranslationKey = (object: string | Translations | TranslationKey | undefined): object is TranslationKey => {\n return !!(object as { key?: string })?.key;\n};\n\n/**\n * Webpack plugin that generates a manifest.json file\n */\nexport class TrackunitIrisAppWebpackPlugin {\n /**\n * @param options - Plugin options\n */\n public constructor(private options: ITrackunitIrisAppWebpackPluginOptions) {}\n\n /**\n Webpack plugin for generating a Markdown file from app manifest and index HTML file.\n *\n @class\n @public\n @param {object} options - Plugin options object\n @param {string} options.appDir - Directory path where the app resides\n @param {object} options.manifest - Object containing the app's manifest\n */\n public apply(compiler: wp.Compiler) {\n const pluginName = TrackunitIrisAppWebpackPlugin.name;\n\n // webpack module instance can be accessed from the compiler object,\n // this ensures that correct version of the module is used\n // (do not require/import the webpack or any symbols from it directly).\n const { webpack } = compiler;\n\n // Compilation object gives us reference to some useful constants.\n const { Compilation } = webpack;\n\n // RawSource is one of the \"sources\" classes that should be used\n // to represent asset sources in compilation.\n const { RawSource } = webpack.sources;\n\n // Tapping to the \"thisCompilation\" hook in order to further tap\n // to the compilation process on an earlier stage.\n compiler.hooks.thisCompilation.tap(pluginName, (compilation: wp.Compilation) => {\n // Tapping to the assets processing pipeline on a specific stage.\n compilation.hooks.processAssets.tap(\n {\n name: pluginName,\n\n // Using one of the later asset processing stages to ensure\n // that all assets were already added to the compilation by other plugins.\n stage: Compilation.PROCESS_ASSETS_STAGE_DERIVED,\n },\n async assets => {\n // \"assets\" is an object that contains all assets\n // in the compilation, the keys of the object are pathnames of the assets\n // and the values are file sources.\n\n // Iterating over all the assets and\n // generating content for our Markdown file.\n if (!this.options?.manifest) {\n throw Error(\"you must provide a app manifest\");\n }\n const manifest = this.options.manifest;\n const indexContents = fs.readFileSync(path.join(__dirname, \"index.html\"), \"utf8\");\n\n const manifestJson = this.options.manifest;\n manifestJson.extensions = this.options.manifest.extensions;\n\n this.options.manifest.extensions?.forEach(extension => {\n const translationKey =\n extension.type !== \"IRIS_APP_SETTINGS_EXTENSION\" &&\n extension.type !== \"WIDGET_EXTENSION\" &&\n extension.menuItem &&\n extension.menuItem.name;\n\n if (translationKey) {\n if (isTranslationKey(translationKey)) {\n const menuItemName = translationKey;\n const menuItemNameKey = menuItemName.key;\n\n languageKeys.forEach(langugageCode => {\n const translationFilePath = path.join(\n extension.sourceRoot,\n \"locales\",\n langugageCode,\n \"translation.json\"\n );\n if (fs.existsSync(translationFilePath)) {\n const translations = JSON.parse(fs.readFileSync(translationFilePath, \"utf8\"));\n //@ts-ignore - suppressImplicitAnyIndexErrors\n // Here we substitute the translation key with the actual translation\n extension.menuItem.name[langugageCode] = translations[menuItemNameKey];\n }\n });\n delete (menuItemName as { key?: string }).key;\n }\n }\n const headerTranslationKey =\n extension.type === \"WIDGET_EXTENSION\" && extension.header && extension.header.name;\n if (headerTranslationKey) {\n if (isTranslationKey(headerTranslationKey)) {\n const menuItemName = headerTranslationKey;\n const menuItemNameKey = menuItemName.key;\n\n languageKeys.forEach(langugageCode => {\n const translationFilePath = path.join(\n extension.sourceRoot,\n \"locales\",\n langugageCode,\n \"translation.json\"\n );\n if (fs.existsSync(translationFilePath)) {\n const translations = JSON.parse(fs.readFileSync(translationFilePath, \"utf8\"));\n //@ts-ignore - suppressImplicitAnyIndexErrors\n // Here we substitute the translation key with the actual translation\n extension.header.name[langugageCode] = translations[menuItemNameKey];\n }\n });\n delete (menuItemName as { key?: string }).key;\n }\n }\n\n if (extension.type === \"REPORT_EXTENSION\" && isTranslationKey(extension.menuItem?.description)) {\n const description = extension.menuItem.description;\n const menuItemDescriptionKey = description.key;\n\n languageKeys.forEach(langugageCode => {\n const translationFilePath = path.join(\n extension.sourceRoot,\n \"locales\",\n langugageCode,\n \"translation.json\"\n );\n if (fs.existsSync(translationFilePath)) {\n const translations = JSON.parse(fs.readFileSync(translationFilePath, \"utf8\"));\n //@ts-ignore - suppressImplicitAnyIndexErrors\n // Here we substitute the translation key with the actual translation\n extension.menuItem.description[langugageCode] = translations[menuItemDescriptionKey];\n }\n });\n delete (description as { key?: string }).key;\n }\n if (extension.type === \"ASSET_HOME_EXTENSION\" || extension.type === \"FLEET_EXTENSION\") {\n if (extension.conditions?.brand) {\n if (Array.isArray(extension.conditions.brand)) {\n extension.conditions.brand.forEach(brand => {\n if (typeof brand !== \"string\") {\n brand.pattern = brand.pattern.toString();\n }\n });\n } else if (typeof extension.conditions.brand !== \"string\") {\n extension.conditions.brand.pattern = extension.conditions.brand.pattern.toString();\n }\n }\n if (extension.conditions?.model) {\n if (Array.isArray(extension.conditions.model)) {\n extension.conditions.model.forEach(model => {\n if (typeof model !== \"string\") {\n model.pattern = model.pattern.toString();\n }\n });\n } else if (typeof extension.conditions.model !== \"string\") {\n extension.conditions.model.pattern = extension.conditions.model.pattern.toString();\n }\n }\n }\n });\n\n manifestJson.extensions = this.options.manifest.extensions;\n compilation.emitAsset(\"manifest.json\", new RawSource(JSON.stringify(manifestJson, null, 2)));\n\n const packageJson = fs.readFileSync(`${this.options.appDir}/package.json`, \"utf8\");\n compilation.emitAsset(\"package.json\", new RawSource(packageJson));\n\n const csp = getCSP(irisAppCspInput(manifest.validDomains));\n\n let html = indexContents.replace(\"{{cspContent}}\", csp);\n html = html.replace(\"{{scope}}\", JSON.parse(packageJson).name);\n // Adding new asset to the compilation, so it would be automatically\n // generated by the webpack in the output directory.\n compilation.emitAsset(\"index.html\", new RawSource(html));\n }\n );\n });\n }\n}\n"]}