tailwind-table-dom 1.3.11 → 3.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/bin/cli.js +1 -1
  2. package/bin/core/getLatestVersion.js +1 -1
  3. package/bin/core/loadRunner.js +1 -1
  4. package/bin/table/v3/commands/table/steps/getLatestVersion.js +14 -1
  5. package/bin/table/v3/commands/table.js +6 -12
  6. package/bin/table/v3/core/parseInput.js +2 -2
  7. package/bin/table/v3/start.js +6 -8
  8. package/package.json +1 -1
  9. package/bin/v1/commands/core/steps/announce.js +0 -3
  10. package/bin/v1/commands/core/steps/checks.js +0 -21
  11. package/bin/v1/commands/core/steps/createProject.js +0 -7
  12. package/bin/v1/commands/core/steps/getLatestVersion.js +0 -32
  13. package/bin/v1/commands/core/steps/locateDestination.js +0 -5
  14. package/bin/v1/commands/core/steps/locateSource copy.js +0 -32
  15. package/bin/v1/commands/core/steps/locateSource.js +0 -26
  16. package/bin/v1/commands/core/steps/resolveFolderName.js +0 -15
  17. package/bin/v1/commands/core/template/v4/BuildMenuItem/buildMenuItem.js +0 -49
  18. package/bin/v1/commands/core/template/v4/BuildMenuItem/callKSTable.js +0 -7
  19. package/bin/v1/commands/core/template/v4/BuildMenuItem/getDefaultKSTableConfig.js +0 -80
  20. package/bin/v1/commands/core/template/v4/BuildMenuItem/getKSTableConfig.js +0 -17
  21. package/bin/v1/commands/core/template/v4/BuildMenuItem/orchestrateMenuClick.js +0 -34
  22. package/bin/v1/commands/core/template/v4/BuildNav/buildBrand.js +0 -14
  23. package/bin/v1/commands/core/template/v4/BuildNav/buildHamburger.js +0 -20
  24. package/bin/v1/commands/core/template/v4/BuildNav/buildMenu.js +0 -14
  25. package/bin/v1/commands/core/template/v4/BuildNav/buildNav.js +0 -31
  26. package/bin/v1/commands/core/template/v4/BuildNav/buildWrapper.js +0 -29
  27. package/bin/v1/commands/core/template/v4/buildNav.js +0 -29
  28. package/bin/v1/commands/core/template/v4/createAnchor.js +0 -15
  29. package/bin/v1/commands/core/template/v4/createIcon.js +0 -19
  30. package/bin/v1/commands/core/template/v4/createLabel.js +0 -9
  31. package/bin/v1/commands/core/template/v4/createLi.js +0 -5
  32. package/bin/v1/commands/core/template/v4/initHeader.js +0 -49
  33. package/bin/v1/commands/index.js +0 -82
  34. package/bin/v1/core/parseInput.js +0 -8
  35. package/bin/v1/core/resolveCommand.js +0 -16
  36. package/bin/v1/core/showUsage.js +0 -46
  37. package/bin/v1/core/showUsageV1.js +0 -49
  38. package/bin/v1/start.js +0 -24
package/bin/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import getLatestVersion from "./core/getLatestVersion.js";
4
4
  import loadRunner from "./core/loadRunner.js";
@@ -5,7 +5,7 @@ import { fileURLToPath } from "url";
5
5
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
6
 
