@rxap/plugin-library 16.0.1-dev.0 → 16.1.0-dev.1

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
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [16.1.0-dev.1](https://gitlab.com/rxap/packages/compare/@rxap/plugin-library@16.1.0-dev.0...@rxap/plugin-library@16.1.0-dev.1) (2024-02-28)
7
+
8
+ ### Features
9
+
10
+ - add bundle json schema ([07ff6b5](https://gitlab.com/rxap/packages/commit/07ff6b5ee90aa20912ece6ae4237faa037fe5088))
11
+
12
+ # [16.1.0-dev.0](https://gitlab.com/rxap/packages/compare/@rxap/plugin-library@16.0.1-dev.0...@rxap/plugin-library@16.1.0-dev.0) (2024-02-25)
13
+
14
+ ### Bug Fixes
15
+
16
+ - add nested definition cleanup ([f9c5637](https://gitlab.com/rxap/packages/commit/f9c5637fdba8ba458443c923c584564761e077ca))
17
+ - cleanup bundled schema ([4af344f](https://gitlab.com/rxap/packages/commit/4af344fa89837f228f04f96166f5b21932b50018))
18
+
19
+ ### Features
20
+
21
+ - add bundle-json-schema generator ([8c4b9d9](https://gitlab.com/rxap/packages/commit/8c4b9d93730290c9b40ecf20490e87de34e6b1d2))
22
+
6
23
  ## [16.0.1-dev.0](https://gitlab.com/rxap/packages/compare/@rxap/plugin-library@16.0.0...@rxap/plugin-library@16.0.1-dev.0) (2024-02-09)
7
24
 
8
25
  ### Bug Fixes
package/README.md CHANGED
@@ -19,7 +19,7 @@ yarn add @rxap/plugin-library
19
19
  ```
20
20
  **Install peer dependencies:**
21
21
  ```bash
22
- yarn add @nx/devkit@^16.5.0 @rxap/generator-ts-morph@^1.0.1 @rxap/generator-utilities@^1.1.0 @rxap/node-utilities@^1.1.0 @rxap/plugin-angular@^16.1.0 @rxap/plugin-nestjs@^16.1.0 @rxap/plugin-utilities@^16.1.0 @rxap/ts-morph@^1.0.1 @rxap/utilities@^16.0.0 @rxap/workspace-utilities@^16.0.1 handlebars@^4.7.7 nx@^16.5.0 semver@^7.5.3 ts-morph@^18.0.0 tslib@2.6.2
22
+ yarn add @nx/devkit@^16.5.0 @rxap/generator-ts-morph@^1.0.1 @rxap/generator-utilities@^1.1.0 @rxap/node-utilities@^1.1.0 @rxap/plugin-angular@^16.1.1-dev.1 @rxap/plugin-nestjs@^16.1.1-dev.0 @rxap/plugin-utilities@^16.1.0 @rxap/ts-morph@^1.1.0-dev.2 @rxap/utilities@^16.1.0-dev.1 @rxap/workspace-utilities@^16.0.1 handlebars@^4.7.7 nx@^16.5.0 semver@^7.5.3 ts-morph@^18.0.0 tslib@2.6.2
23
23
  ```
24
24
  **Execute the init generator:**
25
25
  ```bash
@@ -76,6 +76,20 @@ yarn nx g @rxap/plugin-library:init-publishable
76
76
  yarn nx g @rxap/plugin-library:expose-as-schematic
77
77
  ```
78
78
 
79
+ ## bundle-json-schema
80
+ > bundle-json-schema generator
81
+
82
+ ```bash
83
+ yarn nx g @rxap/plugin-library:bundle-json-schema
84
+ ```
85
+
86
+ ## index-json-schema
87
+ > index-json-schema generator
88
+
89
+ ```bash
90
+ yarn nx g @rxap/plugin-library:index-json-schema
91
+ ```
92
+
79
93
  ## init
80
94
  > Create and update configurations to use rxap package publish concept
81
95
 
@@ -124,6 +138,20 @@ yarn nx g @rxap/plugin-library:init-publishable
124
138
  ```bash
125
139
  yarn nx g @rxap/plugin-library:expose-as-schematic
126
140
  ```
141
+
142
+ ## bundle-json-schema
143
+ > bundle-json-schema generator
144
+
145
+ ```bash
146
+ yarn nx g @rxap/plugin-library:bundle-json-schema
147
+ ```
148
+
149
+ ## index-json-schema
150
+ > index-json-schema generator
151
+
152
+ ```bash
153
+ yarn nx g @rxap/plugin-library:index-json-schema
154
+ ```
127
155
  # Executors
128
156
 
129
157
  ## update-dependencies
package/generators.json CHANGED
@@ -34,6 +34,16 @@
34
34
  "factory": "./src/generators/expose-as-schematic/generator",
35
35
  "schema": "./src/generators/expose-as-schematic/schema.json",
36
36
  "description": "expose-as-schematic generator"
37
+ },
38
+ "bundle-json-schema": {
39
+ "factory": "./src/generators/bundle-json-schema/generator",
40
+ "schema": "./src/generators/bundle-json-schema/schema.json",
41
+ "description": "bundle-json-schema generator"
42
+ },
43
+ "index-json-schema": {
44
+ "factory": "./src/generators/index-json-schema/generator",
45
+ "schema": "./src/generators/index-json-schema/schema.json",
46
+ "description": "index-json-schema generator"
37
47
  }
38
48
  },
39
49
  "schematics": {
@@ -71,6 +81,16 @@
71
81
  "factory": "./src/generators/expose-as-schematic/index",
72
82
  "schema": "./src/generators/expose-as-schematic/schema.json",
73
83
  "description": "expose-as-schematic generator"
84
+ },
85
+ "bundle-json-schema": {
86
+ "factory": "./src/generators/bundle-json-schema/index",
87
+ "schema": "./src/generators/bundle-json-schema/schema.json",
88
+ "description": "bundle-json-schema generator"
89
+ },
90
+ "index-json-schema": {
91
+ "factory": "./src/generators/index-json-schema/index",
92
+ "schema": "./src/generators/index-json-schema/schema.json",
93
+ "description": "index-json-schema generator"
74
94
  }
75
95
  }
76
96
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "16.0.1-dev.0",
2
+ "version": "16.1.0-dev.1",
3
3
  "name": "@rxap/plugin-library",
4
4
  "license": "GPL-3.0-or-later",
5
5
  "dependencies": {
@@ -14,11 +14,11 @@
14
14
  "@rxap/generator-ts-morph": "^1.0.1",
15
15
  "@rxap/generator-utilities": "^1.1.0",
16
16
  "@rxap/node-utilities": "^1.1.0",
17
- "@rxap/plugin-angular": "^16.1.0",
18
- "@rxap/plugin-nestjs": "^16.1.0",
17
+ "@rxap/plugin-angular": "^16.1.1-dev.1",
18
+ "@rxap/plugin-nestjs": "^16.1.1-dev.0",
19
19
  "@rxap/plugin-utilities": "^16.1.0",
20
- "@rxap/ts-morph": "^1.0.1",
21
- "@rxap/utilities": "^16.0.0",
20
+ "@rxap/ts-morph": "^1.1.0-dev.2",
21
+ "@rxap/utilities": "^16.1.0-dev.1",
22
22
  "@rxap/workspace-utilities": "^16.0.1",
23
23
  "handlebars": "^4.7.7",
24
24
  "nx": "^16.5.0",
@@ -26,7 +26,7 @@
26
26
  "ts-morph": "^18.0.0",
27
27
  "tslib": "2.6.2",
28
28
  "@rxap/plugin-localazy": "16.1.0",
29
- "@rxap/workspace-ts-morph": "16.0.1"
29
+ "@rxap/workspace-ts-morph": "16.0.2-dev.0"
30
30
  },
31
31
  "author": {
32
32
  "name": "Merzough Münker",
@@ -62,11 +62,11 @@
62
62
  },
63
63
  {
64
64
  "package": "@rxap/plugin-angular",
65
- "version": "16.1.0"
65
+ "version": "16.1.1-dev.1"
66
66
  },
67
67
  {
68
68
  "package": "@rxap/plugin-nestjs",
69
- "version": "16.1.0"
69
+ "version": "16.1.1-dev.0"
70
70
  },
71
71
  {
72
72
  "package": "@rxap/plugin-utilities",
@@ -78,11 +78,11 @@
78
78
  },
79
79
  {
80
80
  "package": "@rxap/ts-morph",
81
- "version": "1.0.1"
81
+ "version": "1.1.0-dev.2"
82
82
  },
83
83
  {
84
84
  "package": "@rxap/utilities",
85
- "version": "16.0.0"
85
+ "version": "16.1.0-dev.1"
86
86
  },
87
87
  {
88
88
  "package": "@rxap/workspace-utilities",
@@ -101,7 +101,7 @@
101
101
  },
102
102
  "schematics": "./generators.json",
103
103
  "type": "commonjs",
104
- "gitHead": "8f77d392776e5d09847a916b6ec2be509d678770",
104
+ "gitHead": "521407940b1ca095124b5699b7341f391ccd681f",
105
105
  "main": "./src/index.js",
106
106
  "types": "./src/index.d.ts"
107
107
  }
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { BundleJsonSchemaGeneratorSchema } from './schema';
3
+ export declare function bundleJsonSchemaGenerator(tree: Tree, options: BundleJsonSchemaGeneratorSchema): Promise<void>;
4
+ export default bundleJsonSchemaGenerator;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bundleJsonSchemaGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const json_schema_ref_parser_1 = tslib_1.__importDefault(require("@apidevtools/json-schema-ref-parser"));
6
+ const utilities_1 = require("@rxap/utilities");
7
+ const workspace_utilities_1 = require("@rxap/workspace-utilities");
8
+ const path_1 = require("path");
9
+ const generator_1 = require("../index-json-schema/generator");
10
+ function resolveDefinition(tree, projectSourceRoot, { $ref }) {
11
+ const filePath = (0, path_1.join)(projectSourceRoot, $ref);
12
+ if (!tree.exists(filePath)) {
13
+ throw new Error(`The file '${filePath}' does not exist!`);
14
+ }
15
+ const schema = JSON.parse(tree.read(filePath).toString());
16
+ if (schema['definitions']) {
17
+ delete schema['definitions'];
18
+ }
19
+ if (schema['$schema']) {
20
+ delete schema['$schema'];
21
+ }
22
+ if (schema['$id']) {
23
+ delete schema['$id'];
24
+ }
25
+ for (const { key, value, propertyPath, parent } of (0, utilities_1.EachProperty)(schema)) {
26
+ if (key === '$ref') {
27
+ if (typeof value === 'string') {
28
+ parent[key] = value.replace(/^#\/definitions\//, '#/definitions/');
29
+ }
30
+ }
31
+ }
32
+ // removeProperty(schema, 'definitions');
33
+ // removeProperty(schema, '$id');
34
+ // removeProperty(schema, '$schema');
35
+ return schema;
36
+ }
37
+ function resolveDefinitionMap(tree, projectSourceRoot, definitions) {
38
+ const resolvedDefinitions = {};
39
+ for (const [key, definition] of Object.entries(definitions)) {
40
+ resolvedDefinitions[key] = resolveDefinition(tree, projectSourceRoot, definition);
41
+ }
42
+ return resolvedDefinitions;
43
+ }
44
+ function bundleJsonSchemaGenerator(tree, options) {
45
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
46
+ const projectSourceRoot = (0, workspace_utilities_1.GetProjectSourceRoot)(tree, options.project);
47
+ const workspaceRoot = tree.root;
48
+ const definitions = resolveDefinitionMap(tree, projectSourceRoot, (0, generator_1.GenerateDefinitionsMap)(tree, options));
49
+ for (const file of (0, workspace_utilities_1.SearchFile)(tree, projectSourceRoot)) {
50
+ if (file.path.endsWith('template.schema.json')) {
51
+ const relativePathFromProjectSourceRoot = (0, path_1.dirname)((0, path_1.relative)(projectSourceRoot, file.path));
52
+ const schema = JSON.parse(file.content.toString());
53
+ const bundledSchema = yield json_schema_ref_parser_1.default.bundle(schema, {
54
+ resolve: {
55
+ file: {
56
+ canRead: ({ url }) => {
57
+ if (url.startsWith('http')) {
58
+ return false;
59
+ }
60
+ const relativeFromSchemaJsonFile = (0, path_1.relative)(workspaceRoot, url);
61
+ const absoluteFromSourceRoot = (0, path_1.join)(relativePathFromProjectSourceRoot, relativeFromSchemaJsonFile);
62
+ const absoluteFromWorkspaceRoot = (0, path_1.join)(projectSourceRoot, absoluteFromSourceRoot);
63
+ return tree.isFile(absoluteFromWorkspaceRoot);
64
+ },
65
+ read: ({ url }) => {
66
+ const relativeFromSchemaJsonFile = (0, path_1.relative)(workspaceRoot, url);
67
+ const absoluteFromSourceRoot = (0, path_1.join)(relativePathFromProjectSourceRoot, relativeFromSchemaJsonFile);
68
+ const absoluteFromWorkspaceRoot = (0, path_1.join)(projectSourceRoot, absoluteFromSourceRoot);
69
+ return tree.read(absoluteFromWorkspaceRoot).toString();
70
+ }
71
+ }
72
+ }
73
+ });
74
+ // removeProperty(bundledSchema, 'definitions');
75
+ // removeProperty(bundledSchema, '$id');
76
+ // removeProperty(bundledSchema, '$schema');
77
+ bundledSchema['definitions'] = Object.assign(Object.assign({}, bundledSchema['definitions']), definitions);
78
+ fixNestaedDefinitions(bundledSchema);
79
+ tree.write(file.path.replace('template.schema.json', 'schema.json'), JSON.stringify(bundledSchema, null, 2));
80
+ }
81
+ }
82
+ });
83
+ }
84
+ exports.bundleJsonSchemaGenerator = bundleJsonSchemaGenerator;
85
+ function removeProperty(obj, propertyName) {
86
+ const propertyPaths = [];
87
+ for (const { key, propertyPath } of (0, utilities_1.EachProperty)(obj)) {
88
+ if (key === propertyName) {
89
+ propertyPaths.push(propertyPath);
90
+ }
91
+ }
92
+ for (const propertyPath of propertyPaths) {
93
+ if (propertyPath === propertyName) {
94
+ continue;
95
+ }
96
+ (0, utilities_1.RemoveFromObject)(obj, propertyPath);
97
+ }
98
+ }
99
+ function getUsedDefinitions(item) {
100
+ const usedDefinitions = [];
101
+ for (const { key, value, parent } of (0, utilities_1.EachProperty)(item)) {
102
+ if (key === '$ref') {
103
+ if (typeof value !== 'string') {
104
+ throw new Error(`The value of the key '$ref' in definition '${key}' is not a string!`);
105
+ }
106
+ usedDefinitions.push(value.replace(/^#\/definitions\//, ''));
107
+ }
108
+ }
109
+ return usedDefinitions;
110
+ }
111
+ function fixNestaedDefinitions(schema) {
112
+ var _a;
113
+ const usedDefinitions = [];
114
+ // create a list of used refs excluding the definitions
115
+ for (const [key, item] of Object.entries(schema !== null && schema !== void 0 ? schema : {})) {
116
+ if (key === 'definitions') {
117
+ continue;
118
+ }
119
+ if (typeof item !== 'object') {
120
+ continue;
121
+ }
122
+ (0, utilities_1.CoerceArrayItems)(usedDefinitions, getUsedDefinitions(item));
123
+ }
124
+ let removeList = Object.keys(schema.definitions).filter((key) => !usedDefinitions.includes(key));
125
+ for (let i = 0; i < removeList.length; i++) {
126
+ // check for each definition that will not be removed if it is using another definition that should be removed
127
+ // if yes remove this from the list of definitions to remove
128
+ for (const [key, item] of Object.entries((_a = schema.definitions) !== null && _a !== void 0 ? _a : {})) {
129
+ if (removeList.includes(key)) {
130
+ continue;
131
+ }
132
+ (0, utilities_1.CoerceArrayItems)(usedDefinitions, getUsedDefinitions(item));
133
+ }
134
+ removeList = removeList.filter((key) => !usedDefinitions.includes(key));
135
+ }
136
+ for (const key of removeList) {
137
+ delete schema.definitions[key];
138
+ }
139
+ }
140
+ exports.default = bundleJsonSchemaGenerator;
141
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/library/src/generators/bundle-json-schema/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const schematic: (generatorOptions: import("./schema").BundleJsonSchemaGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default schematic;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const generator_1 = tslib_1.__importDefault(require("./generator"));
6
+ const schematic = (0, devkit_1.convertNxGenerator)(generator_1.default);
7
+ exports.default = schematic;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/library/src/generators/bundle-json-schema/index.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAChD,oEAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,2BAAkB,EAAC,mBAAS,CAAC,CAAC;AAChD,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface BundleJsonSchemaGeneratorSchema {
2
+ project: string;
3
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "BundleJsonSchema",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "string",
9
+ "description": "Name of the project"
10
+ }
11
+ },
12
+ "required": ["project"]
13
+ }
@@ -0,0 +1,10 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { IndexJsonSchemaGeneratorSchema } from './schema';
3
+ export declare function GenerateSchematicDefinitionsMap(tree: Tree, options: IndexJsonSchemaGeneratorSchema, basePath?: string): Record<string, {
4
+ $ref: string;
5
+ }>;
6
+ export declare function GenerateDefinitionsMap(tree: Tree, options: IndexJsonSchemaGeneratorSchema, basePath?: string): Record<string, {
7
+ $ref: string;
8
+ }>;
9
+ export declare function indexJsonSchemaGenerator(tree: Tree, options: IndexJsonSchemaGeneratorSchema): Promise<void>;
10
+ export default indexJsonSchemaGenerator;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.indexJsonSchemaGenerator = exports.GenerateDefinitionsMap = exports.GenerateSchematicDefinitionsMap = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const plugin_utilities_1 = require("@rxap/plugin-utilities");
6
+ const utilities_1 = require("@rxap/utilities");
7
+ const workspace_utilities_1 = require("@rxap/workspace-utilities");
8
+ const path_1 = require("path");
9
+ function getSchematicMap(tree, options) {
10
+ const { generators, schematics } = (0, plugin_utilities_1.GetGenerators)(tree, options.project);
11
+ const generatorMapList = Object.entries(generators !== null && generators !== void 0 ? generators : {});
12
+ (0, utilities_1.CoerceArrayItems)(generatorMapList, Object.entries(schematics !== null && schematics !== void 0 ? schematics : {}), (a, b) => a[0] === b[0]);
13
+ return generatorMapList;
14
+ }
15
+ function generateSchematicInputSchema(tree, options) {
16
+ const schemaList = [];
17
+ const projectRoot = (0, workspace_utilities_1.GetProjectRoot)(tree, options.project);
18
+ const packageJsonName = (0, workspace_utilities_1.GetPackageJson)(tree, projectRoot).name;
19
+ const generatorMapList = getSchematicMap(tree, options);
20
+ for (const [name, { schema }] of generatorMapList) {
21
+ const schemaPath = (0, path_1.dirname)(schema);
22
+ const schemaTemplatePath = './' + (0, path_1.join)(schemaPath, 'template.schema.json');
23
+ let schemaRefPath;
24
+ if (tree.exists((0, path_1.join)(projectRoot, schemaTemplatePath))) {
25
+ schemaRefPath = schemaTemplatePath;
26
+ }
27
+ else {
28
+ schemaRefPath = schema;
29
+ }
30
+ const content = JSON.parse(tree.read((0, path_1.join)(projectRoot, schemaRefPath)).toString());
31
+ schemaRefPath = schemaRefPath.replace(/^\.\/[^/]+\//, './');
32
+ schemaList.push({
33
+ type: 'object',
34
+ properties: {
35
+ package: {
36
+ type: "string",
37
+ enum: [packageJsonName],
38
+ },
39
+ name: {
40
+ type: "string",
41
+ enum: [name],
42
+ },
43
+ options: {
44
+ $ref: `#/definitions/${(0, utilities_1.camelize)(content.$id)}`,
45
+ }
46
+ }
47
+ });
48
+ }
49
+ return {
50
+ $schema: 'http://json-schema.org/schema',
51
+ $id: 'schematic-input',
52
+ type: 'object',
53
+ oneOf: schemaList,
54
+ definitions: GenerateSchematicDefinitionsMap(tree, options)
55
+ };
56
+ }
57
+ function GenerateSchematicDefinitionsMap(tree, options, basePath = './src') {
58
+ const projectRoot = (0, workspace_utilities_1.GetProjectRoot)(tree, options.project);
59
+ const generatorMapList = getSchematicMap(tree, options);
60
+ const definitions = {};
61
+ for (const [, { schema }] of generatorMapList) {
62
+ const schemaPath = (0, path_1.dirname)(schema);
63
+ const schemaTemplatePath = (0, path_1.join)(schemaPath, 'template.schema.json');
64
+ let schemaRefPath;
65
+ if (tree.exists((0, path_1.join)(projectRoot, schemaTemplatePath))) {
66
+ schemaRefPath = schemaTemplatePath;
67
+ }
68
+ else {
69
+ schemaRefPath = schema;
70
+ }
71
+ const content = JSON.parse(tree.read((0, path_1.join)(projectRoot, schemaRefPath)).toString());
72
+ definitions[(0, utilities_1.camelize)(content.$id)] = {
73
+ $ref: (0, path_1.relative)(basePath, schemaRefPath)
74
+ };
75
+ }
76
+ return definitions;
77
+ }
78
+ exports.GenerateSchematicDefinitionsMap = GenerateSchematicDefinitionsMap;
79
+ function GenerateDefinitionsMap(tree, options, basePath = './src') {
80
+ const projectSourceRoot = (0, workspace_utilities_1.GetProjectSourceRoot)(tree, options.project);
81
+ const schematicsFolder = (0, path_1.join)(projectSourceRoot, 'schematics');
82
+ const definitions = GenerateSchematicDefinitionsMap(tree, options, basePath);
83
+ for (const schematic of tree.children(schematicsFolder)) {
84
+ if (schematic.endsWith('schema.json')) {
85
+ const schema = JSON.parse(tree.read((0, path_1.join)(schematicsFolder, schematic)).toString());
86
+ definitions[(0, utilities_1.camelize)(schema.$id)] = {
87
+ $ref: (0, path_1.relative)(basePath, `./src/schematics/${schematic}`)
88
+ };
89
+ }
90
+ }
91
+ return definitions;
92
+ }
93
+ exports.GenerateDefinitionsMap = GenerateDefinitionsMap;
94
+ function generateTemplateSchema(tree, options) {
95
+ const definitions = GenerateDefinitionsMap(tree, options);
96
+ definitions['schematicInput'] = {
97
+ $ref: './schematic-input.schema.json',
98
+ };
99
+ return {
100
+ $schema: 'http://json-schema.org/schema',
101
+ $id: 'schematic-angular',
102
+ oneOf: [
103
+ {
104
+ type: 'array',
105
+ items: {
106
+ $ref: '#/definitions/schematicInput'
107
+ }
108
+ },
109
+ {
110
+ $ref: '#/definitions/schematicInput'
111
+ }
112
+ ],
113
+ definitions
114
+ };
115
+ }
116
+ function indexJsonSchemaGenerator(tree, options) {
117
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
118
+ const projectSourceRoot = (0, workspace_utilities_1.GetProjectSourceRoot)(tree, options.project);
119
+ tree.write((0, path_1.join)(projectSourceRoot, 'schematic-input.schema.json'), JSON.stringify(generateSchematicInputSchema(tree, options), null, 2));
120
+ tree.write((0, path_1.join)(projectSourceRoot, 'template.schema.json'), JSON.stringify(generateTemplateSchema(tree, options), null, 2));
121
+ });
122
+ }
123
+ exports.indexJsonSchemaGenerator = indexJsonSchemaGenerator;
124
+ exports.default = indexJsonSchemaGenerator;
125
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/library/src/generators/index-json-schema/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const schematic: (generatorOptions: import("./schema").IndexJsonSchemaGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default schematic;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const generator_1 = tslib_1.__importDefault(require("./generator"));
6
+ const schematic = (0, devkit_1.convertNxGenerator)(generator_1.default);
7
+ exports.default = schematic;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/plugin/library/src/generators/index-json-schema/index.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAChD,oEAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,2BAAkB,EAAC,mBAAS,CAAC,CAAC;AAChD,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface IndexJsonSchemaGeneratorSchema {
2
+ project: string;
3
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "IndexJsonSchema",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "string",
9
+ "description": "Name of the project"
10
+ }
11
+ },
12
+ "required": ["project"]
13
+ }