@tuya-sat/micro-dev-loader 2.2.14 → 2.2.15

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 (31) hide show
  1. package/dist/index.d.ts +3 -4
  2. package/dist/index.js +6 -23
  3. package/dist/less/plugin/bundle.overwrite.d.ts +13 -0
  4. package/dist/less/plugin/bundle.overwrite.js +23 -0
  5. package/dist/{plugins/theme → less/plugin}/dark.variable.less +0 -0
  6. package/dist/less/plugin/file.d.ts +2 -0
  7. package/dist/less/plugin/file.js +57 -0
  8. package/dist/less/utils/index.d.ts +25 -0
  9. package/dist/less/utils/index.js +25 -0
  10. package/dist/loader/changeAntdGlobalImport.d.ts +2 -0
  11. package/dist/loader/changeAntdGlobalImport.js +21 -0
  12. package/dist/loader/filterCssVariableLoader.d.ts +3 -0
  13. package/dist/loader/filterCssVariableLoader.js +23 -0
  14. package/dist/plugins/theme/index.d.ts +1 -1
  15. package/dist/plugins/theme/index.js +4 -60
  16. package/dist/{plugins/theme → postcss/plugin}/filterPlugin.d.ts +0 -0
  17. package/dist/{plugins/theme → postcss/plugin}/filterPlugin.js +0 -0
  18. package/package.json +2 -2
  19. package/dist/codeMaker/base.d.ts +0 -22
  20. package/dist/codeMaker/base.js +0 -57
  21. package/dist/codeMaker/index.d.ts +0 -2
  22. package/dist/codeMaker/index.js +0 -12
  23. package/dist/codeMaker/mobileCodeMaker.d.ts +0 -12
  24. package/dist/codeMaker/mobileCodeMaker.js +0 -91
  25. package/dist/codeMaker/pcCodeMaker.d.ts +0 -13
  26. package/dist/codeMaker/pcCodeMaker.js +0 -114
  27. package/dist/codePiece/permissionComponent.d.ts +0 -2
  28. package/dist/codePiece/permissionComponent.js +0 -14
  29. package/dist/plugins/layoutMock/index.d.ts +0 -4
  30. package/dist/plugins/layoutMock/index.js +0 -47
  31. package/dist/plugins/layoutMock/layout-static/index.html +0 -269
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import LayoutMockPlugin from "./plugins/layoutMock";
2
1
  import ThemePlugin from "./plugins/theme";
3
- declare const addjsLoader: (sourceCode: string) => string;
4
- export default addjsLoader;
5
- export { LayoutMockPlugin, ThemePlugin };
2
+ declare const filterCssVariableLoader: string;
3
+ declare const changeAntdGlobalImport: string;
4
+ export { ThemePlugin, filterCssVariableLoader, changeAntdGlobalImport };
package/dist/index.js CHANGED
@@ -2,28 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var loaderUtils = require('loader-utils');
6
- var index$2 = require('./codeMaker/index.js');
7
- var microUtils = require('@tuya-sat/micro-utils');
8
- var index = require('./plugins/layoutMock/index.js');
9
- var index$1 = require('./plugins/theme/index.js');
5
+ var index = require('./plugins/theme/index.js');
10
6
 
11
- const addjsLoader = function (sourceCode) {
12
- var _a;
13
- const { authedCode = [], microFramework } = loaderUtils.getOptions(this);
14
- const manifest = microUtils.parseManifest();
15
- const isMobile = ((_a = manifest.supportedPlatform) === null || _a === void 0 ? void 0 : _a[0]) === "MOBILE";
16
- const codeMaker = new (index$2.createCodeMaker(isMobile))({
17
- sourceCode,
18
- microFramework,
19
- });
20
- codeMaker.changeCode({
21
- authedCode,
22
- manifest,
23
- });
24
- return codeMaker.getResultCode();
25
- };
7
+ const filterCssVariableLoader = require.resolve("./loader/filterCssVariableLoader");
8
+ const changeAntdGlobalImport = require.resolve("./loader/changeAntdGlobalImport");
26
9
 
