@digipair/skill-html 0.89.0 → 0.91.0-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.
- package/.swcrc +28 -0
- package/README.md +7 -0
- package/eslint.config.mjs +22 -0
- package/package.json +22 -8
- package/rollup.config.cjs +28 -0
- package/src/handlebars.d.ts +1 -0
- package/src/jsdom.d.ts +1 -0
- package/src/lib/skill-html.spec.ts +7 -0
- package/src/lib/skill-html.ts +142 -0
- package/tsconfig.json +13 -0
- package/tsconfig.lib.json +19 -0
- package/index.cjs.d.ts +0 -1
- package/index.cjs.js +0 -28105
- package/index.esm.js +0 -28081
- package/libs/engine/src/index.d.ts +0 -2
- package/libs/engine/src/lib/alias.interface.d.ts +0 -9
- package/libs/engine/src/lib/engine.d.ts +0 -13
- package/libs/engine/src/lib/pins-settings.interface.d.ts +0 -15
- package/libs/skill-html/src/lib/skill-html.d.ts +0 -4
- /package/{index.d.ts → src/index.d.ts} +0 -0
- /package/{libs/skill-html/src/index.d.ts → src/index.ts} +0 -0
- /package/{schema.fr.json → src/schema.fr.json} +0 -0
- /package/{schema.json → src/schema.json} +0 -0
package/.swcrc
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsc": {
|
|
3
|
+
"target": "es2017",
|
|
4
|
+
"parser": {
|
|
5
|
+
"syntax": "typescript",
|
|
6
|
+
"decorators": true,
|
|
7
|
+
"dynamicImport": true
|
|
8
|
+
},
|
|
9
|
+
"transform": {
|
|
10
|
+
"decoratorMetadata": true,
|
|
11
|
+
"legacyDecorator": true
|
|
12
|
+
},
|
|
13
|
+
"keepClassNames": true,
|
|
14
|
+
"externalHelpers": true,
|
|
15
|
+
"loose": true
|
|
16
|
+
},
|
|
17
|
+
"module": {
|
|
18
|
+
"type": "es6"
|
|
19
|
+
},
|
|
20
|
+
"sourceMaps": true,
|
|
21
|
+
"exclude": [
|
|
22
|
+
"jest.config.ts",
|
|
23
|
+
".*\\.spec.tsx?$",
|
|
24
|
+
".*\\.test.tsx?$",
|
|
25
|
+
"./src/jest-setup.ts$",
|
|
26
|
+
"./**/jest-setup.ts$"
|
|
27
|
+
]
|
|
28
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import baseConfig from '../../eslint.config.mjs';
|
|
2
|
+
|
|
3
|
+
export default [
|
|
4
|
+
...baseConfig,
|
|
5
|
+
{
|
|
6
|
+
files: ['**/*.json'],
|
|
7
|
+
rules: {
|
|
8
|
+
'@nx/dependency-checks': [
|
|
9
|
+
'error',
|
|
10
|
+
{
|
|
11
|
+
ignoredFiles: [
|
|
12
|
+
'{projectRoot}/eslint.config.{js,cjs,mjs}',
|
|
13
|
+
'{projectRoot}/rollup.config.{js,ts,mjs,mts,cjs,cts}',
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
languageOptions: {
|
|
19
|
+
parser: await import('jsonc-eslint-parser'),
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
];
|
package/package.json
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digipair/skill-html",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.0-0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/libs/skill-html/index.cjs.js",
|
|
6
|
+
"module": "dist/libs/skill-html/index.esm.js",
|
|
7
|
+
"types": "dist/libs/skill-html/index.esm.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
"./package.json": "./libs/skill-html/package.json",
|
|
10
|
+
".": {
|
|
11
|
+
"development": "./dist/libs/skill-html/src/index.ts",
|
|
12
|
+
"types": "./dist/libs/skill-html/index.esm.d.ts",
|
|
13
|
+
"import": "./dist/libs/skill-html/index.esm.js",
|
|
14
|
+
"default": "./dist/libs/skill-html/index.cjs.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
4
17
|
"keywords": [
|
|
5
18
|
"digipair",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
19
|
+
"web",
|
|
20
|
+
"service"
|
|
8
21
|
],
|
|
9
|
-
"
|
|
10
|
-
"
|
|
22
|
+
"nx": {
|
|
23
|
+
"name": "skill-html"
|
|
11
24
|
},
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
}
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@digipair/engine": "0.91.0-0"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const { withNx } = require('@nx/rollup/with-nx');
|
|
2
|
+
|
|
3
|
+
module.exports = withNx(
|
|
4
|
+
{
|
|
5
|
+
main: 'libs/skill-html/src/index.ts',
|
|
6
|
+
outputPath: 'dist/libs/skill-html',
|
|
7
|
+
tsConfig: 'libs/skill-html/tsconfig.lib.json',
|
|
8
|
+
compiler: 'swc',
|
|
9
|
+
format: ['esm', "cjs"],
|
|
10
|
+
assets: [
|
|
11
|
+
{
|
|
12
|
+
input: 'libs/skill-html/',
|
|
13
|
+
glob: 'package.json',
|
|
14
|
+
output: '.'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
input: 'libs/skill-html/src/',
|
|
18
|
+
glob: '*.json',
|
|
19
|
+
output: '.'
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
// Provide additional rollup configuration here. See: https://rollupjs.org/configuration-options
|
|
25
|
+
// e.g.
|
|
26
|
+
// output: { sourcemap: true },
|
|
27
|
+
}
|
|
28
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module 'handlebars/dist/handlebars.min.js';
|
package/src/jsdom.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module 'jsdom';
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
// import { PinsSettings, executePinsList } from '@digipair/engine';
|
|
3
|
+
import { PinsSettings, executePinsList } from '@digipair/engine';
|
|
4
|
+
import { JSDOM } from 'jsdom';
|
|
5
|
+
|
|
6
|
+
class HtmlService {
|
|
7
|
+
async html2pins(params: any, _pinsSettingsList: PinsSettings[], _context: any): Promise<any> {
|
|
8
|
+
const { html, library = 'web' } = params;
|
|
9
|
+
const dom = new JSDOM(html);
|
|
10
|
+
const pins = this.generatePinsFromElements(
|
|
11
|
+
Array.from(dom.window.document.querySelectorAll('body > *')),
|
|
12
|
+
library,
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
return pins;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private generatePinsFromElements(elements: Element[], library: string): any {
|
|
19
|
+
const pinsList = elements.map(element => this.generatePinsFromElement(element, library));
|
|
20
|
+
return pinsList;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private generatePinsFromElement(element: Element, library: string): any {
|
|
24
|
+
const attributes = element.getAttributeNames().reduce(
|
|
25
|
+
(obj: any, name: string) => ({
|
|
26
|
+
...obj,
|
|
27
|
+
[name]: element.getAttribute(name),
|
|
28
|
+
}),
|
|
29
|
+
{},
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
if (element.children.length === 0 && element.textContent) {
|
|
33
|
+
attributes.textContent = element.textContent;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const pins = {
|
|
37
|
+
library,
|
|
38
|
+
element: element.tagName.toLowerCase(),
|
|
39
|
+
properties: attributes,
|
|
40
|
+
pins: this.generatePinsFromElements(Array.from(element.children), library),
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return pins;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async pins2html(params: any, _pinsSettingsList: PinsSettings[], _context: any): Promise<any> {
|
|
47
|
+
const { pins } = params;
|
|
48
|
+
const dom = new JSDOM();
|
|
49
|
+
const element = dom.window.document.createElement('section');
|
|
50
|
+
await this.generateElementsFromPins(pins, element, dom);
|
|
51
|
+
|
|
52
|
+
return element.innerHTML;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private async generateElementsFromPins(
|
|
56
|
+
pinsList: PinsSettings[],
|
|
57
|
+
parent: Element,
|
|
58
|
+
dom: any,
|
|
59
|
+
): Promise<void> {
|
|
60
|
+
for (let i = 0; i < pinsList.length; i++) {
|
|
61
|
+
const item = pinsList[i];
|
|
62
|
+
await this.generateElementFromPins(item, parent, dom);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private async generateElementFromPins(
|
|
67
|
+
pinsSettings: PinsSettings,
|
|
68
|
+
parent: Element,
|
|
69
|
+
dom: any,
|
|
70
|
+
): Promise<void> {
|
|
71
|
+
const element = dom.window.document.createElement(pinsSettings.element);
|
|
72
|
+
|
|
73
|
+
// const settings = await preparePinsSettings(pinsSettings, context);
|
|
74
|
+
const settings = pinsSettings as any;
|
|
75
|
+
Object.entries(settings.properties || {}).forEach(([key, value]) => {
|
|
76
|
+
if (key === 'textContent') {
|
|
77
|
+
element.textContent = value;
|
|
78
|
+
} else if (key === 'innerHTML') {
|
|
79
|
+
element.innerHTML = value;
|
|
80
|
+
} else if (typeof value === 'string') {
|
|
81
|
+
element.setAttribute(key, value);
|
|
82
|
+
} else {
|
|
83
|
+
(element as any)[key] = value;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const pinsList = settings.pins || [];
|
|
88
|
+
await this.generateElementsFromPins(pinsList, element, dom);
|
|
89
|
+
|
|
90
|
+
parent.appendChild(element);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async parseHtml(params: any, _pinsSettingsList: PinsSettings[], context: any): Promise<any> {
|
|
94
|
+
const { html, execute = [] } = params;
|
|
95
|
+
const dom = new JSDOM(html);
|
|
96
|
+
const result = await executePinsList(execute, {
|
|
97
|
+
...context,
|
|
98
|
+
document: {
|
|
99
|
+
querySelector: (selector: string) => this.querySelector(selector, dom.window.document),
|
|
100
|
+
querySelectorAll: (selector: string) =>
|
|
101
|
+
this.querySelectorAll(selector, dom.window.document),
|
|
102
|
+
},
|
|
103
|
+
}, `${context.__PATH__}.execute`);
|
|
104
|
+
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private querySelector(selector: string, parent: any): any {
|
|
109
|
+
const element = parent?.querySelector(selector);
|
|
110
|
+
|
|
111
|
+
return element
|
|
112
|
+
? {
|
|
113
|
+
textContent: element.textContent,
|
|
114
|
+
querySelector: (selector: string) => this.querySelector(selector, element),
|
|
115
|
+
querySelectorAll: (selector: string) => this.querySelectorAll(selector, element),
|
|
116
|
+
getAttribute: (name: string) => this.getAttribute(name, element),
|
|
117
|
+
}
|
|
118
|
+
: undefined;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private querySelectorAll(selector: string, parent: any): any {
|
|
122
|
+
const elements = Array.from(parent?.querySelectorAll(selector) || []);
|
|
123
|
+
|
|
124
|
+
return elements.map((element: any) => ({
|
|
125
|
+
textContent: element.textContent,
|
|
126
|
+
querySelector: (selector: string) => this.querySelector(selector, element),
|
|
127
|
+
querySelectorAll: (selector: string) => this.querySelectorAll(selector, element),
|
|
128
|
+
getAttribute: (name: string) => this.getAttribute(name, element),
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private getAttribute(name: string, element: any): any {
|
|
133
|
+
return element?.getAttribute(name);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export const html2pins = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
|
|
138
|
+
new HtmlService().html2pins(params, pinsSettingsList, context);
|
|
139
|
+
export const pins2html = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
|
|
140
|
+
new HtmlService().pins2html(params, pinsSettingsList, context);
|
|
141
|
+
export const parseHtml = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
|
|
142
|
+
new HtmlService().parseHtml(params, pinsSettingsList, context);
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "src",
|
|
5
|
+
"outDir": "dist",
|
|
6
|
+
"tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
|
|
7
|
+
"emitDeclarationOnly": true,
|
|
8
|
+
"module": "esnext",
|
|
9
|
+
"moduleResolution": "node",
|
|
10
|
+
"forceConsistentCasingInFileNames": true,
|
|
11
|
+
"types": ["node"]
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*.ts"],
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"path": "../engine/tsconfig.lib.json"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
package/index.cjs.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./src/index";
|