7
7
  export default function getLatestVersion() {
8
- const versions = fs.readdirSync(path.join(__dirname, ".."))
8
+ const versions = fs.readdirSync(path.join(__dirname, "..", "table"))
9
9
  .filter(n => /^v\d+$/.test(n))
10
10
  .sort((a, b) => parseInt(a.slice(1)) - parseInt(b.slice(1)));
11
11
 
@@ -1,5 +1,5 @@
1
1
  export default async function loadRunner(version) {
2
- const mod = await import(`../${version}/start.js`);
2
+ const mod = await import(`../table/${version}/start.js`);
3
3
 
4
4
  if (typeof mod.default !== "function") {
5
5
  throw new Error(`Invalid start.js in ${version}`);
@@ -12,13 +12,26 @@ const templatePath = path.join(
12
12
  "template"
13
13
  );
14
14
 
15
+ // console.log("templatePath : -------------", templatePath);
16
+
15
17
  const versions = fs
16
18
  .readdirSync(templatePath)
17
19
  .filter(item => item.startsWith("v"));
18
20
 
19
- const highestVersion =
21
+ // console.log("versions : -------------", versions);
22
+
23
+ const highestVersion1 =
20
24
  versions.sort().at(-1);
21
25
 
26
+ const highestVersion =
27
+ versions.reduce((max, current) =>
28
+ Number(current.slice(1)) > Number(max.slice(1))
29
+ ? current
30
+ : max
31
+ );
32
+
33
+ // console.log("highestVersion : -------------", highestVersion);
34
+
22
35
  const sourceVersion =
23
36
  highestVersion;
24
37
 
@@ -21,9 +21,7 @@ export default ({
21
21
  name: folderName
22
22
  });
23
23
 
24
- if (showLog) {
25
- console.log(`\n[1] Running checks..., resolvedFolderName : ${resolvedFolderName}`);
26
- };
24
+ if (showLog) console.log(`\n[1] Running checks..., resolvedFolderName : ${resolvedFolderName}`);
27
25
 
28
26
  const fromChecks = checks({
29
27
  inFolderName: resolvedFolderName,
@@ -33,26 +31,22 @@ export default ({
33
31
 
34
32
  if (fromChecks) return false;
35
33
 
36
- if (showLog) {
37
- console.log("Locating source...");
38
- }
34
+ if (showLog) console.log("Locating source...");
39
35
 
40
36
  const source = locateSource({
41
37
  showLog
42
38
  });
43
39
 
44
- if (showLog) {
45
- console.log("Locating destination...");
46
- }
40
+ if (showLog) console.log(`Source is : ${source}`);
41
+ if (showLog) console.log("Locating destination...");
47
42
 
48
43
  const destination = locateDestination({
49
44
  inResolvedFolderName: resolvedFolderName,
50
45
  showLog
51
46
  });
52
47
 
53
- if (showLog) {
54
- console.log("Creating project...");
55
- }
48
+ if (showLog) console.log(`Destination is : ${destination}`);
49
+ if (showLog) console.log("Creating project...");
56
50
 
57
51
  createProject({
58
52
  source,
@@ -1,9 +1,9 @@
1
1
  export default function parseInput() {
2
- const [cmd, folderName] = process.argv.slice(2);
2
+ const [folderName, showLog] = process.argv.slice(2);
3
3
 
4
4
  return {
5
- cmd: cmd || null,
6
5
  folderName: folderName || null,
6
+ showLog: showLog || null,
7
7
  toPath: process.cwd()
8
8
  };
9
9
  };
@@ -1,9 +1,10 @@
1
1
  import parseInput from "./core/parseInput.js";
2
2
  import showUsage from './core/showUsage.js';
3
3
 
4
- import resolveCommand from "./core/resolveCommand.js";
4
+ // import resolveCommand from "./core/resolveCommand.js";
5
+ import tableCommand from "./commands/table.js";
5
6
 
6
- import pkg from '../../package.json' with { type: 'json' };
7
+ import pkg from '../../../package.json' with { type: 'json' };
7
8
 
8
9
  const version = pkg.version;
9
10
 
@@ -12,12 +13,9 @@ const run = async () => {
12
13
 
13
14
  if (input.action === "--help" || input.action === "-h" || input.action === "help") return showUsage(version);
14
15
 
15
- const command = resolveCommand(input.cmd);
16
-
17
- if (!command) return (console.log(`Unknown command: ${input.cmd}\n`), showUsage(version));
18
-
19
- await command({
20
- folderName: input.folderName
16
+ await tableCommand({
17
+ folderName: input.folderName,
18
+ showLog: input.showLog
21
19
  });
22
20
  };
23
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwind-table-dom",
3
- "version": "1.3.11",
3
+ "version": "3.11.2",
4
4
  "description": "CLI to scaffold projects using templates",
5
5
  "keywords": [
6
6
  "tailwind",
@@ -1,3 +0,0 @@
1
- export const announce = ({ inResolvedFolderName }) => {
2
- console.log(`[keshavsoft] Project created: ${inResolvedFolderName}`);
3
- };
@@ -1,21 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
-
4
- const validate = ({ toPath, inFolderName, inShowLog }) => {
5
- const fullPath = path.join(toPath, inFolderName);
6
-
7
- if (!fs.existsSync(fullPath)) {
8
- return false;
9
- }
10
-
11
- const files = fs.readdirSync(fullPath);
12
-
13
- if (files.length > 0) {
14
- console.log("Folder should be empty");
15
- return true;
16
- };
17
-
18
- return false;
19
- };
20
-
21
- export default validate;
@@ -1,7 +0,0 @@
1
- import fs from "fs";
2
-
3
- export const createProject = ({ source, destination }) => {
4
- fs.mkdirSync(destination, { recursive: true });
5
-
6
- fs.cpSync(source, destination, { recursive: true });
7
- };
@@ -1,32 +0,0 @@
1
- import fs from "fs";
2
-
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
-
9
- const templatePath = path.join(
10
- __dirname,
11
- "..",
12
- "..",
13
- "..",
14
- "..",
15
- "table",
16
- "v2",
17
- "commands",
18
- "table",
19
- "template"
20
- );
21
-
22
- const versions = fs
23
- .readdirSync(templatePath)
24
- .filter(item => item.startsWith("v"));
25
-
26
- const highestVersion =
27
- versions.sort().at(-1);
28
-
29
- const sourceVersion =
30
- highestVersion;
31
-
32
- export default sourceVersion;
@@ -1,5 +0,0 @@
1
- import path from "path";
2
-
3
- export const locateDestination = ({ inResolvedFolderName }) => {
4
- return path.join(process.cwd(), inResolvedFolderName);
5
- };
@@ -1,32 +0,0 @@
1
- import fs from "fs";
2
-
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
-
9
- const templatePath = path.join(
10
- __dirname,
11
- "..",
12
- "template"
13
- );
14
-
15
- const versions = fs
16
- .readdirSync(templatePath)
17
- .filter(item => item.startsWith("v"));
18
-
19
- const highestVersion =
20
- versions.sort().at(-1);
21
-
22
- const sourceVersion =
23
- highestVersion;
24
-
25
- export const locateSource = () => {
26
- return path.join(
27
- __dirname,
28
- "..",
29
- "template",
30
- sourceVersion
31
- );
32
- };
@@ -1,26 +0,0 @@
1
- import path from "path";
2
-
3
- import sourceVersion from "./getLatestVersion.js";
4
-
5
- import fs from "fs";
6
-
7
- import { fileURLToPath } from "url";
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = path.dirname(__filename);
11
-
12
- export const locateSource = () => {
13
- return path.join(
14
- __dirname,
15
- "..",
16
- "..",
17
- "..",
18
- "..",
19
- "table",
20
- "v2",
21
- "commands",
22
- "table",
23
- "template",
24
- sourceVersion
25
- );
26
- };
@@ -1,15 +0,0 @@
1
- import fs from "fs";
2
-
3
- export default function resolveFolderName({ name, defaultFolerName = "tableV1" }) {
4
- // case 1: force new → timestamp
5
- if (name === null) {
6
- name = defaultFolerName;
7
- };
8
-
9
- // case 2: user provided → strict
10
- if (fs.existsSync(name)) {
11
- throw new Error(`Folder already exists: ${name}`);
12
- };
13
-
14
- return name;
15
- };
@@ -1,49 +0,0 @@
1
- import { createLi } from "../createLi.js";
2
- import { createAnchor } from "../createAnchor.js";
3
- import { createLabel } from "../createLabel.js";
4
- import { createIcon } from "../createIcon.js";
5
- import { orchestrateMenuClick } from "./orchestrateMenuClick.js";
6
-
7
- export const buildMenuItem = ({
8
- inTextToShow,
9
- inHtmlId,
10
- inIconPaths,
11
- inHref,
12
- onClick,
13
- inTableName,
14
- inClasses
15
- }) => {
16
- const li = createLi(inClasses.liClass);
17
-
18
- const a = createAnchor({
19
- inHtmlId,
20
- inHref,
21
- cls: inClasses.aClass,
22
- inTableName
23
- });
24
- // debugger;
25
- const span = createLabel({
26
- inTextToShow: inTextToShow,
27
- inClassName: inClasses.spanClass
28
- });
29
-
30
- const svg = createIcon({
31
- inClassName: inClasses.svgClass,
32
- inIconPaths
33
- });
34
-
35
- a.addEventListener(
36
- "click",
37
- orchestrateMenuClick({
38
- onClick
39
- })
40
- );
41
-
42
- a.addEventListener("click1", orchestrateMenuClick);
43
-
44
- a.append(svg, span);
45
-
46
- li.appendChild(a);
47
-
48
- return li;
49
- };
@@ -1,7 +0,0 @@
1
- export const callKSTable = async (config) => {
2
- if (window.KSTable?.initTableOnly) {
3
- return window.KSTable.initTableOnly(config);
4
- };
5
-
6
- return initTableOnly(config);
7
- };
@@ -1,80 +0,0 @@
1
- export const getDefaultKSTableConfig = () => {
2
- return {
3
- containerId: 'kSTableContainer',
4
-
5
- tableName: "",
6
-
7
- mode: "create",
8
-
9
- layout: {
10
- verticalPosition: "top",
11
- type: "table",
12
- },
13
-
14
- endPoints: {
15
- create: "",
16
- update: "",
17
- delete: "",
18
- read: "",
19
- find: ""
20
- },
21
-
22
- options: {
23
- firstRow: {
24
- showSearch: true
25
- },
26
-
27
- vertical: {
28
- showVertical: true,
29
- isDisabled: false,
30
- showSaveButton: true
31
- },
32
-
33
- dataList: {
34
- show: true,
35
- },
36
-
37
- table: {
38
- isDisabled: false,
39
- showTable: true,
40
- showRowOptions: false,
41
- showSerial: true,
42
- showFooter: false,
43
-
44
- footer: {
45
- showDataList: true
46
- }
47
- },
48
-
49
- focus: {
50
- priority: ["vertical", "footer", "search"]
51
- }
52
- },
53
-
54
- columnsConfig: [],
55
-
56
- uiClasses: {
57
- form: {
58
- formClass: 'grid grid-cols-3 gap-x-8 gap-y-4 p-6 verticalForm',
59
- buttonClass: 'mt-2 px-4 py-1 bg-green-500 text-white',
60
- rowClass: 'flex items-center space-x-4',
61
- labelClass: 'w-24 text-sm font-medium',
62
- inputClass: 'flex-1 border rounded px-3 py-2'
63
- }
64
- },
65
-
66
- callbacks: {
67
- table: {
68
- onDelete: async ({ toDeletePk }) => {
69
- const fromDelete = await startFetchAsGet({
70
- inQuery: {
71
- ParentPk: toDeletePk
72
- }
73
- });
74
-
75
- return await fromDelete;
76
- }
77
- }
78
- }
79
- };
80
- };
@@ -1,17 +0,0 @@
1
- import { getDefaultKSTableConfig } from "./getDefaultKSTableConfig.js";
2
-
3
- export const getKSTableConfig = async ({ tableName }) => {
4
- const config = getDefaultKSTableConfig();
5
-
6
- const fromPromise = await fetch("/columns.json");
7
- // debugger;
8
- const columnsConfig = await fromPromise.json();
9
-
10
- config.columnsConfig = columnsConfig[tableName].columnsConfig;
11
-
12
- config.tableName = tableName;
13
-
14
- config.endPoints.read = `/Api/V1/${tableName}/ShowAll`;
15
-
16
- return config;
17
- };
@@ -1,34 +0,0 @@
1
- import { getKSTableConfig } from "./getKSTableConfig.js";
2
- import { callKSTable } from "./callKSTable.js";
3
-
4
- export const orchestrateMenuClick1 = async (event) => {
5
- event.preventDefault();
6
-
7
- const currentTarget = event.currentTarget;
8
- // debugger;
9
- const config = await getKSTableConfig({
10
- tableName: currentTarget.dataset.tableName
11
- });
12
-
13
- await callKSTable(config);
14
- };
15
-
16
- export const orchestrateMenuClick =
17
- ({ onClick }) =>
18
- async (event) => {
19
- // debugger;
20
- event.preventDefault();
21
-
22
- const currentTarget = event.currentTarget;
23
- // debugger;
24
- const config = await getKSTableConfig({
25
- tableName: currentTarget.dataset.tableName
26
- });
27
-
28
- const fromCallKSTable = await callKSTable(config);
29
- console.log("fromCallKSTable : ", fromCallKSTable);
30
-
31
- if (onClick) {
32
- await onClick(event);
33
- };
34
- };
@@ -1,14 +0,0 @@
1
- // /header/v1/buildBrand.js
2
-
3
- export const buildBrand = ({ inHeading = "KeshavSoft", inHtmlId = "titlehtmlId" }) => {
4
-
5
- const div = document.createElement("div");
6
-
7
- div.className = "text-xl font-semibold";
8
-
9
- div.innerText = inHeading;
10
-
11
- div.id = inHtmlId;
12
-
13
- return div;
14
- };
@@ -1,20 +0,0 @@
1
- // /header/v1/buildHamburger.js
2
-
3
- export const buildHamburger = () => {
4
-
5
- const button = document.createElement("button");
6
-
7
- button.className = "text-xl px-4 py-1 md:hidden";
8
-
9
- button.innerText = "☰";
10
-
11
- button.addEventListener("click", () => {
12
-
13
- document
14
- .getElementById("menu")
15
- .classList.toggle("hidden");
16
-
17
- });
18
-
19
- return button;
20
- };
@@ -1,14 +0,0 @@
1
- // /header/v1/buildMenu.js
2
-
3
- export const buildMenu = () => {
4
-
5
- const ul = document.createElement("ul");
6
-
7
- ul.id = "menu";
8
-
9
- ul.className = `w-full hidden flex flex-col space-y-2 mt-4
10
- md:flex md:flex-row md:space-y-0 md:gap-4
11
- md:mt-0 md:w-auto md:flex-wrap`;
12
-
13
- return ul;
14
- };
@@ -1,31 +0,0 @@
1
- // /header/v2/buildNav.js
2
-
3
- import { buildBrand } from "./buildBrand.js";
4
- import { buildHamburger } from "./buildHamburger.js";
5
- import { buildMenu } from "./buildMenu.js";
6
- import { buildWrapper } from "./buildWrapper.js";
7
-
8
- export const buildNav = (inTitle = {}) => {
9
-
10
- const {
11
- nav,
12
- innerDiv
13
- } = buildWrapper();
14
-
15
- innerDiv.appendChild(
16
- buildBrand({
17
- inHeading: inTitle.text,
18
- inHtmlId: inTitle.htmlId
19
- })
20
- );
21
-
22
- innerDiv.appendChild(
23
- buildHamburger()
24
- );
25
-
26
- innerDiv.appendChild(
27
- buildMenu()
28
- );
29
-
30
- return nav;
31
- };
@@ -1,29 +0,0 @@
1
- // /header/v1/buildWrapper.js
2
-
3
- export const buildWrapper = () => {
4
-
5
- const nav = document.createElement("nav");
6
-
7
- nav.className = "bg-gray-800 text-white";
8
-
9
- const outerDiv = document.createElement("div");
10
-
11
- outerDiv.className = `mx-auto px-3 py-3
12
- max-w-3xl
13
- lg:max-w-5xl
14
- xl:max-w-full xl:px-10`;
15
-
16
- const innerDiv = document.createElement("div");
17
-
18
- innerDiv.className =
19
- "flex flex-wrap items-center justify-between";
20
-
21
- outerDiv.appendChild(innerDiv);
22
-
23
- nav.appendChild(outerDiv);
24
-
25
- return {
26
- nav,
27
- innerDiv
28
- };
29
- };
@@ -1,29 +0,0 @@
1
- // /header/v1/buildWrapper.js
2
-
3
- export const buildWrapper = () => {
4
-
5
- const nav = document.createElement("nav");
6
-
7
- nav.className = "bg-gray-800 text-white";
8
-
9
- const outerDiv = document.createElement("div");
10
-
11
- outerDiv.className = `mx-auto px-3 py-3
12
- max-w-3xl
13
- lg:max-w-5xl
14
- xl:max-w-full xl:px-10`;
15
-
16
- const innerDiv = document.createElement("div");
17
-
18
- innerDiv.className =
19
- "flex flex-wrap items-center justify-between";
20
-
21
- outerDiv.appendChild(innerDiv);
22
-
23
- nav.appendChild(outerDiv);
24
-
25
- return {
26
- nav,
27
- innerDiv
28
- };
29
- };
@@ -1,15 +0,0 @@
1
- export const createAnchor = ({
2
- inHtmlId = "", inHref = "#", cls = "", inTableName = ""
3
- }) => {
4
- const a = document.createElement("a");
5
-
6
- a.id = inHtmlId;
7
- a.href = inHref;
8
- a.className = cls;
9
-
10
- if (inTableName) {
11
- a.dataset.tableName = inTableName
12
- };
13
-
14
- return a;
15
- };
@@ -1,19 +0,0 @@
1
- export const createIcon = ({
2
- inIconPaths = [],
3
- inClassName = ""
4
- }) => {
5
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
6
-
7
- svg.setAttribute("class", inClassName);
8
- svg.setAttribute("fill", "none");
9
- svg.setAttribute("stroke", "currentColor");
10
- svg.setAttribute("viewBox", "0 0 24 24");
11
-
12
- inIconPaths.forEach(d => {
13
- const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
14
- path.setAttribute("d", d);
15
- svg.appendChild(path);
16
- });
17
-
18
- return svg;
19
- };
@@ -1,9 +0,0 @@
1
- export const createLabel = ({
2
- inTextToShow = "",
3
- inClassName = ""
4
- }) => {
5
- const span = document.createElement("span");
6
- span.className = inClassName;
7
- span.textContent = inTextToShow;
8
- return span;
9
- };
@@ -1,5 +0,0 @@
1
- export const createLi = (cls = "") => {
2
- const li = document.createElement("li");
3
- li.className = cls;
4
- return li;
5
- };
@@ -1,49 +0,0 @@
1
- import { buildMenuItem } from "./BuildMenuItem/buildMenuItem.js";
2
- import { buildNav } from "./BuildNav/buildNav.js";
3
-
4
- const initHeader = (config = {}) => {
5
-
6
- const header = document.getElementById("header");
7
-
8
- if (!header) return;
9
-
10
- header.appendChild(
11
- buildNav(config.title)
12
- );
13
-
14
- const menu = document.getElementById("menu");
15
-
16
- const classes = {
17
- liClass: "md:text-center",
18
-
19
- aClass: `flex justify-between items-center
20
- bg-gray-700 px-4 py-2 rounded-md
21
- hover:bg-gray-600
22
- active:bg-gray-500 active:scale-95
23
- transition-all duration-150
24
- md:flex-col md:justify-center md:items-center
25
- lg:bg-transparent lg:px-2 lg:py-1`,
26
-
27
- spanClass: `ml-3 text-right w-full text-base
28
- md:w-auto md:text-center md:ml-0 lg:text-lg`,
29
-
30
- svgClass: "text-gray-300 w-6 h-6 lg:w-7 lg:h-7"
31
- };
32
-
33
- (config.items || []).forEach(item => {
34
-
35
- const li = buildMenuItem({
36
- inTextToShow: item.text,
37
- inHtmlId: item.id,
38
- inIconPaths: item.icon,
39
- inHref: item.href,
40
- onClick: item.onClick,
41
- inTableName: item.tableName,
42
- inClasses: classes
43
- });
44
-
45
- menu.appendChild(li);
46
- });
47
- };
48
-
49
- export default initHeader;
@@ -1,82 +0,0 @@
1
- import { locateSource } from "./core/steps/locateSource.js";
2
- import { locateDestination } from "./core/steps/locateDestination.js";
3
-
4
- import { createProject } from "./core/steps/createProject.js";
5
- import { announce } from "./core/steps/announce.js";
6
-
7
- import resolveFolderName from "./core/steps/resolveFolderName.js";
8
- import checks from "./core/steps/checks.js";
9
-
10
- export default ({
11
- folderName = "",
12
- toPath = process.cwd(),
13
- inAnnounce = true,
14
- showLog = true
15
- }) => {
16
- if (showLog) {
17
- console.log(`Resolving folder name..., folderName : ${folderName}`);
18
- };
19
-
20
- const resolvedFolderName = resolveFolderName({
21
- name: folderName
22
- });
23
-
24
- if (showLog) {
25
- console.log(`\n[1] Running checks..., resolvedFolderName : ${resolvedFolderName}`);
26
- };
27
-
28
- const fromChecks = checks({
29
- inFolderName: resolvedFolderName,
30
- toPath,
31
- inShowLog: showLog
32
- });
33
-
34
- if (fromChecks) return false;
35
-
36
- if (showLog) {
37
- console.log("Locating source...");
38
- }
39
-
40
- const source = locateSource({
41
- showLog
42
- });
43
-
44
- if (showLog) {
45
- console.log(`source found : ${source}`);
46
- };
47
-
48
- if (showLog) {
49
- console.log("Locating destination...");
50
- };
51
-
52
- const destination = locateDestination({
53
- inResolvedFolderName: resolvedFolderName,
54
- showLog
55
- });
56
-
57
- if (showLog) {
58
- console.log(`Destination is : ${destination}`);
59
- };
60
-
61
- if (showLog) {
62
- console.log("Creating project...");
63
- }
64
-
65
- createProject({
66
- source,
67
- destination,
68
- showLog
69
- });
70
-
71
- if (inAnnounce) {
72
-
73
- if (showLog) {
74
- console.log("Announcing...");
75
- }
76
-
77
- announce({
78
- inResolvedFolderName: resolvedFolderName,
79
- showLog
80
- });
81
- }
82
- };
@@ -1,8 +0,0 @@
1
- export default function parseInput() {
2
- const [folderName] = process.argv.slice(2);
3
-
4
- return {
5
- folderName: folderName || null,
6
- toPath: process.cwd()
7
- };
8
- };
@@ -1,16 +0,0 @@
1
- import fs from "fs";
2
-
3
- const files = fs.readdirSync(new URL("../commands/", import.meta.url));
4
-
5
- const entries = await Promise.all(
6
- files.filter(f => f.endsWith(".js"))
7
- .map(async f => [f.replace(".js", ""), (await import(`../commands/${f}`)).default])
8
- );
9
-
10
- const map = Object.fromEntries(entries);
11
-
12
- const resolveCommand = (cmd) => {
13
- return map[cmd] || null;
14
- };
15
-
16
- export default resolveCommand;
@@ -1,46 +0,0 @@
1
- /*
2
- JSON CRUD UI CLI – Entry Flow
3
-
4
- 1. Read user input from terminal (parseInput)
5
- 2. If no command → show usage
6
- 3. If help flags → show usage
7
- 4. Resolve command dynamically
8
- 5. If command not found → show usage
9
- 6. Validate command requirements
10
- 7. Execute command
11
-
12
- Goal:
13
- - Zero confusion for user
14
- - Single source of truth (showUsage)
15
- - Self-validating commands
16
- - Easy to extend (drop-in command architecture)
17
- */
18
-
19
- export default function showUsage(version) {
20
- const g = "\x1b[32m";
21
- const y = "\x1b[33m";
22
- const c = "\x1b[36m";
23
- const gray = "\x1b[90m";
24
- const r = "\x1b[0m";
25
-
26
- console.log(`
27
- ${c}🚀 tailwind-todo v${version}${r}
28
-
29
- ${y}Usage:${r}
30
- ${g}npx tailwind-todo ${r} <command>
31
-
32
- ${y}Commands:${r}
33
- ${g}Header${r} Builds header structure
34
-
35
-
36
- ${y}Examples:${r}
37
- ${gray}npx tailwind-todo header${r}
38
-
39
- ${y}Architecture:${r}
40
- ${gray}commands are auto-loaded dynamically${r}
41
- ${gray}each command validates required files${r}
42
-
43
- ${y}Tip:${r}
44
- ${gray}Run init first before feature commands${r}
45
- `);
46
- }
@@ -1,49 +0,0 @@
1
- /*
2
- JSON CRUD UI CLI – Entry Flow
3
-
4
- 1. Read user input from terminal (parseInput)
5
- 2. If no command → show usage
6
- 3. If help flags → show usage
7
- 4. Resolve command dynamically
8
- 5. If command not found → show usage
9
- 6. Validate command requirements
10
- 7. Execute command
11
-
12
- Goal:
13
- - Zero confusion for user
14
- - Single source of truth (showUsage)
15
- - Self-validating commands
16
- - Easy to extend (drop-in command architecture)
17
- */
18
-
19
- export default function showUsage(version) {
20
- const g = "\x1b[32m";
21
- const y = "\x1b[33m";
22
- const c = "\x1b[36m";
23
- const gray = "\x1b[90m";
24
- const r = "\x1b[0m";
25
-
26
- console.log(`
27
- ${c}🚀 json-crud-ui-components v${version}${r}
28
-
29
- ${y}Usage:${r}
30
- ${g}npx json-crud-ui-components${r} <command>
31
-
32
- ${y}Commands:${r}
33
- ${g}init${r} Creates initial boilerplate structure
34
- ${g}addListeners${r} Adds listeners boilerplate
35
- ${g}buildHeader${r} Builds header structure
36
- ${g}htmlIdClick${r} Adds htmlIdClick handler
37
-
38
- ${y}Examples:${r}
39
- ${gray}npx json-crud-ui-components init${r}
40
- ${gray}npx json-crud-ui-components addListeners${r}
41
-
42
- ${y}Architecture:${r}
43
- ${gray}commands are auto-loaded dynamically${r}
44
- ${gray}each command validates required files${r}
45
-
46
- ${y}Tip:${r}
47
- ${gray}Run init first before feature commands${r}
48
- `);
49
- }
package/bin/v1/start.js DELETED
@@ -1,24 +0,0 @@
1
- import parseInput from "./core/parseInput.js";
2
- import showUsage from './core/showUsage.js';
3
-
4
- import resolveCommand from "./core/resolveCommand.js";
5
-
6
- import pkg from '../../package.json' with { type: 'json' };
7
-
8
- const version = pkg.version;
9
-
10
- const run = async () => {
11
- const input = parseInput();
12
-
13
- if (input.action === "--help" || input.action === "-h" || input.action === "help") return showUsage(version);
14
-
15
- const command = resolveCommand("index");
16
-
17
- if (!command) return (console.log(`Unknown command: ${input.cmd}\n`), showUsage(version));
18
-
19
- await command({
20
- folderName: input.folderName
21
- });
22
- };
23
-
24
- export default run;