UNPKG

@next-boilerplate/cli-helpers

Version:
47 lines (43 loc) 1.55 kB
'use strict'; var zod = require('zod'); const storeConfigFileName = "config.json"; const storeNameRegex = /^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/; const storeVersionRegex = /^[~^]?[\da-z.-]+$/; const matchItem = /^((?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*)@([~^]?[\da-z.-]+)\/(.*)$/; const storeSchema = zod.z.object({ name: zod.z.string().regex(storeNameRegex).max(100), version: zod.z.string().regex(storeVersionRegex).max(100) }); const storeConfigSchema = zod.z.object({ name: zod.z.string().regex(storeNameRegex).max(100), version: zod.z.string().regex(storeVersionRegex).max(100) }); const fullStoreSchema = storeConfigSchema.extend({ uid: zod.z.string(), fullPath: zod.z.string() }); const getStoreUID = (store) => `${store.name}@${store.version}`; const getItemUID = (item) => `${item.store.name}@${item.store.version}/${item.name}`; const extractItemUID = (itemUID) => { const match = itemUID.match(matchItem); if (!match) { throw new Error(`Invalid item UID: ${itemUID}`); } return { store: { name: match[1], version: match[2] }, name: match[3] }; }; exports.extractItemUID = extractItemUID; exports.fullStoreSchema = fullStoreSchema; exports.getItemUID = getItemUID; exports.getStoreUID = getStoreUID; exports.matchItem = matchItem; exports.storeConfigFileName = storeConfigFileName; exports.storeConfigSchema = storeConfigSchema; exports.storeNameRegex = storeNameRegex; exports.storeSchema = storeSchema; exports.storeVersionRegex = storeVersionRegex;