@stacksjs/utils 0.61.24 → 0.63.0

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.
package/dist/index.js CHANGED
@@ -6,8 +6,8 @@ async function loop(times, callback) {
6
6
  }
7
7
  // src/clean.ts
8
8
  import {path as p} from "@stacksjs/path";
9
- var {$ } = globalThis.Bun;
10
9
  async function cleanProject() {
10
+ const $ = Bun.$;
11
11
  await $`rm -rf ${p.projectPath("bun.lockb")}`;
12
12
  await $`rm -rf ${p.projectPath("yarn.lock")}`;
13
13
  await $`rm -rf ${p.projectPath("node_modules/")}`;
@@ -45,35 +45,6 @@ defineServices,
45
45
  defineStorage,
46
46
  defineUi
47
47
  } from "@stacksjs/config";
48
- // src/currency.ts
49
- import {
50
- add,
51
- allocate,
52
- compare,
53
- convert,
54
- equal,
55
- greaterThan,
56
- greaterThanOrEqual,
57
- hasSubUnits,
58
- isZero,
59
- lessThan,
60
- lessThanOrEqual,
61
- maximum,
62
- minimum,
63
- multiply,
64
- normalizeScale,
65
- dinero,
66
- dinero as dinero2,
67
- subtract,
68
- toSnapshot,
69
- toUnits,
70
- toDecimal,
71
- trimScale,
72
- haveSameCurrency,
73
- haveSameAmount,
74
- dinero as dinero3
75
- } from "dinero.js";
76
- import {USD} from "@dinero.js/currencies";
77
48
  // src/debounce.ts
78
49
  import {debounce} from "perfect-debounce";
79
50
  // src/equal.ts
@@ -216,12 +187,22 @@ function originRequestFunctionHash() {
216
187
  }
217
188
  }
218
189
  function websiteSourceHash() {
219
- const docsSrc = [p2.projectPath("docs"), p2.projectPath("config/docs.ts")];
190
+ const docsSrc = [p2.projectPath("docs")];
220
191
  const websiteSrc = [
221
- p2.projectPath("resources/views")
192
+ p2.projectPath("resources/views"),
193
+ p2.projectPath("resources/assets"),
194
+ p2.projectPath("resources/lang"),
195
+ p2.projectPath("resources/functions"),
196
+ p2.projectPath("resources/components"),
197
+ p2.projectPath("resources/modules"),
198
+ p2.projectPath("resources/stores")
222
199
  ];
223
200
  return config2.app.docMode === true ? hashPaths(docsSrc) : hashPaths(websiteSrc);
224
201
  }
202
+ function docsSourceHash() {
203
+ const docsSrc = [p2.projectPath("docs")];
204
+ return hashPaths(docsSrc);
205
+ }
225
206
  // ../actions/src/dev/index.ts
226
207
  import {Action} from "@stacksjs/enums";
227
208
  import {log as log4} from "@stacksjs/logging";
@@ -232,9 +213,8 @@ import {err} from "@stacksjs/error-handling";
232
213
  import {log as log3} from "@stacksjs/logging";
233
214
  import * as p3 from "@stacksjs/path";
234
215
  import {glob} from "@stacksjs/storage";
