Pārlūkot izejas kodu

Better combination of repeating groups with metadata, including working out all the fields from model and extrameta

Richard Knight 6 gadi atpakaļ
vecāks
revīzija
3622a7b154

+ 76 - 76
package-lock.json

@@ -5,26 +5,26 @@
   "requires": true,
   "dependencies": {
     "@angular-devkit/architect": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.0.tgz",
-      "integrity": "sha512-HiMrXZ6pj4OUHmDKnLj+CIzZmr92aklBvi20QBmHv6h82l/pSs9VG5R90Dr6zHZ04cKQgKaDFJTxNQld+hHUpw==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.1.tgz",
+      "integrity": "sha512-MdcZ5KclwL2SBXCQSn8uI2hakBX58EyuAwFWsM/pKrNt9j8RqIk93l4amd2OkaMtZRFP5zWodyf/3qOwacjuQg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.0",
+        "@angular-devkit/core": "7.1.1",
         "rxjs": "6.3.3"
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.0.tgz",
-      "integrity": "sha512-KNbVqApCfLNw7qG0i7nbirisePzcUBmqb5YJGMOEoB1pWASwGke2H/3NMTyJEDHtGDg5DdWuVvyoyXaGEKMoJg==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.1.tgz",
+      "integrity": "sha512-hA/3GVMmRwOPXWhImrBG9gZTdERr937NMuedKhTXuNj6TNMNjk9XQ+q2erd0LZVbgfhL/nC0wHnpy0dUWXu8jA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.0",
-        "@angular-devkit/build-optimizer": "0.11.0",
-        "@angular-devkit/build-webpack": "0.11.0",
-        "@angular-devkit/core": "7.1.0",
-        "@ngtools/webpack": "7.1.0",
+        "@angular-devkit/architect": "0.11.1",
+        "@angular-devkit/build-optimizer": "0.11.1",
+        "@angular-devkit/build-webpack": "0.11.1",
+        "@angular-devkit/core": "7.1.1",
+        "@ngtools/webpack": "7.1.1",
         "ajv": "6.5.3",
         "autoprefixer": "9.3.1",
         "circular-dependency-plugin": "5.0.2",
@@ -92,9 +92,9 @@
       }
     },
     "@angular-devkit/build-optimizer": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.0.tgz",
-      "integrity": "sha512-a7nIw6bN/kO77NnWoLzuoEep8jVSDxDyXZZMjvv2+bdcnua1rsScuJKII5PjGIjIucLNUJRwdHQFovVDXRMCPQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.1.tgz",
+      "integrity": "sha512-pyFP6ykZf8Iq8nRkgP2XKq8knpIG6ye0qYklnBC9815AC5RAO126Y4fmtd6tnH+5p1mQxnt5HegG0j5xOCgDRw==",
       "dev": true,
       "requires": {
         "loader-utils": "1.1.0",
@@ -136,20 +136,20 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.0.tgz",
-      "integrity": "sha512-AGkpHv9k9pjVEe1IihtHBWpYPSBYDEui5tFaXE6zEuXl8EbPRVW6fP4SpfEOefgCRwrUe3VP9+q5IlGgKVOXlg==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.1.tgz",
+      "integrity": "sha512-p7fPHOi2Wfq2VPtnRVowg3n99MujghpOp6zW0gBJQD1TQhGVzPK6AX42S0NA4d05ahNBCDU2n7Y+5TjNJRIGJw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.0",
-        "@angular-devkit/core": "7.1.0",
+        "@angular-devkit/architect": "0.11.1",
+        "@angular-devkit/core": "7.1.1",
         "rxjs": "6.3.3"
       }
     },
     "@angular-devkit/core": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
-      "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.1.tgz",
+      "integrity": "sha512-rODqECpOiV6vX+L1qd63GLiF3SG+V1O+d8WYtnKPOxnsMM9yWpWmqmroHtXfisjucu/zwoqj8HoO/noJZCfynw==",
       "dev": true,
       "requires": {
         "ajv": "6.5.3",
@@ -168,12 +168,12 @@
       }
     },
     "@angular-devkit/schematics": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
-      "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.1.tgz",
+      "integrity": "sha512-yjzTw8ZWMPg0Fc9VQCHNpUCAH7aiNxrUDs0IbhdC0CyKTBoqH+cx2xP4Z6ECf4uNwceLKJlE0l3ot42Ypnlziw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.0",
+        "@angular-devkit/core": "7.1.1",
         "rxjs": "6.3.3"
       }
     },
