commit
7fff45328d
36 changed files with 1745 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||
node_modules |
|||
lib |
|||
.temp |
|||
.cache |
@ -0,0 +1,2 @@ |
|||
shamefully-hoist=true |
|||
strict-peer-dependencies=false |
@ -0,0 +1,7 @@ |
|||
declare module 'vue' { |
|||
export interface GlobalComponents { |
|||
PsButton: typeof import('./lib/button')['default'], |
|||
PsTest: typeof import('./lib/test')['default'] |
|||
} |
|||
} |
|||
export { } |
@ -0,0 +1,8 @@ |
|||
import { src, dest } from "gulp" |
|||
|
|||
async function defaultTask(cb) { |
|||
await src("packages/theme-chalk/**/*.scss").pipe(dest("lib")) |
|||
cb() |
|||
} |
|||
|
|||
exports.default = defaultTask |
@ -0,0 +1,10 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"allowSyntheticDefaultImports": true, |
|||
"esModuleInterop": true, |
|||
"lib": ["ES6", "DOM"], |
|||
"declaration": false, |
|||
"module": "commonjs" |
|||
}, |
|||
"include": ["**/*"] |
|||
} |
@ -0,0 +1,42 @@ |
|||
{ |
|||
"private": true, |
|||
"workspaces": [ |
|||
"packages/*" |
|||
], |
|||
"files": [ |
|||
"lib", |
|||
"components.d.ts", |
|||
"PrincessResolver.ts", |
|||
"PrincessResolver.js" |
|||
], |
|||
"description": "", |
|||
"main": "index.js", |
|||
"scripts": { |
|||
"start": "pnpm run -C packages/components start", |
|||
"dev": "pnpm run -C packages/components dev", |
|||
"build": "pnpm run -C packages/build build && pnpm run -C packages/princess-ui build", |
|||
"gulp": "set TS_NODE_PROJECT=gulpfile.ts/tsconfig.json& gulp -f gulpfile.ts", |
|||
"release": "cd packages/princess-ui & npm publish" |
|||
}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC", |
|||
"devDependencies": { |
|||
"princess-ui": "workspace:*", |
|||
"@princess-ui/build": "workspace:*", |
|||
"@princess-ui/components": "workspace:*", |
|||
"@princess-ui/share": "workspace:*", |
|||
"@princess-ui/theme-chalk": "workspace:*", |
|||
"@types/gulp": "^4.0.9", |
|||
"@types/node": "^17.0.35", |
|||
"gulp": "^4.0.2", |
|||
"ts-node": "^10.8.0", |
|||
"typescript": "^4.6.4", |
|||
"unplugin-vue-components": "^0.19.5", |
|||
"vue": "^3.2.36" |
|||
}, |
|||
"peerDependencies": { |
|||
"unplugin-vue-components": "^0.19.5", |
|||
"vue": "^3.2.36" |
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
import chalk from "chalk" |
|||
import _ from "lodash" |
|||
import rimraf from "rimraf" |
|||
import * as util from "./util" |
|||
|
|||
import buildComponent from "./buildComponent" |
|||
import buildAll from "./buildAll" |
|||
import { getOutput, getPath, getPkgs } from "@princess-ui/share" |
|||
|
|||
process.cwd = ()=>{ |
|||
return getPkgs() |
|||
} |
|||
console.log(chalk.yellow("正在清除lib文件夹")) |
|||
rimraf(getOutput("lib"), async err => { |
|||
if (err) throw err |
|||
console.log(chalk.green("已清除lib文件夹")) |
|||
const components = await util.getComponents() |
|||
for (let i = 0; i < components.length; i++) { |
|||
const component = components[i] |
|||
const beginDate = new Date().getTime() |
|||
console.log(chalk.yellow(`开始构建${component}组件`)) |
|||
await buildComponent("ps", component, "ps" + _.upperFirst(_.kebabCase(component))) |
|||
console.log(chalk.green(`构建${component}组件完成, 其耗时:${(new Date().getTime() - beginDate) / 1000}s`)) |
|||
} |
|||
const beginDate = new Date().getTime() |
|||
console.log(chalk.yellow("构建组件结构")) |
|||
await util.generateComponents(components) |
|||
console.log(chalk.green("构建组件结构完成")) |
|||
console.log(chalk.yellow("构建全量包")) |
|||
await buildAll("ps") |
|||
console.log(chalk.green(`构建全量包完成, 其耗时:${(new Date().getTime() - beginDate) / 1000}s`)) |
|||
process.cwd = ()=>{ |
|||
return getPath() |
|||
} |
|||
}) |
@ -0,0 +1,74 @@ |
|||
import { build } from "vite" |
|||
import vue from "@vitejs/plugin-vue" |
|||
import path from "path" |
|||
import dts from "vite-plugin-dts" |
|||
import { replaceCodePlugin } from "vite-plugin-replace"; |
|||
import { getOutput, getPath, getPkgs } from "@princess-ui/share"; |
|||
|
|||
export default function (name: string) { |
|||
return build({ |
|||
logLevel: "error", |
|||
plugins: [ |
|||
replaceCodePlugin({ |
|||
replacements: [ |
|||
{ |
|||
from: "@princess-ui/components", |
|||
to: "../", |
|||
}, |
|||
], |
|||
}), |
|||
vue({ isProduction: true }), |
|||
dts({ |
|||
entryRoot: `components`, |
|||
tsConfigFilePath: getPath("tsconfig.json"), |
|||
outputDir: getOutput("lib"), |
|||
cleanVueFileName: true, |
|||
include: ['components/index.ts', 'components/components.ts'], |
|||
staticImport: true, |
|||
}), |
|||
], |
|||
build: { |
|||
outDir: getOutput("lib"), |
|||
emptyOutDir: false, |
|||
lib: { |
|||
entry: path.resolve(__dirname, `../components/index.ts`), |
|||
name: name, |
|||
formats: ["es", "umd"], |
|||
fileName: format => `index${format=='es'?'':'.umd'}.js`, |
|||
}, |
|||
rollupOptions: { |
|||
// 确保外部化处理那些你不想打包进库的依赖
|
|||
external: id => { |
|||
if (/^vue/.test(id)) { |
|||
return true |
|||
} |
|||
return false |
|||
}, |
|||
output: [ |
|||
{ |
|||
format: "es", |
|||
assetFileNames(chunkInfo) { |
|||
if (chunkInfo.name == "style.css") { |
|||
return `style.css` |
|||
} |
|||
}, |
|||
globals: (id: string) => { |
|||
if (/^vue/.test(id)) { |
|||
return "Vue" |
|||
} |
|||
}, |
|||
}, |
|||
{ |
|||
exports: "named", |
|||
format: "umd", |
|||
globals: (id: string) => { |
|||
if (/^vue/.test(id)) { |
|||
return "Vue" |
|||
} |
|||
}, |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
}) |
|||
} |
@ -0,0 +1,80 @@ |
|||
import { build } from "vite" |
|||
import vue from "@vitejs/plugin-vue" |
|||
import path from "path" |
|||
import dts from "vite-plugin-dts" |
|||
import { replaceCodePlugin } from "vite-plugin-replace"; |
|||
// import libInjectCss from "./libInjectCss"
|
|||
import _ from "lodash" |
|||
import { getOutput, getPath, getPkgs } from "@princess-ui/share"; |
|||
|
|||
export default function (prefix: string, component: string, name: string, opts?: {}) { |
|||
return build({ |
|||
logLevel: "error", |
|||
plugins: [ |
|||
vue({ isProduction: true }), |
|||
dts({ |
|||
entryRoot: `components/${component}`, |
|||
tsConfigFilePath: getPath("tsconfig.json"), |
|||
outputDir: getOutput(`lib/${component}`), |
|||
cleanVueFileName: true, |
|||
include: [`components/${component}/index.vue`], |
|||
staticImport: true, |
|||
}), |
|||
replaceCodePlugin({ |
|||
replacements: [ |
|||
{ |
|||
from: "@princess-ui/components", |
|||
to: "princess-ui/lib", |
|||
}, |
|||
], |
|||
}), |
|||
// libInjectCss(),
|
|||
], |
|||
build: { |
|||
outDir: getOutput("lib"), |
|||
cssCodeSplit: false, |
|||
emptyOutDir: false, |
|||
lib: { |
|||
entry: path.resolve(__dirname, `../components/${component}/index.ts`), |
|||
name: name, |
|||
formats: ["es", "umd"], |
|||
fileName: format => `${component}/index${format == 'es' ? '' : '.umd'}.js`, |
|||
}, |
|||
rollupOptions: { |
|||
external: id => { |
|||
if (/^vue/.test(id)) { |
|||
return true |
|||
} |
|||
if (/^princess-ui/.test(id)) { |
|||
return true |
|||
} |
|||
return false |
|||
}, |
|||
output: [ |
|||
{ |
|||
format: "es", |
|||
assetFileNames(chunkInfo) { |
|||
if (chunkInfo.name == "style.css") { |
|||
return `${component}/style.css` |
|||
} |
|||
}, |
|||
}, |
|||
{ |
|||
name: name, |
|||
format: "umd", |
|||
globals: (id: string) => { |
|||
if (/^vue/.test(id)) { |
|||
return "Vue" |
|||
} |
|||
if (new RegExp(/^princess-ui/).test(id)) { |
|||
let str = id.replace(/^princess\-ui\/lib\//, prefix) |
|||
str = str.slice(0, 2) + str.slice(2)[0].toUpperCase() + str.slice(3) |
|||
return str |
|||
} |
|||
}, |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
}) |
|||
} |
@ -0,0 +1,66 @@ |
|||
/* eslint-disable import/no-extraneous-dependencies */ |
|||
import fs from 'fs' |
|||
import { resolve } from 'path' |
|||
import type { ResolvedConfig, PluginOption } from 'vite' |
|||
|
|||
const fileRegex = /\.(css)$/ |
|||
const injectCode = (code: string) => |
|||
`function styleInject(css,ref){if(ref===void 0){ref={}}var insertAt=ref.insertAt;if(!css||typeof document==="undefined"){return}var head=document.head||document.getElementsByTagName("head")[0];var style=document.createElement("style");style.type="text/css";if(insertAt==="top"){if(head.firstChild){head.insertBefore(style,head.firstChild)}else{head.appendChild(style)}}else{head.appendChild(style)}if(style.styleSheet){style.styleSheet.cssText=css}else{style.appendChild(document.createTextNode(css))}};styleInject(\`${code}\`)` |
|||
const template = `console.warn("__INJECT__")` |
|||
|
|||
let viteConfig: ResolvedConfig |
|||
const css: string[] = [] |
|||
|
|||
export default function libInjectCss(): PluginOption { |
|||
return { |
|||
name: 'lib-inject-css', |
|||
|
|||
apply: 'build', |
|||
|
|||
configResolved(resolvedConfig: ResolvedConfig) { |
|||
viteConfig = resolvedConfig |
|||
}, |
|||
|
|||
transform(code: string, id: string) { |
|||
if (fileRegex.test(id)) { |
|||
css.push(code) |
|||
return { |
|||
code: '', |
|||
} |
|||
} |
|||
if ( |
|||
// @ts-ignore
|
|||
id.includes(viteConfig.build.lib.entry) |
|||
) { |
|||
return { |
|||
code: `${code} |
|||
${template}`,
|
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
|
|||
async writeBundle(_: any, bundle: any) { |
|||
for (const file of Object.entries(bundle)) { |
|||
const { root } = viteConfig |
|||
const outDir: string = viteConfig.build.outDir || 'dist' |
|||
const fileName: string = file[0] |
|||
const filePath: string = resolve(root, outDir, fileName) |
|||
|
|||
try { |
|||
let data: string = fs.readFileSync(filePath, { |
|||
encoding: 'utf8', |
|||
}) |
|||
|
|||
if (data.includes(template)) { |
|||
data = data.replace(template, injectCode(css.join('\n'))) |
|||
} |
|||
|
|||
fs.writeFileSync(filePath, data) |
|||
} catch (e) { |
|||
console.error(e) |
|||
} |
|||
} |
|||
}, |
|||
} |
|||
} |
@ -0,0 +1,25 @@ |
|||
{ |
|||
"name": "@princess-ui/build", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.ts", |
|||
"module": "index.ts", |
|||
"scripts": { |
|||
"build": "ts-node build.ts" |
|||
}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC", |
|||
"devDependencies": { |
|||
"@vitejs/plugin-vue": "^2.3.3", |
|||
"chalk": "4.1.0", |
|||
"fast-glob": "^3.2.11", |
|||
"fs-extra": "^10.1.0", |
|||
"lodash": "^4.17.21", |
|||
"rimraf": "^3.0.2", |
|||
"vite": "^2.9.9", |
|||
"vite-plugin-dts": "^1.1.1", |
|||
"vite-plugin-replace": "^0.1.1", |
|||
"vue": "^3.2.36" |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"allowSyntheticDefaultImports": true, |
|||
"esModuleInterop": true, |
|||
"module": "commonjs", |
|||
"lib": ["ES6", "DOM"], |
|||
"declaration": false, |
|||
"jsx": "preserve" |
|||
} |
|||
} |
@ -0,0 +1,39 @@ |
|||
import glob from "fast-glob" |
|||
import path from "path" |
|||
import _ from "lodash" |
|||
import fs from "fs-extra" |
|||
import {getOutput, getPkgs, rootDir} from "@princess-ui/share" |
|||
|
|||
export async function getComponents() { |
|||
const res = await glob("components/*/index.ts", { cwd: path.resolve(__dirname, "..") }) |
|||
const components = res.map(v => { |
|||
const name = path.parse(v.replace("components/", "")).dir |
|||
return name |
|||
}) |
|||
return components |
|||
} |
|||
|
|||
export async function generateComponents(components?: string[]) { |
|||
const componetnsStr: string[] = [`// 该文件为自动生成,请勿修改!!!`] |
|||
const newComp: string[] = [] |
|||
const typeArray: string[] = [] |
|||
let typeStr = `declare module 'vue' {
|
|||
export interface GlobalComponents { |
|||
__placeholder__ |
|||
} |
|||
} |
|||
export { }` |
|||
if (!components) { |
|||
components = await getComponents() |
|||
} |
|||
components.forEach(name => { |
|||
const n = "Ps" + _.upperFirst(_.kebabCase(name)) |
|||
componetnsStr.push(`import ${n} from "./${name}"`) |
|||
newComp.push(n) |
|||
typeArray.push(n + `: typeof import('./lib/${name}')['default']`) |
|||
}) |
|||
componetnsStr.push(`export { \n ${newComp.join(",\n ")} \n}`) |
|||
typeStr = typeStr.replace("__placeholder__", typeArray.join(',\n ')) |
|||
await fs.writeFile(getOutput("components.d.ts"), typeStr) |
|||
await fs.writeFile(getPkgs("components/components.ts"), componetnsStr.join("\n")) |
|||
} |
@ -0,0 +1,3 @@ |
|||
div{ |
|||
background-color: rebeccapurple; |
|||
} |
@ -0,0 +1,4 @@ |
|||
import button from "./index.vue" |
|||
button.name="ps-button" |
|||
|
|||
export default button |
@ -0,0 +1,30 @@ |
|||
<template> |
|||
<div> |
|||
sada{{ color }} |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { defineComponent, PropType } from "vue" |
|||
|
|||
export default defineComponent({ |
|||
props: { |
|||
color: { |
|||
type: String as PropType<'blue' | 'red'>, |
|||
required: true |
|||
}, |
|||
aaa: { |
|||
type: String as PropType<'dd' | 'red'>, |
|||
required: true |
|||
}, |
|||
}, |
|||
}) |
|||
</script> |
|||
|
|||
<style> |
|||
@import "./aaa.css"; |
|||
|
|||
div { |
|||
color: red; |
|||
} |
|||
</style> |
@ -0,0 +1,7 @@ |
|||
// 该文件为自动生成,请勿修改!!!
|
|||
import PsButton from "./button" |
|||
import PsFuck from "./fuck" |
|||
export { |
|||
PsButton, |
|||
PsFuck |
|||
} |
@ -0,0 +1,3 @@ |
|||
import fuck from "./index.vue" |
|||
fuck.name = "ps-fuck" |
|||
export default fuck |
@ -0,0 +1,20 @@ |
|||
<template> |
|||
<div> |
|||
sada{{ color }} |
|||
<ps-button color="red" aaa="red"></ps-button> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import PsButton from "@princess-ui/components/button" |
|||
|
|||
const props = defineProps<{ |
|||
color: 'aaa' |
|||
}>() |
|||
</script> |
|||
|
|||
<style> |
|||
div{ |
|||
color: green |
|||
} |
|||
</style> |
@ -0,0 +1,15 @@ |
|||
import * as componets from "./components" |
|||
|
|||
export * from "./components" |
|||
|
|||
function install(app) { |
|||
for (const key in componets) { |
|||
const component = componets[key] |
|||
app.component(component.name || "ps-" + key, component) |
|||
} |
|||
} |
|||
|
|||
export { install } |
|||
export default { |
|||
install |
|||
} |
@ -0,0 +1,14 @@ |
|||
{ |
|||
"name": "@princess-ui/components", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.ts", |
|||
"module": "index.ts", |
|||
"scripts": { |
|||
"start": "ts-node index.ts", |
|||
"dev": "ts-node ../../scripts/index.ts" |
|||
}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC" |
|||
} |
@ -0,0 +1,3 @@ |
|||
import ff from "@noderun/components" |
|||
|
|||
console.log(ff); |
@ -0,0 +1,12 @@ |
|||
{ |
|||
"name": "@princess-ui/playground", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.ts", |
|||
"scripts": { |
|||
|
|||
}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC" |
|||
} |
@ -0,0 +1,31 @@ |
|||
"use strict"; |
|||
var __importDefault = (this && this.__importDefault) || function (mod) { |
|||
return (mod && mod.__esModule) ? mod : { "default": mod }; |
|||
}; |
|||
exports.__esModule = true; |
|||
var fs_1 = __importDefault(require("fs")); |
|||
var path_1 = __importDefault(require("path")); |
|||
function existCss(compName) { |
|||
if (fs_1["default"].existsSync(path_1["default"].resolve(__dirname, "./lib/" + compName[0].toLowerCase() + compName.slice(1) + "/style.css"))) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
exports["default"] = (function (name, p) { |
|||
if (name === void 0) { name = "princess-ui"; } |
|||
if (p === void 0) { p = "/lib"; } |
|||
return { |
|||
type: "component", |
|||
resolve: function (componentName) { |
|||
if (componentName.startsWith("Ps")) { |
|||
return { |
|||
name: componentName, |
|||
from: name, |
|||
sideEffects: existCss(componentName.slice(2)) ? (function getSideEffects(compName) { |
|||
return "".concat(name).concat(p, "/").concat(compName[0].toLowerCase() + compName.slice(1), "/style.css"); |
|||
})(componentName.slice(2)) : undefined |
|||
}; |
|||
} |
|||
} |
|||
}; |
|||
}); |
@ -0,0 +1,27 @@ |
|||
import fs from "fs" |
|||
import path from "path" |
|||
import type { ComponentResolver, SideEffectsInfo } from "unplugin-vue-components/types" |
|||
|
|||
function existCss(compName) { |
|||
if (fs.existsSync(path.resolve(__dirname, "./lib/" + compName[0].toLowerCase() + compName.slice(1) + "/style.css"))) { |
|||
return true |
|||
} |
|||
return false |
|||
} |
|||
|
|||
export default (name: string = "princess-ui", p: string="/lib"): ComponentResolver => { |
|||
return { |
|||
type: "component", |
|||
resolve: (componentName: string) => { |
|||
if (componentName.startsWith("Ps")) { |
|||
return { |
|||
name: componentName, |
|||
from: name, |
|||
sideEffects: existCss(componentName.slice(2)) ? (function getSideEffects(compName: string): SideEffectsInfo { |
|||
return `${name}${p}/${compName[0].toLowerCase() + compName.slice(1)}/style.css` |
|||
})(componentName.slice(2)) : undefined, |
|||
} |
|||
} |
|||
}, |
|||
} |
|||
} |
@ -0,0 +1,7 @@ |
|||
declare module 'vue' { |
|||
export interface GlobalComponents { |
|||
PsButton: typeof import('./lib/button')['default'], |
|||
PsFuck: typeof import('./lib/fuck')['default'] |
|||
} |
|||
} |
|||
export { } |
@ -0,0 +1,22 @@ |
|||
{ |
|||
"name": "princess-ui", |
|||
"version": "0.0.4", |
|||
"description": "a vue3 ui, just for personal use", |
|||
"scripts": { |
|||
"build": "tsc ./PrincessResolver.ts --skipLibCheck --esModuleInterop" |
|||
}, |
|||
"files": [ |
|||
"lib", |
|||
"components.d.ts", |
|||
"PrincessResolver.ts", |
|||
"PrincessResolver.js" |
|||
], |
|||
"main": "lib/index.js", |
|||
"types": "lib/index.d.ts", |
|||
"keywords": [], |
|||
"author": "noderun", |
|||
"repository": { |
|||
"url": "http://git.xieyaxin.top/Oxygen/princess-ui" |
|||
}, |
|||
"license": "ISC" |
|||
} |
@ -0,0 +1,3 @@ |
|||
{ |
|||
"extends": "../../tsconfig.json" |
|||
} |
@ -0,0 +1,14 @@ |
|||
import path from "path" |
|||
|
|||
export const rootDir = path.resolve(__dirname, "../../") |
|||
|
|||
|
|||
export function getOutput(...p: string[]) { |
|||
return path.resolve(rootDir, "packages/princess-ui",...p) |
|||
} |
|||
export function getPath(...p: string[]) { |
|||
return path.resolve(rootDir, ...p) |
|||
} |
|||
export function getPkgs(...p: string[]) { |
|||
return path.resolve(rootDir, "packages", ...p) |
|||
} |
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "@princess-ui/share", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.ts", |
|||
"module": "index.ts", |
|||
"scripts": {}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC" |
|||
} |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"name": "@princess-ui/theme-chalk", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.ts", |
|||
"module": "index.ts", |
|||
"scripts": { |
|||
"dev": "ts-node ../../scripts/index.ts" |
|||
}, |
|||
"keywords": [], |
|||
"author": "", |
|||
"license": "ISC" |
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,5 @@ |
|||
packages: |
|||
# all packages in subdirs of packages/ and components/ |
|||
- 'packages/*' |
|||
# exclude packages that are inside test directories |
|||
- '!**/test/**' |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"allowJs": true, |
|||
"module": "ESNext", |
|||
"target": "ES2018", |
|||
"noImplicitAny": false, |
|||
"declaration": true, |
|||
"sourceMap": true, |
|||
"moduleResolution": "Node", |
|||
"lib": ["ES2018", "DOM", "DOM.Iterable"], |
|||
"allowSyntheticDefaultImports": true |
|||
}, |
|||
"include": ["packages", "typings"], |
|||
"exclude": [ |
|||
"node_modules", |
|||
"**/dist", |
|||
"**/__tests__/**/*", |
|||
"**/test/**", |
|||
"**/tests/**" |
|||
] |
|||
} |
@ -0,0 +1 @@ |
|||
declare const __DEV__: boolean; |
Loading…
Reference in new issue