@_tc/template-core 0.2.9 → 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,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;
@@ -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.9",
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": {