27
- exports.LayoutMockPlugin = index["default"];
28
- exports.ThemePlugin = index$1["default"];
29
- exports["default"] = addjsLoader;
10
+ exports.ThemePlugin = index["default"];
11
+ exports.changeAntdGlobalImport = changeAntdGlobalImport;
12
+ exports.filterCssVariableLoader = filterCssVariableLoader;
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ light: {};
3
+ dark: {
4
+ "component-background": string;
5
+ "body-background": string;
6
+ "popover-background": string;
7
+ "table-header-bg": string;
8
+ "table-row-hover-bg": string;
9
+ "border-color-split": string;
10
+ "border-color-base": string;
11
+ };
12
+ };
13
+ export default _default;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const common = {
6
+ "heading-color": "",
7
+ "text-color": "",
8
+ "text-color-secondary": "",
9
+ };
10
+ var overwrite = {
11
+ light: {},
12
+ dark: {
13
+ "component-background": "#303b53",
14
+ "body-background": "#232e48",
15
+ "popover-background": "#303b53",
16
+ "table-header-bg": "#232e48",
17
+ "table-row-hover-bg": "#232e48",
18
+ "border-color-split": "rgba(255, 255, 255, 0.1)",
19
+ "border-color-base": "rgba(255, 255, 255, 0.2)",
20
+ },
21
+ };
22
+
23
+ exports["default"] = overwrite;
@@ -0,0 +1,2 @@
1
+ /// <reference types="less" />
2
+ export default function createHandleImportPlugin(): Less.Plugin;
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var path = require('path');
7
+ var fse = require('fs-extra');
8
+ var less = require('less');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
+
12
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
13
+ var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
14
+
15
+ class HandleImport extends less.FileManager {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.interceptReg = /antd\/(es|lib)\/style\/themes\/variable\.less$/;
19
+ this.darkVariableContent = fse__default["default"].readFileSync(require.resolve("./dark.variable.less"), "utf-8");
20
+ }
21
+ loadFile(filename, currentDirectory, options, environment) {
22
+ const _super = Object.create(null, {
23
+ loadFile: { get: () => super.loadFile }
24
+ });
25
+ return tslib.__awaiter(this, void 0, void 0, function* () {
26
+ if (filename.startsWith("~")) {
27
+ let filenamed = filename.replace("~", "");
28
+ const fullPath = require.resolve(filenamed);
29
+ if (this.interceptReg.test(fullPath)) {
30
+ return {
31
+ filename: fullPath,
32
+ contents: this.darkVariableContent,
33
+ };
34
+ }
35
+ return _super.loadFile.call(this, filenamed, currentDirectory, options, environment);
36
+ }
37
+ const fullPath = path__default["default"].join(currentDirectory, filename);
38
+ if (this.interceptReg.test(fullPath)) {
39
+ return {
40
+ filename: fullPath,
41
+ contents: this.darkVariableContent,
42
+ };
43
+ }
44
+ return _super.loadFile.call(this, filename, currentDirectory, options, environment);
45
+ });
46
+ }
47
+ }
48
+ function createHandleImportPlugin() {
49
+ return {
50
+ install(lessInstance, pluginManager) {
51
+ pluginManager.addFileManager(new HandleImport());
52
+ },
53
+ minVersion: [3, 0, 0],
54
+ };
55
+ }
56
+
57
+ exports["default"] = createHandleImportPlugin;
@@ -0,0 +1,25 @@
1
+ /// <reference types="less" />
2
+ export declare const DARK_THEME = "dark";
3
+ export declare const LIGHT_THEME = "light";
4
+ export declare type ThemeCat = typeof DARK_THEME | typeof LIGHT_THEME;
5
+ export declare function getLessOptions(theme?: ThemeCat): {
6
+ javascriptEnabled: boolean;
7
+ modifyVars: {
8
+ "entry-name": string;
9
+ "root-entry-name": string;
10
+ "component-background": string;
11
+ "body-background": string;
12
+ "popover-background": string;
13
+ "table-header-bg": string;
14
+ "table-row-hover-bg": string;
15
+ "border-color-split": string;
16
+ "border-color-base": string;
17
+ };
18
+ plugins: Less.Plugin[];
19
+ } | {
20
+ javascriptEnabled: boolean;
21
+ modifyVars: {
22
+ "entry-name": string;
23
+ "root-entry-name": string;
24
+ };
25
+ };
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var microUtils = require('@tuya-sat/micro-utils');
6
+ var file = require('../plugin/file.js');
7
+ var bundle_overwrite = require('../plugin/bundle.overwrite.js');
8
+
9
+ const DARK_THEME = "dark";
10
+ const LIGHT_THEME = "light";
11
+ function getLessOptions(theme = LIGHT_THEME) {
12
+ const config = {
13
+ javascriptEnabled: true,
14
+ };
15
+ if (theme === DARK_THEME) {
16
+ return Object.assign({ modifyVars: Object.assign(Object.assign(Object.assign({}, bundle_overwrite["default"].dark), microUtils.theme.getAntdOverWriteFile().dark), { "entry-name": "dark", "root-entry-name": "variable" }), plugins: [file["default"]()] }, config);
17
+ }
18
+ else {
19
+ return Object.assign({ modifyVars: Object.assign(Object.assign(Object.assign({}, bundle_overwrite["default"].light), microUtils.theme.getAntdOverWriteFile().light), { "entry-name": "light", "root-entry-name": "variable" }) }, config);
20
+ }
21
+ }
22
+
23
+ exports.DARK_THEME = DARK_THEME;
24
+ exports.LIGHT_THEME = LIGHT_THEME;
25
+ exports.getLessOptions = getLessOptions;
@@ -0,0 +1,2 @@
1
+ declare function changeAntdGlobalImport(input: string): string;
2
+ export default changeAntdGlobalImport;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * antd 4.19.5的问题,按需加载无法通过@entry-root-name实现
7
+ * issue https://github.com/ant-design/ant-design/issues/35259
8
+ * 写一个loader,在构建时修改内容
9
+ */
10
+ const ANTD_GLOBAL_REGEX = /antd\/(es|lib)\/style\/default(\.less)?$/;
11
+ function changeAntdGlobalImport(input) {
12
+ if (ANTD_GLOBAL_REGEX.test(this.resourcePath)) {
13
+ return `
14
+ @root-entry-name: default;
15
+ @import './index-pure.less';
16
+ `;
17
+ }
18
+ return input;
19
+ }
20
+
21
+ exports["default"] = changeAntdGlobalImport;
@@ -0,0 +1,3 @@
1
+ declare function filterCssVariableLoader(input: string): string;
2
+ export declare function filterCssVarible(css: string): [string, string[]];
3
+ export default filterCssVariableLoader;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var postcss = require('postcss');
6
+ var filterPlugin = require('../postcss/plugin/filterPlugin.js');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var postcss__default = /*#__PURE__*/_interopDefaultLegacy(postcss);
11
+
12
+ function filterCssVariableLoader(input) {
13
+ const [css] = filterCssVarible(input);
14
+ return css;
15
+ }
16
+ function filterCssVarible(css) {
17
+ const store = [];
18
+ //@ts-ignore
19
+ return [postcss__default["default"]([filterPlugin.getFilterPlugin(store)]).process(css).css, store];
20
+ }
21
+
22
+ exports["default"] = filterCssVariableLoader;
23
+ exports.filterCssVarible = filterCssVarible;
@@ -3,8 +3,8 @@ export default class ThemePlugin {
3
3
  private stylePath;
4
4
  private pluginName;
5
5
  private lessFiles;
6
+ private filterCssVarible;
6
7
  constructor(stylePath?: string);
7
8
  apply(compiler: Compiler): void;
8
9
  runCssbundle(): Promise<[string, string[]]>;
9
- filterCssVarible(css: string): [string, string[]];
10
10
  }