@@ -186,16 +186,16 @@
       }
     },
     "@angular/cli": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.1.0.tgz",
-      "integrity": "sha512-G7WZvClrZjfo0VL6eFxwzqPffUQr3XbdkdCUcVbzJVnkFLrBG5Q2jFOJaZ4uFeRW4z5UM+8u/4N9N1Z6MH2QAQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.1.1.tgz",
+      "integrity": "sha512-lPVKsk035T5Ls0Mf83OngrNoLZu/ucZSjRLN/GWZK1O/YYVmb/dTgVl/a7HC+G480tWQ34nlqnCRbrP7sE9v7g==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.0",
-        "@angular-devkit/core": "7.1.0",
-        "@angular-devkit/schematics": "7.1.0",
-        "@schematics/angular": "7.1.0",
-        "@schematics/update": "0.11.0",
+        "@angular-devkit/architect": "0.11.1",
+        "@angular-devkit/core": "7.1.1",
+        "@angular-devkit/schematics": "7.1.1",
+        "@schematics/angular": "7.1.1",
+        "@schematics/update": "0.11.1",
         "inquirer": "6.2.0",
         "opn": "5.3.0",
         "semver": "5.5.1",
@@ -745,12 +745,12 @@
       }
     },
     "@ngtools/webpack": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.0.tgz",
-      "integrity": "sha512-U4+2fPEEdvQN6/SmdlNYiuuwWbSEUP3Rpfbkzj7hYOHMQHnWA90u6EfZLjoyE77qqhF3EGXszjmZnYls78/c7Q==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.1.tgz",
+      "integrity": "sha512-XW/YDjiDZlwOYK4YvGAIKIVEkqtdwPLwTWAmDbnfpEHQc8UALsBrzGdjze0jSfXQdQxkbmXo0aolZgNc7uL/wQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.0",
+        "@angular-devkit/core": "7.1.1",
         "enhanced-resolve": "4.1.0",
         "rxjs": "6.3.3",
         "tree-kill": "1.2.0",
@@ -845,13 +845,13 @@
       "integrity": "sha512-GNyPtff/BuATb1Rsqu6065e4UcOR2oXgbhaj2jNQqGrvTPvTRaVIr/DVibJLTxqHFGjZJVHtxbzRZGZejoM5BA=="
     },
     "@schematics/angular": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.1.0.tgz",
-      "integrity": "sha512-BLRTHlhYXgP49OwDyoolwolf7LqxOAPuc8lpgH0HEmYjkXmufZ4urngyFKY1IuBwaAR4PLjDx3U/ofszyV0taw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.1.1.tgz",
+      "integrity": "sha512-jMaj8y3rNTQQXuH38uoWfAOmwYjtzqo1RelNfACnT54mfO/Dat+k7WasBLHWuvzvnN4/Ga3kXL7sJpkeMciiIg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.0",
-        "@angular-devkit/schematics": "7.1.0",
+        "@angular-devkit/core": "7.1.1",
+        "@angular-devkit/schematics": "7.1.1",
         "typescript": "3.1.6"
       },
       "dependencies": {
@@ -864,13 +864,13 @@
       }
     },
     "@schematics/update": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.11.0.tgz",
-      "integrity": "sha512-Zrt4MQOM8DjK7fYVrzx08KhQ7jSj/at0/uF+Ca+ObZJIiC67IY8NXlc1TETXpB4A2UYrclvc9mTpZrvgIoEcYA==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.11.1.tgz",
+      "integrity": "sha512-IzPXamoMpDb2eY2zSW4fPuuH+7RfJLte9XVzQM2y3ZTBhlJQFLqx7qJtOXdcXUboonC6o61KCayNDERFnDUdPg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.0",
-        "@angular-devkit/schematics": "7.1.0",
+        "@angular-devkit/core": "7.1.1",
+        "@angular-devkit/schematics": "7.1.1",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "1.3.5",
         "pacote": "9.1.1",
@@ -893,9 +893,9 @@
       "integrity": "sha512-aALwrLRyWLo5P6Tk9PJPXpZlsooud/6laMNULffD7cPsgO7LSFOFcCWw+ESSYc7FRu6n70y0+wheGGemA7F9kA=="
     },
     "@types/jasmine": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.0.tgz",
