@_tc/template-core 0.2.8 → 0.2.10-bate.1

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.
@@ -1 +1 @@
1
- const e=require(`../../packages/common/string/index.js`);var t=e=>JSON.stringify(e).replace(/</g,`\\u003c`).replace(/>/g,`\\u003e`).replace(/&/g,`\\u0026`).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`),n=(n=>class{async renderPage(r,i){let a=r.path;if(n.extends.localCacheHtmlEtag.keepFreshFEBuildKey(),a.includes(`${n.options.apiPrefix}/`))await i();else{n.extends.logger.log(` - render page: `+r.params.page);try{let i=r.query.projk;Array.isArray(i)&&(i=e.joinStr(...i));let a={projKey:i??``,name:n.options?.name??``,env:n.envs.get(),FEBasePage:t(`${n.options.pageBasePage}`),basePath:t(`${n.options.pageBasePage}${r.params.page}`),projKeyJson:t(String(r.query.projk??``)),signKey:t(n.config.signKey),options:t(n.options)},o=n.extends.renderView(`${r.params.page}.entry.tpl`,r,a),s=e.joinStr(a.basePath,a.name,a.env,a.projKey);if(!n.extends.localCacheHtmlEtag.hasEtag(s)){let e=n.extends.crypto.hmacSign(o);n.extends.localCacheHtmlEtag.setEtag(s,e)}let c=n.extends.localCacheHtmlEtag.getEtag(s);if(c||console.log(`---- etag 缓存异常 请检查服务 ----`),r.etag=c??Date.now()+``,r.set(`Cache-Control`,`public, max-age=${n.config.resourceCacheTimeMs??300*1e3}, immutable`),r.fresh){r.status=304;return}}catch(e){console.log(`-------------- render view error --------------`),console.log(e),n.extends.generateErrorMessage(`template not found`,{status:404,showError:!0,code:0})}}}});module.exports=n;
1
+ const e=require(`../../packages/common/string/index.js`);var t=e=>JSON.stringify(e).replace(/</g,`\\u003c`).replace(/>/g,`\\u003e`).replace(/&/g,`\\u0026`).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`),n=(n=>class{async renderPage(r,i){let a=r.path;if(n.extends.localCacheHtmlEtag.keepFreshFEBuildKey(),a.includes(`${n.options.apiPrefix}/`))await i();else{n.extends.logger.log(` - render page: `+r.params.page);try{let i=r.query.projk;Array.isArray(i)&&(i=e.joinStr(...i));let a={projKey:i??``,name:n.options?.name??``,env:n.envs.get(),FEBasePage:t(`${n.options.pageBasePage}`),basePath:t(`${n.options.pageBasePage}${r.params.page}`),projKeyJson:t(String(r.query.projk??``)),signKey:t(n.config.signKey),options:t(n.options)},o=n.extends.renderView(`${r.params.page}.entry.tpl`,r,a),s=e.joinStr(a.basePath,a.name,a.env,a.projKey);if(!n.extends.localCacheHtmlEtag.hasEtag(s)){let e=n.extends.crypto.hmacSign(o);n.extends.localCacheHtmlEtag.setEtag(s,e)}let c=n.extends.localCacheHtmlEtag.getEtag(s);if(c||console.log(`---- etag 缓存异常 请检查服务 ----`),r.etag=c??Date.now()+``,r.set(`Cache-Control`,`public, max-age=${(n.config.resourceCacheTimeMs??300*1e3)/1e3}, immutable`),r.fresh){r.status=304;return}}catch(e){console.log(`-------------- render view error --------------`),console.log(e),n.extends.generateErrorMessage(`template not found`,{status:404,showError:!0,code:0})}}}});module.exports=n;
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.js`),t=require(`../packages/common/log/index.js`),n=require(`../packages/utils/path.js`);require(`../packages/utils/index.js`);const r=require(`./state.js`);let i=require(`fs`),a=require(`path`);a=e.__toESM(a);let o=require(`glob`);o=e.__toESM(o);let s=require(`vite`),c=require(`@tailwindcss/vite`);c=e.__toESM(c);let l=require(`module`),u=require(`url`);var d=typeof __filename==`string`?__filename:(0,u.fileURLToPath)({}.url),f=a.default.dirname(d),p=process.cwd(),m=(0,l.createRequire)(d),h=a.default.resolve(f,`../../`),g=a.default.resolve(f,`../`),_=a.default.resolve(h,`./fe/frontend`),v=a.default.resolve(p,`.`),y=a.default.resolve(v,`./frontend`),b=e=>a.default.dirname(m.resolve(`${e}/package.json`)),x=a.default.join(v,`.tc-entry-html`),S=`<!-- {{InsertScript}} -->`,C={head:`<!-- TC_HEAD_SLOT -->`,bodyBeforeRoot:`<!-- TC_BODY_BEFORE_ROOT_SLOT -->`,bodyAfterRoot:`<!-- TC_BODY_AFTER_ROOT_SLOT -->`},w=[`head`,`body-before-root`,`body-after-root`],T=()=>({head:``,"body-before-root":``,"body-after-root":``}),E=e=>e.trim().replace(/<!--(?!\s*(?:tc-slot:|\/tc-slot:))[\s\S]*?-->/g,``).replace(/>\s+</g,`><`),D=e=>{let t=[],n=e.replace(/<(script|style|textarea|pre)\b[\s\S]*?<\/\1>/gi,e=>{let n=`__TC_HTML_PRESERVED_${t.length}__`;return t.push(e),n}).replace(/<!--(?!\s*(?:tc-slot:|\/tc-slot:|\{\{InsertScript\}\}|TC_))[\s\S]*?-->/g,``).replace(/>\s+</g,`><`).trim();return t.reduce((e,t,n)=>e.replace(`__TC_HTML_PRESERVED_${n}__`,t),n)},O=e=>e.split(a.default.sep).join(`/`),k=e=>{let t=O(e);return t.startsWith(`.`)||t.startsWith(`/`)?t:`./${t}`},A=e=>/<html[\s>]/i.test(e)&&e.includes(`window['_basePath']`)&&/<div\s+id=["']root["']\s*><\/div>/i.test(e),j=e=>{let n=T(),r=(0,i.readFileSync)(e,`utf-8`),a=/<!--\s*tc-slot:([\w-]+)\s*-->([\s\S]*?)<!--\s*\/tc-slot:\1\s*-->/g,o=!1,s=r;if(r.replace(a,(t,r,i)=>{if(o=!0,!w.includes(r))throw Error(`Invalid html slot "${r}" in ${e}. Allowed slots: ${w.join(`, `)}.`);return n[r]+=i.trim()?`${i}\n`:``,s=s.replace(t,``),t}),s.trim()){if(A(r))return t.logYellow(`ignored legacy generated entry html: ${e}`),T();throw Error([`Invalid custom entry html: ${e}.`,`Custom entry html can only contain tc-slot blocks, for example:`,`<!-- tc-slot:head -->`,`<meta name="description" content="..." />`,`<!-- /tc-slot:head -->`].join(`
2
2
  `))}return o&&t.logYellow(`using custom entry html slots: ${e}`),n},M=(e,t)=>{let r=a.default.basename(e),s=[a.default.join(e,`${t}.html`),a.default.join(e,`${r}.html`)].find(e=>(0,i.existsSync)(e));if(s)return s;if(o.sync(n.resolve(e,`*.html`)).length)throw Error([`Entry html filename is not supported in ${e}.`,`Use ${t}.html or ${r}.html as a tc-slot file.`].join(`
