@ihk-gfi/lux-components-update 11.7.0 → 11.11.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.
Files changed (44) hide show
  1. package/package.json +1 -1
  2. package/src/add-lux-components/index.js +12 -0
  3. package/src/add-lux-components/index.js.map +1 -1
  4. package/src/add-lux-components/index.ts +12 -0
  5. package/src/collection.json +20 -0
  6. package/src/update/index_spec.js +0 -6
  7. package/src/update/index_spec.js.map +1 -1
  8. package/src/update/index_spec.ts +0 -6
  9. package/src/update110800/index.d.ts +2 -0
  10. package/src/update110800/index.js +32 -0
  11. package/src/update110800/index.js.map +1 -0
  12. package/src/update110800/index.ts +33 -0
  13. package/src/update110800/index_spec.d.ts +1 -0
  14. package/src/update110800/index_spec.js +70 -0
  15. package/src/update110800/index_spec.js.map +1 -0
  16. package/src/update110800/index_spec.ts +75 -0
  17. package/src/update110800/schema.json +23 -0
  18. package/src/update110900/index.d.ts +4 -0
  19. package/src/update110900/index.js +111 -0
  20. package/src/update110900/index.js.map +1 -0
  21. package/src/update110900/index.ts +123 -0
  22. package/src/update110900/index_spec.d.ts +1 -0
  23. package/src/update110900/index_spec.js +311 -0
  24. package/src/update110900/index_spec.js.map +1 -0
  25. package/src/update110900/index_spec.ts +341 -0
  26. package/src/update110900/schema.json +23 -0
  27. package/src/update111000/index.d.ts +2 -0
  28. package/src/update111000/index.js +27 -0
  29. package/src/update111000/index.js.map +1 -0
  30. package/src/update111000/index.ts +27 -0
  31. package/src/update111000/index_spec.d.ts +1 -0
  32. package/src/update111000/index_spec.js +65 -0
  33. package/src/update111000/index_spec.js.map +1 -0
  34. package/src/update111000/index_spec.ts +70 -0
  35. package/src/update111000/schema.json +23 -0
  36. package/src/update111100/index.d.ts +2 -0
  37. package/src/update111100/index.js +389 -0
  38. package/src/update111100/index.js.map +1 -0
  39. package/src/update111100/index.ts +405 -0
  40. package/src/update111100/index_spec.d.ts +1 -0
  41. package/src/update111100/index_spec.js +66 -0
  42. package/src/update111100/index_spec.js.map +1 -0
  43. package/src/update111100/index_spec.ts +70 -0
  44. package/src/update111100/schema.json +23 -0
