UNPKG

polen

Version:

A framework for delightful GraphQL developer portals

45 lines 2.01 kB
import { Path } from '@wollybeard/kit'; export const parseOrThrow = (fileNameOrSerializedExpression) => { const result = parse(fileNameOrSerializedExpression); if (!result) throw new Error(`Invalid serialized expression: ${fileNameOrSerializedExpression}`); return result; }; export const parse = (fileName) => { const path = Path.parse(fileName); if (path.ext !== `.graphql`) { throw new Error(`If file name is provided, must be .graphql. Got: ${fileName}`); } const serializedExpression = path.name; const previous = parseExpressionPreviousSerialized(serializedExpression); if (previous) return { ...previous, filePath: fileName, type: `FileNameExpressionPrevious` }; // const latest = parseExpressionLatestSerialized(serializedExpression) // if (latest) return { ...latest, filePath: fileName, type: `FileNameExpressionLatest` } return null; }; const parseExpressionPreviousSerialized = (serializedExpression) => { const match = expressionPreviousSerializedPattern.exec(serializedExpression); if (!match) return null; const { year, month, day } = match.groups; const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day)); return { date }; }; const expressionPreviousSerializedPattern = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/; // export const isExpressionPrevious = (expression: Expression): expression is ExpressionPrevious => { // return expression.type === `FileNameExpressionPrevious` // } // ---- // export interface ExpressionLatest { // type: `FileNameExpressionLatest` // filePath: string // } // const parseExpressionLatestSerialized = (serializedExpression: string): null | {} => { // if (serializedExpression === `latest`) return {} // return null // } // export const isExpressionLatest = (expression: Expression): expression is ExpressionLatest => { // return expression.type === `FileNameExpressionLatest` // } //# sourceMappingURL=file-name-expression.js.map