3
- `))},N=(e,t)=>e.replace(C.head,E(t.head)).replace(C.bodyBeforeRoot,E(t[`body-before-root`])).replace(C.bodyAfterRoot,E(t[`body-after-root`])),P=(e=new Date)=>{let t=(e,t=2)=>e.toString().padStart(t,`0`);return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate()),t(e.getHours())].join(`/`)+`:${t(e.getMinutes())}:${t(e.getSeconds())}:${t(e.getMilliseconds(),3)}`},F=(e,t,n,r)=>{let o=a.default.join(x,`${n}.html`),s=k(a.default.relative(a.default.dirname(o),t));return(0,i.writeFileSync)(o,N(e,r).replace(S,`<script type="module" src="${s}"><\/script>`)),o};function I(){t.logWhite(`frameFEPath: `+_),t.logWhite(`runFEPath: `+y);let e=[_,y].reduce((e,t)=>{let r=[`js`,`jsx`,`ts`,`tsx`].map(e=>n.resolve(t,`/**`,`/*.`+e)),i=o.sync(r).filter(e=>e.includes(`.entry.`)).filter(e=>!e.includes(`.d.ts`));return[...e,...i]},[]),r={};if(!e.length)return r;(0,i.rmSync)(x,{recursive:!0,force:!0}),(0,i.mkdirSync)(x,{recursive:!0});let s=(0,i.readFileSync)(a.default.resolve(g,`./app/view/entry.tpl`),`utf-8`);for(let t=0;t<e.length;t++){let n=e[t],i=a.default.resolve(n,`../`),o=M(i,a.default.basename(n).replace(/\.entry\.[^.]+$/,``)),c=o?a.default.basename(o,`.html`):i.split(a.default.sep).at(-1);r[c]=F(s,n,c,o?j(o):T())}return r}function L(){let e=r.buildFESharedState.options.output??`frame`;return e!==`frame`&&t.logRed(`Please pay attention to the build output.`),e===`run`?a.default.join(v,`./app/public/dist`):typeof e==`function`?e():a.default.join(g,`./app/public/dist`)}var R=async e=>{let n=(await import(`chokidar`)).watch(y,{ignored:/(^|[\/\\])\../,persistent:!0,ignoreInitial:!0}),r=!1;n.on(`change`,async n=>{if(!r){r=!0,t.logYellow(`changed: ${n}`);try{await e?.()}catch(e){t.logRed(e)}finally{r=!1}}}),t.logYellow(`watching ${y}/...`)};function z(){return{name:`flatten-html`,apply:`build`,closeBundle(){let e=L(),t=P();(0,i.writeFileSync)(n.resolve(e,`./FEBuildKey`),t)}}}function B(e=`.html`){let n=[...new Set(Array.isArray(e)?e:[e])];return{name:`flatten-html`,apply:`build`,closeBundle(){let e=L();if(!(0,i.existsSync)(e))return;let s=r.buildFESharedState.options.minifyHtml??!1,c=o.sync(`**/*.html`,{cwd:e,dot:!0});for(let t of c){let r=a.default.join(e,t),o=(0,i.readFileSync)(r,`utf-8`),c=s?D(o):o,l=a.default.basename(t,`.html`),u=`.entry`;l.indexOf(u)===-1&&(l+=u);for(let t of n){let n=l+t,o=a.default.join(e,n);r===o?s&&(0,i.writeFileSync)(o,c):(0,i.writeFileSync)(o,c)}n.some(t=>r===a.default.join(e,l+t))||(0,i.unlinkSync)(r)}let l=[...new Set(c.map(e=>a.default.dirname(e)))].sort().reverse(),u=e=>{if(!((0,i.existsSync)(e)?(0,i.readdirSync)(e):[1]).length){(0,i.rmdirSync)(e);let t=e.split(a.default.sep).slice(0,-1);t.length&&u(t.join(a.default.sep))}};for(let t of l)t&&t!==`.`&&u(a.default.join(e,t));let d=n.flatMap(t=>o.sync(`**/*`+t,{cwd:e,dot:!0}));for(let e of d)t.logYellow(`final file path -----> `+e)}}}function V(e){let t=[``,`.ts`,`.tsx`,`.js`,`.jsx`];return e.reduce((e,[n,r,o=y,s=`./defaultAlias`])=>{let c=t.map(e=>a.default.resolve(o,r+e)).find(e=>(0,i.existsSync)(e)),l=a.default.resolve(f,s);return c&&(l=c),e[n]=l,e},{})}var H=(...e)=>new RegExp(e.join(`[\\/]`)),U=e=>`_${e}_tcC`,W=async(e,n)=>{try{await(0,s.build)({configFile:!1,base:`/dist`,plugins:[(await import(`@vitejs/plugin-react`)).default(),B([`.tpl`]),z(),(0,c.default)()],build:{outDir:L(),emptyOutDir:!0,sourcemap:n===`dev`?`inline`:`hidden`,rolldownOptions:{input:e,output:{codeSplitting:{groups:[{name:U(`__nm`),test:H(`node_modules`),maxSize:5e5,minShareCount:2,priority:1},{name:U(`r`),test:H(`node_modules`,`react`),minShareCount:2,maxSize:5e5,priority:5},{name:U(`r-d`),test:H(`node_modules`,`react-dom`),minShareCount:2,maxSize:2e5,priority:10},{name:U(`r-r-d`),test:H(`node_modules`,`react-router-dom`),minShareCount:2,maxSize:5e5,priority:10},{name:U(`ajv`),test:H(`node_modules`,`ajv`),minShareCount:2,maxSize:2e5,priority:10},{name:U(`ui-lib`),test:H(`components`),minShareCount:2,maxSize:2e5,priority:5},{name:U(`ui-f-lib`),test:H(`components`,`.*?[Ff]orm.*?`),minShareCount:2,maxSize:5e4,priority:10}]}}}},resolve:{alias:{react:b(`react`),"react-dom":b(`react-dom`),"@tc/ui-react/hooks":a.default.resolve(f,`../../fe/packages/react/hooks/`),"@tc/ui-react":a.default.resolve(f,`../../fe/packages/react/ui/`),...V([[`@tc/scalability/SchemaForm/frameData`,`./extended/SchemaForm/data`,_],[`@tc/scalability/SchemaForm/data`,`./extended/SchemaForm/data`],[`@tc/scalability/SchemaPage/CallCom/data`,`./extended/SchemaPage/CallCom/data`],[`@tc/scalability/SchemaPage/SchemaTable/data`,`./extended/SchemaPage/SchemaTable/data`],[`@tc/scalability/dash/customRoutes`,`./extended/dash/customRoutes`],[`@tc/scalability/dash/init`,`./extended/dash/init`],[`@tc/scalability/dash/components`,`./extended/dash/components`],[`@tc/scalability/dash/routeGuard`,`./extended/dash/routeGuard`,void 0,`./defaultRouteGuard`]])}}}),t.logJoinColorized(t.colorize(`builded`,`green`),t.colorize(` -> `,`white`),t.colorize(`time: `,`cyan`),t.colorize(new Date,`pink`))}catch(e){if(t.logRed(e),n!==`dev`)throw e}};exports.VBuildFE=W,exports.entries=I,exports.generateBuildKeyPlugin=z,exports.outDir=L,exports.watchFiles=R;
3
+ `))},N=(e,t)=>e.replace(C.head,E(t.head)).replace(C.bodyBeforeRoot,E(t[`body-before-root`])).replace(C.bodyAfterRoot,E(t[`body-after-root`])),P=(e=new Date)=>{let t=(e,t=2)=>e.toString().padStart(t,`0`);return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate()),t(e.getHours())].join(`/`)+`:${t(e.getMinutes())}:${t(e.getSeconds())}:${t(e.getMilliseconds(),3)}`},F=(e,t,n,r)=>{let o=a.default.join(x,`${n}.html`),s=k(a.default.relative(a.default.dirname(o),t));return(0,i.writeFileSync)(o,N(e,r).replace(S,`<script type="module" src="${s}"><\/script>`)),o};function I(){t.logWhite(`frameFEPath: `+_),t.logWhite(`runFEPath: `+y);let e=[_,y].reduce((e,t)=>{let r=[`js`,`jsx`,`ts`,`tsx`].map(e=>n.resolve(t,`/**`,`/*.`+e)),i=o.sync(r).filter(e=>e.includes(`.entry.`)).filter(e=>!e.includes(`.d.ts`));return[...e,...i]},[]),r={};if(!e.length)return r;(0,i.rmSync)(x,{recursive:!0,force:!0}),(0,i.mkdirSync)(x,{recursive:!0});let s=(0,i.readFileSync)(a.default.resolve(g,`./app/view/entry.tpl`),`utf-8`);for(let t=0;t<e.length;t++){let n=e[t],i=a.default.resolve(n,`../`),o=M(i,a.default.basename(n).replace(/\.entry\.[^.]+$/,``)),c=o?a.default.basename(o,`.html`):i.split(a.default.sep).at(-1);r[c]=F(s,n,c,o?j(o):T())}return r}function L(){let e=r.buildFESharedState.options.output??`frame`;return e!==`frame`&&t.logRed(`Please pay attention to the build output.`),e===`run`?a.default.join(v,`./app/public/dist`):typeof e==`function`?e():a.default.join(g,`./app/public/dist`)}var R=async e=>{let n=(await import(`chokidar`)).watch(y,{ignored:/(^|[\/\\])\../,persistent:!0,ignoreInitial:!0}),r=!1;n.on(`change`,async n=>{if(!r){r=!0,t.logYellow(`changed: ${n}`);try{await e?.()}catch(e){t.logRed(e)}finally{r=!1}}}),t.logYellow(`watching ${y}/...`)};function z(){return{name:`flatten-html`,apply:`build`,closeBundle(){let e=L(),t=P();(0,i.writeFileSync)(n.resolve(e,`./FEBuildKey`),t)}}}function B(e=`.html`){let n=[...new Set(Array.isArray(e)?e:[e])];return{name:`flatten-html`,apply:`build`,closeBundle(){let e=L();if(!(0,i.existsSync)(e))return;let s=r.buildFESharedState.options.minifyHtml??!1,c=o.sync(`**/*.html`,{cwd:e,dot:!0});for(let t of c){let r=a.default.join(e,t),o=(0,i.readFileSync)(r,`utf-8`),c=s?D(o):o,l=a.default.basename(t,`.html`),u=`.entry`;l.indexOf(u)===-1&&(l+=u);for(let t of n){let n=l+t,o=a.default.join(e,n);r===o?s&&(0,i.writeFileSync)(o,c):(0,i.writeFileSync)(o,c)}n.some(t=>r===a.default.join(e,l+t))||(0,i.unlinkSync)(r)}let l=[...new Set(c.map(e=>a.default.dirname(e)))].sort().reverse(),u=e=>{if(!((0,i.existsSync)(e)?(0,i.readdirSync)(e):[1]).length){(0,i.rmdirSync)(e);let t=e.split(a.default.sep).slice(0,-1);t.length&&u(t.join(a.default.sep))}};for(let t of l)t&&t!==`.`&&u(a.default.join(e,t));let d=n.flatMap(t=>o.sync(`**/*`+t,{cwd:e,dot:!0}));for(let e of d)t.logYellow(`final file path -----> `+e)}}}function V(e){let t=[``,`.ts`,`.tsx`,`.js`,`.jsx`];return e.reduce((e,[n,r,o=y,s=`./defaultAlias`])=>{let c=t.map(e=>a.default.resolve(o,r+e)).find(e=>(0,i.existsSync)(e)),l=a.default.resolve(f,s);return c&&(l=c),e[n]=l,e},{})}var H=e=>`_${e}_tcC`,U=e=>O(e),W=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),G=e=>U(e).includes(`/node_modules/`),K=(e,t)=>{let n=U(e),r=t.split(`/`).map(W).join(`/`);return RegExp(`/node_modules/(?:\\.pnpm/[^/]+/node_modules/)?${r}(?:/|$)`).test(n)},q=(e,t)=>t.some(t=>K(e,t)),J=(e,...t)=>{let n=U(e),r=t.map(W).join(`/`);return RegExp(`(?:^|/)${r}(?:/|$)`).test(n)},Y=(e,t)=>t.some(t=>J(e,...t)),X=async(e,n)=>{try{await(0,s.build)({configFile:!1,base:`/dist`,plugins:[(await import(`@vitejs/plugin-react`)).default(),B([`.tpl`]),z(),(0,c.default)()],build:{outDir:L(),emptyOutDir:!0,sourcemap:n===`dev`?`inline`:`hidden`,rolldownOptions:{input:e,output:{codeSplitting:{groups:[{name:H(`react-dom`),test:e=>K(e,`react-dom`),maxSize:25e4,priority:100},{name:H(`react-router`),test:e=>q(e,[`react-router`,`react-router-dom`]),maxSize:25e4,priority:95},{name:H(`react`),test:e=>K(e,`react`),maxSize:2e5,priority:90},{name:H(`form-validator`),test:e=>q(e,[`ajv`,`rc-field-form`]),maxSize:25e4,priority:80},{name:H(`ui-vendor`),test:e=>q(e,[`date-fns`,`lucide-react`,`xlsx`]),maxSize:35e4,priority:70},{name:H(`state-utils`),test:e=>q(e,[`clsx`,`immer`,`tailwind-merge`,`zustand`]),maxSize:18e4,priority:60},{name:H(`tc-ui`),test:e=>Y(e,[[`packages`,`react`,`ui`],[`fe`,`packages`,`react`,`ui`]]),maxSize:25e4,minShareCount:2,priority:50},{name:H(`tc-hooks`),test:e=>Y(e,[[`packages`,`react`,`hooks`],[`fe`,`packages`,`react`,`hooks`]]),maxSize:12e4,minShareCount:2,priority:45},{name:H(`tc-common`),test:e=>Y(e,[[`packages`,`common`],[`fe`,`packages`,`common`]]),maxSize:16e4,minShareCount:2,priority:40},{name:H(`tc-schema-page`),test:e=>Y(e,[[`frontend`,`src`,`defaultPages`,`SchemaPage`],[`fe`,`frontend`,`src`,`defaultPages`,`SchemaPage`]]),maxSize:2e5,minShareCount:2,priority:35},{name:H(`tc-pages`),test:e=>Y(e,[[`frontend`,`src`,`defaultPages`],[`fe`,`frontend`,`src`,`defaultPages`]]),maxSize:18e4,minShareCount:2,priority:30},{name:H(`vendor`),test:G,maxSize:5e5,minShareCount:2,priority:1}]}}}},resolve:{alias:{react:b(`react`),"react-dom":b(`react-dom`),"@tc/ui-react/hooks":a.default.resolve(f,`../../fe/packages/react/hooks/`),"@tc/ui-react":a.default.resolve(f,`../../fe/packages/react/ui/`),...V([[`@tc/scalability/SchemaForm/frameData`,`./extended/SchemaForm/data`,_],[`@tc/scalability/SchemaForm/data`,`./extended/SchemaForm/data`],[`@tc/scalability/SchemaPage/CallCom/data`,`./extended/SchemaPage/CallCom/data`],[`@tc/scalability/SchemaPage/SchemaTable/data`,`./extended/SchemaPage/SchemaTable/data`],[`@tc/scalability/dash/customRoutes`,`./extended/dash/customRoutes`],[`@tc/scalability/dash/init`,`./extended/dash/init`],[`@tc/scalability/dash/components`,`./extended/dash/components`],[`@tc/scalability/dash/routeGuard`,`./extended/dash/routeGuard`,void 0,`./defaultRouteGuard`]])}}}),t.logJoinColorized(t.colorize(`builded`,`green`),t.colorize(` -> `,`white`),t.colorize(`time: `,`cyan`),t.colorize(new Date,`pink`))}catch(e){if(t.logRed(e),n!==`dev`)throw e}};exports.VBuildFE=X,exports.entries=I,exports.generateBuildKeyPlugin=z,exports.outDir=L,exports.watchFiles=R;
@@ -24,7 +24,7 @@ var t = (e) => JSON.stringify(e).replace(/</g, "\\u003c").replace(/>/g, "\\u003e
24
24
  n.extends.localCacheHtmlEtag.setEtag(s, e);
25
25
  }
26
26
  let c = n.extends.localCacheHtmlEtag.getEtag(s);
27
- if (c || console.log("---- etag 缓存异常 请检查服务 ----"), r.etag = c ?? Date.now() + "", r.set("Cache-Control", `public, max-age=${n.config.resourceCacheTimeMs ?? 300 * 1e3}, immutable`), r.fresh) {
27
+ if (c || console.log("---- etag 缓存异常 请检查服务 ----"), r.etag = c ?? Date.now() + "", r.set("Cache-Control", `public, max-age=${(n.config.resourceCacheTimeMs ?? 300 * 1e3) / 1e3}, immutable`), r.fresh) {
28
28
  r.status = 304;
29
29
  return;
30
30
  }
@@ -5,39 +5,39 @@ import { buildFESharedState as o } from "./state.js";
5
5
  import { existsSync as s, mkdirSync as c, readFileSync as l, readdirSync as u, rmSync as d, rmdirSync as f, unlinkSync as p, writeFileSync as m } from "fs";
6
6
  import h from "path";
7
7
  import * as g from "glob";
8
- import { build as _ } from "vite";
9
- import v from "@tailwindcss/vite";
10
- import { createRequire as y } from "module";
11
- import { fileURLToPath as b } from "url";
8
+ import { build as ee } from "vite";
9
+ import te from "@tailwindcss/vite";
10
+ import { createRequire as _ } from "module";
11
+ import { fileURLToPath as v } from "url";
12
12
  //#region bundler/utils.ts
13
- var x = typeof __filename == "string" ? __filename : b(import.meta.url), S = h.dirname(x), C = process.cwd(), w = y(x), T = h.resolve(S, "../../"), E = h.resolve(S, "../"), D = h.resolve(T, "./fe/frontend"), O = h.resolve(C, "."), k = h.resolve(O, "./frontend"), A = (e) => h.dirname(w.resolve(`${e}/package.json`)), j = h.join(O, ".tc-entry-html"), M = "<!-- {{InsertScript}} -->", N = {
13
+ var y = typeof __filename == "string" ? __filename : v(import.meta.url), b = h.dirname(y), x = process.cwd(), ne = _(y), re = h.resolve(b, "../../"), S = h.resolve(b, "../"), C = h.resolve(re, "./fe/frontend"), w = h.resolve(x, "."), T = h.resolve(w, "./frontend"), E = (e) => h.dirname(ne.resolve(`${e}/package.json`)), D = h.join(w, ".tc-entry-html"), O = "<!-- {{InsertScript}} -->", k = {
14
14
  head: "<!-- TC_HEAD_SLOT -->",
15
15
  bodyBeforeRoot: "<!-- TC_BODY_BEFORE_ROOT_SLOT -->",
16
16
  bodyAfterRoot: "<!-- TC_BODY_AFTER_ROOT_SLOT -->"
17
- }, P = [
17
+ }, A = [
18
18
  "head",
19
19
  "body-before-root",
20
20
  "body-after-root"
21
- ], F = () => ({
21
+ ], j = () => ({
22
22
  head: "",
23
23
  "body-before-root": "",
24
24
  "body-after-root": ""
25
- }), I = (e) => e.trim().replace(/<!--(?!\s*(?:tc-slot:|\/tc-slot:))[\s\S]*?-->/g, "").replace(/>\s+</g, "><"), L = (e) => {
25
+ }), M = (e) => e.trim().replace(/<!--(?!\s*(?:tc-slot:|\/tc-slot:))[\s\S]*?-->/g, "").replace(/>\s+</g, "><"), N = (e) => {
26
26
  let t = [], n = e.replace(/<(script|style|textarea|pre)\b[\s\S]*?<\/\1>/gi, (e) => {
27
27
  let n = `__TC_HTML_PRESERVED_${t.length}__`;
28
28
  return t.push(e), n;
29
29
  }).replace(/<!--(?!\s*(?:tc-slot:|\/tc-slot:|\{\{InsertScript\}\}|TC_))[\s\S]*?-->/g, "").replace(/>\s+</g, "><").trim();
30
30
  return t.reduce((e, t, n) => e.replace(`__TC_HTML_PRESERVED_${n}__`, t), n);
31
- }, R = (e) => e.split(h.sep).join("/"), z = (e) => {
32
- let t = R(e);
31
+ }, P = (e) => e.split(h.sep).join("/"), F = (e) => {
32
+ let t = P(e);
33
33
  return t.startsWith(".") || t.startsWith("/") ? t : `./${t}`;
34
- }, B = (e) => /<html[\s>]/i.test(e) && e.includes("window['_basePath']") && /<div\s+id=["']root["']\s*><\/div>/i.test(e), V = (e) => {
35
- let t = F(), n = l(e, "utf-8"), r = /<!--\s*tc-slot:([\w-]+)\s*-->([\s\S]*?)<!--\s*\/tc-slot:\1\s*-->/g, a = !1, o = n;
34
+ }, I = (e) => /<html[\s>]/i.test(e) && e.includes("window['_basePath']") && /<div\s+id=["']root["']\s*><\/div>/i.test(e), L = (e) => {
35
+ let t = j(), n = l(e, "utf-8"), r = /<!--\s*tc-slot:([\w-]+)\s*-->([\s\S]*?)<!--\s*\/tc-slot:\1\s*-->/g, a = !1, o = n;
36
36
  if (n.replace(r, (n, r, i) => {
37
- if (a = !0, !P.includes(r)) throw Error(`Invalid html slot "${r}" in ${e}. Allowed slots: ${P.join(", ")}.`);
37
+ if (a = !0, !A.includes(r)) throw Error(`Invalid html slot "${r}" in ${e}. Allowed slots: ${A.join(", ")}.`);
38
38
  return t[r] += i.trim() ? `${i}\n` : "", o = o.replace(n, ""), n;
39
39
  }), o.trim()) {
40
- if (B(n)) return i(`ignored legacy generated entry html: ${e}`), F();
40
+ if (I(n)) return i(`ignored legacy generated entry html: ${e}`), j();
41
41
  throw Error([
42
42
  `Invalid custom entry html: ${e}.`,
43
43
  "Custom entry html can only contain tc-slot blocks, for example:",
@@ -47,11 +47,11 @@ var x = typeof __filename == "string" ? __filename : b(import.meta.url), S = h.d
47
47
  ].join("\n"));
48
48
  }
49
49
  return a && i(`using custom entry html slots: ${e}`), t;
50
- }, H = (e, t) => {
50
+ }, R = (e, t) => {
51
51
  let n = h.basename(e), r = [h.join(e, `${t}.html`), h.join(e, `${n}.html`)].find((e) => s(e));
52
52
  if (r) return r;
53
53
  if (g.sync(a(e, "*.html")).length) throw Error([`Entry html filename is not supported in ${e}.`, `Use ${t}.html or ${n}.html as a tc-slot file.`].join("\n"));
54
- }, U = (e, t) => e.replace(N.head, I(t.head)).replace(N.bodyBeforeRoot, I(t["body-before-root"])).replace(N.bodyAfterRoot, I(t["body-after-root"])), W = (e = /* @__PURE__ */ new Date()) => {
54
+ }, z = (e, t) => e.replace(k.head, M(t.head)).replace(k.bodyBeforeRoot, M(t["body-before-root"])).replace(k.bodyAfterRoot, M(t["body-after-root"])), B = (e = /* @__PURE__ */ new Date()) => {
55
55
  let t = (e, t = 2) => e.toString().padStart(t, "0");
56
56
  return [
57
57
  e.getFullYear(),
@@ -59,13 +59,13 @@ var x = typeof __filename == "string" ? __filename : b(import.meta.url), S = h.d
59
59
  t(e.getDate()),
60
60
  t(e.getHours())
61
61
  ].join("/") + `:${t(e.getMinutes())}:${t(e.getSeconds())}:${t(e.getMilliseconds(), 3)}`;
62
- }, G = (e, t, n, r) => {
63
- let i = h.join(j, `${n}.html`), a = z(h.relative(h.dirname(i), t));
64
- return m(i, U(e, r).replace(M, `<script type="module" src="${a}"><\/script>`)), i;
62
+ }, V = (e, t, n, r) => {
63
+ let i = h.join(D, `${n}.html`), a = F(h.relative(h.dirname(i), t));
64
+ return m(i, z(e, r).replace(O, `<script type="module" src="${a}"><\/script>`)), i;
65
65
  };
