@cyberskill/shared 3.1.0 → 3.2.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/config/config.util.js +3 -2
- package/dist/config/config.util.js.map +1 -1
- package/dist/config/storybook/storybook.preview.d.ts +1 -1
- package/dist/config/storybook/storybook.preview.js +5 -4
- package/dist/config/storybook/storybook.preview.js.map +1 -1
- package/dist/config/vitest/vitest.e2e.d.ts +2 -0
- package/dist/config/vitest/vitest.e2e.js +11 -18
- package/dist/config/vitest/vitest.e2e.js.map +1 -1
- package/dist/config/vitest/vitest.unit.d.ts +2 -0
- package/dist/config/vitest/vitest.unit.js +7 -5
- package/dist/config/vitest/vitest.unit.js.map +1 -1
- package/dist/node/cli/index.js +55 -45
- package/dist/node/cli/index.js.map +1 -1
- package/dist/node/command/command.util.js +75 -75
- package/dist/node/command/command.util.js.map +1 -1
- package/dist/node/express/express.util.js +16 -16
- package/dist/node/express/express.util.js.map +1 -1
- package/dist/node/mongo/mongo.controller.d.ts +1 -1
- package/dist/node/mongo/mongo.controller.mongoose.js.map +1 -1
- package/dist/node/mongo/mongo.dynamic-populate.js +64 -64
- package/dist/node/mongo/mongo.dynamic-populate.js.map +1 -1
- package/dist/node/mongo/mongo.populate.js.map +1 -1
- package/dist/node/mongo/mongo.util.d.ts +16 -16
- package/dist/node/mongo/mongo.util.js.map +1 -1
- package/dist/node/path/path.constant.js +9 -9
- package/dist/node/path/path.constant.js.map +1 -1
- package/dist/node/ws/index.d.ts +1 -1
- package/dist/node_modules/.pnpm/{vitest@4.0.18_@types_node@25.3.3_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2 → vitest@4.0.18_@types_node@25.3.5_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2}/node_modules/vitest/dist/config.js.map +1 -1
- package/dist/react/apollo-client/apollo-client.util.js +13 -13
- package/dist/react/apollo-client/apollo-client.util.js.map +1 -1
- package/dist/react/apollo-error/apollo-error.component.js +22 -21
- package/dist/react/apollo-error/apollo-error.component.js.map +1 -1
- package/dist/util/common/common.util.js +26 -25
- package/dist/util/common/common.util.js.map +1 -1
- package/dist/util/object/object.util.js +49 -49
- package/dist/util/object/object.util.js.map +1 -1
- package/dist/util/serializer/serializer.util.js +12 -12
- package/dist/util/serializer/serializer.util.js.map +1 -1
- package/dist/util/string/string.util.js +29 -28
- package/dist/util/string/string.util.js.map +1 -1
- package/dist/util/validate/validate.util.d.ts +0 -4
- package/dist/util/validate/validate.util.js +3 -3
- package/dist/util/validate/validate.util.js.map +1 -1
- package/package.json +31 -29
- package/public/tsconfig.base.json +1 -1
- package/dist/config/config.test.unit.d.ts +0 -1
- package/dist/config/config.type.test.unit.d.ts +0 -1
- package/dist/constant/constant.test.unit.d.ts +0 -1
- package/dist/node/command/command.test.unit.d.ts +0 -1
- package/dist/node/fs/fs.test.unit.d.ts +0 -1
- package/dist/node/log/log.test.unit.d.ts +0 -1
- package/dist/node/mongo/mongo.controller.test.unit.d.ts +0 -1
- package/dist/node/mongo/mongo.util.test.unit.d.ts +0 -1
- package/dist/node/package/package.test.unit.d.ts +0 -1
- package/dist/node/path/path.test.unit.d.ts +0 -1
- package/dist/react/apollo-error/apollo-error.test.unit.d.ts +0 -1
- package/dist/react/loading/loading.test.unit.d.ts +0 -1
- package/dist/react/storage/storage.test.unit.d.ts +0 -1
- package/dist/typescript/typescript.test.unit.d.ts +0 -1
- package/dist/util/common/common.test.unit.d.ts +0 -1
- package/dist/util/object/object.test.unit.d.ts +0 -1
- package/dist/util/serializer/serializer.test.unit.d.ts +0 -1
- package/dist/util/string/string.test.unit.d.ts +0 -1
- package/dist/util/validate/validate.test.unit.d.ts +0 -1
- /package/dist/node_modules/.pnpm/{vitest@4.0.18_@types_node@25.3.3_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2 → vitest@4.0.18_@types_node@25.3.5_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2}/node_modules/vitest/dist/config.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.populate.js","sources":["../../../src/node/mongo/mongo.populate.ts"],"sourcesContent":["import type mongooseRaw from 'mongoose';\n\nimport type { I_DynamicVirtualConfig, T_Input_Populate } from './mongo.type.js';\n\nimport { convertEnumToModelName } from './mongo.util.js';\n\n/**\n * Recursively applies nested populate options to populated documents.\n * This function handles cases where a populated field needs further population.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to apply nested populations to\n * @param populateOptions - The populate options to apply\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n * @returns Promise with documents that have nested populations applied\n */\nexport async function applyNestedPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOptions: T_Input_Populate,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<T[]> {\n if (!documents.length || !populateOptions) {\n return documents;\n }\n\n const populateArray = Array.isArray(populateOptions) ? populateOptions : [populateOptions];\n\n for (const populateOption of populateArray) {\n if (typeof populateOption === 'string') {\n await applyStringPopulate(mongoose, documents, populateOption, virtualConfigs, currentModel);\n }\n else if (populateOption && typeof populateOption === 'object') {\n const popObj = populateOption as { path?: string; populate?: T_Input_Populate;[key: string]: unknown };\n\n await applyObjectPopulate(mongoose, documents, popObj, virtualConfigs, currentModel);\n }\n }\n\n return documents;\n}\n\n/**\n * Applies string-based populate options (e.g., \"field.subfield\") to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populatePath - The populate path string\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyStringPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populatePath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const pathParts = populatePath.split('.');\n\n if (pathParts.length < 2) {\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n\n await populateNestedFieldOnParent(mongoose, docObj, populatePath, virtualConfigs, undefined, currentModel);\n }\n\n return;\n }\n\n const mainField = pathParts[0];\n\n if (!mainField || mainField.trim() === '') {\n return;\n }\n\n const nestedPath = pathParts.slice(1).join('.');\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const mainValue = docObj[mainField];\n\n if (mainValue && typeof mainValue === 'object') {\n let nextModelForChildren = currentModel;\n const originalModelForChildren = nextModelForChildren;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[mainField];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (!nextModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (nextModelForChildren === originalModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (Array.isArray(mainValue)) {\n for (const item of mainValue) {\n if (item && typeof item === 'object') {\n await populateNestedFieldOnParent(mongoose, item as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n else if (mainValue && typeof mainValue === 'object') {\n await populateNestedFieldOnParent(mongoose, mainValue as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Applies object-based populate options with nested populate to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populateOption - The populate option object\n * @param populateOption.path - The path to populate\n * @param populateOption.populate - The nested populate options\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyObjectPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOption: { path?: string; populate?: T_Input_Populate;[key: string]: unknown },\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const { path, populate: nestedPopulate } = populateOption;\n\n if (!path) {\n return;\n }\n\n if (!nestedPopulate) {\n await applyStringPopulate(mongoose, documents, path, virtualConfigs, currentModel);\n\n return;\n }\n\n const pathString = path;\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const fieldValue = docObj[pathString];\n\n let nextModelForChildren = currentModel;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[pathString];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n if (!nextModelForChildren && typeof fieldValue === 'object' && fieldValue && 'entityType' in (fieldValue as object)) {\n const maybeModel = convertEnumToModelName(String((fieldValue as { [k: string]: unknown })['entityType']));\n\n if (mongoose.models[maybeModel]) {\n nextModelForChildren = mongoose.models[maybeModel];\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n if (Array.isArray(fieldValue)) {\n for (const item of fieldValue) {\n if (item && typeof item === 'object') {\n await applyNestedPopulate(mongoose, [item as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n else if (fieldValue && typeof fieldValue === 'object') {\n await applyNestedPopulate(mongoose, [fieldValue as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Resolves the target model for a given populate path by following the path step by step.\n * This function traverses the schema hierarchy to find the correct model for population.\n *\n * @param mongoose - The Mongoose instance\n * @param startModel - The starting model (usually the model containing the document)\n * @param path - The populate path to resolve (e.g., \"entity.partner1.gallery\")\n * @param document - The document being populated (for dynamic virtual resolution)\n * @returns The resolved model name or undefined if not found\n */\nfunction resolveModelFromPath(\n mongoose: typeof mongooseRaw,\n startModel: any,\n path: string,\n document: { [key: string]: unknown },\n): string | undefined {\n if (!path || !startModel || !startModel.schema) {\n return undefined;\n }\n\n const pathParts = path.split('.');\n let currentSchema = startModel.schema;\n\n for (let i = 0; i < pathParts.length; i++) {\n const pathPart = pathParts[i];\n\n if (currentSchema && currentSchema.virtuals && pathPart) {\n const virtual = currentSchema.virtuals[pathPart];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n if (i === pathParts.length - 1) {\n return refResult;\n }\n\n const nextModel = mongoose.models[refResult];\n\n if (nextModel && nextModel.schema) {\n currentSchema = nextModel.schema;\n continue;\n }\n }\n }\n }\n\n if (currentSchema && currentSchema.paths && pathPart) {\n const pathSchema = currentSchema.paths[pathPart];\n\n if (pathSchema && pathSchema.schema) {\n currentSchema = pathSchema.schema;\n continue;\n }\n }\n\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Attempts to find a model whose schema contains the given field\n * either as a direct path or a virtual. Searches only at the root level\n * of each model schema.\n */\nfunction findModelBySchemaField(\n mongoose: typeof mongooseRaw,\n fieldName: string,\n): any | undefined {\n if (!fieldName) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[fieldName]) || (schema.virtuals && schema.virtuals[fieldName])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a start model whose root schema contains the first segment of the path\n * as either a direct path or a virtual. Useful to jump into the correct model\n * when the current model context is misaligned (e.g., 'partner1.*' should start from User).\n */\nfunction findStartModelByFirstSegment(\n mongoose: typeof mongooseRaw,\n fullPath: string,\n): any | undefined {\n const first = (fullPath || '').split('.')[0] || '';\n\n if (!first) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[first]) || (schema.virtuals && schema.virtuals[first])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Populates a nested field on the parent object by finding the referenced document and applying populate options.\n *\n * @param mongoose - The Mongoose instance\n * @param document - The document containing the field to populate\n * @param nestedPath - The nested populate path\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param pathPrefix - The parent path prefix (if nested within another populated field)\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function populateNestedFieldOnParent(\n mongoose: typeof mongooseRaw,\n document: { [key: string]: unknown },\n nestedPath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n pathPrefix?: string,\n currentModel?: any,\n): Promise<void> {\n let modelName = document['__t'];\n\n if (!modelName) {\n if (currentModel) {\n const fullPath = pathPrefix ? `${pathPrefix}.${nestedPath}` : nestedPath;\n\n const firstSegment = (fullPath || '').split('.')[0] || '';\n let startModel = currentModel;\n const hasFirstOnCurrent = Boolean(\n (startModel?.schema?.paths && startModel.schema.paths[firstSegment])\n || (startModel?.schema?.virtuals && startModel.schema.virtuals[firstSegment]),\n );\n\n if (!hasFirstOnCurrent) {\n const betterStart = findStartModelByFirstSegment(mongoose, fullPath);\n\n if (betterStart) {\n startModel = betterStart;\n }\n }\n\n const resolvedFromPath = resolveModelFromPath(mongoose, startModel, fullPath, document);\n\n if (resolvedFromPath) {\n modelName = resolvedFromPath;\n }\n else {\n const lastSegment = (fullPath.includes('.') ? fullPath.split('.').pop() : fullPath) || '';\n\n if (lastSegment) {\n const candidateModel = findModelBySchemaField(mongoose, lastSegment);\n\n if (candidateModel) {\n const rerun = resolveModelFromPath(mongoose, candidateModel, fullPath, document);\n\n if (rerun) {\n modelName = rerun;\n }\n }\n }\n }\n }\n\n if (virtualConfigs && virtualConfigs.length > 0) {\n const fieldName = nestedPath.split('.').pop() || '';\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n\n if (!modelName) {\n for (const [key, value] of Object.entries(document as Record<string, unknown>)) {\n if (key === 'entityType' && typeof value === 'string') {\n modelName = value;\n break;\n }\n }\n\n if (modelName && mongoose.models[modelName as string]) {\n const Model = mongoose.models[modelName as string];\n\n if (Model && Model.schema) {\n const schema = Model.schema;\n const fieldName = nestedPath.split('.').pop() || '';\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n\n if (currentModel && currentModel.schema) {\n const schema = currentModel.schema;\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n\n if (!modelName) {\n if (currentModel) {\n const resolvedModel = resolveModelFromPath(mongoose, currentModel, nestedPath, document);\n\n if (resolvedModel) {\n modelName = resolvedModel;\n }\n }\n }\n\n if (!modelName && virtualConfigs && virtualConfigs.length > 0) {\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n const candidate = fieldName ? fieldName.charAt(0).toUpperCase() + fieldName.slice(1) : '';\n\n if (candidate && mongoose.models[candidate]) {\n modelName = candidate;\n }\n }\n }\n\n const Model = mongoose.models[modelName as string];\n\n if (!Model) {\n return;\n }\n\n const fieldIdKey = `${nestedPath}Id`;\n const fieldIdsKey = `${nestedPath}Ids`;\n\n const docIds = document[fieldIdKey] || document[fieldIdsKey] || document[nestedPath];\n\n if (!docIds) {\n return;\n }\n\n const idsArray = Array.isArray(docIds) ? docIds : [docIds];\n\n const populatedDocs = await Model.find({ id: { $in: idsArray } }).lean();\n\n if (populatedDocs.length > 0) {\n if (Array.isArray(docIds)) {\n document[nestedPath] = populatedDocs;\n }\n else {\n document[nestedPath] = populatedDocs[0];\n }\n }\n}\n"],"names":["applyNestedPopulate","mongoose","documents","populateOptions","virtualConfigs","currentModel","populateArray","populateOption","applyStringPopulate","applyObjectPopulate","populatePath","pathParts","doc","populateNestedFieldOnParent","mainField","nestedPath","docObj","mainValue","nextModelForChildren","originalModelForChildren","virtual","refResult","modelName","convertEnumToModelName","schemaStatics","dyn","v","item","path","nestedPopulate","pathString","fieldValue","maybeModel","resolveModelFromPath","startModel","document","currentSchema","pathPart","nextModel","pathSchema","findModelBySchemaField","fieldName","Model","schema","findStartModelByFirstSegment","fullPath","first","pathPrefix","firstSegment","betterStart","resolvedFromPath","lastSegment","candidateModel","rerun","matchingVirtual","key","value","searchVirtualsInSchema","schemaToSearch","schemaPath","virtuals","virtualName","pathName","nestedResult","foundModelName","resolvedModel","candidate","fieldIdKey","fieldIdsKey","docIds","idsArray","populatedDocs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongo.populate.js","sources":["../../../src/node/mongo/mongo.populate.ts"],"sourcesContent":["import type mongooseRaw from 'mongoose';\n\nimport type { I_DynamicVirtualConfig, T_Input_Populate } from './mongo.type.js';\n\nimport { convertEnumToModelName } from './mongo.util.js';\n\n/**\n * Recursively applies nested populate options to populated documents.\n * This function handles cases where a populated field needs further population.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to apply nested populations to\n * @param populateOptions - The populate options to apply\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n * @returns Promise with documents that have nested populations applied\n */\nexport async function applyNestedPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOptions: T_Input_Populate,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<T[]> {\n if (!documents.length || !populateOptions) {\n return documents;\n }\n\n const populateArray = Array.isArray(populateOptions) ? populateOptions : [populateOptions];\n\n for (const populateOption of populateArray) {\n if (typeof populateOption === 'string') {\n await applyStringPopulate(mongoose, documents, populateOption, virtualConfigs, currentModel);\n }\n else if (populateOption && typeof populateOption === 'object') {\n const popObj = populateOption as { path?: string; populate?: T_Input_Populate; [key: string]: unknown };\n\n await applyObjectPopulate(mongoose, documents, popObj, virtualConfigs, currentModel);\n }\n }\n\n return documents;\n}\n\n/**\n * Applies string-based populate options (e.g., \"field.subfield\") to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populatePath - The populate path string\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyStringPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populatePath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const pathParts = populatePath.split('.');\n\n if (pathParts.length < 2) {\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n\n await populateNestedFieldOnParent(mongoose, docObj, populatePath, virtualConfigs, undefined, currentModel);\n }\n\n return;\n }\n\n const mainField = pathParts[0];\n\n if (!mainField || mainField.trim() === '') {\n return;\n }\n\n const nestedPath = pathParts.slice(1).join('.');\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const mainValue = docObj[mainField];\n\n if (mainValue && typeof mainValue === 'object') {\n let nextModelForChildren = currentModel;\n const originalModelForChildren = nextModelForChildren;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[mainField];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (!nextModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (nextModelForChildren === originalModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (Array.isArray(mainValue)) {\n for (const item of mainValue) {\n if (item && typeof item === 'object') {\n await populateNestedFieldOnParent(mongoose, item as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n else if (mainValue && typeof mainValue === 'object') {\n await populateNestedFieldOnParent(mongoose, mainValue as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Applies object-based populate options with nested populate to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populateOption - The populate option object\n * @param populateOption.path - The path to populate\n * @param populateOption.populate - The nested populate options\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyObjectPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOption: { path?: string; populate?: T_Input_Populate; [key: string]: unknown },\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const { path, populate: nestedPopulate } = populateOption;\n\n if (!path) {\n return;\n }\n\n if (!nestedPopulate) {\n await applyStringPopulate(mongoose, documents, path, virtualConfigs, currentModel);\n\n return;\n }\n\n const pathString = path;\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const fieldValue = docObj[pathString];\n\n let nextModelForChildren = currentModel;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[pathString];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n if (!nextModelForChildren && typeof fieldValue === 'object' && fieldValue && 'entityType' in (fieldValue as object)) {\n const maybeModel = convertEnumToModelName(String((fieldValue as { [k: string]: unknown })['entityType']));\n\n if (mongoose.models[maybeModel]) {\n nextModelForChildren = mongoose.models[maybeModel];\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n if (Array.isArray(fieldValue)) {\n for (const item of fieldValue) {\n if (item && typeof item === 'object') {\n await applyNestedPopulate(mongoose, [item as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n else if (fieldValue && typeof fieldValue === 'object') {\n await applyNestedPopulate(mongoose, [fieldValue as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Resolves the target model for a given populate path by following the path step by step.\n * This function traverses the schema hierarchy to find the correct model for population.\n *\n * @param mongoose - The Mongoose instance\n * @param startModel - The starting model (usually the model containing the document)\n * @param path - The populate path to resolve (e.g., \"entity.partner1.gallery\")\n * @param document - The document being populated (for dynamic virtual resolution)\n * @returns The resolved model name or undefined if not found\n */\nfunction resolveModelFromPath(\n mongoose: typeof mongooseRaw,\n startModel: any,\n path: string,\n document: { [key: string]: unknown },\n): string | undefined {\n if (!path || !startModel || !startModel.schema) {\n return undefined;\n }\n\n const pathParts = path.split('.');\n let currentSchema = startModel.schema;\n\n for (let i = 0; i < pathParts.length; i++) {\n const pathPart = pathParts[i];\n\n if (currentSchema && currentSchema.virtuals && pathPart) {\n const virtual = currentSchema.virtuals[pathPart];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n if (i === pathParts.length - 1) {\n return refResult;\n }\n\n const nextModel = mongoose.models[refResult];\n\n if (nextModel && nextModel.schema) {\n currentSchema = nextModel.schema;\n continue;\n }\n }\n }\n }\n\n if (currentSchema && currentSchema.paths && pathPart) {\n const pathSchema = currentSchema.paths[pathPart];\n\n if (pathSchema && pathSchema.schema) {\n currentSchema = pathSchema.schema;\n continue;\n }\n }\n\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Attempts to find a model whose schema contains the given field\n * either as a direct path or a virtual. Searches only at the root level\n * of each model schema.\n */\nfunction findModelBySchemaField(\n mongoose: typeof mongooseRaw,\n fieldName: string,\n): any | undefined {\n if (!fieldName) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[fieldName]) || (schema.virtuals && schema.virtuals[fieldName])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a start model whose root schema contains the first segment of the path\n * as either a direct path or a virtual. Useful to jump into the correct model\n * when the current model context is misaligned (e.g., 'partner1.*' should start from User).\n */\nfunction findStartModelByFirstSegment(\n mongoose: typeof mongooseRaw,\n fullPath: string,\n): any | undefined {\n const first = (fullPath || '').split('.')[0] || '';\n\n if (!first) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[first]) || (schema.virtuals && schema.virtuals[first])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Populates a nested field on the parent object by finding the referenced document and applying populate options.\n *\n * @param mongoose - The Mongoose instance\n * @param document - The document containing the field to populate\n * @param nestedPath - The nested populate path\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param pathPrefix - The parent path prefix (if nested within another populated field)\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function populateNestedFieldOnParent(\n mongoose: typeof mongooseRaw,\n document: { [key: string]: unknown },\n nestedPath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n pathPrefix?: string,\n currentModel?: any,\n): Promise<void> {\n let modelName = document['__t'];\n\n if (!modelName) {\n if (currentModel) {\n const fullPath = pathPrefix ? `${pathPrefix}.${nestedPath}` : nestedPath;\n\n const firstSegment = (fullPath || '').split('.')[0] || '';\n let startModel = currentModel;\n const hasFirstOnCurrent = Boolean(\n (startModel?.schema?.paths && startModel.schema.paths[firstSegment])\n || (startModel?.schema?.virtuals && startModel.schema.virtuals[firstSegment]),\n );\n\n if (!hasFirstOnCurrent) {\n const betterStart = findStartModelByFirstSegment(mongoose, fullPath);\n\n if (betterStart) {\n startModel = betterStart;\n }\n }\n\n const resolvedFromPath = resolveModelFromPath(mongoose, startModel, fullPath, document);\n\n if (resolvedFromPath) {\n modelName = resolvedFromPath;\n }\n else {\n const lastSegment = (fullPath.includes('.') ? fullPath.split('.').pop() : fullPath) || '';\n\n if (lastSegment) {\n const candidateModel = findModelBySchemaField(mongoose, lastSegment);\n\n if (candidateModel) {\n const rerun = resolveModelFromPath(mongoose, candidateModel, fullPath, document);\n\n if (rerun) {\n modelName = rerun;\n }\n }\n }\n }\n }\n\n if (virtualConfigs && virtualConfigs.length > 0) {\n const fieldName = nestedPath.split('.').pop() || '';\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n\n if (!modelName) {\n for (const [key, value] of Object.entries(document as Record<string, unknown>)) {\n if (key === 'entityType' && typeof value === 'string') {\n modelName = value;\n break;\n }\n }\n\n if (modelName && mongoose.models[modelName as string]) {\n const Model = mongoose.models[modelName as string];\n\n if (Model && Model.schema) {\n const schema = Model.schema;\n const fieldName = nestedPath.split('.').pop() || '';\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n\n if (currentModel && currentModel.schema) {\n const schema = currentModel.schema;\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n\n if (!modelName) {\n if (currentModel) {\n const resolvedModel = resolveModelFromPath(mongoose, currentModel, nestedPath, document);\n\n if (resolvedModel) {\n modelName = resolvedModel;\n }\n }\n }\n\n if (!modelName && virtualConfigs && virtualConfigs.length > 0) {\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n const candidate = fieldName ? fieldName.charAt(0).toUpperCase() + fieldName.slice(1) : '';\n\n if (candidate && mongoose.models[candidate]) {\n modelName = candidate;\n }\n }\n }\n\n const Model = mongoose.models[modelName as string];\n\n if (!Model) {\n return;\n }\n\n const fieldIdKey = `${nestedPath}Id`;\n const fieldIdsKey = `${nestedPath}Ids`;\n\n const docIds = document[fieldIdKey] || document[fieldIdsKey] || document[nestedPath];\n\n if (!docIds) {\n return;\n }\n\n const idsArray = Array.isArray(docIds) ? docIds : [docIds];\n\n const populatedDocs = await Model.find({ id: { $in: idsArray } }).lean();\n\n if (populatedDocs.length > 0) {\n if (Array.isArray(docIds)) {\n document[nestedPath] = populatedDocs;\n }\n else {\n document[nestedPath] = populatedDocs[0];\n }\n }\n}\n"],"names":["applyNestedPopulate","mongoose","documents","populateOptions","virtualConfigs","currentModel","populateArray","populateOption","applyStringPopulate","applyObjectPopulate","populatePath","pathParts","doc","populateNestedFieldOnParent","mainField","nestedPath","docObj","mainValue","nextModelForChildren","originalModelForChildren","virtual","refResult","modelName","convertEnumToModelName","schemaStatics","dyn","v","item","path","nestedPopulate","pathString","fieldValue","maybeModel","resolveModelFromPath","startModel","document","currentSchema","pathPart","nextModel","pathSchema","findModelBySchemaField","fieldName","Model","schema","findStartModelByFirstSegment","fullPath","first","pathPrefix","firstSegment","betterStart","resolvedFromPath","lastSegment","candidateModel","rerun","matchingVirtual","key","value","searchVirtualsInSchema","schemaToSearch","schemaPath","virtuals","virtualName","pathName","nestedResult","foundModelName","resolvedModel","candidate","fieldIdKey","fieldIdsKey","docIds","idsArray","populatedDocs"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { default as mongooseRaw } from 'mongoose';
|
|
2
1
|
import { default as migrate } from 'migrate-mongo';
|
|
2
|
+
import { default as mongooseRaw } from 'mongoose';
|
|
3
3
|
import { MongoController } from './mongo.controller.js';
|
|
4
4
|
import { C_Document, I_CreateModelOptions, I_CreateSchemaOptions, I_DynamicVirtualOptions, I_ExtendedModel, I_GenericDocument, I_MongooseModelMiddleware, T_MongoosePlugin, T_MongooseShema, T_QueryFilter, T_VirtualOptions, T_WithId } from './mongo.type.js';
|
|
5
5
|
/**
|
|
@@ -15,33 +15,33 @@ export declare function convertEnumToModelName(enumValue: string): string;
|
|
|
15
15
|
* Required to avoid TS7056 (inferred type exceeds maximum serialization length).
|
|
16
16
|
*/
|
|
17
17
|
interface I_MongoUtils {
|
|
18
|
-
createGenericFields()
|
|
19
|
-
applyPlugins<T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>)
|
|
20
|
-
applyMiddlewares<T extends Partial<C_Document>>(schema: T_MongooseShema<T>, middlewares: I_MongooseModelMiddleware<T>[])
|
|
21
|
-
createGenericSchema(mongoose: typeof mongooseRaw)
|
|
22
|
-
createSchema<T, R extends string>(options: I_CreateSchemaOptions<T, R>)
|
|
23
|
-
createModel<T extends Partial<C_Document>, R extends string>(options: I_CreateModelOptions<T, R>)
|
|
18
|
+
createGenericFields: () => I_GenericDocument;
|
|
19
|
+
applyPlugins: <T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>) => void;
|
|
20
|
+
applyMiddlewares: <T extends Partial<C_Document>>(schema: T_MongooseShema<T>, middlewares: I_MongooseModelMiddleware<T>[]) => void;
|
|
21
|
+
createGenericSchema: (mongoose: typeof mongooseRaw) => T_MongooseShema<I_GenericDocument>;
|
|
22
|
+
createSchema: <T, R extends string>(options: I_CreateSchemaOptions<T, R>) => T_MongooseShema<T>;
|
|
23
|
+
createModel: <T extends Partial<C_Document>, R extends string>(options: I_CreateModelOptions<T, R>) => I_ExtendedModel<T>;
|
|
24
24
|
validator: {
|
|
25
|
-
isRequired<T>()
|
|
26
|
-
isUnique<T extends {
|
|
25
|
+
isRequired: <T>() => (this: T, value: unknown) => Promise<boolean>;
|
|
26
|
+
isUnique: <T extends {
|
|
27
27
|
constructor: {
|
|
28
28
|
exists: (query: {
|
|
29
29
|
[key: string]: unknown;
|
|
30
30
|
}) => Promise<unknown>;
|
|
31
31
|
};
|
|
32
|
-
}>(fields: string[])
|
|
33
|
-
matchesRegex(regexArray: RegExp[])
|
|
32
|
+
}>(fields: string[]) => (this: T, value: unknown) => Promise<boolean>;
|
|
33
|
+
matchesRegex: (regexArray: RegExp[]) => (value: string) => Promise<boolean>;
|
|
34
34
|
};
|
|
35
35
|
migrate: {
|
|
36
|
-
getModule()
|
|
36
|
+
getModule: () => Promise<typeof migrate>;
|
|
37
37
|
setConfig: (options: Partial<migrate.config.Config> & {
|
|
38
38
|
moduleSystem?: 'commonjs' | 'esm';
|
|
39
39
|
}) => void;
|
|
40
40
|
};
|
|
41
|
-
regexify<T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[])
|
|
42
|
-
isDynamicVirtual<T, R extends string>(options?: T_VirtualOptions<T, R>)
|
|
43
|
-
getNewRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean)
|
|
44
|
-
getExistingRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean)
|
|
41
|
+
regexify: <T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]) => T_QueryFilter<T>;
|
|
42
|
+
isDynamicVirtual: <T, R extends string>(options?: T_VirtualOptions<T, R>) => options is I_DynamicVirtualOptions<T, R>;
|
|
43
|
+
getNewRecords: <T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean) => Promise<T[]>;
|
|
44
|
+
getExistingRecords: <T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean) => Promise<T_WithId<T>[]>;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* MongoDB utility object providing comprehensive database operations and utilities.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.util.js","sources":["../../../src/node/mongo/mongo.util.ts"],"sourcesContent":["import type mongooseRaw from 'mongoose';\n\nimport type migrate from 'migrate-mongo';\nimport aggregatePaginate from 'mongoose-aggregate-paginate-v2';\nimport mongoosePaginate from 'mongoose-paginate-v2';\nimport { randomUUID } from 'node:crypto';\n\nimport { deepClone, getNestedValue, regexSearchMapper, setNestedValue } from '#util/index.js';\nimport { validate } from '#util/validate/index.js';\n\nimport type { MongoController } from './mongo.controller.js';\nimport type { C_Document, I_CreateModelOptions, I_CreateSchemaOptions, I_DynamicVirtualConfig, I_DynamicVirtualOptions, I_ExtendedModel, I_GenericDocument, I_MongooseModelMiddleware, T_MongoosePlugin, T_MongooseShema, T_QueryFilter, T_VirtualOptions, T_WithId } from './mongo.type.js';\n\nimport { addGitIgnoreEntry, writeFileSync } from '../fs/index.js';\nimport { MIGRATE_MONGO_CONFIG, PATH } from '../path/index.js';\n\n/**\n * Converts enum values to proper model names.\n * Handles common naming conventions like converting 'USER' to 'User'.\n *\n * @param enumValue - The enum value to convert\n * @returns The converted model name\n */\nexport function convertEnumToModelName(enumValue: string): string {\n if (enumValue === enumValue.toUpperCase()) {\n return enumValue.charAt(0).toUpperCase() + enumValue.slice(1).toLowerCase();\n }\n\n return enumValue;\n}\n\n/**\n * Interface for the MongoDB utility object to enable explicit type annotation.\n * Required to avoid TS7056 (inferred type exceeds maximum serialization length).\n */\ninterface I_MongoUtils {\n createGenericFields(): I_GenericDocument;\n applyPlugins<T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>): void;\n applyMiddlewares<T extends Partial<C_Document>>(schema: T_MongooseShema<T>, middlewares: I_MongooseModelMiddleware<T>[]): void;\n createGenericSchema(mongoose: typeof mongooseRaw): T_MongooseShema<I_GenericDocument>;\n createSchema<T, R extends string>(options: I_CreateSchemaOptions<T, R>): T_MongooseShema<T>;\n createModel<T extends Partial<C_Document>, R extends string>(options: I_CreateModelOptions<T, R>): I_ExtendedModel<T>;\n validator: {\n isRequired<T>(): (this: T, value: unknown) => Promise<boolean>;\n isUnique<T extends { constructor: { exists: (query: { [key: string]: unknown }) => Promise<unknown> } }>(fields: string[]): (this: T, value: unknown) => Promise<boolean>;\n matchesRegex(regexArray: RegExp[]): (value: string) => Promise<boolean>;\n };\n migrate: {\n getModule(): Promise<typeof migrate>;\n setConfig: (options: Partial<migrate.config.Config> & { moduleSystem?: 'commonjs' | 'esm' }) => void;\n };\n regexify<T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]): T_QueryFilter<T>;\n isDynamicVirtual<T, R extends string>(options?: T_VirtualOptions<T, R>): options is I_DynamicVirtualOptions<T, R>;\n getNewRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean): Promise<T[]>;\n getExistingRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean): Promise<T_WithId<T>[]>;\n}\n\n/**\n * MongoDB utility object providing comprehensive database operations and utilities.\n * This object contains methods for creating generic fields, applying plugins and middlewares,\n * creating schemas and models, validation functions, migration utilities, and regex filtering.\n */\nexport const mongo: I_MongoUtils = {\n /**\n * Creates generic fields that are commonly used across MongoDB documents.\n * This function generates standard fields including a UUID, deletion flag, and timestamps\n * that can be applied to any document schema.\n *\n * @returns An object containing generic document fields (id, isDel, createdAt, updatedAt).\n */\n createGenericFields(): I_GenericDocument {\n return {\n id: randomUUID(),\n isDel: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n },\n /**\n * Applies plugins to a Mongoose schema.\n * This function filters out falsy plugins and applies the remaining valid plugins\n * to the provided schema.\n *\n * @param schema - The Mongoose schema to apply plugins to.\n * @param plugins - An array of plugin functions or false values to filter and apply.\n */\n applyPlugins<T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>) {\n plugins\n .filter((plugin): plugin is T_MongoosePlugin => typeof plugin === 'function')\n .forEach(plugin => schema.plugin(plugin));\n },\n /**\n * Applies middleware functions to a Mongoose schema.\n * This function configures pre and post middleware for specified methods on the schema.\n *\n * @param schema - The Mongoose schema to apply middleware to.\n * @param middlewares - An array of middleware configurations with method, pre, and post functions.\n */\n applyMiddlewares<T extends Partial<C_Document>>(\n schema: T_MongooseShema<T>,\n middlewares: I_MongooseModelMiddleware<T>[],\n ) {\n middlewares.forEach(({ method, pre, post }) => {\n if (method && pre) {\n schema.pre(method as RegExp, pre);\n }\n\n if (method && post) {\n schema.post(method as RegExp, post);\n }\n });\n },\n /**\n * Creates a generic Mongoose schema with common fields.\n * This function creates a base schema with UUID field and deletion flag,\n * configured with automatic timestamps.\n *\n * @param mongoose - The Mongoose instance to create the schema with.\n * @returns A Mongoose schema with generic document fields.\n */\n createGenericSchema(mongoose: typeof mongooseRaw) {\n return new mongoose.Schema<I_GenericDocument>(\n {\n id: { type: String, default: () => randomUUID(), unique: true },\n isDel: { type: Boolean, default: false },\n },\n { timestamps: true },\n );\n },\n /**\n * Creates a Mongoose schema with optional virtual fields and generic fields.\n * This function creates a new Mongoose schema from the provided schema definition,\n * optionally adds virtual fields, and includes generic fields (unless standalone is true).\n *\n * @param options - Configuration options including mongoose instance, schema definition, virtuals, and standalone flag.\n * @param options.mongoose - The Mongoose instance to use for schema creation.\n * @param options.schema - The schema definition object.\n * @param options.virtuals - Optional array of virtual field configurations.\n * @param options.standalone - Whether to exclude generic fields (default: false).\n * @returns A configured Mongoose schema.\n */\n createSchema<T, R extends string = string>({\n mongoose,\n schema,\n virtuals = [],\n standalone = false,\n }: I_CreateSchemaOptions<T, R>): T_MongooseShema<T> {\n const createdSchema = new mongoose.Schema<T>(schema, {\n toJSON: { virtuals: true }, // So `res.json()` and other `JSON.stringify()` functions include virtuals\n toObject: { virtuals: true }, // So `console.log()` and other functions that use `toObject()` include virtuals\n });\n\n virtuals.forEach(({ name, options, get }) => {\n if (mongo.isDynamicVirtual<T, R>(options)) {\n const schemaStatics = createdSchema.statics as Record<string, unknown>;\n\n if (!schemaStatics['_dynamicVirtuals']) {\n schemaStatics['_dynamicVirtuals'] = [];\n }\n\n (schemaStatics['_dynamicVirtuals'] as I_DynamicVirtualConfig<T>[]).push({\n name: name as string,\n options,\n });\n\n const virtualInstance = createdSchema.virtual(name as string);\n\n if (get) {\n virtualInstance.get(get);\n }\n else {\n virtualInstance.get(function (this: T & { _populated?: { [key: string]: unknown } }) {\n return this._populated?.[name as string] || (options?.count ? 0 : (options?.justOne ? null : []));\n });\n }\n }\n else {\n const virtualInstance = createdSchema.virtual(name as string, options);\n\n if (get) {\n virtualInstance.get(get);\n }\n }\n });\n\n if (!standalone) {\n createdSchema.add(mongo.createGenericSchema(mongoose));\n }\n\n return createdSchema;\n },\n /**\n * Creates a Mongoose model with plugins, middleware, and pagination support.\n * This function creates a model from a schema with optional pagination and aggregation plugins,\n * and applies any specified middleware. If a model with the same name already exists, it returns the existing model.\n *\n * @param options - Configuration options including mongoose instance, model name, schema, and feature flags.\n * @param options.mongoose - The Mongoose instance to use for model creation.\n * @param options.name - The name of the model to create.\n * @param options.schema - The schema definition for the model.\n * @param options.pagination - Whether to enable pagination plugin (default: false).\n * @param options.aggregate - Whether to enable aggregation pagination plugin (default: false).\n * @param options.virtuals - Optional array of virtual field configurations.\n * @param options.middlewares - Optional array of middleware configurations.\n * @returns A configured Mongoose model with extended functionality.\n * @throws {Error} When the model name is not provided.\n */\n createModel<T extends Partial<C_Document>, R extends string = string>({\n mongoose: currentMongooseInstance,\n name,\n schema,\n virtuals = [],\n pagination = true,\n aggregate = true,\n middlewares = [],\n }: I_CreateModelOptions<T, R>): I_ExtendedModel<T> {\n if (!name) {\n throw new Error('Model name is required.');\n }\n\n if (currentMongooseInstance.models[name]) {\n return currentMongooseInstance.models[name] as I_ExtendedModel<T>;\n }\n\n const createdSchema = mongo.createSchema({ mongoose: currentMongooseInstance, schema, virtuals });\n\n if (pagination || aggregate) {\n mongo.applyPlugins<T>(createdSchema, [\n pagination && mongoosePaginate,\n aggregate && aggregatePaginate,\n ]);\n }\n\n mongo.applyMiddlewares<T>(createdSchema, middlewares);\n\n const model = currentMongooseInstance.model<T>(name, createdSchema) as I_ExtendedModel<T>;\n\n if (virtuals.length > 0) {\n (model as any)._virtualConfigs = virtuals;\n }\n\n return model;\n },\n /**\n * Validation utilities for Mongoose schemas.\n * This object provides common validation functions that can be used in Mongoose schema definitions.\n */\n validator: {\n /**\n * Creates a required field validator.\n * This function returns a validator that checks if a field value is not empty\n * using the validate.isEmpty utility.\n *\n * @returns A validation function that returns true if the field is not empty.\n */\n isRequired<T>(): (this: T, value: unknown) => Promise<boolean> {\n return async function (this: T, value: unknown): Promise<boolean> {\n return !validate.isEmpty(value);\n };\n },\n /**\n * Creates a unique field validator.\n * This function returns a validator that checks if a field value is unique\n * across the specified fields in the collection.\n *\n * @param fields - An array of field names to check for uniqueness.\n * @returns A validation function that returns true if the value is unique across the specified fields.\n * @throws {Error} When fields is not a non-empty array of strings.\n */\n isUnique<T extends { constructor: { exists: (query: { [key: string]: unknown }) => Promise<unknown> } }>(fields: string[]) {\n return async function (this: T, value: unknown): Promise<boolean> {\n if (!Array.isArray(fields) || fields.length === 0) {\n throw new Error('Fields must be a non-empty array of strings.');\n }\n\n const query = { $or: fields.map(field => ({ [field]: value })) };\n const existingDocument = await this.constructor.exists(query);\n\n return !existingDocument;\n };\n },\n /**\n * Creates a regex pattern validator.\n * This function returns a validator that checks if a string value matches\n * all provided regular expressions.\n *\n * @param regexArray - An array of regular expressions to test against the value.\n * @returns A validation function that returns true if the value matches all regex patterns.\n * @throws {Error} When regexArray is not an array of valid RegExp objects.\n */\n matchesRegex(regexArray: RegExp[]): (value: string) => Promise<boolean> {\n return async (value: string): Promise<boolean> => {\n if (!Array.isArray(regexArray) || regexArray.some(r => !(r instanceof RegExp))) {\n throw new Error('regexArray must be an array of valid RegExp objects.');\n }\n\n return regexArray.every(regex => regex.test(value));\n };\n },\n },\n /**\n * Migration utilities for MongoDB.\n * This object extends the migrate-mongo library with additional configuration utilities.\n */\n migrate: {\n /**\n * Lazily loads the migrate-mongo module to avoid eager import overhead.\n * Use this to access migrate-mongo methods (up, down, status, create) programmatically.\n *\n * @returns A promise resolving to the migrate-mongo module.\n */\n async getModule(): Promise<typeof migrate> {\n return (await import('migrate-mongo')).default;\n },\n /**\n * Sets the migration configuration and updates .gitignore.\n * This function creates a migration configuration file and ensures it's properly\n * excluded from version control.\n *\n * @param options - Migration configuration options to write to the config file.\n */\n setConfig: (options: Partial<migrate.config.Config> & { moduleSystem?: 'commonjs' | 'esm' }) => {\n const optionsJS = `// This file is automatically generated by the Cyberskill CLI.\\nmodule.exports = ${JSON.stringify(options, null, 4)}`;\n\n writeFileSync(PATH.MIGRATE_MONGO_CONFIG, optionsJS);\n\n addGitIgnoreEntry(PATH.GIT_IGNORE, MIGRATE_MONGO_CONFIG);\n },\n },\n /**\n * Converts string values in a filter to regex patterns for case-insensitive search.\n * This function recursively processes a filter object and converts string values in specified fields\n * to MongoDB regex patterns that support accented character matching.\n *\n * @param filter - The filter object to process.\n * @param fields - An array of field names to convert to regex patterns.\n * @returns A new filter object with string values converted to regex patterns.\n */\n regexify<T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]): T_QueryFilter<T> {\n if (!filter) {\n return {} as T_QueryFilter<T>;\n }\n\n let newFilter = deepClone(filter);\n\n if (!fields || fields.length === 0) {\n return newFilter;\n }\n\n for (const field of fields) {\n const path = field.toString().split('.');\n const value = getNestedValue(newFilter, path);\n\n if (typeof value === 'string' && value.length > 0) {\n const regexValue = {\n $regex: `.*${regexSearchMapper(value)}.*`,\n $options: 'i',\n };\n\n newFilter = setNestedValue(newFilter, path, regexValue);\n }\n }\n\n return newFilter;\n },\n /**\n * Checks if a virtual options object has a dynamic ref function.\n *\n * @param options - The virtual options to check.\n * @returns True if the options contain a dynamic ref function.\n */\n isDynamicVirtual<T, R extends string = string>(options?: T_VirtualOptions<T, R>): options is I_DynamicVirtualOptions<T, R> {\n return Boolean(options && typeof options.ref === 'function');\n },\n\n /**\n * Generic utility function to get new records from the database\n * @param controller - MongoController instance\n * @param recordsToCheck - Array of records to check\n * @param filterFn - Function to determine if a record already exists\n * @returns Array of records that don't exist in the database\n */\n async getNewRecords<T extends I_GenericDocument>(\n controller: MongoController<T>,\n recordsToCheck: T[],\n filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean,\n ): Promise<T[]> {\n const existingRecords = await controller.findAll({});\n\n if (!existingRecords.success) {\n return recordsToCheck;\n }\n\n const filteredRecords = recordsToCheck.filter(newRecord =>\n !existingRecords.result.some((existingRecord: T_WithId<T>) =>\n filterFn(existingRecord, newRecord),\n ),\n );\n\n return filteredRecords;\n },\n\n /**\n * Generic utility function to get existing records that match the filter criteria\n * @param controller - MongoController instance\n * @param recordsToCheck - Array of records to check\n * @param filterFn - Function to determine if a record exists\n * @returns Array of existing records that match the filter criteria\n */\n async getExistingRecords<T extends I_GenericDocument>(\n controller: MongoController<T>,\n recordsToCheck: T[],\n filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean,\n ): Promise<T_WithId<T>[]> {\n const existingRecords = await controller.findAll({});\n\n if (!existingRecords.success) {\n return [];\n }\n\n const foundRecords = existingRecords.result.filter((existingRecord: T_WithId<T>) =>\n recordsToCheck.some((newRecord: T) =>\n filterFn(existingRecord, newRecord),\n ),\n );\n\n return foundRecords;\n },\n};\n\nexport { applyNestedPopulate } from './mongo.populate.js';\n\n"],"names":["convertEnumToModelName","enumValue","mongo","randomUUID","schema","plugins","plugin","middlewares","method","pre","post","mongoose","virtuals","standalone","createdSchema","name","options","get","schemaStatics","virtualInstance","currentMongooseInstance","pagination","aggregate","mongoosePaginate","aggregatePaginate","model","value","validate","fields","query","field","regexArray","r","regex","optionsJS","writeFileSync","PATH","addGitIgnoreEntry","MIGRATE_MONGO_CONFIG","filter","newFilter","deepClone","path","getNestedValue","regexValue","regexSearchMapper","setNestedValue","controller","recordsToCheck","filterFn","existingRecords","newRecord","existingRecord"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongo.util.js","sources":["../../../src/node/mongo/mongo.util.ts"],"sourcesContent":["import type migrate from 'migrate-mongo';\nimport type mongooseRaw from 'mongoose';\n\nimport aggregatePaginate from 'mongoose-aggregate-paginate-v2';\nimport mongoosePaginate from 'mongoose-paginate-v2';\nimport { randomUUID } from 'node:crypto';\n\nimport { deepClone, getNestedValue, regexSearchMapper, setNestedValue } from '#util/index.js';\nimport { validate } from '#util/validate/index.js';\n\nimport type { MongoController } from './mongo.controller.js';\nimport type { C_Document, I_CreateModelOptions, I_CreateSchemaOptions, I_DynamicVirtualConfig, I_DynamicVirtualOptions, I_ExtendedModel, I_GenericDocument, I_MongooseModelMiddleware, T_MongoosePlugin, T_MongooseShema, T_QueryFilter, T_VirtualOptions, T_WithId } from './mongo.type.js';\n\nimport { addGitIgnoreEntry, writeFileSync } from '../fs/index.js';\nimport { MIGRATE_MONGO_CONFIG, PATH } from '../path/index.js';\n\n/**\n * Converts enum values to proper model names.\n * Handles common naming conventions like converting 'USER' to 'User'.\n *\n * @param enumValue - The enum value to convert\n * @returns The converted model name\n */\nexport function convertEnumToModelName(enumValue: string): string {\n if (enumValue === enumValue.toUpperCase()) {\n return enumValue.charAt(0).toUpperCase() + enumValue.slice(1).toLowerCase();\n }\n\n return enumValue;\n}\n\n/**\n * Interface for the MongoDB utility object to enable explicit type annotation.\n * Required to avoid TS7056 (inferred type exceeds maximum serialization length).\n */\ninterface I_MongoUtils {\n createGenericFields: () => I_GenericDocument;\n applyPlugins: <T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>) => void;\n applyMiddlewares: <T extends Partial<C_Document>>(schema: T_MongooseShema<T>, middlewares: I_MongooseModelMiddleware<T>[]) => void;\n createGenericSchema: (mongoose: typeof mongooseRaw) => T_MongooseShema<I_GenericDocument>;\n createSchema: <T, R extends string>(options: I_CreateSchemaOptions<T, R>) => T_MongooseShema<T>;\n createModel: <T extends Partial<C_Document>, R extends string>(options: I_CreateModelOptions<T, R>) => I_ExtendedModel<T>;\n validator: {\n isRequired: <T>() => (this: T, value: unknown) => Promise<boolean>;\n isUnique: <T extends { constructor: { exists: (query: { [key: string]: unknown }) => Promise<unknown> } }>(fields: string[]) => (this: T, value: unknown) => Promise<boolean>;\n matchesRegex: (regexArray: RegExp[]) => (value: string) => Promise<boolean>;\n };\n migrate: {\n getModule: () => Promise<typeof migrate>;\n setConfig: (options: Partial<migrate.config.Config> & { moduleSystem?: 'commonjs' | 'esm' }) => void;\n };\n regexify: <T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]) => T_QueryFilter<T>;\n isDynamicVirtual: <T, R extends string>(options?: T_VirtualOptions<T, R>) => options is I_DynamicVirtualOptions<T, R>;\n getNewRecords: <T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean) => Promise<T[]>;\n getExistingRecords: <T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean) => Promise<T_WithId<T>[]>;\n}\n\n/**\n * MongoDB utility object providing comprehensive database operations and utilities.\n * This object contains methods for creating generic fields, applying plugins and middlewares,\n * creating schemas and models, validation functions, migration utilities, and regex filtering.\n */\nexport const mongo: I_MongoUtils = {\n /**\n * Creates generic fields that are commonly used across MongoDB documents.\n * This function generates standard fields including a UUID, deletion flag, and timestamps\n * that can be applied to any document schema.\n *\n * @returns An object containing generic document fields (id, isDel, createdAt, updatedAt).\n */\n createGenericFields(): I_GenericDocument {\n return {\n id: randomUUID(),\n isDel: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n },\n /**\n * Applies plugins to a Mongoose schema.\n * This function filters out falsy plugins and applies the remaining valid plugins\n * to the provided schema.\n *\n * @param schema - The Mongoose schema to apply plugins to.\n * @param plugins - An array of plugin functions or false values to filter and apply.\n */\n applyPlugins<T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>) {\n plugins\n .filter((plugin): plugin is T_MongoosePlugin => typeof plugin === 'function')\n .forEach(plugin => schema.plugin(plugin));\n },\n /**\n * Applies middleware functions to a Mongoose schema.\n * This function configures pre and post middleware for specified methods on the schema.\n *\n * @param schema - The Mongoose schema to apply middleware to.\n * @param middlewares - An array of middleware configurations with method, pre, and post functions.\n */\n applyMiddlewares<T extends Partial<C_Document>>(\n schema: T_MongooseShema<T>,\n middlewares: I_MongooseModelMiddleware<T>[],\n ) {\n middlewares.forEach(({ method, pre, post }) => {\n if (method && pre) {\n schema.pre(method as RegExp, pre);\n }\n\n if (method && post) {\n schema.post(method as RegExp, post);\n }\n });\n },\n /**\n * Creates a generic Mongoose schema with common fields.\n * This function creates a base schema with UUID field and deletion flag,\n * configured with automatic timestamps.\n *\n * @param mongoose - The Mongoose instance to create the schema with.\n * @returns A Mongoose schema with generic document fields.\n */\n createGenericSchema(mongoose: typeof mongooseRaw) {\n return new mongoose.Schema<I_GenericDocument>(\n {\n id: { type: String, default: () => randomUUID(), unique: true },\n isDel: { type: Boolean, default: false },\n },\n { timestamps: true },\n );\n },\n /**\n * Creates a Mongoose schema with optional virtual fields and generic fields.\n * This function creates a new Mongoose schema from the provided schema definition,\n * optionally adds virtual fields, and includes generic fields (unless standalone is true).\n *\n * @param options - Configuration options including mongoose instance, schema definition, virtuals, and standalone flag.\n * @param options.mongoose - The Mongoose instance to use for schema creation.\n * @param options.schema - The schema definition object.\n * @param options.virtuals - Optional array of virtual field configurations.\n * @param options.standalone - Whether to exclude generic fields (default: false).\n * @returns A configured Mongoose schema.\n */\n createSchema<T, R extends string = string>({\n mongoose,\n schema,\n virtuals = [],\n standalone = false,\n }: I_CreateSchemaOptions<T, R>): T_MongooseShema<T> {\n const createdSchema = new mongoose.Schema<T>(schema, {\n toJSON: { virtuals: true }, // So `res.json()` and other `JSON.stringify()` functions include virtuals\n toObject: { virtuals: true }, // So `console.log()` and other functions that use `toObject()` include virtuals\n });\n\n virtuals.forEach(({ name, options, get }) => {\n if (mongo.isDynamicVirtual<T, R>(options)) {\n const schemaStatics = createdSchema.statics as Record<string, unknown>;\n\n if (!schemaStatics['_dynamicVirtuals']) {\n schemaStatics['_dynamicVirtuals'] = [];\n }\n\n (schemaStatics['_dynamicVirtuals'] as I_DynamicVirtualConfig<T>[]).push({\n name: name as string,\n options,\n });\n\n const virtualInstance = createdSchema.virtual(name as string);\n\n if (get) {\n virtualInstance.get(get);\n }\n else {\n virtualInstance.get(function (this: T & { _populated?: { [key: string]: unknown } }) {\n return this._populated?.[name as string] || (options?.count ? 0 : (options?.justOne ? null : []));\n });\n }\n }\n else {\n const virtualInstance = createdSchema.virtual(name as string, options);\n\n if (get) {\n virtualInstance.get(get);\n }\n }\n });\n\n if (!standalone) {\n createdSchema.add(mongo.createGenericSchema(mongoose));\n }\n\n return createdSchema;\n },\n /**\n * Creates a Mongoose model with plugins, middleware, and pagination support.\n * This function creates a model from a schema with optional pagination and aggregation plugins,\n * and applies any specified middleware. If a model with the same name already exists, it returns the existing model.\n *\n * @param options - Configuration options including mongoose instance, model name, schema, and feature flags.\n * @param options.mongoose - The Mongoose instance to use for model creation.\n * @param options.name - The name of the model to create.\n * @param options.schema - The schema definition for the model.\n * @param options.pagination - Whether to enable pagination plugin (default: false).\n * @param options.aggregate - Whether to enable aggregation pagination plugin (default: false).\n * @param options.virtuals - Optional array of virtual field configurations.\n * @param options.middlewares - Optional array of middleware configurations.\n * @returns A configured Mongoose model with extended functionality.\n * @throws {Error} When the model name is not provided.\n */\n createModel<T extends Partial<C_Document>, R extends string = string>({\n mongoose: currentMongooseInstance,\n name,\n schema,\n virtuals = [],\n pagination = true,\n aggregate = true,\n middlewares = [],\n }: I_CreateModelOptions<T, R>): I_ExtendedModel<T> {\n if (!name) {\n throw new Error('Model name is required.');\n }\n\n if (currentMongooseInstance.models[name]) {\n return currentMongooseInstance.models[name] as I_ExtendedModel<T>;\n }\n\n const createdSchema = mongo.createSchema({ mongoose: currentMongooseInstance, schema, virtuals });\n\n if (pagination || aggregate) {\n mongo.applyPlugins<T>(createdSchema, [\n pagination && mongoosePaginate,\n aggregate && aggregatePaginate,\n ]);\n }\n\n mongo.applyMiddlewares<T>(createdSchema, middlewares);\n\n const model = currentMongooseInstance.model<T>(name, createdSchema) as I_ExtendedModel<T>;\n\n if (virtuals.length > 0) {\n (model as any)._virtualConfigs = virtuals;\n }\n\n return model;\n },\n /**\n * Validation utilities for Mongoose schemas.\n * This object provides common validation functions that can be used in Mongoose schema definitions.\n */\n validator: {\n /**\n * Creates a required field validator.\n * This function returns a validator that checks if a field value is not empty\n * using the validate.isEmpty utility.\n *\n * @returns A validation function that returns true if the field is not empty.\n */\n isRequired<T>(): (this: T, value: unknown) => Promise<boolean> {\n return async function (this: T, value: unknown): Promise<boolean> {\n return !validate.isEmpty(value);\n };\n },\n /**\n * Creates a unique field validator.\n * This function returns a validator that checks if a field value is unique\n * across the specified fields in the collection.\n *\n * @param fields - An array of field names to check for uniqueness.\n * @returns A validation function that returns true if the value is unique across the specified fields.\n * @throws {Error} When fields is not a non-empty array of strings.\n */\n isUnique<T extends { constructor: { exists: (query: { [key: string]: unknown }) => Promise<unknown> } }>(fields: string[]) {\n return async function (this: T, value: unknown): Promise<boolean> {\n if (!Array.isArray(fields) || fields.length === 0) {\n throw new Error('Fields must be a non-empty array of strings.');\n }\n\n const query = { $or: fields.map(field => ({ [field]: value })) };\n const existingDocument = await this.constructor.exists(query);\n\n return !existingDocument;\n };\n },\n /**\n * Creates a regex pattern validator.\n * This function returns a validator that checks if a string value matches\n * all provided regular expressions.\n *\n * @param regexArray - An array of regular expressions to test against the value.\n * @returns A validation function that returns true if the value matches all regex patterns.\n * @throws {Error} When regexArray is not an array of valid RegExp objects.\n */\n matchesRegex(regexArray: RegExp[]): (value: string) => Promise<boolean> {\n return async (value: string): Promise<boolean> => {\n if (!Array.isArray(regexArray) || regexArray.some(r => !(r instanceof RegExp))) {\n throw new Error('regexArray must be an array of valid RegExp objects.');\n }\n\n return regexArray.every(regex => regex.test(value));\n };\n },\n },\n /**\n * Migration utilities for MongoDB.\n * This object extends the migrate-mongo library with additional configuration utilities.\n */\n migrate: {\n /**\n * Lazily loads the migrate-mongo module to avoid eager import overhead.\n * Use this to access migrate-mongo methods (up, down, status, create) programmatically.\n *\n * @returns A promise resolving to the migrate-mongo module.\n */\n async getModule(): Promise<typeof migrate> {\n return (await import('migrate-mongo')).default;\n },\n /**\n * Sets the migration configuration and updates .gitignore.\n * This function creates a migration configuration file and ensures it's properly\n * excluded from version control.\n *\n * @param options - Migration configuration options to write to the config file.\n */\n setConfig: (options: Partial<migrate.config.Config> & { moduleSystem?: 'commonjs' | 'esm' }) => {\n const optionsJS = `// This file is automatically generated by the Cyberskill CLI.\\nmodule.exports = ${JSON.stringify(options, null, 4)}`;\n\n writeFileSync(PATH.MIGRATE_MONGO_CONFIG, optionsJS);\n\n addGitIgnoreEntry(PATH.GIT_IGNORE, MIGRATE_MONGO_CONFIG);\n },\n },\n /**\n * Converts string values in a filter to regex patterns for case-insensitive search.\n * This function recursively processes a filter object and converts string values in specified fields\n * to MongoDB regex patterns that support accented character matching.\n *\n * @param filter - The filter object to process.\n * @param fields - An array of field names to convert to regex patterns.\n * @returns A new filter object with string values converted to regex patterns.\n */\n regexify<T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]): T_QueryFilter<T> {\n if (!filter) {\n return {} as T_QueryFilter<T>;\n }\n\n let newFilter = deepClone(filter);\n\n if (!fields || fields.length === 0) {\n return newFilter;\n }\n\n for (const field of fields) {\n const path = field.toString().split('.');\n const value = getNestedValue(newFilter, path);\n\n if (typeof value === 'string' && value.length > 0) {\n const regexValue = {\n $regex: `.*${regexSearchMapper(value)}.*`,\n $options: 'i',\n };\n\n newFilter = setNestedValue(newFilter, path, regexValue);\n }\n }\n\n return newFilter;\n },\n /**\n * Checks if a virtual options object has a dynamic ref function.\n *\n * @param options - The virtual options to check.\n * @returns True if the options contain a dynamic ref function.\n */\n isDynamicVirtual<T, R extends string = string>(options?: T_VirtualOptions<T, R>): options is I_DynamicVirtualOptions<T, R> {\n return Boolean(options && typeof options.ref === 'function');\n },\n\n /**\n * Generic utility function to get new records from the database\n * @param controller - MongoController instance\n * @param recordsToCheck - Array of records to check\n * @param filterFn - Function to determine if a record already exists\n * @returns Array of records that don't exist in the database\n */\n async getNewRecords<T extends I_GenericDocument>(\n controller: MongoController<T>,\n recordsToCheck: T[],\n filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean,\n ): Promise<T[]> {\n const existingRecords = await controller.findAll({});\n\n if (!existingRecords.success) {\n return recordsToCheck;\n }\n\n const filteredRecords = recordsToCheck.filter(newRecord =>\n !existingRecords.result.some((existingRecord: T_WithId<T>) =>\n filterFn(existingRecord, newRecord),\n ),\n );\n\n return filteredRecords;\n },\n\n /**\n * Generic utility function to get existing records that match the filter criteria\n * @param controller - MongoController instance\n * @param recordsToCheck - Array of records to check\n * @param filterFn - Function to determine if a record exists\n * @returns Array of existing records that match the filter criteria\n */\n async getExistingRecords<T extends I_GenericDocument>(\n controller: MongoController<T>,\n recordsToCheck: T[],\n filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean,\n ): Promise<T_WithId<T>[]> {\n const existingRecords = await controller.findAll({});\n\n if (!existingRecords.success) {\n return [];\n }\n\n const foundRecords = existingRecords.result.filter((existingRecord: T_WithId<T>) =>\n recordsToCheck.some((newRecord: T) =>\n filterFn(existingRecord, newRecord),\n ),\n );\n\n return foundRecords;\n },\n};\n\nexport { applyNestedPopulate } from './mongo.populate.js';\n"],"names":["convertEnumToModelName","enumValue","mongo","randomUUID","schema","plugins","plugin","middlewares","method","pre","post","mongoose","virtuals","standalone","createdSchema","name","options","get","schemaStatics","virtualInstance","currentMongooseInstance","pagination","aggregate","mongoosePaginate","aggregatePaginate","model","value","validate","fields","query","field","regexArray","r","regex","optionsJS","writeFileSync","PATH","addGitIgnoreEntry","MIGRATE_MONGO_CONFIG","filter","newFilter","deepClone","path","getNestedValue","regexValue","regexSearchMapper","setNestedValue","controller","recordsToCheck","filterFn","existingRecords","newRecord","existingRecord"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { formatCommand as D, rawCommand as I } from "../command/command.util.js"
|
|
|
5
5
|
import { setupPackages as Y } from "../package/package.util.js";
|
|
6
6
|
import { E_PackageType as n } from "../package/package.type.js";
|
|
7
7
|
import { getEnv as h } from "../../config/env/env.util.js";
|
|
8
|
-
const b = h(), N = b.CWD, g = "@cyberskill/shared", P = "node_modules", L = "dist", F = "public", u = "package.json", V = "package-lock.json", v = "tsconfig.json", U = ".gitignore", j = ".simple-git-hooks.json", w = "pnpm-lock.yaml", B = ".git/hooks/", H = ".git/COMMIT_EDITMSG", x = ".git/info/exclude", J = ".migrate-mongo.config.js", E = K.readJsonSync(o(u)).name === g ? G(N, L) : G(N, P, g, L),
|
|
8
|
+
const b = h(), N = b.CWD, g = "@cyberskill/shared", P = "node_modules", L = "dist", F = "public", u = "package.json", V = "package-lock.json", v = "tsconfig.json", U = ".gitignore", j = ".simple-git-hooks.json", w = "pnpm-lock.yaml", B = ".git/hooks/", H = ".git/COMMIT_EDITMSG", x = ".git/info/exclude", J = ".migrate-mongo.config.js", E = K.readJsonSync(o(u)).name === g ? G(N, L) : G(N, P, g, L), re = "cyberskill", Te = "src/node/cli/index.ts", l = "eslint", d = "eslint", A = "vitest", M = "vitest", W = "@commitlint/cli", X = "@commitlint/config-conventional", $ = "commitlint", q = "lint-staged", f = "lint-staged", z = "typescript", Q = "tsc", a = "tsx", k = "git", _ = "pnpm", Z = "pnpm exec", ee = "simple-git-hooks", te = "simple-git-hooks", oe = "@eslint/config-inspector", ne = "eslint-config-inspector", se = "node-modules-inspector", ce = "node-modules-inspector", m = "migrate-mongo", C = "./node_modules/migrate-mongo/bin/migrate-mongo", y = "storybook", S = "storybook", Oe = "@vudovn/ag-kit", Ee = ".agent", s = {
|
|
9
9
|
CYBERSKILL_DIRECTORY: E,
|
|
10
10
|
WORKING_DIRECTORY: N,
|
|
11
11
|
PUBLIC_DIRECTORY: o(F),
|
|
@@ -28,7 +28,7 @@ const b = h(), N = b.CWD, g = "@cyberskill/shared", P = "node_modules", L = "dis
|
|
|
28
28
|
STORYBOOK_PREVIEW_CONFIG: o(`${E}/config/storybook/storybook.preview.js`),
|
|
29
29
|
DOT_AGENT: o(Ee)
|
|
30
30
|
};
|
|
31
|
-
function
|
|
31
|
+
function Ge({ isCurrentProject: c }) {
|
|
32
32
|
return {
|
|
33
33
|
"pre-commit": f,
|
|
34
34
|
"commit-msg": $,
|
|
@@ -50,7 +50,7 @@ function t({ type: c, packages: p, command: r }) {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
-
const
|
|
53
|
+
const _e = /^[\w-]+$/, De = {
|
|
54
54
|
simpleGitHooks: t({
|
|
55
55
|
type: e.CLI,
|
|
56
56
|
packages: [
|
|
@@ -132,7 +132,7 @@ const Ge = {
|
|
|
132
132
|
command: `${M} --config ${s.VITEST_E2E_CONFIG}`
|
|
133
133
|
}),
|
|
134
134
|
mongoMigrateCreate: (c) => {
|
|
135
|
-
if (
|
|
135
|
+
if (!_e.test(c))
|
|
136
136
|
throw new Error("Migration name must only contain alphanumeric characters, underscores, and hyphens.");
|
|
137
137
|
return t({
|
|
138
138
|
type: e.CLI,
|
|
@@ -251,13 +251,13 @@ const Ge = {
|
|
|
251
251
|
})
|
|
252
252
|
};
|
|
253
253
|
export {
|
|
254
|
-
|
|
254
|
+
Oe as AG_KIT_PACKAGE_NAME,
|
|
255
255
|
L as BUILD_DIRECTORY,
|
|
256
256
|
$ as COMMIT_LINT_CLI,
|
|
257
257
|
X as COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME,
|
|
258
258
|
W as COMMIT_LINT_PACKAGE_NAME,
|
|
259
|
-
|
|
260
|
-
|
|
259
|
+
re as CYBERSKILL_CLI,
|
|
260
|
+
Te as CYBERSKILL_CLI_PATH,
|
|
261
261
|
E as CYBERSKILL_DIRECTORY,
|
|
262
262
|
g as CYBERSKILL_PACKAGE_NAME,
|
|
263
263
|
Ee as DOT_AGENT,
|
|
@@ -297,7 +297,7 @@ export {
|
|
|
297
297
|
M as VITEST_CLI,
|
|
298
298
|
A as VITEST_PACKAGE_NAME,
|
|
299
299
|
N as WORKING_DIRECTORY,
|
|
300
|
-
|
|
301
|
-
|
|
300
|
+
De as command,
|
|
301
|
+
Ge as createGitHooksConfig
|
|
302
302
|
};
|
|
303
303
|
//# sourceMappingURL=path.constant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.constant.js","sources":["../../../src/node/path/path.constant.ts"],"sourcesContent":["import fsExtra from 'fs-extra';\n\nimport { getEnv } from '#config/env/index.js';\n\nimport type { I_CommandContext } from '../command/index.js';\nimport type { I_PackageInput, I_PackageJson } from '../package/index.js';\n\nimport { E_CommandType, formatCommand, rawCommand } from '../command/index.js';\nimport { E_PackageType, setupPackages } from '../package/index.js';\nimport { join, resolveWorkingPath } from './path.util.js';\n\nconst env = getEnv();\n\nexport const WORKING_DIRECTORY = env.CWD;\nexport const CYBERSKILL_PACKAGE_NAME = '@cyberskill/shared';\nexport const NODE_MODULES = 'node_modules';\nexport const BUILD_DIRECTORY = 'dist';\nexport const PUBLIC_DIRECTORY = 'public';\nexport const PACKAGE_JSON = 'package.json';\nexport const PACKAGE_LOCK_JSON = 'package-lock.json';\nexport const TSCONFIG_JSON = 'tsconfig.json';\nexport const GIT_IGNORE = '.gitignore';\nexport const SIMPLE_GIT_HOOK_JSON = '.simple-git-hooks.json';\nexport const PNPM_LOCK_YAML = 'pnpm-lock.yaml';\nexport const GIT_HOOK = '.git/hooks/';\nexport const GIT_COMMIT_EDITMSG = '.git/COMMIT_EDITMSG';\nexport const GIT_EXCLUDE = '.git/info/exclude';\nexport const MIGRATE_MONGO_CONFIG = '.migrate-mongo.config.js';\nexport const CYBERSKILL_DIRECTORY = (() => {\n const packageJson = fsExtra.readJsonSync(resolveWorkingPath(PACKAGE_JSON)) as I_PackageJson;\n\n const baseDirectory = packageJson.name === CYBERSKILL_PACKAGE_NAME\n ? join(WORKING_DIRECTORY, BUILD_DIRECTORY)\n : join(WORKING_DIRECTORY, NODE_MODULES, CYBERSKILL_PACKAGE_NAME, BUILD_DIRECTORY);\n\n return baseDirectory;\n})();\nexport const CYBERSKILL_CLI = 'cyberskill';\nexport const CYBERSKILL_CLI_PATH = 'src/node/cli/index.ts';\nexport const ESLINT_PACKAGE_NAME = 'eslint';\nexport const ESLINT_CLI = 'eslint';\nexport const VITEST_PACKAGE_NAME = 'vitest';\nexport const VITEST_CLI = 'vitest';\nexport const COMMIT_LINT_PACKAGE_NAME = '@commitlint/cli';\nexport const COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME = '@commitlint/config-conventional';\nexport const COMMIT_LINT_CLI = 'commitlint';\nexport const LINT_STAGED_PACKAGE_NAME = 'lint-staged';\nexport const LINT_STAGED_CLI = 'lint-staged';\nexport const TSC_PACKAGE_NAME = 'typescript';\nexport const TSC_CLI = 'tsc';\nexport const TSX_CLI = 'tsx';\nexport const GIT_CLI = 'git';\nexport const PNPM_CLI = 'pnpm';\nexport const PNPM_EXEC_CLI = 'pnpm exec';\nexport const SIMPLE_GIT_HOOKS_PACKAGE_NAME = 'simple-git-hooks';\nexport const SIMPLE_GIT_HOOK_CLI = 'simple-git-hooks';\nexport const ESLINT_INSPECT_PACKAGE_NAME = '@eslint/config-inspector';\nexport const ESLINT_INSPECT_CLI = 'eslint-config-inspector';\nexport const NODE_MODULES_INSPECT_PACKAGE_NAME = 'node-modules-inspector';\nexport const NODE_MODULES_INSPECT_CLI = 'node-modules-inspector';\nexport const MIGRATE_MONGO_PACKAGE_NAME = 'migrate-mongo';\nexport const MIGRATE_MONGO_CLI = './node_modules/migrate-mongo/bin/migrate-mongo';\nexport const STORYBOOK_PACKAGE_NAME = 'storybook';\nexport const STORYBOOK_CLI = 'storybook';\nexport const AG_KIT_PACKAGE_NAME = '@vudovn/ag-kit';\nexport const DOT_AGENT = '.agent';\n\nexport const PATH = {\n CYBERSKILL_DIRECTORY,\n WORKING_DIRECTORY,\n PUBLIC_DIRECTORY: resolveWorkingPath(PUBLIC_DIRECTORY),\n TS_CONFIG: resolveWorkingPath(TSCONFIG_JSON),\n GIT_IGNORE: resolveWorkingPath(GIT_IGNORE),\n GIT_HOOK: resolveWorkingPath(GIT_HOOK),\n GIT_COMMIT_MSG: resolveWorkingPath(GIT_COMMIT_EDITMSG),\n GIT_EXCLUDE: resolveWorkingPath(GIT_EXCLUDE),\n SIMPLE_GIT_HOOKS_JSON: resolveWorkingPath(SIMPLE_GIT_HOOK_JSON),\n PACKAGE_JSON: resolveWorkingPath(PACKAGE_JSON),\n PACKAGE_LOCK_JSON: resolveWorkingPath(PACKAGE_LOCK_JSON),\n PNPM_LOCK_YAML: resolveWorkingPath(PNPM_LOCK_YAML),\n NODE_MODULES: resolveWorkingPath(NODE_MODULES),\n MIGRATE_MONGO_CONFIG: resolveWorkingPath(MIGRATE_MONGO_CONFIG),\n LINT_STAGED_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/lint-staged/index.js`),\n COMMITLINT_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/commitlint/index.js`),\n VITEST_UNIT_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/vitest/vitest.unit.js`),\n VITEST_E2E_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/vitest/vitest.e2e.js`),\n STORYBOOK_MAIN_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/storybook/storybook.main.js`),\n STORYBOOK_PREVIEW_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/storybook/storybook.preview.js`),\n DOT_AGENT: resolveWorkingPath(DOT_AGENT),\n};\n\n/**\n * Creates Git hooks configuration based on whether this is the current project.\n * This function generates a configuration object for Git hooks that includes\n * pre-commit and commit-msg hooks, with an optional pre-push hook for the current project.\n *\n * @param context - Context object containing project information.\n * @param context.isCurrentProject - Whether this is the current project being worked on.\n * @returns A Git hooks configuration object with appropriate commands for each hook.\n */\nexport function createGitHooksConfig({ isCurrentProject }: Partial<I_CommandContext>) {\n return {\n 'pre-commit': LINT_STAGED_CLI,\n 'commit-msg': COMMIT_LINT_CLI,\n ...(isCurrentProject ? { 'pre-push': rawCommand(`${GIT_CLI} pull`) } : { 'pre-push': rawCommand(`TAG_ONLY=true; while read local_ref local_oid remote_ref remote_oid; do case \\\"$local_ref\\\" in refs/tags/*) ;; *) TAG_ONLY=false; break ;; esac; done; if [ \\\"$TAG_ONLY\\\" = true ]; then echo '[pre-push] Tag-only push, skipping build.'; exit 0; fi; ${PNPM_CLI} build`) }),\n };\n}\n\n/**\n * Builds a command function based on the specified type and configuration.\n * This function creates a command executor that handles different command types\n * including CLI commands and string commands. It manages package dependencies\n * and formats commands appropriately for execution.\n *\n * The function supports:\n * - CLI commands that require package installation\n * - String commands that are executed directly\n * - Automatic package dependency management\n * - Command formatting and validation\n *\n * @param config - Configuration object containing type, packages, and command properties.\n * @param config.type - The type of command to build (CLI or STRING).\n * @param config.packages - Optional array of packages required for CLI commands.\n * @param config.command - The command string to execute.\n * @returns A function that returns a promise resolving to the formatted command string.\n * @throws {Error} When an unsupported command type is provided.\n */\nfunction buildCommand({ type, packages, command }: { type: E_CommandType; packages?: I_PackageInput[]; command: string }): () => Promise<string> {\n const uniquePackages = packages?.reduce((acc: I_PackageInput[], pkg) => {\n if (!acc.some(existingPkg => existingPkg.name === pkg.name)) {\n acc.push(pkg);\n }\n return acc;\n }, []);\n\n return async () => {\n switch (type) {\n case E_CommandType.CLI: {\n if (uniquePackages?.length) {\n await setupPackages(uniquePackages, {\n install: true,\n });\n }\n\n return formatCommand(rawCommand(`${PNPM_EXEC_CLI} ${command}`)) as string;\n }\n case E_CommandType.STRING: {\n return formatCommand(rawCommand(command)) as string;\n }\n default: {\n throw new Error('Unsupported command type');\n }\n }\n };\n}\n\nexport const command = {\n simpleGitHooks: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: SIMPLE_GIT_HOOKS_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: SIMPLE_GIT_HOOK_CLI,\n }),\n eslintInspect: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name:\n ESLINT_INSPECT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: ESLINT_INSPECT_CLI,\n }),\n nodeModulesInspect: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: NODE_MODULES_INSPECT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: NODE_MODULES_INSPECT_CLI,\n }),\n eslintCheck: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: ESLINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${ESLINT_CLI} ${PATH.WORKING_DIRECTORY} --no-cache`,\n }),\n eslintFix: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: ESLINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${ESLINT_CLI} ${PATH.WORKING_DIRECTORY} --fix --no-cache`,\n }),\n typescriptCheck: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSC_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${TSC_CLI} -p ${PATH.TS_CONFIG} --noEmit`,\n }),\n testUnit: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: VITEST_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${VITEST_CLI} --config ${PATH.VITEST_UNIT_CONFIG}`,\n }),\n testE2e: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: VITEST_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${VITEST_CLI} --config ${PATH.VITEST_E2E_CONFIG}`,\n }),\n mongoMigrateCreate: (migrateName: string) => {\n if (!/^[\\w-]+$/.test(migrateName)) {\n throw new Error('Migration name must only contain alphanumeric characters, underscores, and hyphens.');\n }\n\n return buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} create ${migrateName} -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n })();\n },\n mongoMigrateUp: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} up -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n }),\n mongoMigrateDown: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} down -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n }),\n commitLint: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: COMMIT_LINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n {\n name: COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${COMMIT_LINT_CLI} --edit ${PATH.GIT_COMMIT_MSG} --config ${PATH.COMMITLINT_CONFIG}`,\n }),\n lintStaged: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: LINT_STAGED_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${LINT_STAGED_CLI} --config ${PATH.LINT_STAGED_CONFIG}`,\n }),\n configureGitHook: buildCommand({\n type: E_CommandType.STRING,\n command: `${GIT_CLI} config core.hooksPath ${PATH.GIT_HOOK}`,\n }),\n build: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} run --if-present build`,\n }),\n pnpmInstallStandard: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts`,\n }),\n pnpmInstallLegacy: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts --legacy-peer-deps`,\n }),\n pnpmInstallForce: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts --force`,\n }),\n pnpmPruneStore: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} store prune`,\n }),\n pnpmCleanCache: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} cache delete`,\n }),\n storybookDev: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: STORYBOOK_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${STORYBOOK_CLI} dev`,\n }),\n storybookBuild: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: STORYBOOK_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${STORYBOOK_CLI} build`,\n }),\n};\n"],"names":["env","getEnv","WORKING_DIRECTORY","CYBERSKILL_PACKAGE_NAME","NODE_MODULES","BUILD_DIRECTORY","PUBLIC_DIRECTORY","PACKAGE_JSON","PACKAGE_LOCK_JSON","TSCONFIG_JSON","GIT_IGNORE","SIMPLE_GIT_HOOK_JSON","PNPM_LOCK_YAML","GIT_HOOK","GIT_COMMIT_EDITMSG","GIT_EXCLUDE","MIGRATE_MONGO_CONFIG","CYBERSKILL_DIRECTORY","fsExtra","resolveWorkingPath","join","CYBERSKILL_CLI","CYBERSKILL_CLI_PATH","ESLINT_PACKAGE_NAME","ESLINT_CLI","VITEST_PACKAGE_NAME","VITEST_CLI","COMMIT_LINT_PACKAGE_NAME","COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME","COMMIT_LINT_CLI","LINT_STAGED_PACKAGE_NAME","LINT_STAGED_CLI","TSC_PACKAGE_NAME","TSC_CLI","TSX_CLI","GIT_CLI","PNPM_CLI","PNPM_EXEC_CLI","SIMPLE_GIT_HOOKS_PACKAGE_NAME","SIMPLE_GIT_HOOK_CLI","ESLINT_INSPECT_PACKAGE_NAME","ESLINT_INSPECT_CLI","NODE_MODULES_INSPECT_PACKAGE_NAME","NODE_MODULES_INSPECT_CLI","MIGRATE_MONGO_PACKAGE_NAME","MIGRATE_MONGO_CLI","STORYBOOK_PACKAGE_NAME","STORYBOOK_CLI","AG_KIT_PACKAGE_NAME","DOT_AGENT","PATH","createGitHooksConfig","isCurrentProject","rawCommand","buildCommand","type","packages","command","uniquePackages","acc","pkg","existingPkg","E_CommandType","setupPackages","formatCommand","E_PackageType","migrateName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"path.constant.js","sources":["../../../src/node/path/path.constant.ts"],"sourcesContent":["import fsExtra from 'fs-extra';\n\nimport { getEnv } from '#config/env/index.js';\n\nimport type { I_CommandContext } from '../command/index.js';\nimport type { I_PackageInput, I_PackageJson } from '../package/index.js';\n\nimport { E_CommandType, formatCommand, rawCommand } from '../command/index.js';\nimport { E_PackageType, setupPackages } from '../package/index.js';\nimport { join, resolveWorkingPath } from './path.util.js';\n\nconst env = getEnv();\n\nexport const WORKING_DIRECTORY = env.CWD;\nexport const CYBERSKILL_PACKAGE_NAME = '@cyberskill/shared';\nexport const NODE_MODULES = 'node_modules';\nexport const BUILD_DIRECTORY = 'dist';\nexport const PUBLIC_DIRECTORY = 'public';\nexport const PACKAGE_JSON = 'package.json';\nexport const PACKAGE_LOCK_JSON = 'package-lock.json';\nexport const TSCONFIG_JSON = 'tsconfig.json';\nexport const GIT_IGNORE = '.gitignore';\nexport const SIMPLE_GIT_HOOK_JSON = '.simple-git-hooks.json';\nexport const PNPM_LOCK_YAML = 'pnpm-lock.yaml';\nexport const GIT_HOOK = '.git/hooks/';\nexport const GIT_COMMIT_EDITMSG = '.git/COMMIT_EDITMSG';\nexport const GIT_EXCLUDE = '.git/info/exclude';\nexport const MIGRATE_MONGO_CONFIG = '.migrate-mongo.config.js';\nexport const CYBERSKILL_DIRECTORY = (() => {\n const packageJson = fsExtra.readJsonSync(resolveWorkingPath(PACKAGE_JSON)) as I_PackageJson;\n\n const baseDirectory = packageJson.name === CYBERSKILL_PACKAGE_NAME\n ? join(WORKING_DIRECTORY, BUILD_DIRECTORY)\n : join(WORKING_DIRECTORY, NODE_MODULES, CYBERSKILL_PACKAGE_NAME, BUILD_DIRECTORY);\n\n return baseDirectory;\n})();\nexport const CYBERSKILL_CLI = 'cyberskill';\nexport const CYBERSKILL_CLI_PATH = 'src/node/cli/index.ts';\nexport const ESLINT_PACKAGE_NAME = 'eslint';\nexport const ESLINT_CLI = 'eslint';\nexport const VITEST_PACKAGE_NAME = 'vitest';\nexport const VITEST_CLI = 'vitest';\nexport const COMMIT_LINT_PACKAGE_NAME = '@commitlint/cli';\nexport const COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME = '@commitlint/config-conventional';\nexport const COMMIT_LINT_CLI = 'commitlint';\nexport const LINT_STAGED_PACKAGE_NAME = 'lint-staged';\nexport const LINT_STAGED_CLI = 'lint-staged';\nexport const TSC_PACKAGE_NAME = 'typescript';\nexport const TSC_CLI = 'tsc';\nexport const TSX_CLI = 'tsx';\nexport const GIT_CLI = 'git';\nexport const PNPM_CLI = 'pnpm';\nexport const PNPM_EXEC_CLI = 'pnpm exec';\nexport const SIMPLE_GIT_HOOKS_PACKAGE_NAME = 'simple-git-hooks';\nexport const SIMPLE_GIT_HOOK_CLI = 'simple-git-hooks';\nexport const ESLINT_INSPECT_PACKAGE_NAME = '@eslint/config-inspector';\nexport const ESLINT_INSPECT_CLI = 'eslint-config-inspector';\nexport const NODE_MODULES_INSPECT_PACKAGE_NAME = 'node-modules-inspector';\nexport const NODE_MODULES_INSPECT_CLI = 'node-modules-inspector';\nexport const MIGRATE_MONGO_PACKAGE_NAME = 'migrate-mongo';\nexport const MIGRATE_MONGO_CLI = './node_modules/migrate-mongo/bin/migrate-mongo';\nexport const STORYBOOK_PACKAGE_NAME = 'storybook';\nexport const STORYBOOK_CLI = 'storybook';\nexport const AG_KIT_PACKAGE_NAME = '@vudovn/ag-kit';\nexport const DOT_AGENT = '.agent';\n\nexport const PATH = {\n CYBERSKILL_DIRECTORY,\n WORKING_DIRECTORY,\n PUBLIC_DIRECTORY: resolveWorkingPath(PUBLIC_DIRECTORY),\n TS_CONFIG: resolveWorkingPath(TSCONFIG_JSON),\n GIT_IGNORE: resolveWorkingPath(GIT_IGNORE),\n GIT_HOOK: resolveWorkingPath(GIT_HOOK),\n GIT_COMMIT_MSG: resolveWorkingPath(GIT_COMMIT_EDITMSG),\n GIT_EXCLUDE: resolveWorkingPath(GIT_EXCLUDE),\n SIMPLE_GIT_HOOKS_JSON: resolveWorkingPath(SIMPLE_GIT_HOOK_JSON),\n PACKAGE_JSON: resolveWorkingPath(PACKAGE_JSON),\n PACKAGE_LOCK_JSON: resolveWorkingPath(PACKAGE_LOCK_JSON),\n PNPM_LOCK_YAML: resolveWorkingPath(PNPM_LOCK_YAML),\n NODE_MODULES: resolveWorkingPath(NODE_MODULES),\n MIGRATE_MONGO_CONFIG: resolveWorkingPath(MIGRATE_MONGO_CONFIG),\n LINT_STAGED_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/lint-staged/index.js`),\n COMMITLINT_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/commitlint/index.js`),\n VITEST_UNIT_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/vitest/vitest.unit.js`),\n VITEST_E2E_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/vitest/vitest.e2e.js`),\n STORYBOOK_MAIN_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/storybook/storybook.main.js`),\n STORYBOOK_PREVIEW_CONFIG: resolveWorkingPath(`${CYBERSKILL_DIRECTORY}/config/storybook/storybook.preview.js`),\n DOT_AGENT: resolveWorkingPath(DOT_AGENT),\n};\n\n/**\n * Creates Git hooks configuration based on whether this is the current project.\n * This function generates a configuration object for Git hooks that includes\n * pre-commit and commit-msg hooks, with an optional pre-push hook for the current project.\n *\n * @param context - Context object containing project information.\n * @param context.isCurrentProject - Whether this is the current project being worked on.\n * @returns A Git hooks configuration object with appropriate commands for each hook.\n */\nexport function createGitHooksConfig({ isCurrentProject }: Partial<I_CommandContext>) {\n return {\n 'pre-commit': LINT_STAGED_CLI,\n 'commit-msg': COMMIT_LINT_CLI,\n ...(isCurrentProject ? { 'pre-push': rawCommand(`${GIT_CLI} pull`) } : { 'pre-push': rawCommand(`TAG_ONLY=true; while read local_ref local_oid remote_ref remote_oid; do case \\\"$local_ref\\\" in refs/tags/*) ;; *) TAG_ONLY=false; break ;; esac; done; if [ \\\"$TAG_ONLY\\\" = true ]; then echo '[pre-push] Tag-only push, skipping build.'; exit 0; fi; ${PNPM_CLI} build`) }),\n };\n}\n\n/**\n * Builds a command function based on the specified type and configuration.\n * This function creates a command executor that handles different command types\n * including CLI commands and string commands. It manages package dependencies\n * and formats commands appropriately for execution.\n *\n * The function supports:\n * - CLI commands that require package installation\n * - String commands that are executed directly\n * - Automatic package dependency management\n * - Command formatting and validation\n *\n * @param config - Configuration object containing type, packages, and command properties.\n * @param config.type - The type of command to build (CLI or STRING).\n * @param config.packages - Optional array of packages required for CLI commands.\n * @param config.command - The command string to execute.\n * @returns A function that returns a promise resolving to the formatted command string.\n * @throws {Error} When an unsupported command type is provided.\n */\nfunction buildCommand({ type, packages, command }: { type: E_CommandType; packages?: I_PackageInput[]; command: string }): () => Promise<string> {\n const uniquePackages = packages?.reduce((acc: I_PackageInput[], pkg) => {\n if (!acc.some(existingPkg => existingPkg.name === pkg.name)) {\n acc.push(pkg);\n }\n return acc;\n }, []);\n\n return async () => {\n switch (type) {\n case E_CommandType.CLI: {\n if (uniquePackages?.length) {\n await setupPackages(uniquePackages, {\n install: true,\n });\n }\n\n return formatCommand(rawCommand(`${PNPM_EXEC_CLI} ${command}`)) as string;\n }\n case E_CommandType.STRING: {\n return formatCommand(rawCommand(command)) as string;\n }\n default: {\n throw new Error('Unsupported command type');\n }\n }\n };\n}\n\nconst RE_MIGRATE_NAME = /^[\\w-]+$/;\n\nexport const command = {\n simpleGitHooks: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: SIMPLE_GIT_HOOKS_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: SIMPLE_GIT_HOOK_CLI,\n }),\n eslintInspect: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name:\n ESLINT_INSPECT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: ESLINT_INSPECT_CLI,\n }),\n nodeModulesInspect: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: NODE_MODULES_INSPECT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: NODE_MODULES_INSPECT_CLI,\n }),\n eslintCheck: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: ESLINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${ESLINT_CLI} ${PATH.WORKING_DIRECTORY} --no-cache`,\n }),\n eslintFix: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: ESLINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${ESLINT_CLI} ${PATH.WORKING_DIRECTORY} --fix --no-cache`,\n }),\n typescriptCheck: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSC_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n\n ],\n command: `${TSC_CLI} -p ${PATH.TS_CONFIG} --noEmit`,\n }),\n testUnit: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: VITEST_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${VITEST_CLI} --config ${PATH.VITEST_UNIT_CONFIG}`,\n }),\n testE2e: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: VITEST_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${VITEST_CLI} --config ${PATH.VITEST_E2E_CONFIG}`,\n }),\n mongoMigrateCreate: (migrateName: string) => {\n if (!RE_MIGRATE_NAME.test(migrateName)) {\n throw new Error('Migration name must only contain alphanumeric characters, underscores, and hyphens.');\n }\n\n return buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} create ${migrateName} -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n })();\n },\n mongoMigrateUp: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} up -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n }),\n mongoMigrateDown: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: TSX_CLI,\n type: E_PackageType.DEPENDENCY,\n },\n {\n name: MIGRATE_MONGO_PACKAGE_NAME,\n type: E_PackageType.DEPENDENCY,\n },\n ],\n command: `${TSX_CLI} ${MIGRATE_MONGO_CLI} down -f ${PATH.MIGRATE_MONGO_CONFIG}`,\n }),\n commitLint: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: COMMIT_LINT_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n {\n name: COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${COMMIT_LINT_CLI} --edit ${PATH.GIT_COMMIT_MSG} --config ${PATH.COMMITLINT_CONFIG}`,\n }),\n lintStaged: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: LINT_STAGED_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${LINT_STAGED_CLI} --config ${PATH.LINT_STAGED_CONFIG}`,\n }),\n configureGitHook: buildCommand({\n type: E_CommandType.STRING,\n command: `${GIT_CLI} config core.hooksPath ${PATH.GIT_HOOK}`,\n }),\n build: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} run --if-present build`,\n }),\n pnpmInstallStandard: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts`,\n }),\n pnpmInstallLegacy: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts --legacy-peer-deps`,\n }),\n pnpmInstallForce: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} install --ignore-scripts --force`,\n }),\n pnpmPruneStore: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} store prune`,\n }),\n pnpmCleanCache: buildCommand({\n type: E_CommandType.STRING,\n command: `${PNPM_CLI} cache delete`,\n }),\n storybookDev: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: STORYBOOK_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${STORYBOOK_CLI} dev`,\n }),\n storybookBuild: buildCommand({\n type: E_CommandType.CLI,\n packages: [\n {\n name: STORYBOOK_PACKAGE_NAME,\n type: E_PackageType.DEV_DEPENDENCY,\n },\n ],\n command: `${STORYBOOK_CLI} build`,\n }),\n};\n"],"names":["env","getEnv","WORKING_DIRECTORY","CYBERSKILL_PACKAGE_NAME","NODE_MODULES","BUILD_DIRECTORY","PUBLIC_DIRECTORY","PACKAGE_JSON","PACKAGE_LOCK_JSON","TSCONFIG_JSON","GIT_IGNORE","SIMPLE_GIT_HOOK_JSON","PNPM_LOCK_YAML","GIT_HOOK","GIT_COMMIT_EDITMSG","GIT_EXCLUDE","MIGRATE_MONGO_CONFIG","CYBERSKILL_DIRECTORY","fsExtra","resolveWorkingPath","join","CYBERSKILL_CLI","CYBERSKILL_CLI_PATH","ESLINT_PACKAGE_NAME","ESLINT_CLI","VITEST_PACKAGE_NAME","VITEST_CLI","COMMIT_LINT_PACKAGE_NAME","COMMIT_LINT_CONVENTIONAL_CONFIG_PACKAGE_NAME","COMMIT_LINT_CLI","LINT_STAGED_PACKAGE_NAME","LINT_STAGED_CLI","TSC_PACKAGE_NAME","TSC_CLI","TSX_CLI","GIT_CLI","PNPM_CLI","PNPM_EXEC_CLI","SIMPLE_GIT_HOOKS_PACKAGE_NAME","SIMPLE_GIT_HOOK_CLI","ESLINT_INSPECT_PACKAGE_NAME","ESLINT_INSPECT_CLI","NODE_MODULES_INSPECT_PACKAGE_NAME","NODE_MODULES_INSPECT_CLI","MIGRATE_MONGO_PACKAGE_NAME","MIGRATE_MONGO_CLI","STORYBOOK_PACKAGE_NAME","STORYBOOK_CLI","AG_KIT_PACKAGE_NAME","DOT_AGENT","PATH","createGitHooksConfig","isCurrentProject","rawCommand","buildCommand","type","packages","command","uniquePackages","acc","pkg","existingPkg","E_CommandType","setupPackages","formatCommand","RE_MIGRATE_NAME","E_PackageType","migrateName"],"mappings":"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"}
|
package/dist/node/ws/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../../../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.3.
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../../../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.3.5_jiti@2.6.1_jsdom@28.1.0_@noble+hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/config.js"],"sourcesContent":["export { c as configDefaults, a as coverageConfigDefaults, d as defaultExclude, b as defaultInclude } from './chunks/defaults.BOqNVLsY.js';\nexport { mergeConfig } from 'vite';\nexport { d as defaultBrowserPort } from './chunks/constants.D_Q9UYh-.js';\nimport 'node:os';\nimport './chunks/env.D4Lgay0q.js';\nimport 'std-env';\n\nfunction defineConfig(config) {\n\treturn config;\n}\nfunction defineProject(config) {\n\treturn config;\n}\n\nexport { defineConfig, defineProject };\n"],"names":["defineConfig","config"],"mappings":"AAOA,SAASA,EAAaC,GAAQ;AAC7B,SAAOA;AACR;","x_google_ignoreList":[0]}
|