@@ -0,0 +1,123 @@
1
+ import { chain, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
2
+ import * as chalk from 'chalk';
3
+ import { applyEdits, findNodeAtLocation, modify } from 'jsonc-parser';
4
+ import { updateDependency } from '../utility/dependencies';
5
+ import { jsonFormattingOptions, readJson, readJsonAsString } from '../utility/json';
6
+ import { logError, logInfo, logWarn } from '../utility/logging';
7
+ import { finish, messageInfoRule, messageSuccessRule } from '../utility/util';
8
+
9
+ export function update110900(options: any): Rule {
10
+ return (tree: Tree, context: SchematicContext) => {
11
+ const fontawesomeCss = {
12
+ glob: 'all.css',
13
+ input: './node_modules/@fortawesome/fontawesome-free/css',
14
+ output: './assets/icons/fontawesome/css'
15
+ };
16
+ const fontawesomeIcons = {
17
+ glob: '*(*.eot|*.ttf|*.woff|*.woff2)',
18
+ input: './node_modules/@fortawesome/fontawesome-free/webfonts',
19
+ output: './assets/icons/fontawesome/webfonts'
20
+ };
21
+ const materialCss = {
22
+ glob: 'material-design-icons.css',
23
+ input: './node_modules/material-design-icons-iconfont/dist',
24
+ output: './assets/icons/material-icons'
25
+ };
26
+ const materialIcons = {
27
+ glob: '*(*.eot|*.ttf|*.woff|*.woff2)',
28
+ input: './node_modules/material-design-icons-iconfont/dist/fonts',
29
+ output: './assets/icons/material-icons/fonts'
30
+ };
31
+
32
+ return chain([
33
+ messageInfoRule(`Die LUX-Components werden auf die Version 11.9.0 aktualisiert...`),
34
+
35
+ messageInfoRule(`Die Datei "package.json" wird angepasst...`),
36
+ updateDependencies(),
37
+ messageSuccessRule(`Die Datei "package.json" wurde angepasst.`),
38
+
39
+ messageInfoRule(`Die Datei "angular.json" wird angepasst...`),
40
+ addIconAssets(options, materialIcons),
41
+ addIconAssets(options, materialCss),
42
+ addIconAssets(options, fontawesomeIcons),
43
+ addIconAssets(options, fontawesomeCss),
44
+ messageSuccessRule(`Die Datei "angular.json" wurde angepasst.`),
45
+
46
+ messageInfoRule(`Die Datei "index.html" wird angepasst...`),
47
+ addIconsToIndexHtml(options),
48
+ messageSuccessRule(`Die Datei "index.html" wurde angepasst.`),
49
+
50
+ messageSuccessRule(`Die LUX-Components wurden auf die Version 11.9.0 aktualisiert.`),
51
+ finish(`${chalk.yellowBright('Fertig!')}`)
52
+ ]);
53
+ };
54
+
55
+ function updateDependencies() {
56
+ return (tree: Tree, _context: SchematicContext) => {
57
+ updateDependency(tree, '@ihk-gfi/lux-components', '11.9.0');
58
+ updateDependency(tree, '@ihk-gfi/lux-components-theme', '11.11.0');
59
+
60
+ return tree;
61
+ };
62
+ }
63
+ }
64
+
65
+ export function addIconsToIndexHtml(options: any): Rule {
66
+ return chain([
67
+ (tree: Tree, context: SchematicContext) => {
68
+ const newValue =
69
+ '<link rel="stylesheet" href="assets/icons/fontawesome/css/all.css">\n' +
70
+ '<link rel="stylesheet" href="assets/icons/material-icons/material-design-icons.css">\n' +
71
+ '<link rel="icon"';
72
+
73
+ const errorMessage =
74
+ 'Die folgenden Einträge konnten NICHT automatisiert eingetragen werden. Diese müssen jetzt manuell im <head>-Tag nachgetragen werden: ' +
75
+ '\n' +
76
+ newValue.replace('<link rel="icon"', '');
77
+
78
+ const filePath = 'src/index.html';
79
+ if (tree.read(filePath)) {
80
+ const content = (tree.read(filePath) as Buffer).toString();
81
+ const modifiedContent = content.replace('<link rel="icon"', newValue);
82
+
83
+ if (modifiedContent !== content) {
84
+ logInfo('Folgender Einträge wurden ergänzt: ' + newValue);
85
+ tree.overwrite(filePath, modifiedContent);
86
+ } else {
87
+ logError(errorMessage);
88
+ }
89
+ } else {
90
+ logError(errorMessage);
91
+ }
92
+ }
93
+ ]);
94
+ }
95
+
96
+ export function addIconAssets(options: any, value: any): Rule {
97
+ return (tree: Tree, context: SchematicContext) => {
98
+ const filePath = '/angular.json';
99
+
100
+ let contentAsNode = readJson(tree, filePath);
101
+ const buildAssetsNode = findNodeAtLocation(contentAsNode, [
102
+ 'projects',
103
+ options.project,
104
+ 'architect',
105
+ 'build',
106
+ 'options',
107
+ 'assets'
108
+ ]);
109
+ if (buildAssetsNode) {
110
+ const angularJson = readJsonAsString(tree, filePath);
111
+ const edits = modify(
112
+ angularJson,
113
+ ['projects', options.project, 'architect', 'build', 'options', 'assets', 0],
114
+ value,
115
+ { formattingOptions: jsonFormattingOptions, isArrayInsertion: true }
116
+ );
117
+ if (edits) {
118
+ tree.overwrite(filePath, applyEdits(angularJson, edits));
119
+ logInfo('Folgender Eintrag wurden ergänzt: ' + JSON.stringify(value));
120
+ }
121
+ }
122
+ };
123
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const schematics_1 = require("@angular-devkit/schematics");
13
+ const testing_1 = require("@angular-devkit/schematics/testing");
14
+ const path = require("path");
15
+ const rxjs_1 = require("rxjs");
16
+ const dependencies_1 = require("../utility/dependencies");
17
+ const test_1 = require("../utility/test");
18
+ const util_1 = require("../utility/util");
19
+ const index_1 = require("./index");
20
+ const collectionPath = path.join(__dirname, '../collection.json');
21
+ describe('update110900', () => {
22
+ let appTree;
23
+ let runner;
24
+ let context;
25
+ const testOptions = {};
26
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
27
+ runner = new testing_1.SchematicTestRunner('schematics', collectionPath);
28
+ appTree = yield runner.runExternalSchematicAsync('@schematics/angular', 'workspace', test_1.workspaceOptions).toPromise();
29
+ appTree = yield runner
30
+ .runExternalSchematicAsync('@schematics/angular', 'application', test_1.appOptions, appTree)
31
+ .toPromise();
32
+ util_1.UtilConfig.defaultWaitMS = 0;
33
+ const collection = runner.engine.createCollection(collectionPath);
34
+ const schematic = runner.engine.createSchematic('update-11.9.0', collection);
35
+ context = runner.engine.createContext(schematic);
36
+ testOptions.project = test_1.appOptions.name;
37
+ testOptions.path = test_1.workspaceOptions.newProjectRoot + '/' + test_1.appOptions.name;
38
+ testOptions.verbose = true;
39
+ }));
40
+ describe('[Rule] update110900', () => {
41
+ it('Sollte die Abhängigkeiten aktualisieren', (done) => {
42
+ appTree.overwrite('/package.json', `
43
+ {
44
+ "name": "Lorem ipsum",
45
+ "version": "0.0.32",
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "test": "npm run build && jasmine src/**/*_spec.js"
49
+ },
50
+ "dependencies": {
51
+ "@ihk-gfi/lux-components": "11.0.0",
52
+ },
53
+ "devDependencies": {
54
+ "@angular-devkit/build-angular": "0.1102.14"
55
+ }
56
+ }
57
+ `);
58
+ appTree.overwrite('/angular.json', `{
59
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
60
+ "version": 1,
61
+ "newProjectRoot": "projects",
62
+ "projects": {
63
+ "bar": {
64
+ "root": "",
65
+ "sourceRoot": "src",
66
+ "projectType": "application",
67
+ "i18n": {
68
+ "sourceLocale": {
69
+ "code": "de",
70
+ "baseHref": "/"
71
+ },
72
+ "locales": {
73
+ "en": "src/locale/messages.en.xlf"
74
+ }
75
+ },
76
+ "architect": {
77
+ "build": {
78
+ "builder": "ngx-build-plus:browser",
79
+ "options": {
80
+ "outputPath": "dist",
81
+ "index": "src/index.html",
82
+ "main": "src/main.ts",
83
+ "tsConfig": "src/tsconfig.app.json",
84
+ "polyfills": "src/polyfills.ts",
85
+ "assets": [
86
+ "src/assets",
87
+ {
88
+ "glob": "*(*min.css|*min.css.map)",
89
+ "input": "./node_modules/@ihk-gfi/lux-components-theme/prebuilt-themes",
90
+ "output": "./assets/themes"
91
+ }
92
+ ],
93
+ "styles": [
94
+ "src/styles.scss"
95
+ ],
96
+ "scripts": [
97
+ {
98
+ "bundleName": "polyfill-webcomp",
99
+ "input": "node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js"
100
+ },
101
+ {
102
+ "bundleName": "polyfill-webcomp-es5",
103
+ "input": "node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"
104
+ }
105
+ ],
106
+ "allowedCommonJsDependencies": [
107
+ "hammerjs",
108
+ "ng2-pdf-viewer"
109
+ ],
110
+ "localize": [
111
+ "de"
112
+ ],
113
+ "i18nMissingTranslation": "error",
114
+ "extraWebpackConfig": "webpack.config.js"
115
+ },
116
+ "configurations": {
117
+ "production": {
118
+ "budgets": [
119
+ {
120
+ "type": "anyComponentStyle",
121
+ "maximumWarning": "6kb"
122
+ }
123
+ ],
124
+ "optimization": true,
125
+ "outputHashing": "all",
126
+ "sourceMap": false,
127
+ "namedChunks": false,
128
+ "aot": true,
129
+ "extractLicenses": true,
130
+ "vendorChunk": false,
131
+ "buildOptimizer": true,
132
+ "fileReplacements": [
133
+ {
134
+ "replace": "src/environments/environment.ts",
135
+ "with": "src/environments/environment.prod.ts"
136
+ }
137
+ ]
138
+ },
139
+ "es5": {
140
+ "budgets": [
141
+ {
142
+ "type": "anyComponentStyle",
143
+ "maximumWarning": "6kb"
144
+ }
145
+ ],
146
+ "tsConfig": "src/tsconfig.app.ie.json"
147
+ },
148
+ "en": {
149
+ "localize": [
150
+ "en"
151
+ ],
152
+ "aot": true,
153
+ "outputPath": "dist/en",
154
+ "i18nMissingTranslation": "error"
155
+ }
156
+ }
157
+ },
158
+ "serve": {
159
+ "builder": "ngx-build-plus:dev-server",
160
+ "options": {
161
+ "browserTarget": "bar:build"
162
+ },
163
+ "configurations": {
164
+ "production": {
165
+ "browserTarget": "bar:build:production"
166
+ },
167
+ "es5": {
168
+ "browserTarget": "bar:build:es5"
169
+ },
170
+ "en": {
171
+ "browserTarget": "bar:build:en"
172
+ }
173
+ }
174
+ },
175
+ "extract-i18n": {
176
+ "builder": "@angular-devkit/build-angular:extract-i18n",
177
+ "options": {
178
+ "browserTarget": "bar:build"
179
+ }
180
+ },
181
+ "test": {
182
+ "builder": "ngx-build-plus:karma",
183
+ "options": {
184
+ "main": "src/test.ts",
185
+ "karmaConfig": "./karma.conf.js",
186
+ "polyfills": "src/polyfills.ts",
187
+ "tsConfig": "src/tsconfig.spec.json",
188
+ "scripts": [],
189
+ "styles": [
190
+ "src/styles.scss"
191
+ ],
192
+ "assets": [
193
+ "src/assets",
194
+ {
195
+ "glob": "**/*",
196
+ "input": "./node_modules/pdfjs-dist/cmaps/",
197
+ "output": "./assets/cmaps"
198
+ },
199
+ {
200
+ "glob": "*.css",
201
+ "input": "./node_modules/@ihk-gfi/lux-components-theme/prebuilt-themes",
202
+ "output": "./assets/themes"
203
+ }
204
+ ]
205
+ }
206
+ },
207
+ "lint": {
208
+ "builder": "@angular-eslint/builder:lint",
209
+ "options": {
210
+ "lintFilePatterns": [
211
+ "src/**/*.ts",
212
+ "src/**/*.html"
213
+ ]
214
+ }
215
+ }
216
+ }
217
+ },
218
+ "bar-e2e": {
219
+ "root": "e2e",
220
+ "sourceRoot": "e2e",
221
+ "projectType": "application",
222
+ "architect": {
223
+ "e2e": {
224
+ "builder": "@angular-devkit/build-angular:protractor",
225
+ "options": {
226
+ "protractorConfig": "./protractor.conf.js",
227
+ "devServerTarget": "bar:serve"
228
+ }
229
+ }
230
+ }
231
+ }
232
+ },
233
+ "defaultProject": "bar",
234
+ "cli": {
235
+ "defaultCollection": "@angular-eslint/schematics"
236
+ },
237
+ "schematics": {
238
+ "@schematics/angular:component": {
239
+ "prefix": "bp",
240
+ "style": "scss"
241
+ },
242
+ "@schematics/angular:directive": {
243
+ "prefix": "bp"
244
+ }
245
+ }
246
+ }
247
+ `);
248
+ schematics_1.callRule(index_1.update110900(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
249
+ var _a;
250
+ expect(dependencies_1.getPackageJsonDependency(appTree, '@ihk-gfi/lux-components').version).toEqual('11.9.0');
251
+ expect(dependencies_1.getPackageJsonDependency(appTree, '@ihk-gfi/lux-components-theme').version).toEqual('11.11.0');
252
+ const angularJson = (_a = success.read('/angular.json')) === null || _a === void 0 ? void 0 : _a.toString();
253
+ expect(angularJson).toContain(`{
254
+ "glob": "all.css",
255
+ "input": "./node_modules/@fortawesome/fontawesome-free/css",
256
+ "output": "./assets/icons/fontawesome/css"
257
+ },`);
258
+ expect(angularJson).toContain(`{
259
+ "glob": "*(*.eot|*.ttf|*.woff|*.woff2)",
260
+ "input": "./node_modules/@fortawesome/fontawesome-free/webfonts",
261
+ "output": "./assets/icons/fontawesome/webfonts"
262
+ },`);
263
+ expect(angularJson).toContain(`{
264
+ "glob": "material-design-icons.css",
265
+ "input": "./node_modules/material-design-icons-iconfont/dist",
266
+ "output": "./assets/icons/material-icons"
267
+ },`);
268
+ expect(angularJson).toContain(`{
269
+ "glob": "*(*.eot|*.ttf|*.woff|*.woff2)",
270
+ "input": "./node_modules/material-design-icons-iconfont/dist/fonts",
271
+ "output": "./assets/icons/material-icons/fonts"
272
+ },`);
273
+ done();
274
+ }, (reason) => expect(reason).toBeUndefined());
275
+ });
276
+ });
277
+ describe('[Rule] addIconsToIndexHtml', () => {
278
+ it('Sollte die Datei "index.html" angepasst haben', (done) => {
279
+ appTree.create('src/index.html', `
280
+ <!doctype html>
281
+ <html lang="de">
282
+ <head>
283
+ <meta charset="utf-8">
284
+ <title>LUX Blueprint</title>
285
+ <base href="/">
286
+ <meta name="viewport" content="width=device-width, initial-scale=1">
287
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
288
+ </head>
289
+ <body style="margin: 0">
290
+ <noscript>
291
+ <div id="no-js" class="lux-no-js">
292
+ <p><b>Achtung, Javascript ist deaktiviert.</b></p>
293
+ <p>Bitte aktivieren Sie Javascript in Ihrem Browser, damit die Applikation funktionsf&auml;hig ist.</p>
294
+ </div>
295
+ </noscript>
296
+ <app-root></app-root>
297
+ </body>
298
+ </html>
299
+ `);
300
+ schematics_1.callRule(index_1.addIconsToIndexHtml(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
301
+ var _a;
302
+ const content = (_a = success.read('src/index.html')) === null || _a === void 0 ? void 0 : _a.toString();
303
+ expect(content).toContain('<link rel="icon" type="image/x-icon" href="favicon.ico">');
304
+ expect(content).toContain('<link rel="stylesheet" href="assets/icons/material-icons/material-design-icons.css">');
305
+ expect(content).toContain('<link rel="stylesheet" href="assets/icons/fontawesome/css/all.css">');
306
+ done();
307
+ }, (reason) => expect(reason).toBeUndefined());
308
+ });
309
+ });
310
+ });
311
+ //# sourceMappingURL=index_spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":"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"}