66
- function K() {
67
- r("frameFEPath: " + D), r("runFEPath: " + k);
68
- let e = [D, k].reduce((e, t) => {
66
+ function H() {
67
+ r("frameFEPath: " + C), r("runFEPath: " + T);
68
+ let e = [C, T].reduce((e, t) => {
69
69
  let n = [
70
70
  "js",
71
71
  "jsx",
@@ -75,23 +75,23 @@ function K() {
75
75
  return [...e, ...r];
76
76
  }, []), t = {};
77
77
  if (!e.length) return t;
78
- d(j, {
78
+ d(D, {
79
79
  recursive: !0,
80
80
  force: !0
81
- }), c(j, { recursive: !0 });
82
- let n = l(h.resolve(E, "./app/view/entry.tpl"), "utf-8");
81
+ }), c(D, { recursive: !0 });
82
+ let n = l(h.resolve(S, "./app/view/entry.tpl"), "utf-8");
83
83
  for (let r = 0; r < e.length; r++) {
84
- let i = e[r], a = h.resolve(i, "../"), o = H(a, h.basename(i).replace(/\.entry\.[^.]+$/, "")), s = o ? h.basename(o, ".html") : a.split(h.sep).at(-1);
85
- t[s] = G(n, i, s, o ? V(o) : F());
84
+ let i = e[r], a = h.resolve(i, "../"), o = R(a, h.basename(i).replace(/\.entry\.[^.]+$/, "")), s = o ? h.basename(o, ".html") : a.split(h.sep).at(-1);
85
+ t[s] = V(n, i, s, o ? L(o) : j());
86
86
  }
87
87
  return t;
88
88
  }
89
- function q() {
89
+ function U() {
90
90
  let e = o.options.output ?? "frame";
91
- return e !== "frame" && n("Please pay attention to the build output."), e === "run" ? h.join(O, "./app/public/dist") : typeof e == "function" ? e() : h.join(E, "./app/public/dist");
91
+ return e !== "frame" && n("Please pay attention to the build output."), e === "run" ? h.join(w, "./app/public/dist") : typeof e == "function" ? e() : h.join(S, "./app/public/dist");
92
92
  }
93
- var J = async (e) => {
94
- let t = (await import("chokidar")).watch(k, {
93
+ var W = async (e) => {
94
+ let t = (await import("chokidar")).watch(T, {
95
95
  ignored: /(^|[\/\\])\../,
96
96
  persistent: !0,
97
97
  ignoreInitial: !0
@@ -107,32 +107,32 @@ var J = async (e) => {
107
107
  r = !1;
108
108
  }
109
109
  }
110
- }), i(`watching ${k}/...`);
110
+ }), i(`watching ${T}/...`);
111
111
  };
112
- function Y() {
112
+ function G() {
113
113
  return {
114
114
  name: "flatten-html",
115
115
  apply: "build",
116
116
  closeBundle() {
117
- let e = q(), t = W();
117
+ let e = U(), t = B();
118
118
  m(a(e, "./FEBuildKey"), t);
119
119
  }
120
120
  };
121
121
  }
122
- function X(e = ".html") {
122
+ function K(e = ".html") {
123
123
  let t = [...new Set(Array.isArray(e) ? e : [e])];
124
124
  return {
125
125
  name: "flatten-html",
126
126
  apply: "build",
127
127
  closeBundle() {
128
- let e = q();
128
+ let e = U();
129
129
  if (!s(e)) return;
130
130
  let n = o.options.minifyHtml ?? !1, r = g.sync("**/*.html", {
131
131
  cwd: e,
132
132
  dot: !0
133
133
  });
134
134
  for (let i of r) {
135
- let r = h.join(e, i), a = l(r, "utf-8"), o = n ? L(a) : a, s = h.basename(i, ".html"), c = ".entry";
135
+ let r = h.join(e, i), a = l(r, "utf-8"), o = n ? N(a) : a, s = h.basename(i, ".html"), c = ".entry";
136
136
  s.indexOf(c) === -1 && (s += c);
137
137
  for (let i of t) {
138
138
  let t = s + i, a = h.join(e, t);
@@ -156,7 +156,7 @@ function X(e = ".html") {
156
156
  }
157
157
  };
158
158
  }
159
- function Z(e) {
159
+ function q(e) {
160
160
  let t = [
161
161
  "",
162
162
  ".ts",
@@ -164,91 +164,177 @@ function Z(e) {
164
164
  ".js",
165
165
  ".jsx"
166
166
  ];
167
- return e.reduce((e, [n, r, i = k, a = "./defaultAlias"]) => {
168
- let o = t.map((e) => h.resolve(i, r + e)).find((e) => s(e)), c = h.resolve(S, a);
167
+ return e.reduce((e, [n, r, i = T, a = "./defaultAlias"]) => {
168
+ let o = t.map((e) => h.resolve(i, r + e)).find((e) => s(e)), c = h.resolve(b, a);
169
169
  return o && (c = o), e[n] = c, e;
170
170
  }, {});
171
171
  }
172
- var Q = (...e) => new RegExp(e.join("[\\/]")), $ = (e) => `_${e}_tcC`, ee = async (r, i) => {
172
+ var J = (e) => `_${e}_tcC`, Y = (e) => P(e), X = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), ie = (e) => Y(e).includes("/node_modules/"), Z = (e, t) => {
173
+ let n = Y(e), r = t.split("/").map(X).join("/");
174
+ return RegExp(`/node_modules/(?:\\.pnpm/[^/]+/node_modules/)?${r}(?:/|$)`).test(n);
175
+ }, Q = (e, t) => t.some((t) => Z(e, t)), ae = (e, ...t) => {
176
+ let n = Y(e), r = t.map(X).join("/");
177
+ return RegExp(`(?:^|/)${r}(?:/|$)`).test(n);
178
+ }, $ = (e, t) => t.some((t) => ae(e, ...t)), oe = async (r, i) => {
173
179
  try {
174
- await _({
180
+ await ee({
175
181
  configFile: !1,
176
182
  base: "/dist",
177
183
  plugins: [
178
184
  (await import("@vitejs/plugin-react")).default(),
179
- X([".tpl"]),
180
- Y(),
181
- v()
185
+ K([".tpl"]),
186
+ G(),
187
+ te()
182
188
  ],
183
189
  build: {
184
- outDir: q(),
190
+ outDir: U(),
185
191
  emptyOutDir: !0,
186
192
  sourcemap: i === "dev" ? "inline" : "hidden",
187
193
  rolldownOptions: {
188
194
  input: r,
189
195
  output: { codeSplitting: { groups: [
190
196
  {
191
- name: $("__nm"),
192
- test: Q("node_modules"),
193
- maxSize: 5e5,
194
- minShareCount: 2,
195
- priority: 1
197
+ name: J("react-dom"),
198
+ test: (e) => Z(e, "react-dom"),
199
+ maxSize: 25e4,
200
+ priority: 100
196
201
  },
197
202
  {
198
- name: $("r"),
199
- test: Q("node_modules", "react"),
200
- minShareCount: 2,
201
- maxSize: 5e5,
202
- priority: 5
203
+ name: J("react-router"),
204
+ test: (e) => Q(e, ["react-router", "react-router-dom"]),
205
+ maxSize: 25e4,
206
+ priority: 95
203
207
  },
204
208
  {
205
- name: $("r-d"),
206
- test: Q("node_modules", "react-dom"),
207
- minShareCount: 2,
209
+ name: J("react"),
210
+ test: (e) => Z(e, "react"),
208
211
  maxSize: 2e5,
209
- priority: 10
212
+ priority: 90
213
+ },
214
+ {
215
+ name: J("form-validator"),
216
+ test: (e) => Q(e, ["ajv", "rc-field-form"]),
217
+ maxSize: 25e4,
218
+ priority: 80
219
+ },
220
+ {
221
+ name: J("ui-vendor"),
222
+ test: (e) => Q(e, [
223
+ "date-fns",
224
+ "lucide-react",
225
+ "xlsx"
226
+ ]),
227
+ maxSize: 35e4,
228
+ priority: 70
229
+ },
230
+ {
231
+ name: J("state-utils"),
232
+ test: (e) => Q(e, [
233
+ "clsx",
234
+ "immer",
235
+ "tailwind-merge",
236
+ "zustand"
237
+ ]),
238
+ maxSize: 18e4,
239
+ priority: 60
210
240
  },
211
241
  {
212
- name: $("r-r-d"),
213
- test: Q("node_modules", "react-router-dom"),
242
+ name: J("tc-ui"),
243
+ test: (e) => $(e, [[
244
+ "packages",
245
+ "react",
246
+ "ui"
247
+ ], [
248
+ "fe",
249
+ "packages",
250
+ "react",
251
+ "ui"
252
+ ]]),
253
+ maxSize: 25e4,
214
254
  minShareCount: 2,
215
- maxSize: 5e5,
216
- priority: 10
255
+ priority: 50
217
256
  },
218
257
  {
219
- name: $("ajv"),
220
- test: Q("node_modules", "ajv"),
258
+ name: J("tc-hooks"),
259
+ test: (e) => $(e, [[
260
+ "packages",
261
+ "react",
262
+ "hooks"
263
+ ], [
264
+ "fe",
265
+ "packages",
266
+ "react",
267
+ "hooks"
268
+ ]]),
269
+ maxSize: 12e4,
221
270
  minShareCount: 2,
222
- maxSize: 2e5,
223
- priority: 10
271
+ priority: 45
224
272
  },
225
273
  {
226
- name: $("ui-lib"),
227
- test: Q("components"),
274
+ name: J("tc-common"),
275
+ test: (e) => $(e, [["packages", "common"], [
276
+ "fe",
277
+ "packages",
278
+ "common"
279
+ ]]),
280
+ maxSize: 16e4,
228
281
  minShareCount: 2,
282
+ priority: 40
283
+ },
284
+ {
285
+ name: J("tc-schema-page"),
286
+ test: (e) => $(e, [[
287
+ "frontend",
288
+ "src",
289
+ "defaultPages",
290
+ "SchemaPage"
291
+ ], [
292
+ "fe",
293
+ "frontend",
294
+ "src",
295
+ "defaultPages",
296
+ "SchemaPage"
297
+ ]]),
229
298
  maxSize: 2e5,
230
- priority: 5
299
+ minShareCount: 2,
300
+ priority: 35
231
301
  },
232
302
  {
233
- name: $("ui-f-lib"),
234
- test: Q("components", ".*?[Ff]orm.*?"),
303
+ name: J("tc-pages"),
304
+ test: (e) => $(e, [[
305
+ "frontend",
306
+ "src",
307
+ "defaultPages"
308
+ ], [
309
+ "fe",
310
+ "frontend",
311
+ "src",
312
+ "defaultPages"
313
+ ]]),
314
+ maxSize: 18e4,
235
315
  minShareCount: 2,
236
- maxSize: 5e4,
237
- priority: 10
316
+ priority: 30
317
+ },
318
+ {
319
+ name: J("vendor"),
320
+ test: ie,
321
+ maxSize: 5e5,
322
+ minShareCount: 2,
323
+ priority: 1
238
324
  }
239
325
  ] } }
240
326
  }
241
327
  },
242
328
  resolve: { alias: {
243
- react: A("react"),
244
- "react-dom": A("react-dom"),
245
- "@tc/ui-react/hooks": h.resolve(S, "../../fe/packages/react/hooks/"),
246
- "@tc/ui-react": h.resolve(S, "../../fe/packages/react/ui/"),
247
- ...Z([
329
+ react: E("react"),
330
+ "react-dom": E("react-dom"),
331
+ "@tc/ui-react/hooks": h.resolve(b, "../../fe/packages/react/hooks/"),
332
+ "@tc/ui-react": h.resolve(b, "../../fe/packages/react/ui/"),
333
+ ...q([
248
334
  [
249
335
  "@tc/scalability/SchemaForm/frameData",
250
336
  "./extended/SchemaForm/data",
251
- D
337
+ C
252
338
  ],
253
339
  ["@tc/scalability/SchemaForm/data", "./extended/SchemaForm/data"],
254
340
  ["@tc/scalability/SchemaPage/CallCom/data", "./extended/SchemaPage/CallCom/data"],
@@ -270,4 +356,4 @@ var Q = (...e) => new RegExp(e.join("[\\/]")), $ = (e) => `_${e}_tcC`, ee = asyn
270
356
  }
271
357
  };
272
358
  //#endregion
273
- export { ee as VBuildFE, K as entries, Y as generateBuildKeyPlugin, q as outDir, J as watchFiles };
359
+ export { oe as VBuildFE, H as entries, G as generateBuildKeyPlugin, U as outDir, W as watchFiles };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@_tc/template-core",
3
- "version": "0.2.8",
3
+ "version": "0.2.10-bate.1",
4
4
  "description": "A full-stack TypeScript admin framework powered by Koa, React, and Vite - monorepo root",
5
5
  "types": "./types/index.d.ts",
6
6
  "exports": {