@ray-js/builder-component 0.3.0-beta.1c347991

Sign up to get free protection for your applications and to get access to all the features.
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @ray-js/builder-component
2
+
3
+ 组件构建器,将文件按运行时拆分为多文件。
4
+
5
+ ## Examples
6
+
7
+ ### 全平台转换
8
+
9
+ input:
10
+
11
+ ```
12
+ src/index.ts
13
+ ```
14
+
15
+ output:
16
+
17
+ ```
18
+ index.web.js
19
+ index.wechat.js
20
+ index.native.js
21
+ index.js
22
+ ```
23
+
24
+ ### 按需平台
25
+
26
+ input:
27
+
28
+ ```
29
+ src/index.ts
30
+ src/index.wechat.ts
31
+ ```
32
+
33
+ output:
34
+
35
+ ```
36
+ index.web.js
37
+ index.wechat.js # 原文件转换
38
+ index.native.js
39
+ index.js
40
+ ```
@@ -0,0 +1,10 @@
1
+ import type { NodePath } from '@babel/traverse';
2
+ import * as t from '@babel/types';
3
+ declare const _default: (api: object, options: {
4
+ replace: (source: string) => string;
5
+ }, dirname: string) => {
6
+ visitor: {
7
+ ImportDeclaration(this: import("@babel/core").PluginPass, path: NodePath<t.ImportDeclaration>): void;
8
+ };
9
+ };
10
+ export default _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helper_plugin_utils_1 = require("@babel/helper-plugin-utils");
4
+ exports.default = (0, helper_plugin_utils_1.declare)((api, options) => {
5
+ api.assertVersion(7);
6
+ const replace = options.replace;
7
+ return {
8
+ visitor: {
9
+ ImportDeclaration(path) {
10
+ path.node.source.value = replace(path.node.source.value);
11
+ },
12
+ },
13
+ };
14
+ });
package/lib/build.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { CliOptions } from '@ray-js/types';
2
+ declare type Options = Pick<CliOptions, 'source' | 'output' | 'watch'> & {
3
+ cwd: string;
4
+ transformMode: 'pure' | 'auto';
5
+ };
6
+ export default function build(options: Options): Promise<void>;
7
+ export {};
package/lib/build.js ADDED
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const chokidar_1 = __importDefault(require("chokidar"));
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const globby_1 = __importDefault(require("globby"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const shared_1 = require("@ray-js/shared");
20
+ const transform_1 = require("./transform");
21
+ colors_1.default.enable();
22
+ const LOG_PREFIX = 'builder-component';
23
+ function build(options) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const { cwd = process.cwd(), source = 'src', output = 'lib', watch = false, transformMode = 'auto', } = options;
26
+ const sourceDir = path_1.default.join(cwd, source);
27
+ const outputDir = path_1.default.join(cwd, output);
28
+ if (watch) {
29
+ shared_1.log.info(LOG_PREFIX, 'watching...');
30
+ const watcher = chokidar_1.default.watch(['**/*.*', '!**/demos/**/*.*', '!**/__tests__/**/*.*', '!**/*.md'], {
31
+ cwd: sourceDir,
32
+ });
33
+ watcher.on('all', (event, filePath, _) => __awaiter(this, void 0, void 0, function* () {
34
+ const file = path_1.default.join(sourceDir, filePath);
35
+ if (event === 'change' || event === 'add') {
36
+ shared_1.log.info(`[${event}]`, filePath);
37
+ yield (0, transform_1.transformPlatformFiles)({
38
+ file,
39
+ mode: transformMode,
40
+ sourceDir,
41
+ outputDir,
42
+ }).catch((error) => {
43
+ console.error(error);
44
+ });
45
+ }
46
+ else {
47
+ shared_1.log.warn(`[${event}]`, filePath);
48
+ if (event === 'unlink') {
49
+ yield (0, transform_1.unlinkPlatformFiles)({
50
+ outputDir,
51
+ sourceDir,
52
+ file,
53
+ });
54
+ }
55
+ }
56
+ }));
57
+ }
58
+ else {
59
+ const files = globby_1.default.sync(['**/*.*', '!**/demos/**/*.*', '!**/__tests__/**/*.*'], {
60
+ dot: false,
61
+ cwd: sourceDir,
62
+ absolute: true,
63
+ });
64
+ if (!files || files.length === 0) {
65
+ shared_1.log.error(LOG_PREFIX, 'Not exist any files'.red, cwd);
66
+ process.exit(0);
67
+ }
68
+ for (let index = 0; index < files.length; index++) {
69
+ const file = files[index];
70
+ yield (0, transform_1.transformPlatformFiles)({
71
+ file,
72
+ mode: transformMode,
73
+ sourceDir,
74
+ outputDir,
75
+ }).catch((error) => {
76
+ console.error(error);
77
+ });
78
+ }
79
+ const dtsStartTime = Date.now();
80
+ shared_1.log.info(LOG_PREFIX, 'd.ts generating...'.yellow);
81
+ const typeFiles = yield (0, transform_1.generateDTS)(files.filter((file) => /\.tsx?$/.test(file)));
82
+ for (let index = 0; index < Object.entries(typeFiles).length; index++) {
83
+ const [dtsFile, content] = Object.entries(typeFiles)[index];
84
+ const fileBase = path_1.default.relative(sourceDir, dtsFile);
85
+ const dtsFilePath = path_1.default.join(outputDir, fileBase);
86
+ (0, shared_1.writeFileSync)(dtsFilePath, content);
87
+ shared_1.log.verbose(LOG_PREFIX, fileBase.gray);
88
+ }
89
+ shared_1.log.info(LOG_PREFIX, 'd.ts done.'.green, Date.now() - dtsStartTime, 'ms');
90
+ }
91
+ });
92
+ }
93
+ exports.default = build;
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import build from './build';
2
+ export { build };
package/lib/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.build = void 0;
7
+ const build_1 = __importDefault(require("./build"));
8
+ exports.build = build_1.default;
@@ -0,0 +1,8 @@
1
+ import type { Modules } from '@ray-js/babel-preset-standard';
2
+ import { Target } from '@ray-js/types';
3
+ export declare type BabelTransformOptions = {
4
+ modules: Modules;
5
+ target?: Target;
6
+ pure?: boolean;
7
+ };
8
+ export default function babelTransform(file: string, options: BabelTransformOptions): Promise<import("@babel/core").BabelFileResult>;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const core_1 = require("@babel/core");
18
+ const env_loader_1 = require("@ray-js/env-loader");
19
+ function babelTransform(file, options) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ options = Object.assign({ modules: 'auto' }, options);
22
+ let babelPlugin = [];
23
+ let codeMap;
24
+ const source = fs_extra_1.default.readFileSync(file).toString();
25
+ let code = source;
26
+ if (options.target) {
27
+ const { target } = options;
28
+ process.env.PLATFORM = target;
29
+ process.env.REMAX_PLATFORM = target;
30
+ babelPlugin = [
31
+ [
32
+ require.resolve('../babel/import-replacement'),
33
+ {
34
+ replace: function (source) {
35
+ if (source.endsWith('.mini')) {
36
+ // .mini.js 是 remax 中对小程序统称的文件后缀
37
+ return source.replace(/\.mini$/, `.${target}`);
38
+ }
39
+ return source;
40
+ },
41
+ },
42
+ ],
43
+ [
44
+ require.resolve('babel-plugin-import'),
45
+ {
46
+ libraryName: '@remax/wechat',
47
+ transformToDefaultImport: false,
48
+ camel2DashComponentName: false,
49
+ customName: (name) => {
50
+ if (name.endsWith('Props')) {
51
+ return '@remax/wechat';
52
+ }
53
+ return `@remax/wechat/esm/hostComponents/${name}/index`;
54
+ },
55
+ },
56
+ '@remax/wechat',
57
+ ],
58
+ ];
59
+ const { code: removeEnvCode, map } = yield (0, env_loader_1.traverseImport)({ platform: options.target }, source, {
60
+ sourceMaps: true,
61
+ sourceMapTarget: path_1.default.basename(file),
62
+ sourceFileName: file,
63
+ });
64
+ code = removeEnvCode;
65
+ codeMap = map;
66
+ }
67
+ return yield (0, core_1.transformAsync)(code, {
68
+ babelrc: false,
69
+ configFile: false,
70
+ sourceMaps: true,
71
+ presets: [
72
+ [
73
+ require.resolve('@ray-js/babel-preset-standard'),
74
+ {
75
+ modules: options.modules,
76
+ jsx: 'react',
77
+ platform: options.target,
78
+ macro: false,
79
+ // native 不需要 polyfill
80
+ useBuiltIns: ['native', 'ios', 'android'].includes(options.target) ? false : undefined,
81
+ },
82
+ ],
83
+ ],
84
+ plugins: babelPlugin,
85
+ inputSourceMap: codeMap,
86
+ filename: file,
87
+ });
88
+ });
89
+ }
90
+ exports.default = babelTransform;
@@ -0,0 +1,17 @@
1
+ import { TransformOptions } from '@ray-js/types';
2
+ export { generateDTS } from './type';
3
+ export declare function replaceExt(file: string, ext: string): string;
4
+ /**
5
+ * 根据原文件,移除对应生成的平台文件
6
+ * @param options
7
+ */
8
+ export declare function unlinkPlatformFiles(options: {
9
+ file: string;
10
+ outputDir: string;
11
+ sourceDir: string;
12
+ }): void;
13
+ /**
14
+ * 转换器 将文件转成所需要的格式
15
+ * ts|js 需要生成对应的平台地址
16
+ */
17
+ export declare function transformPlatformFiles(options: TransformOptions): Promise<void>;
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.transformPlatformFiles = exports.unlinkPlatformFiles = exports.replaceExt = exports.generateDTS = void 0;
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const fs_extra_1 = __importDefault(require("fs-extra"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const shared_1 = require("@ray-js/shared");
20
+ const types_1 = require("@ray-js/types");
21
+ const babelTransform_1 = __importDefault(require("./babelTransform"));
22
+ var type_1 = require("./type");
23
+ Object.defineProperty(exports, "generateDTS", { enumerable: true, get: function () { return type_1.generateDTS; } });
24
+ colors_1.default.enable();
25
+ function replaceExt(file, ext) {
26
+ if (typeof file !== 'string') {
27
+ return file;
28
+ }
29
+ if (file.length === 0) {
30
+ return file;
31
+ }
32
+ const nFileName = path_1.default.basename(file, path_1.default.extname(file)) + ext;
33
+ return path_1.default.join(path_1.default.dirname(file), nFileName);
34
+ }
35
+ exports.replaceExt = replaceExt;
36
+ const transformTarget = [
37
+ types_1.PlatformTarget.wechat,
38
+ types_1.PlatformTarget.web,
39
+ types_1.PlatformTarget.ios,
40
+ types_1.PlatformTarget.android,
41
+ types_1.PlatformTarget.tuya,
42
+ ]; // 构建的目标平台
43
+ /**
44
+ * 根据原文件,移除对应生成的平台文件
45
+ * @param options
46
+ */
47
+ function unlinkPlatformFiles(options) {
48
+ const { sourceDir, outputDir, file } = options;
49
+ const fileBase = path_1.default.relative(sourceDir, file);
50
+ let fileExt;
51
+ if (fileBase.endsWith('.d.ts')) {
52
+ fileExt = '.d.ts';
53
+ }
54
+ else {
55
+ fileExt = path_1.default.extname(fileBase);
56
+ }
57
+ const likePaths = [];
58
+ const libFile = path_1.default.join(outputDir, fileBase);
59
+ if (['.ts', '.tsx', '.js', '.jsx'].includes(fileExt) && fileExt !== '.d.ts') {
60
+ likePaths.push(replaceExt(libFile, '.js'));
61
+ transformTarget.forEach((target) => {
62
+ likePaths.push(replaceExt(libFile, `.${target}.js`));
63
+ });
64
+ }
65
+ else {
66
+ likePaths.push(libFile);
67
+ }
68
+ likePaths.filter(fs_extra_1.default.existsSync).map(fs_extra_1.default.unlinkSync);
69
+ }
70
+ exports.unlinkPlatformFiles = unlinkPlatformFiles;
71
+ const PLATFORM_EXTENSION = [...Object.keys(types_1.PlatformTarget), 'mini', 'native'];
72
+ // 平台文件后缀
73
+ // .mini.js 是 remax 定义的小程序文件后缀
74
+ const REGEXP_PLATFORM_EXTENSION = new RegExp(`\\.(?<target>(${PLATFORM_EXTENSION.join('|')}))\\.(ts|js)x?$`);
75
+ /**
76
+ * 是否为平台文件后缀文件
77
+ *
78
+ * @param file
79
+ * @example
80
+ * .native.js .wechat.js .tuya.js
81
+ */
82
+ function isPlatformExtension(file) {
83
+ const fileName = path_1.default.basename(file);
84
+ return REGEXP_PLATFORM_EXTENSION.test(fileName);
85
+ }
86
+ function getOtherPlatformFile(file) {
87
+ const platform = [];
88
+ const ext = path_1.default.extname(file);
89
+ PLATFORM_EXTENSION.forEach((target) => {
90
+ const targetExt = `.${target}${ext}`;
91
+ const targetFile = replaceExt(file, targetExt);
92
+ if (fs_extra_1.default.existsSync(targetFile)) {
93
+ if (target in types_1.PlatformTargetPresets) {
94
+ platform.push(...types_1.PlatformTargetPresets[target]);
95
+ }
96
+ else {
97
+ platform.push(target);
98
+ }
99
+ }
100
+ });
101
+ return platform;
102
+ }
103
+ /**
104
+ * 转换器 将文件转成所需要的格式
105
+ * ts|js 需要生成对应的平台地址
106
+ */
107
+ function transformPlatformFiles(options) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ const { file, mode, outputDir, sourceDir } = options;
110
+ const startTime = Date.now();
111
+ const fileBase = path_1.default.relative(sourceDir, file);
112
+ let fileExt;
113
+ if (file.endsWith('.d.ts')) {
114
+ fileExt = '.d.ts';
115
+ }
116
+ else {
117
+ fileExt = path_1.default.extname(file);
118
+ }
119
+ let transformPure = true;
120
+ // 生成 JS 文件
121
+ let babelResult;
122
+ let outputFile;
123
+ let transformOutputTargets = [];
124
+ if (['.ts', '.tsx', '.js', '.jsx'].includes(fileExt) && fileExt !== '.d.ts') {
125
+ // 智能构建模式, 将 index.js 分成对应的几个端
126
+ if (mode === 'auto') {
127
+ if (isPlatformExtension(file)) {
128
+ transformPure = false;
129
+ // 自定义构建模式, 根据当前文件后缀
130
+ // 根据当前文件后缀, 获取目标平台
131
+ const { groups } = REGEXP_PLATFORM_EXTENSION.exec(fileBase);
132
+ const { target: targetPreset } = groups;
133
+ if (targetPreset in types_1.PlatformTargetPresets) {
134
+ // 预置模式
135
+ const platformTargetPreset = types_1.PlatformTargetPresets[targetPreset];
136
+ for (let k = 0; k < platformTargetPreset.length; k++) {
137
+ const target = platformTargetPreset[k];
138
+ const ext = `.${target}.js`;
139
+ babelResult = yield (0, babelTransform_1.default)(file, { target: target, modules: false });
140
+ transformOutputTargets.push(target);
141
+ if (babelResult && typeof babelResult.code === 'string') {
142
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase.replace(`.${targetPreset}`, '')), ext);
143
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
144
+ }
145
+ }
146
+ }
147
+ else {
148
+ babelResult = yield (0, babelTransform_1.default)(file, {
149
+ target: targetPreset,
150
+ modules: false,
151
+ });
152
+ transformOutputTargets.push(targetPreset);
153
+ if (babelResult && typeof babelResult.code === 'string') {
154
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), '.js');
155
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
156
+ }
157
+ }
158
+ }
159
+ else {
160
+ const presetPlatform = getOtherPlatformFile(file);
161
+ for (let k = 0; k < transformTarget.length; k++) {
162
+ const target = transformTarget[k];
163
+ // 存在其他平台的预置文件不再生成
164
+ if (!presetPlatform.includes(target)) {
165
+ const ext = `.${target}.js`;
166
+ babelResult = yield (0, babelTransform_1.default)(file, { target, modules: false });
167
+ transformOutputTargets.push(target);
168
+ if (babelResult && typeof babelResult.code === 'string') {
169
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), ext);
170
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ if (transformPure) {
177
+ // 保留原始文件
178
+ // 纯 js es6=>es5 转换 可用于 browser & 小程序 使用的工具库构建
179
+ babelResult = yield (0, babelTransform_1.default)(file, { pure: true, modules: false });
180
+ transformOutputTargets.push('*');
181
+ if (babelResult && typeof babelResult.code === 'string') {
182
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), '.js');
183
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
184
+ }
185
+ }
186
+ }
187
+ else {
188
+ // 非 js 等文件,直接拷贝输出
189
+ const fileContent = fs_extra_1.default.readFileSync(file);
190
+ const outputFile = path_1.default.join(outputDir, fileBase);
191
+ yield (0, shared_1.writeFileSync)(outputFile, fileContent);
192
+ }
193
+ shared_1.log.info(`transform`, fileBase.cyan, transformOutputTargets, `${Date.now() - startTime}ms`.white);
194
+ });
195
+ }
196
+ exports.transformPlatformFiles = transformPlatformFiles;
@@ -0,0 +1,3 @@
1
+ export declare function generateDTS(files: string[]): Promise<{
2
+ [path: string]: string;
3
+ }>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.generateDTS = void 0;
36
+ const ts = __importStar(require("typescript"));
37
+ function generateDTS(files) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const createdFiles = {};
40
+ const options = {
41
+ allowJs: true,
42
+ declaration: true,
43
+ emitDeclarationOnly: true,
44
+ esModuleInterop: true,
45
+ target: ts.ScriptTarget.ES5,
46
+ noUnusedParameters: true,
47
+ noUnusedLocals: true,
48
+ strictNullChecks: true,
49
+ jsx: ts.JsxEmit.Preserve,
50
+ allowSyntheticDefaultImports: true,
51
+ };
52
+ const host = ts.createCompilerHost(options);
53
+ host.writeFile = (fileName, contents) => {
54
+ createdFiles[fileName] = contents;
55
+ };
56
+ const program = ts.createProgram(files, options, host);
57
+ program.emit();
58
+ return createdFiles;
59
+ });
60
+ }
61
+ exports.generateDTS = generateDTS;
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@ray-js/builder-component",
3
+ "version": "0.3.0-beta.1c347991",
4
+ "description": "Ray builder for component",
5
+ "keywords": [
6
+ "ray"
7
+ ],
8
+ "author": "子长 <zichang.nong@tuya.com>",
9
+ "license": "MIT",
10
+ "main": "lib/index.js",
11
+ "files": [
12
+ "lib"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org"
17
+ },
18
+ "scripts": {
19
+ "clean": "rm -rf lib esm dts",
20
+ "build": "tsc -p ./tsconfig.build.json",
21
+ "watch": "tsc -p ./tsconfig.build.json --watch"
22
+ },
23
+ "dependencies": {
24
+ "@babel/core": "^7.16.0",
25
+ "@babel/helper-plugin-utils": "^7.14.5",
26
+ "@babel/traverse": "^7.16.3",
27
+ "@babel/types": "^7.16.0",
28
+ "@ray-js/babel-preset-standard": "^0.3.0-beta.1c347991",
29
+ "@ray-js/env-loader": "^0.3.0-beta.1c347991",
30
+ "@ray-js/shared": "^0.3.0-beta.1c347991",
31
+ "@ray-js/types": "^0.3.0-beta.1c347991",
32
+ "babel-plugin-import": "^1.13.3",
33
+ "chokidar": "^3.5.2",
34
+ "colors": "1.4.0",
35
+ "fs-extra": "^10.0.0",
36
+ "globby": "11.x"
37
+ },
38
+ "devDependencies": {
39
+ "@types/fs-extra": "^9.0.12",
40
+ "typescript": "^4.5.2"
41
+ },
42
+ "maintainers": [
43
+ {
44
+ "name": "tuyafe",
45
+ "email": "tuyafe@tuya.com"
46
+ }
47
+ ],
48
+ "gitHead": "e0bd013022ddda63380d3c9e20fd8cadb46cd61f",
49
+ "repository": {}
50
+ }