@@ -7,10 +7,8 @@ var HtmlWebpackPlugin = require('html-webpack-plugin');
7
7
  var cheerio = require('cheerio');
8
8
  var less = require('less');
9
9
  var fse = require('fs-extra');
10
- var microUtils = require('@tuya-sat/micro-utils');
11
- var postcss = require('postcss');
12
- var path = require('path');
13
- var filterPlugin = require('./filterPlugin.js');
10
+ var index = require('../../less/utils/index.js');
11
+ var filterCssVariableLoader = require('../../loader/filterCssVariableLoader.js');
14
12
 
15
13
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
14
 
@@ -18,17 +16,13 @@ var HtmlWebpackPlugin__default = /*#__PURE__*/_interopDefaultLegacy(HtmlWebpackP
18
16
  var cheerio__default = /*#__PURE__*/_interopDefaultLegacy(cheerio);
19
17
  var less__default = /*#__PURE__*/_interopDefaultLegacy(less);
20
18
  var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
21
- var postcss__default = /*#__PURE__*/_interopDefaultLegacy(postcss);
22
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
23
19
 
24
- // const darkfile
25
- const darkVariableFile = require.resolve("./dark.variable.less");
26
- const darkVariableContent = fse__default["default"].readFileSync(darkVariableFile, "utf-8");
27
20
  class ThemePlugin {
28
21
  constructor(stylePath = "static/css") {
29
22
  this.stylePath = stylePath;
30
23
  this.pluginName = "ThemePlugin";
31
24
  this.lessFiles = [];
25
+ this.filterCssVarible = filterCssVariableLoader.filterCssVarible;
32
26
  }
33
27
  apply(compiler) {
34
28
  const isProduction = process.env.NODE_ENV === "production";
@@ -84,12 +78,7 @@ class ThemePlugin {
84
78
  const lessTasks = this.lessFiles.map((file) => {
85
79
  let bufferString = fse__default["default"].readFileSync(file, "utf-8");
86
80
  bufferString = `${bufferString}`;
87
- return less__default["default"].render(bufferString, {
88
- filename: file,
89
- javascriptEnabled: true,
90
- modifyVars: Object.assign(Object.assign({}, microUtils.theme.getAntdOverWriteFile().dark), { "entry-name": "dark", "root-entry-name": "variable" }),
91
- plugins: [createHandleImportPlugin()],
92
- });
81
+ return less__default["default"].render(bufferString, Object.assign({ filename: file }, index.getLessOptions()));
93
82
  });
94
83
  const cssContents = yield Promise.all(lessTasks);
95
84
  let singleCssContent = "";
@@ -99,51 +88,6 @@ class ThemePlugin {
99
88
  return this.filterCssVarible(singleCssContent);
100
89
  });
101
90
  }
102
- filterCssVarible(css) {
103
- const store = [];
104
- //@ts-ignore
105
- return [postcss__default["default"]([filterPlugin.getFilterPlugin(store)]).process(css).css, store];
106
- }
107
- }
108
- function createHandleImportPlugin() {
109
- return {
110
- install(lessInstance, pluginManager) {
111
- pluginManager.addFileManager(new HandleImport());
112
- },
113
- minVersion: [3, 0, 0],
114
- };
115
- }
116
- class HandleImport extends less.FileManager {
117
- constructor() {
118
- super(...arguments);
119
- this.interceptReg = /\/style\/themes\/(variable|default)(\.less)*$/;
120
- }
121
- loadFile(filename, currentDirectory, options, environment) {
122
- const _super = Object.create(null, {
123
- loadFile: { get: () => super.loadFile }
124
- });
125
- return tslib.__awaiter(this, void 0, void 0, function* () {
126
- if (filename.startsWith("~")) {
127
- let filenamed = filename.replace("~", "");
128
- const fullPath = require.resolve(filenamed);
129
- if (this.interceptReg.test(fullPath)) {
130
- return {
131
- filename: fullPath,
132
- contents: darkVariableContent,
133
- };
134
- }
135
- return _super.loadFile.call(this, filenamed, currentDirectory, options, environment);
136
- }
137
- const fullPath = path__default["default"].join(currentDirectory, filename);
138
- if (this.interceptReg.test(fullPath)) {
139
- return {
140
- filename: fullPath,
141
- contents: darkVariableContent,
142
- };
143
- }
144
- return _super.loadFile.call(this, filename, currentDirectory, options, environment);
145
- });
146
- }
147
91
  }
148
92
 
149
93
  exports["default"] = ThemePlugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuya-sat/micro-dev-loader",
3
- "version": "2.2.14",
3
+ "version": "2.2.15",
4
4
  "main": "dist/index.js",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -14,7 +14,7 @@
14
14
  "@babel/generator": "7.17.7",
15
15
  "@babel/plugin-syntax-typescript": "7.16.7",
16
16
  "@babel/template": "7.16.7",
17
- "@tuya-sat/micro-utils": "2.2.14",
17
+ "@tuya-sat/micro-utils": "2.2.15",
18
18
  "cheerio": "1.0.0-rc.10",
19
19
  "ejs": "3.1.6",
20
20
  "fs-extra": "10.0.1",
@@ -1,22 +0,0 @@
1
- import { Manifest } from "@tuya-sat/micro-utils";
2
- export declare type MICRO_FRAMEWORKS_TYPE = "REACT_TS" | "REACT_JS" | "VUE_TS" | "VUE_JS";
3
- export declare const REACT_TYPES: string[];
4
- export interface ChangeCodeProps {
5
- authedCode: string[];
6
- manifest: Manifest;
7
- }
8
- export interface CodeMakerProps {
9
- sourceCode: string;
10
- microFramework: MICRO_FRAMEWORKS_TYPE;
11
- }
12
- export default class CodeMaker {
13
- microFramework: MICRO_FRAMEWORKS_TYPE;
14
- sourceCode: string;
15
- permissionComponent: string;
16
- resultCode: string;
17
- constructor({ sourceCode, microFramework }: CodeMakerProps);
18
- parse(code: string): import("@babel/parser").ParseResult<import("@babel/types").File>;
19
- getResultCode(): string;
20
- vueReRenderTemp(): string;
21
- reactReRenderTemp(): string;
22
- }
@@ -1,57 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var core = require('@babel/core');
6
- var syntaxTs = require('@babel/plugin-syntax-typescript');
7
- var permissionComponent = require('../codePiece/permissionComponent.js');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
-
11
- var syntaxTs__default = /*#__PURE__*/_interopDefaultLegacy(syntaxTs);
12
-
13
- const REACT_TYPES = ["REACT_TS", "REACT_JS"];
14
- class CodeMaker {
15
- constructor({ sourceCode, microFramework }) {
16
- this.permissionComponent = permissionComponent["default"];
17
- this.sourceCode = sourceCode;
18
- this.microFramework = microFramework;
19
- }
20
- parse(code) {
21
- return core.parse(code, {
22
- plugins: [
23
- [
24
- syntaxTs__default["default"],
25
- {
26
- isTSX: true,
27
- allExtensions: true,
28
- },
29
- ],
30
- ],
31
- });
32
- }
33
- getResultCode() {
34
- return this.resultCode;
35
- }
36
- vueReRenderTemp() {
37
- return `
38
- const reRender = () => {
39
- app.unmount();
40
- message.destroy();
41
- render({});
42
- }
43
- `;
44
- }
45
- reactReRenderTemp() {
46
- return `
47
- const reRender = () => {
48
- ReactDOM.unmountComponentAtNode(document.querySelector('#root'));
49
- message.destroy();
50
- render({});
51
- }
52
- `;
53
- }
54
- }
55
-
56
- exports.REACT_TYPES = REACT_TYPES;
57
- exports["default"] = CodeMaker;
@@ -1,2 +0,0 @@
1
- import MobileCodeMaker from "./mobileCodeMaker";
2
- export declare const createCodeMaker: (isMobile: boolean) => typeof MobileCodeMaker;
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var mobileCodeMaker = require('./mobileCodeMaker.js');
6
- var pcCodeMaker = require('./pcCodeMaker.js');
7
-
8
- const createCodeMaker = (isMobile) => {
9
- return isMobile ? mobileCodeMaker["default"] : pcCodeMaker["default"];
10
- };
11
-
12
- exports.createCodeMaker = createCodeMaker;
@@ -1,12 +0,0 @@
1
- import { Manifest } from "@tuya-sat/micro-utils";
2
- import CodeMaker, { CodeMakerProps, ChangeCodeProps } from "./base";
3
- export default class MobileCodeMaker extends CodeMaker {
4
- constructor(props: CodeMakerProps);
5
- changeCode(props: ChangeCodeProps): void;
6
- reactReRenderTemp(): string;
7
- vueReRenderTemp(): string;
8
- getAuthTemp(props: {
9
- privileges: Manifest["privileges"];
10
- authedCode: ChangeCodeProps["authedCode"];
11
- }): string;
12
- }
@@ -1,91 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var base = require('./base.js');
6
-
7
- class MobileCodeMaker extends base["default"] {
8
- constructor(props) {
9
- super(props);
10
- }
11
- changeCode(props) {
12
- const { manifest, authedCode } = props;
13
- const { privileges } = manifest;
14
- this.resultCode = `${this.getAuthTemp({
15
- privileges,
16
- authedCode,
17
- })};${this.sourceCode};${this.permissionComponent}`;
18
- }
19
- reactReRenderTemp() {
20
- return `
21
- const reRender = () => {
22
- const ReactDom = require('react-dom');
23
- const rootElement = document.getElementById('root');
24
- ReactDom.unmountComponentAtNode(rootElement);
25
- render(<App />, rootElement);
26
- }
27
- `;
28
- }
29
- vueReRenderTemp() {
30
- return `
31
- const reRender = () => {
32
- }
33
- `;
34
- }
35
- getAuthTemp(props) {
36
- const { privileges = [], authedCode = [] } = props;
37
- const temp = `
38
- {
39
- //重刷函数
40
- ${base.REACT_TYPES.includes(this.microFramework)
41
- ? this.reactReRenderTemp()
42
- : this.vueReRenderTemp()}
43
- //权限点
44
- window._SDF = {
45
- permissions:{}
46
- }
47
- //用于组件渲染
48
- window._allCodesStatusMap = new Map()
49
- //修改权限点的方法
50
- const changeAuthedMap = (authedCode) => {
51
- const privileges = ${JSON.stringify(privileges)}
52
- const allCodesStatus = privileges?.map(
53
- ({ name, code }) => [
54
- code,
55
- authedCode.includes(code),
56
- ]
57
- );
58
- window._allCodesStatusMap = new Map(allCodesStatus)
59
- window._SDF.permissions = allCodesStatus.reduce((pre, item) => {
60
- const [key, value] = item;
61
- pre[key] = value;
62
- return pre;
63
- }, {});
64
- }
65
-
66
- const authedCodeInfo = {
67
- authedCode:${JSON.stringify(authedCode)}
68
- }
69
-
70
- changeAuthedMap(authedCodeInfo.authedCode)
71
- window._authedCodeInfoProxy = new Proxy(authedCodeInfo,{
72
- get(target,prop){
73
- return target[prop]
74
- },
75
- set(target,prop,value){
76
- target[prop] = value
77
- if(prop === 'authedCode') {
78
- changeAuthedMap(value)
79
- reRender()
80
- }
81
- return true
82
- }
83
- })
84
-
85
- }
86
- `;
87
- return temp;
88
- }
89
- }
90
-
91
- exports["default"] = MobileCodeMaker;
@@ -1,13 +0,0 @@
1
- import { ParseResult } from "@babel/core";
2
- import { Manifest } from "@tuya-sat/micro-utils";
3
- import CodeMaker, { CodeMakerProps, ChangeCodeProps } from "./base";
4
- export default class PcCodeMaker extends CodeMaker {
5
- ast: ParseResult;
6
- constructor(props: CodeMakerProps);
7
- changeCode(props: ChangeCodeProps): void;
8
- getMenuCode(manifest: Manifest): string;
9
- getAuthTemp(props: {
10
- privileges: Manifest["privileges"];
11
- authedCode: ChangeCodeProps["authedCode"];
12
- }): string;
13
- }
@@ -1,114 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var core = require('@babel/core');
6
- var template = require('@babel/template');
7
- var generate = require('@babel/generator');
8
- var microUtils = require('@tuya-sat/micro-utils');
9
- var base = require('./base.js');
10
-
11
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
-
13
- var template__default = /*#__PURE__*/_interopDefaultLegacy(template);
14
- var generate__default = /*#__PURE__*/_interopDefaultLegacy(generate);
15
-
16
- class PcCodeMaker extends base["default"] {
17
- constructor(props) {
18
- super(props);
19
- this.ast = this.parse(this.sourceCode);
20
- }
21
- changeCode(props) {
22
- const { manifest, authedCode } = props;
23
- const { privileges } = manifest;
24
- const authTemp = this.getAuthTemp({ authedCode, privileges });
25
- const menuTemp = this.getMenuCode(manifest);
26
- core.traverse(this.ast, {
27
- ExportNamedDeclaration(path) {
28
- let isTarget = false;
29
- try {
30
- isTarget =
31
- path.node.declaration.kind === "let" &&
32
- path.node.declaration.declarations[0].id.name ===
33
- "microProps";
34
- }
35
- catch (_a) { }
36
- if (!isTarget) {
37
- return;
38
- }
39
- [authTemp, menuTemp, "microProps = {}"].forEach((temp) => {
40
- path.insertAfter(template__default["default"].ast(temp));
41
- });
42
- },
43
- });
44
- this.resultCode = generate__default["default"](this.ast).code + ";" + this.permissionComponent;
45
- }
46
- getMenuCode(manifest) {
47
- const temp = `
48
- {
49
- microProps.getOwnMenu = ()=> {
50
- const localLng = localStorage.getItem("i18nextLng");
51
- let index = localLng === "zh-CN" ? 0 : 1
52
- const ownMenu = ${JSON.stringify(microUtils.getFakeMenu(manifest))}
53
- ownMenu.micro_app_name = ownMenu.micro_app_name[index]
54
- ownMenu.entry_name = ownMenu.entry_name[index]
55
- ownMenu.sub_entry_list = ownMenu.sub_entry_list.map(item=>({
56
- ...item,
57
- micro_app_name:item.micro_app_name[index],
58
- entry_name:item.entry_name[index]
59
- }))
60
- return ownMenu
61
- }
62
- }
63
- `;
64
- return temp;
65
- }
66
- getAuthTemp(props) {
67
- const { privileges = [], authedCode = [] } = props;
68
- const temp = `
69
- {
70
- window._allCodesStatusMap = new Map()
71
- window._authedCodeInfoProxy = {}
72
- microProps.hasPermission = (code) => {
73
- return window._allCodesStatusMap.get(code)
74
- };
75
- const changeAuthedMap = (authedCode) => {
76
- const privileges = ${JSON.stringify(privileges)}
77
- const allCodesStatus = privileges?.map(
78
- ({ name, code }) => [
79
- code,
80
- authedCode.includes(code),
81
- ]
82
- );
83
- window._allCodesStatusMap = new Map(allCodesStatus)
84
- }
85
-
86
- ${base.REACT_TYPES.includes(this.microFramework)
87
- ? this.reactReRenderTemp()
88
- : this.vueReRenderTemp()}
89
- const authedCodeInfo = {
90
- authedCode:${JSON.stringify(authedCode)}
91
- }
92
-
93
- changeAuthedMap(authedCodeInfo.authedCode)
94
- window._authedCodeInfoProxy = new Proxy(authedCodeInfo,{
95
- get(target,prop){
96
- return target[prop]
97
- },
98
- set(target,prop,value){
99
- target[prop] = value
100
- if(prop === 'authedCode') {
101
- changeAuthedMap(value)
102
- reRender()
103
- }
104
- return true
105
- }
106
- })
107
-
108
- }
109
- `;
110
- return temp;
111
- }
112
- }
113
-
114
- exports["default"] = PcCodeMaker;
@@ -1,2 +0,0 @@
1
- declare const permissionComponent = "\n(function ExternalRender() {\n const div = document.createElement('div');\n const { insertDom } = require(\"@tuya-sat/micro-dev-component\");\n insertDom(div)\n document.body.appendChild(div);\n})();\n";
2
- export default permissionComponent;
@@ -1,14 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const permissionComponent = `
6
- (function ExternalRender() {
7
- const div = document.createElement('div');
8
- const { insertDom } = require("@tuya-sat/micro-dev-component");
9
- insertDom(div)
10
- document.body.appendChild(div);
11
- })();
12
- `;
13
-
14
- exports["default"] = permissionComponent;
@@ -1,4 +0,0 @@
1
- export default class LayoutMockPlugin {
2
- static useLayoutStatic(app: any): void;
3
- apply(compiler: any): void;
4
- }
@@ -1,47 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var fse = require('fs-extra');
6
- var path = require('path');
7
- var ejs = require('ejs');
8
- var cheerio = require('cheerio');
9
- var HtmlWebpackPlugin = require('html-webpack-plugin');
10
- var microUtils = require('@tuya-sat/micro-utils');
11
-
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
15
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
16
- var ejs__default = /*#__PURE__*/_interopDefaultLegacy(ejs);
17
- var cheerio__default = /*#__PURE__*/_interopDefaultLegacy(cheerio);
18
- var HtmlWebpackPlugin__default = /*#__PURE__*/_interopDefaultLegacy(HtmlWebpackPlugin);
19
-
20
- const manifest = microUtils.parseManifest();
21
- const layoutMockTpl = fse__default["default"].readFileSync(path__default["default"].resolve(__dirname, "./layout-static/index.html"), {
22
- encoding: "utf-8",
23
- });
24
- class LayoutMockPlugin {
25
- static useLayoutStatic(app) {
26
- app.get("/layout-static/*", function (req, res) {
27
- res.sendFile(path__default["default"].join(__dirname, req.path));
28
- });
29
- }
30
- apply(compiler) {
31
- compiler.hooks.compilation.tap("MyPlugin", (compilation) => {
32
- HtmlWebpackPlugin__default["default"].getHooks(compilation).beforeEmit.tapAsync("LayoutMockPlugin", (data, cb) => {
33
- const $ = cheerio__default["default"].load(data.html);
34
- const { name, defaultMenuIcon } = manifest;
35
- data.html = ejs__default["default"].render(layoutMockTpl, {
36
- appName: microUtils.nameProcesser2(name)[0],
37
- appIcon: defaultMenuIcon.url,
38
- menu: microUtils.getFakeMenu(manifest),
39
- appHtml: [$("head").html(), $("body").html()].join(""),
40
- });
41
- cb(null, data);
42
- });
43
- });
44
- }
45
- }
46
-
47
- exports["default"] = LayoutMockPlugin;
@@ -1,269 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" style="margin: 0; padding: 0">
3
- <head>
4
- <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
5
- <meta charset="utf-8" />
6
- <link rel="icon" href="favicon.ico" />
7
- <meta name="viewport" content="width=device-width,initial-scale=1" />
8
- <meta name="theme-color" content="#000000" />
9
- <meta name="description" content="Tuya General Management Portal" />
10
- <title><%= appName %></title>
11
- <style>
12
- .c-debugger-container {
13
- width: 100vw;
14
- height: 100vh;
15
- display: flex;
16
- flex-direction: column;
17
- }
18
- .c-debugger-header {
19
- flex: 0 0 auto;
20
- display: flex;
21
- align-items: center;
22
- justify-content: space-between;
23
- height: 55px;
24
- padding: 0 16px;
25
- border-bottom: 1px solid #eee;
26
- color: rgba(0, 0, 0, 0.85);
27
- }
28
- .c-debugger-logo {
29
- position: relative;
30
- overflow: hidden;
31
- display: flex;
32
- align-items: center;
33
- }
34
- .c-debugger-title {
35
- color: #000;
36
- font-size: 14px;
37
- font-weight: 700;
38
- height: 32px;
39
- line-height: 32px;
40
- margin: 0 0 0 12px;
41
- }
42
- .c-debugger-main {
43
- display: flex;
44
- flex: 1 1 auto;
45
- }
46
- .c-debugger-side {
47
- flex: 0 0 auto;
48
- width: 208px;
49
- height: 100%;
50
- border-right: 1px solid #f0f2f5;
51
- }
52
- .c-debugger-content {
53
- flex: 1 1 auto;
54
- height: 100%;
55
- width: 0;
56
- }
57
- #root {
58
- width: 100%;
59
- height: 100%;
60
- }
61
- .c-debugger-lang-trigger {
62
- position: relative;
63
- display: flex;
64
- align-items: center;
65
- white-space: nowrap;
66
- cursor: pointer;
67
- font-size: 14px;
68
- font-weight: normal;
69
- height: 100%;
70
- }
71
- .c-debugger-lang-trigger:hover .c-debugger-lang-list {
72
- display: block;
73
- line-height: 1.5;
74
- }
75
- .c-debugger-lang-trigger .c-debugger-lang-list {
76
- position: absolute;
77
- top: 42px;
78
- right: -5px;
79
- display: none;
80
- background: #ffffff;
81
- border-radius: 2px;
82
- outline: none;
83
- box-shadow: 0 3px 6px -4px rgb(0 0 0 / 12%),
84
- 0 6px 16px 0 rgb(0 0 0 / 8%), 0 9px 28px 8px rgb(0 0 0 / 5%);
85
- z-index: 100;
86
- }
87
- .c-debugger-lang-trigger .c-debugger-lang-list span {
88
- display: block;
89
- padding: 5px 12px;
90
- }
91
- .c-debugger-lang-trigger .c-debugger-lang-list span:hover {
92
- background-color: #f5f5f5;
93
- }
94
- .c-debugger-menu {
95
- display: flex;
96
- justify-content: flex-start;
97
- align-items: center;
98
- height: 40px;
99
- padding: 0 0 0 17px;
100
- margin: 4px 0 8px;
101
- cursor: pointer;
102
- font-size: 14px;
103
- color: rgba(0, 0, 0, 0.85);
104
- }
105
- .c-debugger-menu-name {
106
- flex: 1 1 auto;
107
- margin-left: 10px;
108
- overflow: hidden;
109
- text-overflow: ellipsis;
110
- }
111
- .c-debugger-menu-suffix {
112
- display: flex;
113
- align-items: center;
114
- width: 14px;
115
- height: 14px;
116
- margin: 0 10px 0 0;
117
- }
118
- .c-debugger-menu:hover {
119
- color: #1890ff;
120
- }
121
- </style>
122
- </head>
123
- <body style="margin: 0; padding: 0">
124
- <div class="c-debugger-container">
125
- <div class="c-debugger-header">
126
- <div class="c-debugger-logo">
127
- <svg
128
- version="1.1"
129
- id="Layer_1"
130
- xmlns="http://www.w3.org/2000/svg"
131
- xmlns:xlink="http://www.w3.org/1999/xlink"
132
- x="0px"
133
- y="0px"
134
- width="28px"
135
- height="28px"
136
- viewBox="0 0 28 28"
137
- enable-background="new 0 0 28 28"
138
- xml:space="preserve"
139
- >
140
- <image
141
- id="image0"
142
- width="28"
143
- height="28"
144
- x="0"
145
- y="0"
146
- href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
147
- AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABYlBMVEUAAAAxY/QwYfMxYvMx
148
- YvQwYPMvYfMwYvMjWegdTdYyYvQyY/QwYfQwZfY4aPc3ZPQwYvQ1ZPYzZvhMhP8vYPIxYvUhWOQr
149
- WOwvYfIxYfQwYvUwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMw
150
- YfMwYfMwYfMwYfMzZPgwYfMwYfMwYfQwYfQxYvMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMxYfMw
151
- YfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfQwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMy
152
- YvQxYvQwYfMwYfMxYvQwYfMwYfMwYfMwYfMwYfMwYfMxYvQwYfMwYfMwYfMzZPcxYvMwYfMwYfMw
153
- YfMxYvMxY/QxY/UwYvQwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfMwYfP///98
154
- NzqoAAAAdHRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVZ7S8PwRaMj2Orz9V+NW7Pt2
155
- Afl/BwYLWhMKh/c378YMuPVUZP6cK+nRzgi7B7kNxyHhTwINrmcFhIL44jknAzCp6wEK5EkaBwIB
156
- BhdCklvZuqemt9b0FNHt+VwAAAABYktHRHWoapj7AAAAB3RJTUUH5QweCh8zgHYHYgAAAXtJREFU
157
- KM9t0/dXwjAQB/BwxIW4xUULbdlYxImICoqguAcOcOPe8/7/51VALeZ+6/ukeblvLoxRWQDAKcku
158
- t6K4XbLkpE8Lq5SVg6p5vFgpr0dTgVvLxnmdzx/APxXw++o5N6yBNwZDWFOhcJOBNl4XHKw11CND
159
- 3GZjAL5//2F0eATqARiofoGNwtj4BKEWEFlsMq4Bc3pEBlMJnHYyySsymJnFZIrJIqNjzs1jmrlE
160
- xpphIYNZ5hYZoyYWMcEUoTH7Ug51E/4ag+UVQrfQGKyu0bYuobXA+gYdSBYZtbIZpVaqIZjMwrdk
161
- I4RKfCZrpfgyRnzl4E3WBrC9g4F85cpMZgPY3VMwp8L3ZeuGtds7DOrkHMb2D7BQpOU0JuHICMQO
162
- jwCsnLcDdB2fKHgqdXOHMWA9Z3A+WUpfXF5d39ze3T+UEAtSb3n8OG30GEeMPz2/vL69f9Bo5op9
163
- ZaNywKc2naymkVzL01D3V883YDyHVDqb0PVENp36eQ5fpMSxyXHqNUQAAABEZVhJZk1NACoAAAAI
164
- AAGHaQAEAAAAAQAAABoAAAAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAQSgAwAEAAAAAQAAAQQA
165
- AAAA4WKbRgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0xMi0zMFQxMDozMTo1MSswMDowMFxFjZgA
166
- AAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMTItMzBUMTA6MzE6NTErMDA6MDAtGDUkAAAAEXRFWHRl
167
- eGlmOkNvbG9yU3BhY2UAMQ+bAkkAAAASdEVYdGV4aWY6RXhpZk9mZnNldAAyNlMbomUAAAAYdEVY
168
- dGV4aWY6UGl4ZWxYRGltZW5zaW9uADI2MBIuWbIAAAAYdEVYdGV4aWY6UGl4ZWxZRGltZW5zaW9u
169
- ADI2MI8huMQAAAAASUVORK5CYII="
170
- />
171
- </svg>
172
- <div class="c-debugger-title"><%= appName %></div>
173
- </div>
174
- <div class="c-debugger-lang-trigger">
175
- <span id="c-debugger-lang-name"></span>
176
- <div class="c-debugger-lang-list">
177
- <span onclick="changeLng('en-US')">English</span>
178
- <span onclick="changeLng('zh-CN')">简体中文</span>
179
- </div>
180
- </div>
181
- </div>
182
- <div class="c-debugger-main">
183
- <div class="c-debugger-side">
184
- <% if (!menu.sub_entry_list.length) { %>
185
- <div class="c-debugger-menu" onclick="toPage('<%= menu.path %>')">
186
- <svg
187
- viewBox="0 0 1024 1024"
188
- version="1.1"
189
- xmlns="http://www.w3.org/2000/svg"
190
- p-id="2323"
191
- width="14"
192
- height="14"
193
- >
194
- <path
195
- d="M192.037 287.953h640.124c17.673 0 32-14.327 32-32s-14.327-32-32-32H192.037c-17.673 0-32 14.327-32 32s14.327 32 32 32zM192.028 543.17h638.608c17.673 0 32-14.327 32-32s-14.327-32-32-32H192.028c-17.673 0-32 14.327-32 32s14.327 32 32 32zM832.161 735.802H192.037c-17.673 0-32 14.327-32 32s14.327 32 32 32h640.124c17.673 0 32-14.327 32-32s-14.327-32-32-32z"
196
- fill=""
197
- p-id="2324"
198
- ></path>
199
- </svg>
200
- <div class="c-debugger-menu-name"><%= menu.entry_name[0] %></div>
201
- </div>
202
- <% } else { %>
203
- <div class="c-debugger-menu">
204
- <svg
205
- viewBox="0 0 1024 1024"
206
- version="1.1"
207
- xmlns="http://www.w3.org/2000/svg"
208
- p-id="2323"
209
- width="14"
210
- height="14"
211
- >
212
- <path
213
- d="M192.037 287.953h640.124c17.673 0 32-14.327 32-32s-14.327-32-32-32H192.037c-17.673 0-32 14.327-32 32s14.327 32 32 32zM192.028 543.17h638.608c17.673 0 32-14.327 32-32s-14.327-32-32-32H192.028c-17.673 0-32 14.327-32 32s14.327 32 32 32zM832.161 735.802H192.037c-17.673 0-32 14.327-32 32s14.327 32 32 32h640.124c17.673 0 32-14.327 32-32s-14.327-32-32-32z"
214
- fill=""
215
- p-id="2324"
216
- ></path>
217
- </svg>
218
- <div class="c-debugger-menu-name">
219
- <%= menu.micro_app_name[0] %>
220
- </div>
221
- <div class="c-debugger-menu-suffix">
222
- <svg
223
- viewBox="0 0 1024 1024"
224
- version="1.1"
225
- xmlns="http://www.w3.org/2000/svg"
226
- p-id="2307"
227
- width="12"
228
- height="12"
229
- >
230
- <path
231
- d="M881.975333 774.688841 512 404.713508 142.024667 774.688841 64.322981 696.987155 512 249.311159 959.677019 696.987155Z"
232
- p-id="2308"
233
- ></path>
234
- </svg>
235
- </div>
236
- </div>
237
- <% menu.sub_entry_list.forEach(function(subMenu){ %>
238
- <div class="c-debugger-menu" onclick="toPage('<%= subMenu.path %>')">
239
- <div style="width: 14px; height: 14px"></div>
240
- <div class="c-debugger-menu-name"><%= subMenu.entry_name[0] %></div>
241
- </div>
242
- <% }) %> <% } %>
243
- </div>
244
- <div class="c-debugger-content"><%- appHtml %></div>
245
- </div>
246
- </div>
247
- <script>
248
- (() => {
249
- const lngMap = {
250
- "en-US": "English",
251
- "zh-CN": "简体中文",
252
- };
253
- const localLng = localStorage.getItem("i18nextLng");
254
- const lng = lngMap[localLng] ? localLng : "zh-CN";
255
- document.querySelector("#c-debugger-lang-name").textContent =
256
- lngMap[lng];
257
- })();
258
-
259
- function toPage(path) {
260
- window.location.href = new URL(path, window.location.origin);
261
- }
262
-
263
- function changeLng(lng, name) {
264
- localStorage.setItem("i18nextLng", lng);
265
- location.reload();
266
- }
267
- </script>
268
- </body>
269
- </html>