-      "integrity": "sha512-0VU8WsYEOYmoxVtUuafB66/+9G8gMdGAC3dhCE/CMpjXgNIz9fwC6g41kRlNxFgpQI/uX/aWNLArNg7KmeFYvw==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.1.tgz",
+      "integrity": "sha512-JnKB+cEIFuQZXizZP6N0zxma+JlvowkjefWuL61otVmXN7Ebbs4ka3IbDVIz1pc+TCiT00q925jANz3gQJ9qXw==",
       "dev": true
     },
     "@types/jasminewd2": {
@@ -908,15 +908,15 @@
       }
     },
     "@types/lodash": {
-      "version": "4.14.118",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.118.tgz",
-      "integrity": "sha512-iiJbKLZbhSa6FYRip/9ZDX6HXhayXLDGY2Fqws9cOkEQ6XeKfaxB0sC541mowZJueYyMnVUmmG+al5/4fCDrgw==",
+      "version": "4.14.119",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz",
+      "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==",
       "dev": true
     },
     "@types/node": {
-      "version": "10.12.11",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.11.tgz",
-      "integrity": "sha512-3iIOhNiPGTdcUNVCv9e5G7GotfvJJe2pc9w2UgDXlUwnxSZ3RgcUocIU+xYm+rTU54jIKih998QE4dMOyMN1NQ==",
+      "version": "10.12.12",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz",
+      "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==",
       "dev": true
     },
     "@types/q": {
@@ -1242,9 +1242,9 @@
       "integrity": "sha512-FPC6rjSiunK88Wdu5Dbr/XbOQDiIat87XJVa7ScGbQnjEBASeZS/FhxNgWgq6dp/A0YIKNRpRBTddB4Qq6ftig=="
     },
     "ansi-colors": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz",
-      "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.2.tgz",
+      "integrity": "sha512-kJmcp4PrviBBEx95fC3dYRiC/QSN3EBd0GU1XoNEk/IuUa92rsB6o90zP3w5VAyNznR38Vkc9i8vk5zK6T7TxA==",
       "dev": true
     },
     "ansi-escapes": {
@@ -1358,9 +1358,9 @@
       "optional": true
     },
     "array-flatten": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
-      "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
       "dev": true
     },
     "array-slice": {
@@ -2122,9 +2122,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30000912",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz",
-      "integrity": "sha512-M3zAtV36U+xw5mMROlTXpAHClmPAor6GPKAMD5Yi7glCB5sbMPFtnQ3rGpk4XqPdUrrTIaVYSJZxREZWNy8QJg==",
+      "version": "1.0.30000916",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000916.tgz",
+      "integrity": "sha512-D6J9jloPm2MPkg0PXcODLMQAJKkeixKO9xhqTUMvtd44MtTYMyyDXPQ2Lk9IgBq5FH0frwiPa/N/w8ncQf7kIQ==",
       "dev": true
     },
     "canonical-path": {
@@ -2608,9 +2608,9 @@
       }
     },
     "core-js": {
-      "version": "2.5.7",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
-      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz",
+      "integrity": "sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw=="
     },
     "core-util-is": {
       "version": "1.0.2",
@@ -3068,9 +3068,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.86",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.86.tgz",
-      "integrity": "sha512-BcmXOu37FCPxrrh0wyKgKi5dAjIu2ohxN5ptapkLPKRC3IBK2NeIwh9n1x/8HzSRQiEKamJkDce1ZgOGgEX9iw==",
+      "version": "1.3.88",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz",
+      "integrity": "sha512-UPV4NuQMKeUh1S0OWRvwg0PI8ASHN9kBC8yDTk1ROXLC85W5GnhTRu/MZu3Teqx3JjlQYuckuHYXSUSgtb3J+A==",
       "dev": true
     },
     "elliptic": {
@@ -6967,9 +6967,9 @@
       }
     },
     "node-releases": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.5.tgz",