235
- var {Glob } = globalThis.Bun;
236
216
  async function runAction(action, options) {
237
- const glob2 = new Glob("**/*.ts");
217
+ const glob2 = new Bun.Glob("**/*.ts");
238
218
  const scanOptions = { cwd: p3.userActionsPath(), onlyFiles: true };
239
219
  for await (const file of glob2.scan(scanOptions)) {
240
220
  log3.debug("file", file);
@@ -281,10 +261,10 @@ import {app, ui} from "@stacksjs/config";
281
261
  import {Action as Action3} from "@stacksjs/enums";
282
262
  import {err as err2, handleError, ok} from "@stacksjs/error-handling";
283
263
  import {frameworkPath as frameworkPath3, projectPath as projectPath4} from "@stacksjs/path";
284
- import * as storage6 from "@stacksjs/storage";
264
+ import * as storage5 from "@stacksjs/storage";
285
265
  import {parse} from "yaml";
286
266
  async function packageManager() {
287
- const { packageManager: packageManager2 } = await storage6.readPackageJson(frameworkPath3("package.json"));
267
+ const { packageManager: packageManager2 } = await storage5.readPackageJson(frameworkPath3("package.json"));
288
268
  return packageManager2;
289
269
  }
290
270
  async function initProject() {
@@ -299,9 +279,9 @@ async function initProject() {
299
279
  return ok(result.value);
300
280
  }
301
281
  async function ensureProjectIsInitialized() {
302
- if (storage6.isFile(projectPath4(".env")))
282
+ if (storage5.isFile(projectPath4(".env")))
303
283
  return await isAppKeySet();
304
- if (storage6.isFile(projectPath4(".env.example")))
284
+ if (storage5.isFile(projectPath4(".env.example")))
305
285
  await runCommand3("cp .env.example .env", { cwd: projectPath4() });
306
286
  else
307
287
  console.error("no .env.example file found");
@@ -310,10 +290,10 @@ async function ensureProjectIsInitialized() {
310
290
  async function installIfVersionMismatch() {
311
291
  }
312
292
  async function frameworkVersion() {
313
- return (await storage6.readPackageJson(frameworkPath3("package.json"))).version;
293
+ return (await storage5.readPackageJson(frameworkPath3("package.json"))).version;
314
294
  }
315
295
  async function isAppKeySet() {
316
- const env = await storage6.readTextFile(".env", projectPath4());
296
+ const env = await storage5.readTextFile(".env", projectPath4());
317
297
  const lines = env.data.split("\n");
318
298
  const appKey = lines.find((line) => line.startsWith("APP_KEY="));
319
299
  return !!(appKey && appKey.length > 16);
@@ -341,14 +321,14 @@ function isOptionalString(value) {
341
321
  return value === null || type === "undefined" || type === "string";
342
322
  }
343
323
  async function setEnvValue(key, value) {
344
- const file = await storage6.readTextFile(projectPath4(".env"));
345
- await storage6.writeTextFile({
324
+ const file = await storage5.readTextFile(projectPath4(".env"));
325
+ await storage5.writeTextFile({
346
326
  path: projectPath4(".env"),
347
327
  data: file.data.replace(/APP_KEY=/g, `APP_KEY=${value}`)
348
328
  });
349
329
  }
350
330
  async function runNpmScript(script, options) {
351
- const { data: manifest } = await storage6.readJsonFile("package.json", frameworkPath3());
331
+ const { data: manifest } = await storage5.readJsonFile("package.json", frameworkPath3());
352
332
  if (isManifest(manifest) && hasScript(manifest, script))
353
333
  return await runCommand3(`bun --bun run ${script}`, options);
354
334
  return err2(handleError(`The ${script} script does not exist in the package.json file.`));
@@ -907,7 +887,7 @@ function prettyBytes(number, options) {
907
887
  return prefix + numberString + separator + unit;
908
888
  }
909
889
  // package.json
910
- var version = "0.61.24";
890
+ var version = "0.63.0";
911
891
  export {
912
892
  wordChar,
913
893
  wordBoundary,
@@ -1104,12 +1084,8 @@ export {
1104
1084
  tryOnMounted,
1105
1085
  tryOnBeforeUnmount,
1106
1086
  tryOnBeforeMount,
1107
- trimScale,
1108
- toUnits,
1109
1087
  toString,
1110
- toSnapshot,
1111
1088
  toReactive,
1112
- toDecimal,
1113
1089
  throttledWatch,
1114
1090
  throttledRef,
1115
1091
  throttle,
@@ -1118,7 +1094,6 @@ export {
1118
1094
  tab,
1119
1095
  syncRefs,
1120
1096
  syncRef,
1121
- subtract,
1122
1097
  sticky,
1123
1098
  sleep,
1124
1099
  setSSRHandler,
@@ -1157,14 +1132,9 @@ export {
1157
1132
  notUndefined,
1158
1133
  notNullish,
1159
1134
  not,
1160
- normalizeScale,
1161
1135
  noNull,
1162
- multiply,
1163
1136
  multiline,
1164
- dinero2 as money,
1165
- minimum,
1166
1137
  maybe,
1167
- maximum,
1168
1138
  mapGamepadToXbox360Controller,
1169
1139
  makeDestructurable,
1170
1140
  loop,
@@ -1173,9 +1143,6 @@ export {
1173
1143
  load as loadYaml,
1174
1144
  linefeed,
1175
1145
  letter,
1176
- lessThanOrEqual,
1177
- lessThan,
1178
- isZero,
1179
1146
  isTruthy,
1180
1147
  isOptionalString,
1181
1148
  isManifest,
@@ -1188,12 +1155,7 @@ export {
1188
1155
  injectLocal,
1189
1156
  initProject,
1190
1157
  ignorableWatch,
1191
- haveSameCurrency,
1192
- haveSameAmount,
1193
- hasSubUnits,
1194
1158
  hasScript,
1195
- greaterThanOrEqual,
1196
- greaterThan,
1197
1159
  global,
1198
1160
  getSSRHandler,
1199
1161
  getExportsSize,
@@ -1203,12 +1165,11 @@ export {
1203
1165
  extendRef,
1204
1166
  executeTransition,
1205
1167
  exactly,
1206
- equal,
1207
1168
  ensureProjectIsInitialized,
1208
1169
  eagerComputed,
1209
1170
  dump as dumpYaml,
1210
1171
  dotAll,
1211
- dinero,
1172
+ docsSourceHash,
1212
1173
  digit,
1213
1174
  determineResetPreset,
1214
1175
  determineDebugLevel,
@@ -1244,7 +1205,6 @@ export {
1244
1205
  debouncedRef,
1245
1206
  debounce,
1246
1207
  customStorageEventName,
1247
- dinero3 as currency,
1248
1208
  createUnrefFn,
1249
1209
  createTemplatePromise,
1250
1210
  createSingletonPromise,
@@ -1261,14 +1221,12 @@ export {
1261
1221
  createFetch,
1262
1222
  createEventHook,
1263
1223
  createControlledPromise,
1264
- convert,
1265
1224
  controlledRef,
1266
1225
  controlledComputed,
1267
1226
  computedWithControl,
1268
1227
  computedInject,
1269
1228
  computedEager,
1270
1229
  computedAsync,
1271
- compare,
1272
1230
  cloneFnJSON,
1273
1231
  cleanProject,
1274
1232
  clamp,
@@ -1290,10 +1248,10 @@ export {
1290
1248
  asyncComputed,
1291
1249
  anyOf,
1292
1250
  and,
1293
- allocate,
1294
- add,
1295
- USD,
1296
1251
  Macroable,
1297
1252
  HeadVuePlugin,
1298
1253
  Head
1299
1254
  };
1255
+
1256
+ //# debugId=E32011EB197DC57D64756E2164756E21
1257
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,37 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/base.ts", "../src/clean.ts", "../src/config.ts", "../src/debounce.ts", "../src/equal.ts", "../src/export-size.ts", "../src/find.ts", "../src/function.ts", "../src/git.ts", "../src/guards.ts", "../src/hash.ts", "../../actions/src/dev/index.ts", "../../actions/src/helpers/utils.ts", "../../actions/src/generate/index.ts", "../../actions/src/helpers/vscode-custom-data.ts", "../../actions/src/commit.ts", "../../actions/src/add.ts", "../../actions/src/make.ts", "../src/helpers.ts", "../src/macroable.ts", "../src/math.ts", "../src/promise.ts", "../src/regex.ts", "../src/retry.ts", "../src/sleep.ts", "../src/throttle.ts", "../src/vendors.ts", "../../../../../node_modules/pretty-bytes/index.js"],
4
+ "sourcesContent": [
5
+ "export { toString } from '@stacksjs/strings'\n\n// export function assert(condition: boolean, message: string): asserts condition {\n// if (!condition)\n// throw new Error(message)\n// }\n\n// export function noop() {}\n\nexport async function loop(times: number, callback: any) {\n ;[...Array(times)].forEach(async (item, i) => await callback(i))\n}\n",
6
+ "import { path as p } from '@stacksjs/path'\n\nexport async function cleanProject() {\n const $ = Bun.$\n await $`rm -rf ${p.projectPath('bun.lockb')}`\n await $`rm -rf ${p.projectPath('yarn.lock')}` // just in case\n await $`rm -rf ${p.projectPath('node_modules/')}`\n await $`rm -rf ${p.frameworkPath('dist')}`\n await $`rm -rf ${p.frameworkPath('node_modules')}`\n await $`rm -rf ${p.frameworkPath('**/dist')}`\n await $`rm -rf ${p.frameworkPath('**/node_modules')}`\n await $`rm -rf ${p.frameworkCloudPath('cdk.out/')}`\n await $`rm -rf ${p.frameworkCloudPath('cdk.context.json')}`\n await $`rm -rf ${p.frameworkCloudPath('dist.zip')}`\n}\n",
7
+ "export {\n defineApp,\n defineCache,\n defineCli,\n defineCdn,\n defineCronJob,\n defineJob,\n defineDependencies,\n defineDatabase,\n defineDns,\n defineEmailConfig,\n defineGit,\n defineHashing,\n defineLibrary,\n defineNotification,\n defineSms,\n defineEmail,\n defineChat,\n definePayment,\n defineQueue,\n defineSearchEngine,\n defineServices,\n defineStorage,\n defineUi,\n} from '@stacksjs/config'\n",
8
+ "export { debounce } from 'perfect-debounce'\n",
9
+ "import { getTypeName } from '@stacksjs/types'\n\nexport function isDeepEqual(value1: any, value2: any): boolean {\n const type1 = getTypeName(value1)\n const type2 = getTypeName(value2)\n if (type1 !== type2) return false\n\n if (type1 === 'array') {\n if (value1.length !== value2.length) return false\n\n return value1.every((item: any, i: number) => {\n return isDeepEqual(item, value2[i])\n })\n }\n if (type1 === 'object') {\n const keyArr = Object.keys(value1)\n if (keyArr.length !== Object.keys(value2).length) return false\n\n return keyArr.every((key: string) => {\n return isDeepEqual(value1[key], value2[key])\n })\n }\n return Object.is(value1, value2)\n}\n",
10
+ "export { getExportsSize } from 'export-size'\n",
11
+ "import type { Dirent } from 'node:fs'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { italic } from '@stacksjs/cli'\nimport { log } from '@stacksjs/logging'\n\nconst targetFileName = 'buddy' // The exact name of the target file\n\nconst excludePatterns = [\n 'node_modules',\n 'dist',\n 'vendor',\n `${os.homedir()}/Documents`,\n `${os.homedir()}/Pictures`,\n `${os.homedir()}/Library`,\n `${os.homedir()}/.Trash`,\n /.*out.*|.*\\.out.*|out-.*/, // exclude any folder with 'out' in the name\n /.*\\/\\..*/, // exclude any folder that starts with a dot\n]\n\ninterface FindStacksProjectsOptions {\n quiet?: boolean\n}\n\nexport async function findStacksProjects(dir?: string, options?: FindStacksProjectsOptions): Promise<string[]> {\n dir = dir || os.homedir()\n\n if (!options?.quiet) {\n log.info(`Searching for Stacks projects in: ${italic(dir)}`)\n log.info(`This may take a few moments...`)\n console.log('')\n console.log(italic(' Please note, while Stacks is searching for projects on your machine,'))\n console.log(italic(' you may be asked for permissions to scan certain directories.'))\n console.log('')\n log.debug(`Excluding directories: ${excludePatterns.join(', ')}`)\n }\n\n const foundProjects = await searchDirectory(dir)\n\n if (!foundProjects) throw new Error('No Stacks projects found')\n\n return foundProjects\n}\n\nasync function searchDirectory(directory: string) {\n const foundProjects: string[] = []\n\n const isExcluded = excludePatterns.some((pattern) =>\n typeof pattern === 'string' ? directory.includes(pattern) : pattern.test(directory),\n )\n if (isExcluded) return\n\n let items: Dirent[]\n try {\n items = await fs.readdir(directory, { withFileTypes: true })\n } catch (error) {\n console.error(`Error reading directory ${directory}:`, error)\n return\n }\n\n let buddyFileFound = false\n let storageDirFound = false\n\n for (const item of items) {\n if (item.isFile() && item.name === targetFileName) {\n buddyFileFound = true\n } else if (item.isDirectory()) {\n // Recursively search in directories\n const fullPath = path.join(directory, item.name)\n if (item.name === 'storage') {\n // Check if the 'storage/framework/core/buddy/' structure exists within this directory\n try {\n const storagePath = path.join(fullPath, 'framework/core/buddy')\n await fs.access(storagePath)\n storageDirFound = true\n } catch (error) {\n // The specific directory structure does not exist\n }\n }\n await searchDirectory(fullPath)\n }\n }\n\n if (buddyFileFound && storageDirFound) foundProjects.push(directory) // Both conditions are met\n\n return foundProjects\n}\n",
12
+ "import type { Fn, Nullable } from '@stacksjs/types'\n\n/**\n * Call every function in an array\n */\nexport function batchInvoke(functions: Nullable<Fn>[]) {\n functions.forEach((fn) => fn?.())\n}\n\n// /**\n// * Call the function\n// */\n// export function invoke(fn: Fn) {\n// return fn()\n// }\n\n/**\n * Pass the value through the callback, and return the value\n *\n * @example\n * ```\n * function createUser(name: string): User {\n * return tap(new User, user => {\n * user.name = name\n * })\n * }\n * ```\n */\nexport function tap<T>(value: T, callback: (value: T) => void): T {\n callback(value)\n return value\n}\n",
13
+ "import { execSync } from 'node:child_process'\n\nexport function isGitClean() {\n try {\n execSync('git diff-index --quiet HEAD --')\n return true\n } catch (error) {\n return false\n }\n}\n",
14
+ "/**\n * Type guard to filter out null-ish values\n *\n * @category Guards\n * @example array.filter(notNullish)\n */\nexport function notNullish<T>(v: T | null | undefined): v is NonNullable<T> {\n return v != null\n}\n\n/**\n * Type guard to filter out null values\n *\n * @category Guards\n * @example array.filter(noNull)\n */\nexport function noNull<T>(v: T | null): v is Exclude<T, null> {\n return v !== null\n}\n\n/**\n * Type guard to filter out null-ish values\n *\n * @category Guards\n * @example array.filter(notUndefined)\n */\nexport function notUndefined<T>(v: T): v is Exclude<T, undefined> {\n return v !== undefined\n}\n\n/**\n * Type guard to filter out falsy values\n *\n * @category Guards\n * @example array.filter(isTruthy)\n */\nexport function isTruthy<T>(v: T): v is NonNullable<T> {\n return Boolean(v)\n}\n",
15
+ "import { config } from '@stacksjs/config'\nimport { log } from '@stacksjs/logging'\nimport { path as p } from '@stacksjs/path'\nimport { hashPaths } from '@stacksjs/storage'\n\nexport function originRequestFunctionHash() {\n try {\n return hashPaths(p.cloudPath('src/edge'))\n } catch (error: any) {\n log.error('Are we in a Docker container? Failed to hash paths. Error below:')\n log.error(error)\n return undefined\n }\n}\n\nexport function websiteSourceHash() {\n const docsSrc = [p.projectPath('docs')]\n const websiteSrc = [\n p.projectPath('resources/views'),\n p.projectPath('resources/assets'),\n p.projectPath('resources/lang'),\n p.projectPath('resources/functions'),\n p.projectPath('resources/components'),\n p.projectPath('resources/modules'),\n p.projectPath('resources/stores'),\n ]\n\n return config.app.docMode === true ? hashPaths(docsSrc) : hashPaths(websiteSrc)\n}\n\nexport function docsSourceHash() {\n const docsSrc = [p.projectPath('docs')]\n\n return hashPaths(docsSrc)\n}\n",
16
+ "import { Action } from '@stacksjs/enums'\nimport { log } from '@stacksjs/logging'\nimport type { DevOptions } from '@stacksjs/types'\nimport { runAction } from '../helpers'\n\nexport async function runDevServer(options: DevOptions) {\n log.info('Starting your Frontend Engine...')\n await runAction(Action.Dev, options)\n}\n\nexport async function runFrontendDevServer(options: DevOptions) {\n log.info('Starting your UI Engine...')\n await runAction(Action.Dev, options)\n}\n\nexport async function runBackendDevServer(options: DevOptions) {\n runApiDevServer(options)\n}\n\nexport async function runApiDevServer(options: DevOptions) {\n log.info('Starting your API...')\n await runAction(Action.DevApi, options)\n}\n\nexport async function runComponentsDevServer(options: DevOptions) {\n log.info('Starting your Library Engine...')\n await runAction(Action.DevComponents, options)\n}\n\nexport async function runDashboardDevServer(options: DevOptions) {\n log.info('Starting your Dashboard...')\n await runAction(Action.DevDashboard, options)\n}\n\nexport async function runSystemTrayDevServer(options: DevOptions) {\n log.info('Starting your System Tray...')\n await runAction(Action.DevSystemTray, options)\n}\n\nexport async function runDesktopDevServer(options: DevOptions) {\n log.info('Starting your Desktop Engine...')\n await runAction(Action.DevDesktop, options)\n}\n\nexport async function runDocsDevServer(options: DevOptions) {\n log.info('Starting your Docs Engine...')\n await runAction(Action.DevDocs, options)\n}\n",
17
+ "import type { Action as ActionType } from '@stacksjs/actions'\nimport { buddyOptions, runCommand, runCommands } from '@stacksjs/cli'\nimport { err } from '@stacksjs/error-handling'\nimport { log } from '@stacksjs/logging'\nimport * as p from '@stacksjs/path'\nimport { glob } from '@stacksjs/storage'\nimport type { ActionOptions } from '@stacksjs/types'\n\ntype ActionPath = string // TODO: narrow this by automating its generation\ntype ActionName = string // TODO: narrow this by automating its generation\ntype Action = ActionPath | ActionName | string\n\n/**\n * Run an Action the Stacks way.\n *\n * @param action The action to invoke.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n */\nexport async function runAction(action: Action, options?: ActionOptions) {\n // check if action is a file anywhere in ./app/Actions/**/*.ts\n // if it is, return and await the action\n const glob = new Bun.Glob('**/*.ts')\n const scanOptions = { cwd: p.userActionsPath(), onlyFiles: true }\n\n for await (const file of glob.scan(scanOptions)) {\n log.debug('file', file)\n if (file === `${action}.ts` || file.endsWith(`${action}.ts`))\n return ((await import(/* @vite-ignore */ p.userActionsPath(file))).default as ActionType).handle()\n\n // if a custom model name is used, we need to check for it\n const a = await import(/* @vite-ignore */ p.userActionsPath(file))\n if (a.name === action) return await a.handle()\n }\n\n // or else, just run the action normally by assuming the action is core Action, stored in p.actionsPath\n const opts = buddyOptions()\n const path = p.relativeActionsPath(`src/${action}.ts`)\n const cmd = `bun --bun ${path} ${opts}`.trimEnd()\n const optionsWithCwd = {\n cwd: options?.cwd || p.projectPath(),\n ...options,\n }\n\n log.debug('runAction:', cmd)\n log.debug('action options:', optionsWithCwd)\n\n return await runCommand(cmd, optionsWithCwd)\n}\n\n/**\n * Run Actions the Stacks way.\n *\n * @param actions The actions to invoke.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n */\nexport async function runActions(actions: Action[], options?: ActionOptions) {\n log.debug('runActions:', actions, options)\n\n if (!actions.length) return err('No actions were specified')\n\n for (const action of actions) {\n log.debug(`running action \"${action}\"`)\n if (!hasAction(action)) return err(`The specified action \"${action}\" does not exist`)\n }\n\n const opts = buddyOptions()\n\n const o = {\n cwd: options?.cwd || p.projectPath(),\n ...options,\n }\n\n const commands = actions.map((action) => `bun --bun ${p.relativeActionsPath(`src/${action}.ts`)} ${opts}`)\n\n log.debug('commands:', commands)\n\n return await runCommands(commands, o)\n}\n\n// looks in most common locations\nexport function hasAction(action: Action) {\n // Define patterns specifically for user actions\n const userActionPatterns = [\n `${action}.ts`,\n `${action}`,\n `Dashboard/${action}.ts`,\n `Dashboard/${action}`,\n `Buddy/${action}.ts`,\n `Buddy/${action}`,\n ]\n\n // Define patterns specifically for core actions\n const actionPatterns = [`src/${action}.ts`, `src/${action}`, `${action}.ts`, `${action}`]\n\n // Check user actions path with its specific patterns\n const userActionFiles = glob.sync(userActionPatterns.map((pattern) => p.userActionsPath(pattern)))\n\n // Check actions path with its specific patterns\n const actionFiles = glob.sync(actionPatterns.map((pattern) => p.actionsPath(pattern)))\n\n return userActionFiles.length > 0 || actionFiles.length > 0\n\n // TODO: need to loop through all user actions and check whether the name is a valid action name match\n\n // return false\n}\n",
18
+ "import process from 'node:process'\nimport { runCommand } from '@stacksjs/cli'\nimport { Action, NpmScript } from '@stacksjs/enums'\nimport { log } from '@stacksjs/logging'\nimport { frameworkPath, projectPath } from '@stacksjs/path'\nimport type { GeneratorOptions } from '@stacksjs/types'\nimport { runNpmScript } from '@stacksjs/utils'\nimport { runAction } from '../helpers'\nimport { generateVsCodeCustomData as genVsCodeCustomData } from '../helpers/vscode-custom-data'\n\n// import { files } from '@stacksjs/storage'\n\nexport async function invoke(options?: GeneratorOptions) {\n if (options?.types) await generateTypes(options)\n else if (options?.entries) await generateLibEntries(options)\n else if (options?.webTypes) await generateWebTypes(options)\n else if (options?.customData) await generateVsCodeCustomData(options)\n else if (options?.ideHelpers) await generateIdeHelpers(options)\n else if (options?.componentMeta) await generateComponentMeta(options)\n else if (options?.coreSymlink) await generateCoreSymlink()\n}\n\nexport function generate(options: GeneratorOptions) {\n return invoke(options)\n}\n\nexport async function generateLibEntries(options: GeneratorOptions) {\n const result = await runAction(Action.GenerateLibraryEntries, {\n ...options,\n cwd: projectPath(),\n })\n\n if (result.isErr()) {\n log.error('There was an error generating your library entry points', result.error)\n process.exit()\n }\n\n log.success('Library entry points generated successfully')\n}\n\nexport async function generateWebTypes(options?: GeneratorOptions) {\n const result = await runNpmScript(NpmScript.GenerateWebTypes, options)\n\n if (result.isErr()) {\n log.error('There was an error generating the web-types.json file.', result.error)\n process.exit()\n }\n\n log.success('Successfully generated the web-types.json file')\n}\n\nexport async function generateVsCodeCustomData(options?: GeneratorOptions) {\n const result = await genVsCodeCustomData()\n\n if (result.isErr()) {\n log.error('There was an error generating the custom-elements.json file.', result.error)\n process.exit()\n }\n\n await runAction(Action.LintFix, { verbose: true }) // because the generated json file needs to be linted\n\n log.success('Successfully generated the custom-elements.json file')\n}\n\nexport async function generateIdeHelpers(options?: GeneratorOptions) {\n const result = await runNpmScript(NpmScript.GenerateIdeHelpers, options)\n\n if (result.isErr()) {\n log.error('There was an error generating IDE helpers.', result.error)\n process.exit()\n }\n\n await runAction(Action.LintFix, { verbose: true }) // the generated json file needs to be linted\n log.success('Successfully generated IDE helpers')\n}\n\nexport async function generateComponentMeta(options?: GeneratorOptions) {\n const result = await genVsCodeCustomData()\n\n if (result.isErr()) {\n log.error('There was an error generating your component meta information.', result.error)\n process.exit()\n }\n\n await runAction(Action.LintFix, { verbose: true }) // the generated json file needs to be linted\n log.success('Successfully generated component meta information')\n}\n\nexport async function generateTypes(options?: GeneratorOptions) {\n const result = await runNpmScript(NpmScript.GenerateTypes, {\n cwd: frameworkPath(),\n ...options,\n })\n\n if (result.isErr()) {\n log.error('There was an error generating your types.', result.error)\n process.exit()\n }\n\n log.success('Types were generated successfully')\n}\n\nexport function generatePkgxConfig() {\n // write the yaml string to a file in your project root\n // files.put(projectPath('./pkgx.yaml'), yamlStr)\n\n log.success('Successfully generated `./pkgx.yaml` based on your config')\n}\n\nexport async function generateSeeder() {\n // await seed()\n}\n\nexport async function generateCoreSymlink() {\n await runCommand(`ln -s ${frameworkPath()} ${projectPath('.stacks')}`)\n}\n",
19
+ "import { log } from '@stacksjs/logging'\nimport { customElementsDataPath } from '@stacksjs/path'\nimport { writeTextFile } from '@stacksjs/storage'\nimport library from '~/config/library'\n\nexport async function generateVsCodeCustomData() {\n try {\n log.info('Generating custom-elements.json...')\n // the version does not have to be set here,\n // it will be set automatically by the release script\n await writeTextFile({\n path: customElementsDataPath(),\n data: generateComponentInfoData(),\n })\n log.success('Generated custom-elements.json for IDEs.')\n } catch (err) {\n log.error('There was an error generating the custom-elements.json file.', err)\n }\n}\n\nexport async function generateWebTypes() {\n log.info('Generating web-types.json...')\n log.info('This feature is not yet implemented.')\n}\n\nfunction generateComponentInfoData() {\n const componentsData = JSON.stringify(library.vueComponents?.tags)\n\n return `{\n \"version\": 1.1,\n \"tags\": ${componentsData}\n}\n`\n}\n",
20
+ "import { NpmScript } from '@stacksjs/enums'\nimport { log } from '@stacksjs/logging'\nimport type { CleanOptions } from '@stacksjs/types'\nimport { runNpmScript } from '@stacksjs/utils'\n\nexport async function invoke(options: CleanOptions) {\n log.info('Committing...')\n await runNpmScript(NpmScript.Commit, options)\n log.success('Committed')\n}\n\nexport async function commit(options: CleanOptions) {\n return invoke(options)\n}\n",
21
+ "import { installPackage } from '@stacksjs/cli'\nimport type { AddOptions } from '@stacksjs/types'\n\nexport async function invoke(options: AddOptions) {\n if (options?.table) await addTable()\n\n if (options?.calendar) await addCalendar()\n}\n\nexport async function add(options: AddOptions) {\n return invoke(options)\n}\n\nexport async function addTable() {\n await installPackage('@stacksjs/table')\n}\n\nexport async function addCalendar() {\n await installPackage('@stacksjs/calendar')\n}\n\nexport async function installPackages(names: string[]) {\n for (const name of names) await installPackage(name)\n}\n",
22
+ "import process from 'node:process'\nimport { italic } from '@stacksjs/cli'\nimport { log } from '@stacksjs/logging'\nimport { frameworkPath, path as p, projectPath, resolve } from '@stacksjs/path'\nimport { createFolder, doesFolderExist, writeTextFile } from '@stacksjs/storage'\nimport type { MakeOptions } from '@stacksjs/types'\n\nexport async function invoke(options: MakeOptions) {\n if (options.component) await makeComponent(options)\n if (options.database) makeDatabase(options)\n if (options.function) await makeFunction(options)\n if (options.language) await makeLanguage(options)\n\n // if (options.migration)\n // await migration(options)\n\n if (options.notification) await makeNotification(options)\n if (options.page) await makePage(options)\n if (options.stack) makeStack(options)\n}\n\nexport async function make(options: MakeOptions) {\n return invoke(options)\n}\n\nexport async function makeAction(options: MakeOptions) {\n try {\n const name = options.name\n log.info('Creating your action...')\n await createAction(options)\n log.success(`Created ${italic(name)} action`)\n } catch (error) {\n log.error('There was an error creating your action', error)\n process.exit()\n }\n}\n\nexport async function makeComponent(options: MakeOptions) {\n try {\n const name = options.name\n log.info('Creating your component...')\n await createComponent(options)\n log.success(`Created ${italic(name)} component`)\n } catch (error) {\n log.error('There was an error creating your component', error)\n process.exit()\n }\n}\n\nexport async function createAction(options: MakeOptions) {\n const name = options.name\n await writeTextFile({\n path: p.userActionsPath(`${name}.ts`),\n data: `import { Action } from '@stacksjs/actions'\n\nexport default new Action({\n name: '${name}',\n description: '${name} action',\n\n handle() {\n return 'Hello World action'\n },\n})\n`,\n })\n}\n\nexport async function createComponent(options: MakeOptions) {\n const name = options.name\n await writeTextFile({\n path: p.userComponentsPath(`${name}.stx`),\n data: `<script setup lang=\"ts\">\nconsole.log('Hello World component created')\n</script>\n\n<template>\n <div>\n Some HTML block\n </div>\n</template>\n`,\n })\n}\n\nexport function makeDatabase(options: MakeOptions) {\n try {\n const name = options.name\n log.info(`Creating your ${italic(name)} database...`)\n createDatabase(options)\n log.success(`Created ${italic(name)} database`)\n } catch (error) {\n log.error('There was an error creating your database', error)\n process.exit()\n }\n}\n\nexport function createDatabase(options: MakeOptions) {\n console.log('createDatabase options', options) // wip\n}\n\nexport function factory(options: MakeOptions) {\n try {\n const name = options.name\n log.info(`Creating your ${italic(name)} factory...`)\n createDatabase(options)\n log.success(`Created ${italic(name)} factory`)\n } catch (error) {\n log.error('There was an error creating your factory', error)\n process.exit()\n }\n}\n\nexport function createFactory(options: MakeOptions) {\n console.log('options', options) // wip\n}\n\nexport async function makeNotification(options: MakeOptions) {\n try {\n const name = options.name\n log.info(`Creating your ${italic(name)} notification...`)\n await createNotification(options)\n log.success(`Created ${italic(name)} notification`)\n } catch (error) {\n log.error('There was an error creating your notification', error)\n process.exit()\n }\n}\n\nexport async function makePage(options: MakeOptions) {\n try {\n const name = options.name\n log.info('Creating your page...')\n await createPage(options)\n log.success(`Created ${name} page`)\n } catch (error) {\n log.error('There was an error creating your page', error)\n process.exit()\n }\n}\n\nexport async function createPage(options: MakeOptions) {\n const name = options.name\n await writeTextFile({\n path: p.userViewsPath(`${name}.stx`),\n data: `<script setup lang=\"ts\">\nconsole.log('Hello World page created')\n</script>\n\n<template>\n <div>\n Visit http://127.0.0.1/${name}\n </div>\n</template>\n`,\n })\n}\n\nexport async function makeFunction(options: MakeOptions) {\n try {\n const name = options.name\n log.info('Creating your function...')\n await createFunction(options)\n log.success(`Created ${name} function`)\n } catch (error) {\n log.error('There was an error creating your function', error)\n process.exit()\n }\n}\n\nexport async function createFunction(options: MakeOptions) {\n const name = options.name\n await writeTextFile({\n path: p.userFunctionsPath(`${name}.ts`),\n data: `// reactive state\nconst ${name} = ref(0)\n\n// functions that mutate state and trigger updates\nfunction increment() {\n ${name}.value++\n}\n\nexport {\n ${name},\n increment,\n}\n`,\n })\n}\n\nexport async function makeLanguage(options: MakeOptions) {\n try {\n const name = options.name\n log.info('Creating your translation file...')\n await createLanguage(options)\n log.success(`Created ${name} translation file`)\n } catch (error) {\n log.error('There was an error creating your language.', error)\n process.exit()\n }\n}\n\nexport async function createLanguage(options: MakeOptions) {\n const name = options.name\n await writeTextFile({\n path: p.resourcesPath(`lang/${name}.yml`),\n data: `button:\n text: Copy\n`,\n })\n}\n\nexport function makeStack(options: MakeOptions) {\n try {\n const name = options.name\n log.info(`Creating your ${name} stack...`)\n const path = resolve(process.cwd(), name)\n\n // await spawn(`giget stacks ${path}`)\n log.success('Successfully scaffolded your project')\n log.info(`cd ${path} && bun install`)\n } catch (error) {\n log.error('There was an error creating your stack', error)\n process.exit()\n }\n}\n\nexport async function createNotification(options: MakeOptions) {\n const name = options.name\n try {\n let importOption = 'EmailOptions'\n\n if (!doesFolderExist('notifications')) await createFolder('./notifications')\n\n if (options.chat) importOption = 'ChatOptions'\n\n if (options.sms) importOption = 'SMSOptions'\n\n await writeTextFile({\n path: p.userNotificationsPath(`${name}.ts`),\n data: `import type { ${importOption} } from \\'@stacksjs/types\\'\n\nfunction content(): string {\n return 'example'\n}\n\nfunction send(): ${importOption} {\n return {\n content: content(),\n }\n}`,\n })\n\n return true\n } catch (error) {\n return false\n }\n}\n\nexport async function createMigration(options: MakeOptions) {\n const optionName = options.name\n // const table = options.tableName\n const table = 'dummy-name'\n\n if (!optionName[0]) throw new Error('options.name is required and cannot be empty')\n\n const name = optionName[0].toUpperCase() + optionName.slice(1)\n const path = frameworkPath(`database/migrations/${name}.ts`)\n\n try {\n await writeTextFile({\n path: `${path}`,\n data: `import { Kysely } from 'kysely'\n\nexport async function up(db: Kysely<any>): Promise<void> {\n await db.schema\n .createTable('${table}')\n .addColumn('id', 'integer', col => col.autoIncrement().primaryKey())\n .execute()\n}`,\n })\n\n log.success(`Successfully created your migration file at stacks/database/migrations/${name}.ts`)\n } catch (error: any) {\n log.error(error)\n }\n}\n\nexport async function createModel(options: MakeOptions) {\n const optionName = options.name\n\n if (!optionName[0]) throw new Error('options.name is required and cannot be empty')\n\n const name = optionName[0].toUpperCase() + optionName.slice(1)\n const path = p.userModelsPath(`${name}.ts`)\n\n try {\n await writeTextFile({\n path: `${path}`,\n data: `import { faker } from '@stacksjs/faker'\nimport { schema } from '@stacksjs/validation'\nimport type { Model } from '@stacksjs/types'\n\nexport default {\n name: '${name}',\n\n traits: {\n useTimestamps: true,\n\n useSeeder: {\n count: 10,\n },\n },\n\n attributes: {\n // your attributes here\n },\n} satisfies Model`,\n })\n\n log.success(`Model created: ${italic(`app/Models/${name}.ts`)}`)\n } catch (error: any) {\n log.error(error)\n }\n}\n",
23
+ "import type { AddressInfo } from 'node:net'\nimport { runAction } from '@stacksjs/actions'\nimport { log, runCommand } from '@stacksjs/cli'\nimport { app, ui } from '@stacksjs/config'\nimport type { NpmScript } from '@stacksjs/enums'\nimport { Action } from '@stacksjs/enums'\nimport type { Result } from '@stacksjs/error-handling'\nimport { err, handleError, ok } from '@stacksjs/error-handling'\nimport { frameworkPath, projectPath } from '@stacksjs/path'\nimport * as storage from '@stacksjs/storage'\nimport type { CliOptions, Manifest, Subprocess } from '@stacksjs/types'\nimport { parse } from 'yaml'\n\n// import { semver } from './versions'\n\nexport async function packageManager() {\n const { packageManager } = await storage.readPackageJson(frameworkPath('package.json'))\n return packageManager\n}\n\nexport async function initProject(): Promise<Result<Subprocess, Error>> {\n if (app.env !== 'production') log.info('Project not yet initialized, generating application key...')\n else handleError('Please run `buddy key:generate` to generate an application key')\n\n const result = await runAction(Action.KeyGenerate, { cwd: projectPath() })\n\n if (result.isErr()) return err(handleError(result.error))\n\n log.info('Application key generated.')\n\n return ok(result.value)\n}\n\nexport async function ensureProjectIsInitialized() {\n if (storage.isFile(projectPath('.env'))) return await isAppKeySet()\n\n // copy the .env.example file to .env\n if (storage.isFile(projectPath('.env.example'))) await runCommand('cp .env.example .env', { cwd: projectPath() })\n else console.error('no .env.example file found')\n\n return await isAppKeySet()\n}\n\nexport async function installIfVersionMismatch() {\n // const requiredBunVersion = '0.8.1'\n // const installedBunVersion = process.version\n // if (!semver.satisfies(installedBunVersion, requiredBunVersion)) {\n // log.warn(`Installed Bun version ${italic(installedBunVersion)} does not satisfy required version ${italic(requiredBunVersion)}. Adding it to your environment. One moment...`)\n // await runCommand(`tea +bun.sh${requiredBunVersion} >/dev/null 2>&1`)\n // }\n}\n\nexport async function frameworkVersion(): Promise<string> {\n return (await storage.readPackageJson(frameworkPath('package.json'))).version\n}\n\nexport async function isAppKeySet() {\n const env = await storage.readTextFile('.env', projectPath())\n const lines = env.data.split('\\n')\n const appKey = lines.find((line) => line.startsWith('APP_KEY='))\n\n return !!(appKey && appKey.length > 16)\n}\n\n/**\n * Determines the utilized reset preset.\n *\n * @url https://www.npmjs.com/package/@unocss/reset\n * @param preset\n */\nexport function determineResetPreset(preset?: string) {\n if (ui.reset) preset = ui.reset\n\n if (preset === 'tailwind') return [\"import '@unocss/reset/tailwind.css'\"]\n\n if (preset === 'normalize') return [\"import '@unocss/reset/normalize.css'\"]\n\n if (preset === 'sanitize')\n return [\"import '@unocss/reset/sanitize/sanitize.css'\", \"import '@unocss/reset/sanitize/assets.css\"]\n\n if (preset === 'eric-meyer') return [\"import '@unocss/reset/eric-meyer.css'\"]\n\n if (preset === 'antfu') return [\"import '@unocss/reset/antfu.css'\"]\n\n return []\n}\n\n/**\n * Determines whether the specified value is a package manifest.\n */\nexport function isManifest(obj: any): obj is Manifest {\n return (\n obj &&\n typeof obj === 'object' &&\n isOptionalString(obj.name) &&\n isOptionalString(obj.version) &&\n isOptionalString(obj.description)\n )\n}\n\n/**\n * Determines whether the specified value is a string, null, or undefined.\n */\nexport function isOptionalString(value: any): value is string | undefined {\n const type = typeof value\n return value === null || type === 'undefined' || type === 'string'\n}\n\nexport async function setEnvValue(key: string, value: string) {\n const file = await storage.readTextFile(projectPath('.env'))\n\n await storage.writeTextFile({\n path: projectPath('.env'),\n data: file.data.replace(/APP_KEY=/g, `APP_KEY=${value}`), // todo: do not hardcode the APP_KEY here and instead use the key parameter\n })\n}\n\n/**\n * Runs the specified NPM script in the package.json file.\n */\nexport async function runNpmScript(script: NpmScript, options?: CliOptions): Promise<Result<Subprocess, Error>> {\n const { data: manifest } = await storage.readJsonFile('package.json', frameworkPath())\n\n // simple, yet effective check to see if the script exists\n if (isManifest(manifest) && hasScript(manifest, script)) return await runCommand(`bun --bun run ${script}`, options)\n\n return err(handleError(`The ${script} script does not exist in the package.json file.`))\n}\n\n/**\n * Determines whether the specified NPM script exists in the given manifest.\n */\nexport function hasScript(manifest: Manifest, script: NpmScript): boolean {\n const scripts = manifest.scripts as Record<NpmScript, string> | undefined\n\n if (scripts && typeof scripts === 'object') return Boolean(scripts[script])\n\n return false\n}\n\nexport function parseYaml(content: any) {\n return parse(content)\n}\n\n/**\n * Determines the level of debugging.\n *\n * The debug level is determined by the following:\n * 1. The --verbose flag\n * 2. The debug property in the app configuration\n *\n * Currently, we don't support a custom debug level,\n * though, we would like to in the future.\n *\n * @param options\n */\nexport function determineDebugLevel(options?: CliOptions) {\n if (options?.verbose === true) return true\n\n return app.debug === true\n}\n\nexport function isIpv6(address: AddressInfo): boolean {\n return (\n address.family === 'IPv6' ||\n // in node >=18.0 <18.4 this was an integer value. This was changed in a minor version.\n // See: https://github.com/laravel/vite-plugin/issues/103\n\n // @ts-expect-error-next-line\n address.family === 6\n )\n}\n\nexport { dump as dumpYaml, load as loadYaml } from 'js-yaml'\n",
24
+ "export { Macroable } from 'macroable'\n",
25
+ "export const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\n\nexport function rand(min: number, max: number) {\n min = Math.ceil(min)\n max = Math.floor(max)\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\n// not, -> exported as well in ../regex\nexport {\n and,\n createGenericProjection,\n createProjection,\n logicNot,\n logicOr,\n or,\n useAbs,\n useAverage,\n useCeil,\n useClamp,\n useFloor,\n useMath,\n useMax,\n useMin,\n usePrecision,\n useProjection,\n useRound,\n useSum,\n useTrunc,\n} from '@vueuse/math'\n",
26
+ "import { remove } from '@stacksjs/arrays'\n\nexport interface SingletonPromiseReturn<T> {\n (): Promise<T>\n /**\n * Reset current staled promise.\n * Await it to have proper shutdown.\n */\n reset: () => Promise<void>\n}\n\n// export { peek } from 'bun'\n\n/**\n * Promise with `resolve` and `reject` methods of itself\n */\nexport interface ControlledPromise<T = void> extends Promise<T> {\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: any) => void\n}\n\n/**\n * Create singleton promise function.\n *\n * @category Promise\n */\nexport function createSingletonPromise<T>(fn: () => Promise<T>): SingletonPromiseReturn<T> {\n let _promise: Promise<T> | undefined\n\n function wrapper() {\n if (!_promise) _promise = fn()\n return _promise\n }\n wrapper.reset = async () => {\n const _prev = _promise\n _promise = undefined\n if (_prev) await _prev\n }\n\n return wrapper\n}\n\n/**\n * Create a promise lock.\n *\n * @category Promise\n * @example\n * ```\n * const lock = createPromiseLock()\n *\n * lock.run(async () => {\n * await doSomething()\n * })\n *\n * // in anther context:\n * await lock.wait() // it will wait all tasking finished\n * ```\n */\nexport function createPromiseLock() {\n const locks: Promise<any>[] = []\n\n return {\n async run<T = void>(fn: () => Promise<T>): Promise<T> {\n const p = fn()\n locks.push(p)\n try {\n return await p\n } finally {\n remove(locks, p)\n }\n },\n async wait(): Promise<void> {\n await Promise.allSettled(locks)\n },\n isWaiting() {\n return Boolean(locks.length)\n },\n clear() {\n locks.length = 0\n },\n }\n}\n\n/**\n * Return a Promise with `resolve` and `reject` methods\n *\n * @category Promise\n * @example\n * ```\n * const promise = createControlledPromise()\n *\n * await promise\n *\n * // in anther context:\n * promise.resolve(data)\n * ```\n */\nexport function createControlledPromise<T>(): ControlledPromise<T> {\n let resolve: any\n let reject: any\n\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n }) as ControlledPromise<T>\n\n promise.resolve = resolve\n\n promise.reject = reject\n return promise\n}\n\n/**\n * Create a promise that will be resolved after `ms` milliseconds.\n */\n// export { sleep, sleepSync } from 'bun'\n",
27
+ "export type {\n Flag,\n MagicRegExp,\n MagicRegExpMatchArray,\n Input,\n MapToStringCapturedBy,\n StringCapturedBy,\n} from 'magic-regexp'\nexport {\n createRegExp,\n caseInsensitive,\n anyOf,\n carriageReturn,\n char,\n charIn,\n charNotIn,\n digit,\n dotAll,\n exactly,\n global,\n letter,\n linefeed,\n maybe,\n multiline,\n not,\n oneOrMore,\n sticky,\n tab,\n unicode,\n whitespace,\n withIndices,\n word,\n wordBoundary,\n wordChar,\n} from 'magic-regexp'\n",
28
+ "export function retry(fn: Function, options: any): Promise<any> {\n const { retries = 3, initialDelay = 1000, backoffFactor = 2, jitter = true } = options\n\n return new Promise((resolve, reject) => {\n let attemptCount = 0\n const attempt = async () => {\n try {\n resolve(await fn())\n } catch (err) {\n if (attemptCount >= retries) {\n reject(err)\n } else {\n const delay = calculateDelay(attemptCount, initialDelay, backoffFactor, jitter)\n setTimeout(() => attempt(), delay)\n attemptCount++\n }\n }\n }\n attempt()\n })\n}\n\nexport function calculateDelay(\n attemptCount: number,\n initialDelay: number,\n backoffFactor: number,\n jitter?: boolean,\n): number {\n let delay = initialDelay * backoffFactor ** attemptCount\n if (jitter) {\n const random = Math.random() // Generates a number between 0 and 1\n const jitterValue = delay * 0.3 // Jitter will be up to 30% of the delay\n delay = delay + jitterValue * (random - 0.5) * 2 // Adjust delay randomly within ±30%\n }\n return delay\n}\n",
29
+ "/**\n * Pauses execution for a specified number of milliseconds.\n * @param ms The number of milliseconds to pause execution.\n * @returns A promise that resolves after the specified delay.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Pauses execution for a specified number of milliseconds.\n * @param ms The number of milliseconds to pause execution.\n * @returns A promise that resolves after the specified delay.\n */\nexport function wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Pauses execution for a specified number of milliseconds.\n * @param ms The number of milliseconds to pause execution.\n * @returns A promise that resolves after the specified delay.\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Pauses execution until a specified condition is met.\n * @param condition The condition to wait for.\n * @param interval The interval at which to check the condition, in milliseconds. Defaults to 1000.\n * @returns A promise that resolves when the condition is met.\n */\nexport function waitUntil(condition: () => boolean, interval = 1000): Promise<void> {\n return new Promise((resolve) => {\n const check = setInterval(() => {\n if (condition()) {\n clearInterval(check)\n resolve()\n }\n }, interval)\n })\n}\n\n/**\n * Pauses execution while a specified condition is met.\n * @param condition The condition to wait while.\n * @param interval The interval at which to check the condition, in milliseconds. Defaults to 1000.\n * @returns A promise that resolves when the condition is no longer met.\n */\nexport function waitWhile(condition: () => boolean, interval = 1000): Promise<void> {\n return new Promise((resolve) => {\n const check = setInterval(() => {\n if (!condition()) {\n clearInterval(check)\n resolve()\n }\n }, interval)\n })\n}\n",
30
+ "/**\n * Throttle a function.\n *\n * @param {Function} fn - The function to throttle.\n * @param {number} [wait] - The time to wait between function calls.\n * @returns {Function} - A new function that throttles the calls to the original function.\n *\n * @example\n * ```ts\n * // logs window dimensions at most every 250ms\n * window.addEventListener(\n * \"resize\",\n * throttle(function (evt) {\n * console.log(window.innerWidth)\n * console.log(window.innerHeight)\n * }, 250)\n * )\n * ```\n */\n\nexport function throttle(fn: Function, wait = 300) {\n let inThrottle: boolean\n let lastFn: ReturnType<typeof setTimeout>\n let lastTime: number\n\n return function (this: unknown, ...args: any[]) {\n if (!inThrottle) {\n fn.apply(this, args)\n\n lastTime = Date.now()\n inThrottle = true\n } else {\n clearTimeout(lastFn)\n\n lastFn = setTimeout(\n () => {\n if (Date.now() - lastTime >= wait) {\n fn.apply(this, args) // Use 'this' directly\n lastTime = Date.now()\n }\n },\n Math.max(wait - (Date.now() - lastTime), 0),\n )\n }\n }\n}\n",
31
+ "export {\n asyncComputed,\n breakpointsAntDesign,\n breakpointsBootstrapV5,\n breakpointsMasterCss,\n breakpointsQuasar,\n breakpointsSematic,\n breakpointsTailwind,\n breakpointsVuetify,\n cloneFnJSON,\n computedAsync,\n computedInject,\n createFetch,\n createReusableTemplate,\n createTemplatePromise,\n createUnrefFn,\n customStorageEventName,\n defaultDocument,\n defaultLocation,\n defaultNavigator,\n defaultWindow,\n executeTransition,\n formatTimeAgo,\n getSSRHandler,\n mapGamepadToXbox360Controller,\n onClickOutside,\n onKeyDown,\n onKeyPressed,\n onKeyStroke,\n onKeyUp,\n onLongPress,\n onStartTyping,\n setSSRHandler,\n templateRef,\n unrefElement,\n useActiveElement,\n useAnimate,\n useAsyncQueue,\n useAsyncState,\n useBase64,\n useBattery,\n useBluetooth,\n useBreakpoints,\n useBroadcastChannel,\n useBrowserLocation,\n useCached,\n useClipboard,\n useCloned,\n useColorMode,\n useConfirmDialog,\n useCssVar,\n useCurrentElement,\n useCycleList,\n useDark,\n useDebouncedRefHistory,\n useDeviceMotion,\n useDeviceOrientation,\n useDevicePixelRatio,\n useDevicesList,\n useDisplayMedia,\n useDocumentVisibility,\n useDraggable,\n useDropZone,\n useElementBounding,\n useElementByPoint,\n useElementHover,\n useElementSize,\n useElementVisibility,\n useEventBus,\n useEventListener,\n useEventSource,\n useEyeDropper,\n useFavicon,\n useFetch,\n useFileDialog,\n useFileSystemAccess,\n useFocus,\n useFocusWithin,\n useFps,\n useFullscreen,\n useGamepad,\n useGeolocation,\n useIdle,\n useImage,\n useInfiniteScroll,\n useIntersectionObserver,\n useKeyModifier,\n useLocalStorage,\n useMagicKeys,\n useManualRefHistory,\n useMediaControls,\n useMediaQuery,\n useMemoize,\n useMemory,\n useMounted,\n useMouse,\n useMouseInElement,\n useMousePressed,\n useMutationObserver,\n useNavigatorLanguage,\n useNetwork,\n useObjectUrl,\n useOffsetPagination,\n useOnline,\n usePageLeave,\n useParallax,\n useParentElement,\n usePerformanceObserver,\n usePermission,\n usePointer,\n usePointerLock,\n usePointerSwipe,\n usePreferredColorScheme,\n usePreferredContrast,\n usePreferredDark,\n usePreferredLanguages,\n usePreferredReducedMotion,\n usePrevious,\n useRafFn,\n useRefHistory,\n useResizeObserver,\n useScreenOrientation,\n useScreenSafeArea,\n useScriptTag,\n useScroll,\n useScrollLock,\n useSessionStorage,\n useShare,\n useSorted,\n useSpeechRecognition,\n useSpeechSynthesis,\n useStepper,\n useStorage,\n useStorageAsync,\n useStyleTag,\n useSupported,\n useSwipe,\n useTemplateRefsList,\n useTextDirection,\n useTextSelection,\n useTextareaAutosize,\n useThrottledRefHistory,\n useTimeAgo,\n useTimeoutPoll,\n useTimestamp,\n useTitle,\n useTransition,\n useToggle,\n useUrlSearchParams,\n useUserMedia,\n useVModel,\n useVModels,\n useVibrate,\n useVirtualList,\n useWakeLock,\n useWebNotification,\n useWebSocket,\n useWebWorker,\n useWebWorkerFn,\n useWindowFocus,\n useWindowScroll,\n useWindowSize,\n useDateFormat,\n useNow,\n watchArray,\n watchAtMost,\n watchDebounced,\n watchDeep,\n watchIgnorable,\n watchImmediate,\n watchOnce,\n watchPausable,\n watchThrottled,\n watchTriggerable,\n watchWithFilter,\n whenever,\n syncRef,\n syncRefs,\n throttledRef,\n throttledWatch,\n toReactive,\n tryOnBeforeMount,\n tryOnBeforeUnmount,\n tryOnMounted,\n tryOnScopeDispose,\n tryOnUnmounted,\n until,\n isDefined,\n ignorableWatch,\n extendRef,\n eagerComputed,\n debouncedRef,\n debouncedWatch,\n createReactiveFn,\n createSharedComposable,\n createInjectionState,\n createGlobalState,\n createEventHook,\n controlledRef,\n controlledComputed,\n computedEager,\n computedWithControl,\n autoResetRef,\n injectLocal,\n makeDestructurable,\n pausableWatch,\n provideLocal,\n reactify,\n reactifyObject,\n reactiveComputed,\n reactiveOmit,\n reactivePick,\n refAutoReset,\n refDebounced,\n refDefault,\n refThrottled,\n refWithControl,\n resolveRef,\n resolveUnref,\n useArrayDifference,\n useArrayEvery,\n useArrayFilter,\n useArrayFind,\n useArrayFindIndex,\n useArrayIncludes,\n useArrayMap,\n useArrayReduce,\n useArraySome,\n useArrayUnique,\n useClipboardItems,\n useCounter,\n useDebounce,\n useDebounceFn,\n useInterval,\n useIntervalFn,\n useLastChanged,\n useThrottle,\n useThrottleFn,\n useTimeout,\n useTimeoutFn,\n useToNumber,\n useToString,\n} from '@vueuse/core'\n\nexport type {\n // Head,\n HeadObject,\n HeadObjectPlain,\n} from '@vueuse/head'\n\nexport {\n Head,\n HeadVuePlugin,\n createHead,\n renderHeadToString,\n} from '@vueuse/head'\n\nexport { default as readableSize } from 'pretty-bytes'\n",
32
+ "const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'KiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\tspace: true,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tconst separator = options.space ? ' ' : '';\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0${separator}${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + separator + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + separator + unit;\n}\n"
33
+ ],
34
+ "mappings": "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",
35
+ "debugId": "E32011EB197DC57D64756E2164756E21",
36
+ "names": []
37
+ }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@stacksjs/utils",
3
3
  "type": "module",
4
- "version": "0.61.24",
4
+ "version": "0.63.0",
5
5
  "description": "The Stacks helper functions.",
6
6
  "author": "Chris Breuer",
7
- "license": "MIT",
8
7
  "funding": "https://github.com/sponsors/chrisbbreuer",
8
+ "license": "MIT",
9
9
  "homepage": "https://github.com/stacksjs/stacks/tree/main/storage/framework/core/helpers#readme",
10
10
  "repository": {
11
11
  "type": "git",
@@ -63,17 +63,16 @@
63
63
  "@stacksjs/strings": "latest",
64
64
  "@stacksjs/types": "latest",
65
65
  "@types/js-yaml": "^4.0.9",
66
- "@vueuse/core": "^10.10.0",
66
+ "@vueuse/core": "^11.0.0",
67
67
  "@vueuse/head": "^2.0.0",
68
- "@vueuse/math": "^10.10.0",
69
- "@vueuse/shared": "^10.10.0",
68
+ "@vueuse/math": "^11.0.0",
69
+ "@vueuse/shared": "^11.0.0",
70
70
  "bun-plugin-env": "^0.4.1",
71
71
  "bun-plugin-yml": "^0.3.1",
72
72
  "export-size": "^0.7.0",
73
- "yaml": "^2.4.3"
73
+ "yaml": "^2.5.0"
74
74
  },
75
75
  "dependencies": {
76
- "@dinero.js/currencies": "2.0.0-alpha.14",
77
76
  "@stacksjs/actions": "latest",
78
77
  "@stacksjs/arrays": "latest",
79
78
  "@stacksjs/cli": "latest",
@@ -83,16 +82,15 @@
83
82
  "@stacksjs/storage": "latest",
84
83
  "@stacksjs/strings": "latest",
85
84
  "@stacksjs/types": "latest",
86
- "@vueuse/core": "^10.10.0",
85
+ "@vueuse/core": "^11.0.0",
87
86
  "@vueuse/head": "^2.0.0",
88
- "@vueuse/math": "^10.10.0",
89
- "@vueuse/shared": "^10.10.0",
87
+ "@vueuse/math": "^11.0.0",
88
+ "@vueuse/shared": "^11.0.0",
90
89
  "bun-plugin-env": "^0.4.1",
91
90
  "bun-plugin-yml": "^0.3.1",
92
91
  "defu": "^6.1.4",
93
92
  "detect-indent": "^7.0.1",
94
93
  "detect-newline": "^4.0.1",
95
- "dinero.js": "2.0.0-alpha.14",
96
94
  "export-size": "^0.7.0",
97
95
  "js-yaml": "^4.1.0",
98
96
  "kolorist": "1.8.0",
@@ -100,7 +98,10 @@
100
98
  "magic-regexp": "^0.8.0",
101
99
  "perfect-debounce": "^1.0.0",
102
100
  "pretty-bytes": "^6.1.1",
103
- "yaml": "^2.4.3"
101
+ "ace-builds": "^1.35.4",
102
+ "resize-observer-polyfill": "^1.5.1",
103
+ "vue3-ace-editor": "^2.2.4",
104
+ "yaml": "^2.5.0"
104
105
  },
105
106
  "devDependencies": {
106
107
  "@stacksjs/development": "latest",
package/src/clean.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { path as p } from '@stacksjs/path'
2
- import { $ } from 'bun'
3
2
 
4
3
  export async function cleanProject() {
4
+ const $ = Bun.$
5
5
  await $`rm -rf ${p.projectPath('bun.lockb')}`
6
6
  await $`rm -rf ${p.projectPath('yarn.lock')}` // just in case
7
7
  await $`rm -rf ${p.projectPath('node_modules/')}`
package/src/hash.ts CHANGED
@@ -14,12 +14,22 @@ export function originRequestFunctionHash() {
14
14
  }
15
15
 
16
16
  export function websiteSourceHash() {
17
- const docsSrc = [p.projectPath('docs'), p.projectPath('config/docs.ts')]
18
-
17
+ const docsSrc = [p.projectPath('docs')]
19
18
  const websiteSrc = [
20
19
  p.projectPath('resources/views'),
21
- // p.projectPath('config/app.ts'),
20
+ p.projectPath('resources/assets'),
21
+ p.projectPath('resources/lang'),
22
+ p.projectPath('resources/functions'),
23
+ p.projectPath('resources/components'),
24
+ p.projectPath('resources/modules'),
25
+ p.projectPath('resources/stores'),
22
26
  ]
23
27
 
24
28
  return config.app.docMode === true ? hashPaths(docsSrc) : hashPaths(websiteSrc)
25
29
  }
30
+
31
+ export function docsSourceHash() {
32
+ const docsSrc = [p.projectPath('docs')]
33
+
34
+ return hashPaths(docsSrc)
35
+ }
package/src/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export * from './base'
2
2
  export * from './clean'
3
3
  export * from './config'
4
- export * from './currency'
5
4
  export * from './debounce'
6
5
  export * from './equal'
7
6
  export * from './export-size'
package/src/currency.ts DELETED
@@ -1,29 +0,0 @@
1
- export {
2
- add,
3
- allocate,
4
- compare,
5
- convert,
6
- equal,
7
- greaterThan,
8
- greaterThanOrEqual,
9
- hasSubUnits,
10
- isZero,
11
- lessThan,
12
- lessThanOrEqual,
13
- maximum,
14
- minimum,
15
- multiply,
16
- normalizeScale,
17
- dinero,
18
- dinero as money,
19
- subtract,
20
- toSnapshot,
21
- toUnits,
22
- toDecimal,
23
- trimScale,
24
- haveSameCurrency,
25
- haveSameAmount,
26
- dinero as currency,
27
- } from 'dinero.js'
28
- export { USD } from '@dinero.js/currencies'
29
- export type { Dinero, Currency } from 'dinero.js'