@omnia/tooling-vue 8.0.65-vnext → 8.0.66-dev
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/internal-do-not-import-from-here/config/omnia.fx.core_a2892051-fd9f-4056-ae8d-30d16d48417d.manifest.json +1 -0
- package/internal-do-not-import-from-here/config/omnia.fx.ux_dee030cc-4ab3-4158-bb06-8049f5c67542.manifest.json +1 -0
- package/internal-do-not-import-from-here/config/omnia.fx_a5a89056-b5f5-475d-8518-a1f55090379d.manifest.json +1 -0
- package/internal-do-not-import-from-here/config/omnia.vendor.manifest.json +1 -1
- package/internal-do-not-import-from-here/config/tooling.output.json +1 -0
- package/internal-do-not-import-from-here/config/wctypings.d.ts +2570 -0
- package/internal-do-not-import-from-here/index.d.ts +3 -1
- package/internal-do-not-import-from-here/index.js +6 -2
- package/internal-do-not-import-from-here/shared.d.ts +31 -118
- package/internal-do-not-import-from-here/shared.js +95 -153
- package/internal-do-not-import-from-here/tasks/ComponentDocRegistrations.js +1 -1
- package/internal-do-not-import-from-here/tasks/bundle.d.ts +1 -2
- package/internal-do-not-import-from-here/tasks/bundle.js +179 -370
- package/internal-do-not-import-from-here/tasks/doc.d.ts +3 -1
- package/internal-do-not-import-from-here/tasks/doc.js +282 -395
- package/internal-do-not-import-from-here/tasks/vendor.js +16 -12
- package/internal-do-not-import-from-here/variables.d.ts +1 -1
- package/internal-do-not-import-from-here/variables.js +2 -2
- package/internal-do-not-import-from-here/vite/hmr/graph.js +4 -0
- package/internal-do-not-import-from-here/vite/plugins/OmniaPlugin.js +1 -1
- package/internal-do-not-import-from-here/wctypings.ts +0 -0
- package/internal-do-not-import-from-here/webpack-loaders/doc-loader.js +11 -0
- package/internal-do-not-import-from-here/webpack-loaders/ts-loader.d.ts +3 -3
- package/internal-do-not-import-from-here/webpack-loaders/ts-loader.js +3 -3
- package/internal-do-not-import-from-here/webpack-loaders/tsx-loader.d.ts +3 -0
- package/internal-do-not-import-from-here/webpack-loaders/tsx-loader.js +3 -0
- package/internal-do-not-import-from-here/webpack-loaders/wc-loader.d.ts +1 -0
- package/internal-do-not-import-from-here/webpack-loaders/wc-loader.js +11 -0
- package/package.json +5 -4
- package/internal-do-not-import-from-here/bb000000-0000-bbbb-0000-0000000000bb.wctypings.d.ts +0 -493
- package/internal-do-not-import-from-here/webpack-loaders/esbuild-custom-loader.js +0 -13
- package/internal-do-not-import-from-here/webpack-loaders/wcmanifest-loader.d.ts +0 -1
- package/internal-do-not-import-from-here/webpack-loaders/wcmanifest-loader.js +0 -10
- /package/internal-do-not-import-from-here/{bb000000-0000-bbbb-0000-0000000000bb.wctypings.js → config/wctypings.js} +0 -0
- /package/internal-do-not-import-from-here/webpack-loaders/{esbuild-custom-loader.d.ts → doc-loader.d.ts} +0 -0
|
@@ -1,424 +1,311 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importSnippetCode = exports.generateComponentTypingsAndDoc = void 0;
|
|
3
4
|
const tslib_1 = require("tslib");
|
|
4
|
-
const
|
|
5
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
5
7
|
const shared_1 = require("../shared");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
const tooling_composers_1 = require("@omnia/tooling-composers");
|
|
9
|
+
const tooling_1 = require("@omnia/tooling");
|
|
10
|
+
const core_1 = require("@swc/core");
|
|
11
|
+
const fsExtra = tslib_1.__importStar(require("fs-extra"));
|
|
12
|
+
const fx_models_1 = require("@omnia/fx-models");
|
|
13
|
+
async function generateComponentTypingsAndDoc(componentRegistrations) {
|
|
14
|
+
tooling_1.utils.log("Generate components typings and documentation running...");
|
|
15
|
+
var startTime = new Date().getTime();
|
|
16
|
+
let DefineVueType;
|
|
17
|
+
(function (DefineVueType) {
|
|
18
|
+
DefineVueType[DefineVueType["Prop"] = 0] = "Prop";
|
|
19
|
+
DefineVueType[DefineVueType["Model"] = 1] = "Model";
|
|
20
|
+
DefineVueType[DefineVueType["Slot"] = 2] = "Slot";
|
|
21
|
+
DefineVueType[DefineVueType["Emit"] = 4] = "Emit";
|
|
22
|
+
})(DefineVueType || (DefineVueType = {}));
|
|
23
|
+
const docResult = {};
|
|
24
|
+
function getPropertyFunctionTypeAsString(type) {
|
|
25
|
+
let params = "";
|
|
26
|
+
if (type.params?.length > 0) {
|
|
27
|
+
type.params.forEach(p => {
|
|
28
|
+
params += `${p.value}:${getPropertyType(p.typeAnnotation)}, `;
|
|
29
|
+
});
|
|
30
|
+
params = params.replace(/,\s*$/, "");
|
|
31
|
+
}
|
|
32
|
+
return `(${params}) => ${getPropertyType(type.typeAnnotation)}`;
|
|
23
33
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
function getPropertyType(tsType) {
|
|
35
|
+
let result = "";
|
|
36
|
+
if (tsType.type === "TsTypeAnnotation") {
|
|
37
|
+
return getPropertyType(tsType.typeAnnotation);
|
|
38
|
+
}
|
|
39
|
+
switch (tsType.type) {
|
|
40
|
+
case "TsLiteralType":
|
|
41
|
+
result = tsType.literal.value;
|
|
42
|
+
break;
|
|
43
|
+
case "TsKeywordType":
|
|
44
|
+
result = tsType.kind;
|
|
45
|
+
break;
|
|
46
|
+
case "TsTypeReference":
|
|
47
|
+
result = tsType.typeName.value;
|
|
48
|
+
break;
|
|
49
|
+
case "TsFunctionType":
|
|
50
|
+
result = getPropertyFunctionTypeAsString(tsType);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
30
56
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// }, reject);
|
|
63
|
-
// }
|
|
64
|
-
// else {
|
|
65
|
-
// $.tooling.logTime('Done - Generating documentation manifest', startTime);
|
|
66
|
-
// resolve();
|
|
67
|
-
// }
|
|
68
|
-
//}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
function generate(paths) {
|
|
72
|
-
return new Promise(function (resolve, reject) {
|
|
73
|
-
const { Documentalist, TypescriptPlugin } = require("documentalist");
|
|
74
|
-
new Documentalist()
|
|
75
|
-
.use(/\.ts?$/, new TypescriptPlugin())
|
|
76
|
-
.documentGlobs(...paths) // ← async operation, returns a Promise
|
|
77
|
-
.then(docs => {
|
|
78
|
-
//console.log("ahihi", docs.typescript);
|
|
79
|
-
var rootModel = docs.typescript;
|
|
80
|
-
var filterFilesPath = filterInterfaceFilePaths(rootModel, paths);
|
|
81
|
-
var elementInterfaces = getWebComponentAndMainInterface(Object.keys(filterFilesPath));
|
|
82
|
-
var fxDocs = builtFxDocs(rootModel, elementInterfaces);
|
|
83
|
-
writeFile(extensionEnvironment.outPutPaths.rawFile, JSON.stringify(fxDocs, null, 2)); //For debugging purpose
|
|
84
|
-
writeDocsManifest(extensionEnvironment.outPutPaths.manifest, extensionEnvironment.paths.composorImportPath, fxDocs);
|
|
85
|
-
writeNavRegistrion(extensionEnvironment.outPutPaths.navRegistration, extensionEnvironment.paths.topicImportPath, extensionEnvironment.paths.messageBusTopicMediatorImportPath, fxDocs);
|
|
86
|
-
writeDocsRegistration(extensionEnvironment.outPutPaths.folder, extensionEnvironment.paths.topicImportPath, extensionEnvironment.paths.messageBusTopicMediatorImportPath, fxDocs);
|
|
87
|
-
let docManifestRelativePath = relativeOutDir + "/docs.manifest.ts";
|
|
88
|
-
let docManifestAbsolutePath = $.tooling.utils.root(docManifestRelativePath);
|
|
89
|
-
// register docs manifest
|
|
90
|
-
if ($.fs.existsSync(docManifestAbsolutePath)) {
|
|
91
|
-
try {
|
|
92
|
-
$.composers.ManifestRegistry.setCurrentManifestPath(docManifestRelativePath);
|
|
93
|
-
require(docManifestAbsolutePath);
|
|
94
|
-
$.composers.ManifestRegistry.setCurrentManifestPath();
|
|
95
|
-
delete require.cache[docManifestAbsolutePath];
|
|
96
|
-
}
|
|
97
|
-
catch (ex) {
|
|
98
|
-
console.dir(ex.stack);
|
|
99
|
-
reject();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
resolve();
|
|
103
|
-
}, reject);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
function getSamples(interfaceFilePath) {
|
|
107
|
-
var elementNameReg = /elementName:( )*['"][^'"]+['"]/g; //Only @Prop has define default value
|
|
108
|
-
var entryPointReg = /entryPoint:( )*['"][^'"]+['"]/g;
|
|
109
|
-
var samples = [];
|
|
110
|
-
var interfaceSegments = interfaceFilePath.split('\\');
|
|
111
|
-
interfaceSegments.splice(-1, 1);
|
|
112
|
-
var folderPath = interfaceSegments.join('\\') + '\\samples';
|
|
113
|
-
var samplesManifests = getAllFilesInFolderRecursively(folderPath);
|
|
114
|
-
for (var sampleManifest of samplesManifests) {
|
|
115
|
-
var content = readFile(sampleManifest.filePath);
|
|
116
|
-
var elemNameMatches = content.match(elementNameReg);
|
|
117
|
-
var entryPointMatches = content.match(entryPointReg);
|
|
118
|
-
if (elemNameMatches && entryPointMatches) {
|
|
119
|
-
for (var i = 0; i < entryPointMatches.length; i++) {
|
|
120
|
-
var elemNameMatch = elemNameMatches[i];
|
|
121
|
-
var entryPointMatch = entryPointMatches[i];
|
|
122
|
-
var sampleElemDefinition = elemNameMatch.split(':').pop();
|
|
123
|
-
sampleElemDefinition = sampleElemDefinition.trim();
|
|
124
|
-
var sampleElem = sampleElemDefinition.substr(1, sampleElemDefinition.length - 2);
|
|
125
|
-
var entryPointDefinition = entryPointMatch.split(':').pop();
|
|
126
|
-
entryPointDefinition = entryPointDefinition.trim();
|
|
127
|
-
var entryPoint = entryPointDefinition.substr(1, entryPointDefinition.length - 2);
|
|
128
|
-
entryPoint = entryPoint.replace('./', '').replace('.jsx', '.tsx').split('/').join('\\');
|
|
129
|
-
var sampleTsxFilePath = sampleManifest.dirPath + '\\' + entryPoint;
|
|
130
|
-
var sampleTsxFileContent = readFile(sampleTsxFilePath);
|
|
131
|
-
sampleTsxFileContent = sampleTsxFileContent.replace(new RegExp('\\r\\n', 'g'), '\\\\r\\\\n');
|
|
132
|
-
//console.log(sampleTsxFileContent);
|
|
133
|
-
samples.push({ elem: sampleElem, content: sampleTsxFileContent });
|
|
57
|
+
function getNameProperty(ce, result) {
|
|
58
|
+
const identifier = ce.callee?.property?.value;
|
|
59
|
+
if (identifier) {
|
|
60
|
+
switch (identifier) {
|
|
61
|
+
case "name":
|
|
62
|
+
result.name = ce.arguments[0].expression.value;
|
|
63
|
+
getNameProperty(ce.callee.object, result);
|
|
64
|
+
break;
|
|
65
|
+
case "vModel":
|
|
66
|
+
result.type = DefineVueType.Model;
|
|
67
|
+
result.propertyTypeAsString = getPropertyType(ce.typeArguments.params[0]);
|
|
68
|
+
result.name = result.name ? `v-model:${result.name}` : result.name;
|
|
69
|
+
break;
|
|
70
|
+
case "slots":
|
|
71
|
+
result.type = DefineVueType.Slot;
|
|
72
|
+
result.propertyTypeAsObject = {};
|
|
73
|
+
ce.typeArguments.params[0].members
|
|
74
|
+
.forEach(m => {
|
|
75
|
+
result.propertyTypeAsObject[m.key.value] = getPropertyType(m.typeAnnotation);
|
|
76
|
+
});
|
|
77
|
+
break;
|
|
78
|
+
case "prop":
|
|
79
|
+
result.type = DefineVueType.Prop;
|
|
80
|
+
result.propertyTypeAsString = getPropertyType(ce.typeArguments.params[0]);
|
|
81
|
+
break;
|
|
82
|
+
case "emit":
|
|
83
|
+
result.type = DefineVueType.Emit;
|
|
84
|
+
result.propertyTypeAsString = getPropertyType(ce.typeArguments.params[0]);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
getNameProperty(ce.callee.object, result);
|
|
134
88
|
}
|
|
135
89
|
}
|
|
136
90
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
91
|
+
async function buildDoc(wc) {
|
|
92
|
+
try {
|
|
93
|
+
const wcPath = (0, shared_1.convertManifestPathToEntryPath)(wc.manifestPath, [wc.componentOptions.entryPoint])[0];
|
|
94
|
+
const wcParseResult = await (0, core_1.parseFile)(wcPath, {
|
|
95
|
+
syntax: 'typescript',
|
|
96
|
+
target: 'es2020',
|
|
97
|
+
tsx: true,
|
|
98
|
+
decorators: true,
|
|
99
|
+
dynamicImport: true
|
|
100
|
+
});
|
|
101
|
+
wcParseResult.body.forEach(b => {
|
|
102
|
+
if (b.type === 'ExportDefaultExpression'
|
|
103
|
+
&& b.expression.callee?.value === "defineVueComponent") {
|
|
104
|
+
b.expression.arguments[0].expression
|
|
105
|
+
.properties?.filter(p => p.key.value === "props"
|
|
106
|
+
|| p.key.value === "emits")
|
|
107
|
+
?.forEach(propsIdentifier => {
|
|
108
|
+
if (propsIdentifier) {
|
|
109
|
+
propsIdentifier.value
|
|
110
|
+
.properties?.forEach(p => {
|
|
111
|
+
const em = p.arguments;
|
|
112
|
+
if (em?.callee?.property?.value === "doc$") {
|
|
113
|
+
const PropertyResult = {
|
|
114
|
+
type: null,
|
|
115
|
+
propertyTypeAsString: "",
|
|
116
|
+
name: ""
|
|
117
|
+
};
|
|
118
|
+
getNameProperty(em, PropertyResult);
|
|
119
|
+
if (!docResult[wc.componentOptions.elementName]) {
|
|
120
|
+
docResult[wc.componentOptions.elementName] = {
|
|
121
|
+
emits: {},
|
|
122
|
+
models: {},
|
|
123
|
+
props: {},
|
|
124
|
+
slots: {}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
switch (PropertyResult.type) {
|
|
128
|
+
case DefineVueType.Prop:
|
|
129
|
+
docResult[wc.componentOptions.elementName].props[PropertyResult.name] = {
|
|
130
|
+
type: PropertyResult.propertyTypeAsString,
|
|
131
|
+
description: em.arguments[0].expression.value
|
|
132
|
+
};
|
|
133
|
+
break;
|
|
134
|
+
case DefineVueType.Model:
|
|
135
|
+
docResult[wc.componentOptions.elementName].models[PropertyResult.name] = {
|
|
136
|
+
type: PropertyResult.propertyTypeAsString,
|
|
137
|
+
description: em.arguments[0].expression.value
|
|
138
|
+
};
|
|
139
|
+
break;
|
|
140
|
+
case DefineVueType.Emit:
|
|
141
|
+
docResult[wc.componentOptions.elementName].emits[PropertyResult.name] = {
|
|
142
|
+
type: PropertyResult.propertyTypeAsString,
|
|
143
|
+
description: em.arguments[0].expression.value
|
|
144
|
+
};
|
|
145
|
+
break;
|
|
146
|
+
case DefineVueType.Slot:
|
|
147
|
+
em.arguments[0].expression
|
|
148
|
+
.properties
|
|
149
|
+
.forEach(p => {
|
|
150
|
+
const slotName = p.key.value;
|
|
151
|
+
docResult[wc.componentOptions.elementName].slots[slotName] = {
|
|
152
|
+
type: PropertyResult.propertyTypeAsObject[slotName],
|
|
153
|
+
description: p.value.value
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
default:
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
});
|
|
201
164
|
}
|
|
202
|
-
}
|
|
203
|
-
var defaultValue = propObj.defaultValue;
|
|
204
|
-
if (defaultValue && defaultValue.indexOf('\"') >= 0) {
|
|
205
|
-
defaultValue = defaultValue.replace(new RegExp('\\"', 'g'), '\\\"');
|
|
206
|
-
}
|
|
207
|
-
props.push({ name: prop, type: propObj.type, description: description, defaultValue: defaultValue });
|
|
165
|
+
});
|
|
208
166
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
var componentNodes = [];
|
|
214
|
-
for (var elem of Object.keys(fxDocs)) {
|
|
215
|
-
var name = elem;
|
|
216
|
-
if (fxDocs[elem] && fxDocs[elem].documentation && fxDocs[elem].documentation.contentsRaw) {
|
|
217
|
-
name = fxDocs[elem].documentation.contentsRaw.split('-')[0].trim();
|
|
167
|
+
catch (ex) {
|
|
168
|
+
tooling_1.utils.log(`Have a exception when extract doc$ for web component manifest -> ${wc.manifestPath}`, tooling_1.utils.LogTypes.Error);
|
|
169
|
+
console.error(ex);
|
|
170
|
+
throw new Error("Exit, have an exception.");
|
|
218
171
|
}
|
|
219
|
-
componentNodes.push({ name: name, elem: elem });
|
|
220
172
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
173
|
+
let docPath = path_1.default.resolve(__dirname, "ComponentDocRegistrations.ts");
|
|
174
|
+
;
|
|
175
|
+
const wcNamespace = (0, shared_1.getBuildOption)()?.webComponentNamespace;
|
|
176
|
+
const info = shared_1.ConfigurationManager.outputInfo.get();
|
|
177
|
+
info.wc = {
|
|
178
|
+
namespace: wcNamespace,
|
|
179
|
+
mappings: {}
|
|
180
|
+
};
|
|
181
|
+
let wcTypings = wcNamespace ? `
|
|
182
|
+
//{{importWC}}
|
|
183
|
+
declare global {
|
|
184
|
+
namespace JSX {
|
|
185
|
+
interface Element { }
|
|
186
|
+
interface ElementClass { }
|
|
187
|
+
|
|
188
|
+
interface IntrinsicElements {
|
|
189
|
+
//{{elementName}}
|
|
238
190
|
}
|
|
239
|
-
elementDoc.props = props;
|
|
240
|
-
var samples = getSamples(elementInfo.interfaceFilePath);
|
|
241
|
-
elementDoc.samples = samples;
|
|
242
|
-
fxDocs[element] = elementDoc;
|
|
243
191
|
}
|
|
244
|
-
return fxDocs;
|
|
245
192
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
var fileContent = readFile(componentPath);
|
|
252
|
-
var reg = /@Prop\(\{[^\)d]+(default)[^\)]+\)[a-zA-Z0-9?_ ]+:/g; //Only @Prop has define default value
|
|
253
|
-
var regResults = fileContent.match(reg);
|
|
254
|
-
if (regResults) {
|
|
255
|
-
for (var regResultContent of regResults) {
|
|
256
|
-
var propertyName = getPropertyNameFromPropDecorator(regResultContent);
|
|
257
|
-
var defaultValue = getDefaultValueFromPropDecorator(regResultContent);
|
|
258
|
-
if (propertyName && props[propertyName]) {
|
|
259
|
-
props[propertyName].defaultValue = defaultValue;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
193
|
+
|
|
194
|
+
declare global {
|
|
195
|
+
let ${wcNamespace}: {
|
|
196
|
+
//{{nselementName}}
|
|
197
|
+
};
|
|
263
198
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
var character = '';
|
|
275
|
-
for (var index = startIndex; index < propDecorator.length; index++) {
|
|
276
|
-
beforeCharacter = character;
|
|
277
|
-
character = propDecorator[index];
|
|
278
|
-
if (start) {
|
|
279
|
-
//IF the first default value character is not a object begin ({...), then we mark a flag to stop by ending at a normal text
|
|
280
|
-
if (!defaultValue.trim() && (character === "{" || character === "[" || character === "'" || character === '"')) {
|
|
281
|
-
enteredScope = true;
|
|
282
|
-
}
|
|
283
|
-
defaultValue += character;
|
|
284
|
-
if (enteredScope && character.trim()) {
|
|
285
|
-
if (character === "{" && (!enteredScopeKind || enteredScopeKind === "{")) {
|
|
286
|
-
enteredScopeKind = "{";
|
|
287
|
-
scope++;
|
|
288
|
-
}
|
|
289
|
-
else if (character === "}" && enteredScopeKind === "{") {
|
|
290
|
-
scope--;
|
|
291
|
-
if (scope === 0)
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
else if (character === "[" && (!enteredScopeKind || enteredScopeKind === "[")) {
|
|
295
|
-
enteredScopeKind = "[";
|
|
296
|
-
scope++;
|
|
297
|
-
}
|
|
298
|
-
else if (character === "]" && enteredScopeKind === "]") {
|
|
299
|
-
scope--;
|
|
300
|
-
if (scope === 0)
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
else if (character === "'" && !enteredScopeKind) {
|
|
304
|
-
enteredScopeKind = "'";
|
|
305
|
-
}
|
|
306
|
-
else if (character === "'" && enteredScopeKind === "'" && beforeCharacter !== '\\') {
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
else if (character === '"' && !enteredScopeKind) {
|
|
310
|
-
enteredScopeKind = '"';
|
|
311
|
-
}
|
|
312
|
-
else if (character === '"' && enteredScopeKind === '"' && beforeCharacter !== '\\') {
|
|
313
|
-
break;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
if (!enteredScope && defaultValue.trim() && character && !regularValueReg.test(character))
|
|
317
|
-
break;
|
|
199
|
+
`
|
|
200
|
+
: `
|
|
201
|
+
//{{importWC}}
|
|
202
|
+
declare global {
|
|
203
|
+
namespace JSX {
|
|
204
|
+
interface Element { }
|
|
205
|
+
interface ElementClass { }
|
|
206
|
+
|
|
207
|
+
interface IntrinsicElements {
|
|
208
|
+
//{{elementName}}
|
|
318
209
|
}
|
|
319
|
-
if (character === ":")
|
|
320
|
-
start = true;
|
|
321
210
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
propDecorator = propDecorator.substring(0, propDecorator.lastIndexOf(':'));
|
|
327
|
-
var name = propDecorator.trim();
|
|
328
|
-
name = name.replace("?", ""); //remove optional in name
|
|
329
|
-
return name;
|
|
330
|
-
}
|
|
331
|
-
function getComponentProperties(rootModel, key, props) {
|
|
332
|
-
var model = rootModel[key];
|
|
333
|
-
var properties = model.properties;
|
|
334
|
-
for (var property of properties) {
|
|
335
|
-
props[property.name] = {
|
|
336
|
-
documentation: property.documentation,
|
|
337
|
-
type: property.type || 'any'
|
|
338
|
-
};
|
|
211
|
+
}`;
|
|
212
|
+
if (shared_1.isExtensionEnv) {
|
|
213
|
+
wcTypings = `import { VueComponentBaseProps } from "@omnia/fx/ux";
|
|
214
|
+
${wcTypings}`;
|
|
339
215
|
}
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
getComponentProperties(rootModel, extend, props);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
216
|
+
else {
|
|
217
|
+
wcTypings = `import { VueComponentBaseProps } from "../../../../client/fx/ux/index";
|
|
218
|
+
${wcTypings}`;
|
|
346
219
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
220
|
+
await tooling_1.utils.asyncForEach(componentRegistrations, async (wc) => {
|
|
221
|
+
wcTypings = generateWebComponentTypings(wc, wcTypings, info);
|
|
222
|
+
await buildDoc(wc);
|
|
223
|
+
});
|
|
224
|
+
if (Object.keys(docResult).length > 0) {
|
|
225
|
+
fsExtra.outputFileSync(docPath, `
|
|
226
|
+
import { extendApi } from "@omnia/fx";
|
|
227
|
+
import { ComponentDoc } from "@omnia/fx-models";
|
|
228
|
+
|
|
229
|
+
extendApi(api => api.fx.docs.registrations, api => {
|
|
230
|
+
|
|
231
|
+
const registrations: { [elementName: string]: ComponentDoc } = ${JSON.stringify(docResult)}
|
|
232
|
+
|
|
233
|
+
Object.keys(registrations).forEach(elementName => {
|
|
234
|
+
api.register(elementName, registrations[elementName]);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
`);
|
|
238
|
+
// create dynamic doc manifest
|
|
239
|
+
tooling_composers_1.ManifestRegistry.setCurrentManifestPath(`${path_1.default.relative(tooling_1.utils.root(""), path_1.default.resolve(__dirname))}/`);
|
|
240
|
+
tooling_composers_1.Composer
|
|
241
|
+
.registerManifest((0, shared_1.getBuildOption)().docResourceManifestId || new fx_models_1.Guid(`${tooling_1.utils.generateGuid()}`), "omnia.fx.docs.components.registraions")
|
|
242
|
+
.registerResources({
|
|
243
|
+
resourcePaths: ["./ComponentDocRegistrations.ts"]
|
|
244
|
+
})
|
|
245
|
+
.withTarget(fx_models_1.ClientManifestTargetTypes.docs)
|
|
246
|
+
.extendApi(api => api.fx.docs.registrations);
|
|
247
|
+
tooling_composers_1.ManifestRegistry.setCurrentManifestPath();
|
|
366
248
|
}
|
|
367
|
-
|
|
249
|
+
shared_1.ConfigurationManager.webComponentTypings.update(wcTypings);
|
|
250
|
+
shared_1.ConfigurationManager.outputInfo.update(info);
|
|
251
|
+
tooling_1.utils.logTime('Done - Generate components typings and documentation', startTime);
|
|
368
252
|
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
}
|
|
253
|
+
exports.generateComponentTypingsAndDoc = generateComponentTypingsAndDoc;
|
|
254
|
+
function generateWebComponentTypings(wc, template, info) {
|
|
255
|
+
// export default defineVueWebComponent
|
|
256
|
+
const wcPath = wc.componentOptions.entryPointPath;
|
|
257
|
+
let content = fsExtra.readFileSync(wcPath, 'utf8');
|
|
258
|
+
if (content.indexOf("defineVueComponent") > -1) {
|
|
259
|
+
if (!new RegExp('export\\s+default\\s+').test(content)) {
|
|
260
|
+
throw new Error(`Missing statement 'export default a vue web component' in ${wcPath}`);
|
|
378
261
|
}
|
|
262
|
+
let friendlyManifestId = `wc${wc.manifest.resourceId.toString().replace(/-/g, '').toLowerCase()}`;
|
|
263
|
+
let importPath = wcPath.substring(0, wcPath.lastIndexOf('.tsx'));
|
|
264
|
+
if (importPath.indexOf("./") === 0) {
|
|
265
|
+
importPath = importPath.replace("./", "");
|
|
266
|
+
}
|
|
267
|
+
if (shared_1.isExtensionEnv) {
|
|
268
|
+
importPath = `../../../../${importPath}`;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
importPath = `../../../../${importPath}`;
|
|
272
|
+
}
|
|
273
|
+
let elementNamePascalCase = wc.componentOptions.elementName.replace("omfx-", "").replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });
|
|
274
|
+
elementNamePascalCase = elementNamePascalCase[0].toUpperCase() + elementNamePascalCase.substring(1, elementNamePascalCase.length);
|
|
275
|
+
info.wc.mappings[elementNamePascalCase] = wc.componentOptions.elementName;
|
|
276
|
+
return template
|
|
277
|
+
.replace(/\/\/{{importWC}}/, `import ${friendlyManifestId} from '${importPath}';
|
|
278
|
+
//{{importWC}}`)
|
|
279
|
+
.replace(/\/\/{{elementName}}/, `"${wc.componentOptions.elementName}": typeof ${friendlyManifestId}.propsDefinition & Omit<VueComponentBaseProps, keyof typeof ${friendlyManifestId}.propsDefinition>
|
|
280
|
+
//{{elementName}}`)
|
|
281
|
+
.replace(/\/\/{{nselementName}}/, `"${elementNamePascalCase}": { new(...args: any[]): { $props: typeof ${friendlyManifestId}.propsDefinition & Omit<VueComponentBaseProps, keyof typeof ${friendlyManifestId}.propsDefinition> } }
|
|
282
|
+
//{{nselementName}}`);
|
|
379
283
|
}
|
|
380
|
-
return
|
|
381
|
-
}
|
|
382
|
-
//function getFiles(filepath) {
|
|
383
|
-
// return fs.readdirSync(filepath).filter(function (file) {
|
|
384
|
-
// return fs.statSync($.path.join(filepath, file)).isFile();
|
|
385
|
-
// });
|
|
386
|
-
//}
|
|
387
|
-
function writeFile(filepath, content) {
|
|
388
|
-
fs.writeFileSync(filepath, content);
|
|
389
|
-
}
|
|
390
|
-
function readFile(filePath) {
|
|
391
|
-
return fs.readFileSync(filePath, 'utf-8');
|
|
284
|
+
return template;
|
|
392
285
|
}
|
|
393
|
-
function
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
286
|
+
function importSnippetCode(content, filePath) {
|
|
287
|
+
let result = content;
|
|
288
|
+
const ext = path_1.default.extname(filePath);
|
|
289
|
+
if (filePath.indexOf(".md.ts") > -1) {
|
|
290
|
+
result = content.replace(/\@import\/.*;/g, function (match) {
|
|
291
|
+
let fromLine = 0;
|
|
292
|
+
let toLine = 0;
|
|
293
|
+
const indexStartLine = match.indexOf("{");
|
|
294
|
+
if (indexStartLine > -1) {
|
|
295
|
+
const numbers = match.substring(indexStartLine + 1, match.indexOf("}")).split("-");
|
|
296
|
+
fromLine = Number(numbers[0]);
|
|
297
|
+
toLine = Number(numbers[1]);
|
|
298
|
+
}
|
|
299
|
+
const fileName = match.substring(0, indexStartLine || match.length - 1)
|
|
300
|
+
.replace("@import/", "")
|
|
301
|
+
.replace(";", "");
|
|
302
|
+
let fileContent = fs_1.default.readFileSync(fileName, 'utf-8');
|
|
303
|
+
if (fromLine > 0) {
|
|
304
|
+
fileContent = fileContent.split(/\r?\n/).slice(fromLine - 1, toLine).join("\n");
|
|
305
|
+
}
|
|
306
|
+
return fileContent;
|
|
402
307
|
});
|
|
403
|
-
for (var path of folders) {
|
|
404
|
-
files = files.concat(getAllFilesInFolderRecursively(path.filePath));
|
|
405
|
-
}
|
|
406
308
|
}
|
|
407
|
-
return
|
|
408
|
-
}
|
|
409
|
-
;
|
|
410
|
-
function extractDocPathForComponents(componentRegistrations) {
|
|
411
|
-
let componentsDocCount = 0;
|
|
412
|
-
let paths = [];
|
|
413
|
-
componentRegistrations.forEach((comp) => {
|
|
414
|
-
let defPaths = comp.componentOptions.documentations;
|
|
415
|
-
if (defPaths) {
|
|
416
|
-
componentsDocCount++;
|
|
417
|
-
defPaths.forEach((defPath) => {
|
|
418
|
-
paths.push((0, shared_1.convertManifestPathToEntryPath)(comp.manifestPath, [defPath])[0]);
|
|
419
|
-
//paths.push($.tooling.utils.root(convertManifestPathToEntryPath(comp.manifestPath, [defPath])[0]));
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
return { componentsDocCount, paths };
|
|
309
|
+
return result;
|
|
424
310
|
}
|
|
311
|
+
exports.importSnippetCode = importSnippetCode;
|