-      "integrity": "sha512-Ky7q0BO1BBkG/rQz6PkEZ59rwo+aSfhczHP1wwq8IowoVdN/FpiP7qp0XW0P2+BVCWe5fQUBozdbVd54q1RbCQ==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.0.tgz",
+      "integrity": "sha512-+qV91QMDBvARuPxUEfI/mRF/BY+UAkTIn3pvmvM2iOLIRvv6RNYklFXBgrkky6P1wXUqQW1P3qKlWxxy4JZbfg==",
       "dev": true,
       "requires": {
         "semver": "^5.3.0"

+ 58 - 58
package.json

@@ -1,60 +1,60 @@
 {
-  "name": "ng-dynaform",
-  "version": "0.0.0",
-  "license": "MIT",
-  "scripts": {
-    "ng": "ng",
-    "start": "ng serve",
-    "build": "ng build --prod",
-    "test": "ng test",
-    "lint": "ng lint",
-    "e2e": "ng e2e"
-  },
-  "private": true,
-  "dependencies": {
-    "@angular/animations": "^7.1.1",
-    "@angular/common": "^7.1.1",
-    "@angular/compiler": "^7.1.1",
-    "@angular/core": "^7.1.1",
-    "@angular/forms": "^7.1.1",
-    "@angular/http": "^7.1.1",
-    "@angular/platform-browser": "^7.1.1",
-    "@angular/platform-browser-dynamic": "^7.1.1",
-    "@angular/router": "^7.1.1",
-    "@ng-bootstrap/ng-bootstrap": "^4.0.0",
-    "@progress/kendo-angular-dateinputs": "^3.5.1",
-    "@progress/kendo-angular-intl": "^1.6.1",
-    "@progress/kendo-angular-l10n": "^1.3.0",
-    "@progress/kendo-theme-bootstrap": "^2.17.0",
-    "angular-super-validator": "^2.0.0",
-    "core-js": "^2.5.7",
-    "json-formatter-js": "^2.2.1",
-    "lodash": "^4.17.11",
-    "rxjs": "^6.3.3",
-    "rxjs-compat": "^6.3.3",
-    "zone.js": "^0.8.26"
-  },
-  "devDependencies": {
-    "@angular-devkit/build-angular": "~0.11.0",
-    "@angular/cli": "~7.1.0",
-    "@angular/compiler-cli": "^7.1.1",
-    "@angular/language-service": "^7.1.1",
-    "@types/jasmine": "~3.3.0",
-    "@types/jasminewd2": "~2.0.6",
-    "@types/lodash": "^4.14.118",
-    "@types/node": "~10.12.11",
-    "codelyzer": "^4.5.0",
-    "jasmine-core": "~3.3.0",
-    "jasmine-spec-reporter": "~4.2.1",
-    "karma": "~3.1.3",
-    "karma-chrome-launcher": "~2.2.0",
-    "karma-coverage-istanbul-reporter": "^2.0.4",
-    "karma-jasmine": "~2.0.1",
-    "karma-jasmine-html-reporter": "^1.4.0",
-    "protractor": "^5.4.1",
-    "rxjs-tslint": "^0.1.6",
-    "ts-node": "~7.0.1",
-    "tslint": "~5.11.0",
-    "typescript": "3.1.6"
-  }
+	"name": "ng-dynaform",
+	"version": "0.0.0",
+	"license": "MIT",
+	"scripts": {
+		"ng": "ng",
+		"start": "ng serve",
+		"build": "ng build --prod",
+		"test": "ng test",
+		"lint": "ng lint",
+		"e2e": "ng e2e"
+	},
+	"private": true,
+	"dependencies": {
+		"@angular/animations": "^7.1.1",
+		"@angular/common": "^7.1.1",
+		"@angular/compiler": "^7.1.1",
+		"@angular/core": "^7.1.1",
+		"@angular/forms": "^7.1.1",
+		"@angular/http": "^7.1.1",
+		"@angular/platform-browser": "^7.1.1",
+		"@angular/platform-browser-dynamic": "^7.1.1",
+		"@angular/router": "^7.1.1",
+		"@ng-bootstrap/ng-bootstrap": "^4.0.0",
+		"@progress/kendo-angular-dateinputs": "^3.5.1",
+		"@progress/kendo-angular-intl": "^1.6.1",
+		"@progress/kendo-angular-l10n": "^1.3.0",
+		"@progress/kendo-theme-bootstrap": "^2.17.0",
+		"angular-super-validator": "^2.0.0",
+		"core-js": "^2.6.0",
+		"json-formatter-js": "^2.2.1",
+		"lodash": "^4.17.11",
+		"rxjs": "^6.3.3",
+		"rxjs-compat": "^6.3.3",
+		"zone.js": "^0.8.26"
+	},
+	"devDependencies": {
+		"@angular-devkit/build-angular": "~0.11.1",
+		"@angular/cli": "~7.1.1",
+		"@angular/compiler-cli": "^7.1.1",
+		"@angular/language-service": "^7.1.1",
+		"@types/jasmine": "~3.3.1",
+		"@types/jasminewd2": "~2.0.6",
+		"@types/lodash": "^4.14.119",
+		"@types/node": "~10.12.12",
+		"codelyzer": "^4.5.0",
+		"jasmine-core": "~3.3.0",
+		"jasmine-spec-reporter": "~4.2.1",
+		"karma": "~3.1.3",
+		"karma-chrome-launcher": "~2.2.0",
+		"karma-coverage-istanbul-reporter": "^2.0.4",
+		"karma-jasmine": "~2.0.1",
+		"karma-jasmine-html-reporter": "^1.4.0",
+		"protractor": "^5.4.1",
+		"rxjs-tslint": "^0.1.6",
+		"ts-node": "~7.0.1",
+		"tslint": "~5.11.0",
+		"typescript": "3.1.6"
+	}
 }

+ 2 - 1
src/app/_mock/testfields.v12.ts

@@ -24,7 +24,7 @@ const meta = {
 		seed: { class: 'short-field' },
 		minRepeat: 1,
 		maxRepeat: 5,
-		initialRepeat: 2,
+		initialRepeat: 3,
 		showAddControl: true,
 		showDeleteControl: true,
 		meta: [
@@ -33,6 +33,7 @@ const meta = {
 				b: { type: 'textarea', label: 'Bee' },
 				c: {},
 				d: {},
+				e: { type: 'textarea', label: 'Eeezer Good' },
 			}
 		]
 	}

+ 27 - 11
src/app/dynaform/services/_formdata-utils.ts

@@ -24,6 +24,7 @@
 import { FormBuilder, FormGroup, FormArray, FormControl, AbstractControlOptions } from '@angular/forms';
 import { cloneDeep, omit, reduce } from 'lodash/fp';
 import * as fmdModels from '../models/field.model';
+import { ComponentFactoryResolver } from '@angular/core/src/render3';
 
 
 // ---------------------------------------------------------------------------------------------------------------------
@@ -80,19 +81,34 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
 				const repeatInAutoMeta = Array.isArray(metaFoG.meta) ? metaFoG.meta.length : 0;
 				const repeatInExtraMeta = val['initialRepeat'] || val['minRepeat'];
 				const repeat = Math.max(repeatInAutoMeta, repeatInExtraMeta);
-				console.log('repeat is', repeat);
 
-				// Extend array from model (if any) to length repeat, adding with empty values
-				const repeatingGroup = repeatInAutoMeta ? 
-					[ ...metaFoG.meta, ...Array(repeat - repeatInAutoMeta).fill(metaFoG.meta[0]) ] // RETHING DEFAULT HERE - its first val from data repeated
-					:
-					Array(repeat).fill({});
-				console.log('repeatingGroup is', repeatingGroup);
-				metaFoG.meta = repeatingGroup.map(metaG => combineExtraMeta(metaG.meta, val['meta'][0], createFromExtra, val['seed']));
-				const extra = omit(['meta', 'seed'], val);
-				console.log(val, extra);
+				// If creating from extra, make sure all group members have all keys in both model and meta (as this is a repeating group)
+				const keysFromModel = repeatInAutoMeta ? Object.keys(metaFoG.meta[0].meta) : [];
+				const keysFromExtraMeta = val['meta'] && val['meta'][0] ? Object.keys(val['meta'][0]) : [];
+				const keysToInclude = createFromExtra ? Array.from(new Set([...keysFromModel, ...keysFromExtraMeta])) : keysFromModel;
+				const baseObjWithAllKeys = autoMeta(keysToInclude.reduce((acc, key) => addProp(acc, key, ''), {}));
+				metaFoG.meta = metaFoG.meta.map( rcMem => ({ ...rcMem, meta: { ...baseObjWithAllKeys, ...rcMem.meta } }) ); // Add extra keys to model meta
+
+				// Extend array from model (if any) to length repeat
+				const repeatedGroup = repeatInAutoMeta ? 
+					[ ...metaFoG.meta, ...Array(repeat - repeatInAutoMeta).fill({ meta: baseObjWithAllKeys }) ] :
+					Array(repeat).fill({ meta: baseObjWithAllKeys });
+				const fullyNamedRepeatedGroup = repeatedGroup.map((rgMem, i) => rgMem.name ? rgMem : { name: `group${i + 1}`, ...rgMem });
+
+				metaFoG.meta = fullyNamedRepeatedGroup;
+				const extra = {
+					...omit(['meta', 'seed'], val),
+					meta: metaFoG.meta.map(
+						rgMem => combineExtraMeta(
+							rgMem.meta,
+							val['meta'][0],
+							createFromExtra,
+							val['seed'] || containerSeed
+						)
+					)
+				};
 				combinedMeta[key] = combineMetaForField(metaFoG, {}, extra);
-				console.log('combinedMeta is', combinedMeta[key]);
+				console.log('combinedMeta IS', combinedMeta[key]);
 			}
 			else
 			{