@prisma-next/psl-parser 0.3.0-dev.102 → 0.3.0-dev.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{parser-BgdIJNqs.d.mts → parser-C7qeAcwZ.d.mts} +2 -2
- package/dist/parser-C7qeAcwZ.d.mts.map +1 -0
- package/dist/{parser-Br4vqzd-.mjs → parser-ClclNzzu.mjs} +45 -8
- package/dist/parser-ClclNzzu.mjs.map +1 -0
- package/dist/parser.d.mts +1 -1
- package/dist/parser.mjs +1 -1
- package/dist/{types-CyfspkvF.d.mts → types-0aHhDCP4.d.mts} +3 -2
- package/dist/types-0aHhDCP4.d.mts.map +1 -0
- package/dist/types.d.mts +1 -1
- package/package.json +4 -4
- package/src/parser.ts +62 -7
- package/src/types.ts +2 -1
- package/dist/parser-BgdIJNqs.d.mts.map +0 -1
- package/dist/parser-Br4vqzd-.mjs.map +0 -1
- package/dist/types-CyfspkvF.d.mts.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { S as PslPosition, T as PslTypesBlock, _ as PslFieldAttribute, a as PslAttributeNamedArgument, b as PslModelAttribute, c as PslDefaultFunctionValue, d as PslDiagnostic, f as PslDiagnosticCode, g as PslField, h as PslEnumValue, i as PslAttributeArgument, l as PslDefaultLiteralValue, m as PslEnum, n as ParsePslDocumentResult, o as PslAttributePositionalArgument, p as PslDocumentAst, r as PslAttribute, s as PslAttributeTarget, t as ParsePslDocumentInput, u as PslDefaultValue, w as PslSpan, x as PslNamedTypeDeclaration, y as PslModel } from "./types-
|
|
2
|
-
import { t as parsePslDocument } from "./parser-
|
|
1
|
+
import { S as PslPosition, T as PslTypesBlock, _ as PslFieldAttribute, a as PslAttributeNamedArgument, b as PslModelAttribute, c as PslDefaultFunctionValue, d as PslDiagnostic, f as PslDiagnosticCode, g as PslField, h as PslEnumValue, i as PslAttributeArgument, l as PslDefaultLiteralValue, m as PslEnum, n as ParsePslDocumentResult, o as PslAttributePositionalArgument, p as PslDocumentAst, r as PslAttribute, s as PslAttributeTarget, t as ParsePslDocumentInput, u as PslDefaultValue, w as PslSpan, x as PslNamedTypeDeclaration, y as PslModel } from "./types-0aHhDCP4.mjs";
|
|
2
|
+
import { t as parsePslDocument } from "./parser-C7qeAcwZ.mjs";
|
|
3
3
|
export { type ParsePslDocumentInput, type ParsePslDocumentResult, type PslAttribute, type PslAttributeArgument, type PslAttributeNamedArgument, type PslAttributePositionalArgument, type PslAttributeTarget, type PslDefaultFunctionValue, type PslDefaultLiteralValue, type PslDefaultValue, type PslDiagnostic, type PslDiagnosticCode, type PslDocumentAst, type PslEnum, type PslEnumValue, type PslField, type PslFieldAttribute, type PslModel, type PslModelAttribute, type PslNamedTypeDeclaration, type PslPosition, type PslSpan, type PslTypesBlock, parsePslDocument };
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as ParsePslDocumentResult, t as ParsePslDocumentInput } from "./types-
|
|
1
|
+
import { n as ParsePslDocumentResult, t as ParsePslDocumentInput } from "./types-0aHhDCP4.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/parser.d.ts
|
|
4
4
|
declare function parsePslDocument(input: ParsePslDocumentInput): ParsePslDocumentResult;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { parsePslDocument as t };
|
|
7
|
-
//# sourceMappingURL=parser-
|
|
7
|
+
//# sourceMappingURL=parser-C7qeAcwZ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-C7qeAcwZ.d.mts","names":[],"sources":["../src/parser.ts"],"sourcesContent":[],"mappings":";;;iBAgDgB,gBAAA,QAAwB,wBAAwB"}
|
|
@@ -157,9 +157,15 @@ function parseModelBlock(context, name, bounds) {
|
|
|
157
157
|
}
|
|
158
158
|
function parseEnumBlock(context, name, bounds) {
|
|
159
159
|
const values = [];
|
|
160
|
+
const attributes = [];
|
|
160
161
|
for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {
|
|
161
162
|
const line = stripInlineComment(context.lines[lineIndex] ?? "").trim();
|
|
162
163
|
if (line.length === 0) continue;
|
|
164
|
+
if (line.startsWith("@@")) {
|
|
165
|
+
const attribute = parseEnumAttribute(context, line, lineIndex);
|
|
166
|
+
if (attribute) attributes.push(attribute);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
163
169
|
const valueMatch = line.match(/^([A-Za-z_]\w*)$/);
|
|
164
170
|
if (!valueMatch) {
|
|
165
171
|
pushDiagnostic(context, {
|
|
@@ -179,6 +185,7 @@ function parseEnumBlock(context, name, bounds) {
|
|
|
179
185
|
kind: "enum",
|
|
180
186
|
name,
|
|
181
187
|
values,
|
|
188
|
+
attributes,
|
|
182
189
|
span: createLineRangeSpan(context, bounds.startLine, bounds.endLine)
|
|
183
190
|
};
|
|
184
191
|
}
|
|
@@ -245,6 +252,35 @@ function parseModelAttribute(context, line, lineIndex) {
|
|
|
245
252
|
span: token.span
|
|
246
253
|
});
|
|
247
254
|
}
|
|
255
|
+
function parseEnumAttribute(context, line, lineIndex) {
|
|
256
|
+
const tokenParse = extractAttributeTokensWithSpans(context, lineIndex, line, firstNonWhitespaceColumn(context.lines[lineIndex] ?? ""));
|
|
257
|
+
if (!tokenParse.ok || tokenParse.tokens.length !== 1) {
|
|
258
|
+
pushDiagnostic(context, {
|
|
259
|
+
code: "PSL_INVALID_ENUM_MEMBER",
|
|
260
|
+
message: `Invalid enum value declaration "${line}"`,
|
|
261
|
+
span: createTrimmedLineSpan(context, lineIndex)
|
|
262
|
+
});
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const token = tokenParse.tokens[0];
|
|
266
|
+
if (!token) return;
|
|
267
|
+
const parsed = parseAttributeToken(context, {
|
|
268
|
+
token: token.text,
|
|
269
|
+
target: "enum",
|
|
270
|
+
lineIndex,
|
|
271
|
+
span: token.span
|
|
272
|
+
});
|
|
273
|
+
if (!parsed) return;
|
|
274
|
+
if (parsed.name !== "map") {
|
|
275
|
+
pushDiagnostic(context, {
|
|
276
|
+
code: "PSL_INVALID_ENUM_MEMBER",
|
|
277
|
+
message: `Invalid enum value declaration "${line}"`,
|
|
278
|
+
span: createTrimmedLineSpan(context, lineIndex)
|
|
279
|
+
});
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
return parsed;
|
|
283
|
+
}
|
|
248
284
|
function parseField(context, line, lineIndex) {
|
|
249
285
|
const fieldMatch = line.match(/^([A-Za-z_]\w*)\s+([A-Za-z_]\w*(?:\[\])?)(\?)?(.*)$/);
|
|
250
286
|
if (!fieldMatch) {
|
|
@@ -297,16 +333,17 @@ function parseField(context, line, lineIndex) {
|
|
|
297
333
|
};
|
|
298
334
|
}
|
|
299
335
|
function parseAttributeToken(context, input) {
|
|
300
|
-
const
|
|
301
|
-
|
|
336
|
+
const expectsBlockPrefix = input.target === "model" || input.target === "enum";
|
|
337
|
+
const targetLabel = input.target === "enum" ? "Enum" : "Model";
|
|
338
|
+
if (expectsBlockPrefix && !input.token.startsWith("@@")) {
|
|
302
339
|
pushDiagnostic(context, {
|
|
303
340
|
code: "PSL_INVALID_ATTRIBUTE_SYNTAX",
|
|
304
|
-
message:
|
|
341
|
+
message: `${targetLabel} attribute "${input.token}" must use @@ prefix`,
|
|
305
342
|
span: input.span
|
|
306
343
|
});
|
|
307
344
|
return;
|
|
308
345
|
}
|
|
309
|
-
if (!
|
|
346
|
+
if (!expectsBlockPrefix && !input.token.startsWith("@")) {
|
|
310
347
|
pushDiagnostic(context, {
|
|
311
348
|
code: "PSL_INVALID_ATTRIBUTE_SYNTAX",
|
|
312
349
|
message: `Attribute "${input.token}" must use @ prefix`,
|
|
@@ -314,7 +351,7 @@ function parseAttributeToken(context, input) {
|
|
|
314
351
|
});
|
|
315
352
|
return;
|
|
316
353
|
}
|
|
317
|
-
if (!
|
|
354
|
+
if (!expectsBlockPrefix && input.token.startsWith("@@")) {
|
|
318
355
|
pushDiagnostic(context, {
|
|
319
356
|
code: "PSL_INVALID_ATTRIBUTE_SYNTAX",
|
|
320
357
|
message: `Attribute "${input.token}" is not valid in ${input.target} context`,
|
|
@@ -322,7 +359,7 @@ function parseAttributeToken(context, input) {
|
|
|
322
359
|
});
|
|
323
360
|
return;
|
|
324
361
|
}
|
|
325
|
-
const rawBody =
|
|
362
|
+
const rawBody = expectsBlockPrefix ? input.token.slice(2) : input.token.slice(1);
|
|
326
363
|
const openParen = rawBody.indexOf("(");
|
|
327
364
|
const closeParen = rawBody.lastIndexOf(")");
|
|
328
365
|
const hasArgs = openParen >= 0 || closeParen >= 0;
|
|
@@ -355,7 +392,7 @@ function parseAttributeToken(context, input) {
|
|
|
355
392
|
}
|
|
356
393
|
const parsedArgs = parseAttributeArguments(context, {
|
|
357
394
|
argsRaw: rawBody.slice(openParen + 1, closeParen),
|
|
358
|
-
argsOffset: input.span.start.column - 1 + (
|
|
395
|
+
argsOffset: input.span.start.column - 1 + (expectsBlockPrefix ? 2 : 1) + openParen + 1,
|
|
359
396
|
lineIndex: input.lineIndex,
|
|
360
397
|
token: input.token,
|
|
361
398
|
span: input.span
|
|
@@ -678,4 +715,4 @@ function pushDiagnostic(context, diagnostic) {
|
|
|
678
715
|
|
|
679
716
|
//#endregion
|
|
680
717
|
export { parsePslDocument as t };
|
|
681
|
-
//# sourceMappingURL=parser-
|
|
718
|
+
//# sourceMappingURL=parser-ClclNzzu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-ClclNzzu.mjs","names":["diagnostics: PslDiagnostic[]","context: ParserContext","models: PslModel[]","enums: PslEnum[]","typesBlock: PslTypesBlock | undefined","fields: PslField[]","attributes: PslModelAttribute[]","values: PslEnumValue[]","attributes: PslAttribute[]","declarations: PslNamedTypeDeclaration[]","attributes: PslFieldAttribute[]","args: readonly PslAttributeArgument[]","args: PslAttributeArgument[]","quote: '\"' | \"'\" | null","parts: TopLevelSegment[]","tokens: { text: string; span: PslSpan }[]"],"sources":["../src/parser.ts"],"sourcesContent":["import { ifDefined } from '@prisma-next/utils/defined';\nimport type {\n ParsePslDocumentInput,\n ParsePslDocumentResult,\n PslAttribute,\n PslAttributeArgument,\n PslAttributeTarget,\n PslDiagnostic,\n PslDiagnosticCode,\n PslDocumentAst,\n PslEnum,\n PslEnumValue,\n PslField,\n PslFieldAttribute,\n PslModel,\n PslModelAttribute,\n PslNamedTypeDeclaration,\n PslPosition,\n PslSpan,\n PslTypesBlock,\n} from './types';\n\nconst SCALAR_TYPES = new Set([\n 'String',\n 'Boolean',\n 'Int',\n 'BigInt',\n 'Float',\n 'Decimal',\n 'DateTime',\n 'Json',\n 'Bytes',\n]);\n\ninterface BlockBounds {\n readonly startLine: number;\n readonly endLine: number;\n readonly closed: boolean;\n}\n\ninterface ParserContext {\n readonly schema: string;\n readonly sourceId: string;\n readonly lines: readonly string[];\n readonly lineOffsets: readonly number[];\n readonly diagnostics: PslDiagnostic[];\n}\n\nexport function parsePslDocument(input: ParsePslDocumentInput): ParsePslDocumentResult {\n const normalizedSchema = input.schema.replaceAll('\\r\\n', '\\n');\n const lines = normalizedSchema.split('\\n');\n const lineOffsets = computeLineOffsets(normalizedSchema);\n const diagnostics: PslDiagnostic[] = [];\n const context: ParserContext = {\n schema: normalizedSchema,\n sourceId: input.sourceId,\n lines,\n lineOffsets,\n diagnostics,\n };\n\n const models: PslModel[] = [];\n const enums: PslEnum[] = [];\n let typesBlock: PslTypesBlock | undefined;\n\n let lineIndex = 0;\n while (lineIndex < lines.length) {\n const rawLine = lines[lineIndex] ?? '';\n const line = stripInlineComment(rawLine).trim();\n if (line.length === 0) {\n lineIndex += 1;\n continue;\n }\n\n const modelMatch = line.match(/^model\\s+([A-Za-z_]\\w*)\\s*\\{$/);\n if (modelMatch) {\n const bounds = findBlockBounds(context, lineIndex);\n const name = modelMatch[1] ?? '';\n if (name.length === 0) {\n lineIndex = bounds.endLine + 1;\n continue;\n }\n models.push(parseModelBlock(context, name, bounds));\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n const enumMatch = line.match(/^enum\\s+([A-Za-z_]\\w*)\\s*\\{$/);\n if (enumMatch) {\n const bounds = findBlockBounds(context, lineIndex);\n const name = enumMatch[1] ?? '';\n if (name.length === 0) {\n lineIndex = bounds.endLine + 1;\n continue;\n }\n enums.push(parseEnumBlock(context, name, bounds));\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n if (/^types\\s*\\{$/.test(line)) {\n const bounds = findBlockBounds(context, lineIndex);\n typesBlock = parseTypesBlock(context, bounds);\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n if (line.includes('{')) {\n const blockName = line.split(/\\s+/)[0] ?? 'block';\n pushDiagnostic(context, {\n code: 'PSL_UNSUPPORTED_TOP_LEVEL_BLOCK',\n message: `Unsupported top-level block \"${blockName}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n const bounds = findBlockBounds(context, lineIndex);\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n pushDiagnostic(context, {\n code: 'PSL_UNSUPPORTED_TOP_LEVEL_BLOCK',\n message: `Unsupported top-level declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n lineIndex += 1;\n }\n\n const namedTypeNames = new Set(\n (typesBlock?.declarations ?? []).map((declaration) => declaration.name),\n );\n const modelNames = new Set(models.map((model) => model.name));\n const enumNames = new Set(enums.map((enumBlock) => enumBlock.name));\n for (const declaration of typesBlock?.declarations ?? []) {\n if (SCALAR_TYPES.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with scalar type \"${declaration.name}\"`,\n span: declaration.span,\n });\n continue;\n }\n if (modelNames.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with model name \"${declaration.name}\"`,\n span: declaration.span,\n });\n continue;\n }\n if (enumNames.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with enum name \"${declaration.name}\"`,\n span: declaration.span,\n });\n }\n }\n const normalizedModels = models.map((model) => ({\n ...model,\n fields: model.fields.map((field) => {\n if (!namedTypeNames.has(field.typeName)) {\n return field;\n }\n const hasRelationAttribute = field.attributes.some(\n (attribute) => attribute.name === 'relation',\n );\n if (\n hasRelationAttribute ||\n modelNames.has(field.typeName) ||\n enumNames.has(field.typeName) ||\n SCALAR_TYPES.has(field.typeName)\n ) {\n return field;\n }\n return {\n ...field,\n typeRef: field.typeName,\n };\n }),\n }));\n\n const ast: PslDocumentAst = {\n kind: 'document',\n sourceId: input.sourceId,\n models: normalizedModels,\n enums,\n ...ifDefined('types', typesBlock),\n span: {\n start: createPosition(context, 0, 0),\n end: createPosition(\n context,\n Math.max(lines.length - 1, 0),\n (lines[Math.max(lines.length - 1, 0)] ?? '').length,\n ),\n },\n };\n\n return {\n ast,\n diagnostics,\n ok: diagnostics.length === 0,\n };\n}\n\nfunction parseModelBlock(context: ParserContext, name: string, bounds: BlockBounds): PslModel {\n const fields: PslField[] = [];\n const attributes: PslModelAttribute[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const line = stripInlineComment(raw).trim();\n if (line.length === 0) {\n continue;\n }\n\n if (line.startsWith('@@')) {\n const attribute = parseModelAttribute(context, line, lineIndex);\n if (attribute) {\n attributes.push(attribute);\n }\n continue;\n }\n\n const field = parseField(context, line, lineIndex);\n if (field) {\n fields.push(field);\n }\n }\n\n return {\n kind: 'model',\n name,\n fields,\n attributes,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseEnumBlock(context: ParserContext, name: string, bounds: BlockBounds): PslEnum {\n const values: PslEnumValue[] = [];\n const attributes: PslAttribute[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const line = stripInlineComment(raw).trim();\n if (line.length === 0) {\n continue;\n }\n\n if (line.startsWith('@@')) {\n const attribute = parseEnumAttribute(context, line, lineIndex);\n if (attribute) {\n attributes.push(attribute);\n }\n continue;\n }\n\n const valueMatch = line.match(/^([A-Za-z_]\\w*)$/);\n if (!valueMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ENUM_MEMBER',\n message: `Invalid enum value declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n continue;\n }\n\n values.push({\n kind: 'enumValue',\n name: valueMatch[1] ?? '',\n span: createTrimmedLineSpan(context, lineIndex),\n });\n }\n\n return {\n kind: 'enum',\n name,\n values,\n attributes,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseTypesBlock(context: ParserContext, bounds: BlockBounds): PslTypesBlock {\n const declarations: PslNamedTypeDeclaration[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const lineWithoutComment = stripInlineComment(raw);\n const line = lineWithoutComment.trim();\n if (line.length === 0) {\n continue;\n }\n\n const declarationMatch = line.match(/^([A-Za-z_]\\w*)\\s*=\\s*([A-Za-z_]\\w*)(.*)$/);\n if (!declarationMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Invalid types declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n continue;\n }\n\n const declarationName = declarationMatch[1] ?? '';\n const baseType = declarationMatch[2] ?? '';\n const attributePart = declarationMatch[3] ?? '';\n const trimmedStartColumn = firstNonWhitespaceColumn(raw);\n const attributeOffset = line.length - attributePart.length;\n const attributeSource = attributePart.trimStart();\n const leadingAttributeWhitespace = attributePart.length - attributeSource.length;\n const attributeParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n attributeSource,\n trimmedStartColumn + attributeOffset + leadingAttributeWhitespace,\n );\n if (!attributeParse.ok) {\n continue;\n }\n const attributes = attributeParse.tokens\n .map((token) =>\n parseAttributeToken(context, {\n token: token.text,\n target: 'namedType',\n lineIndex,\n span: token.span,\n }),\n )\n .filter((attribute): attribute is PslAttribute => Boolean(attribute));\n\n declarations.push({\n kind: 'namedType',\n name: declarationName,\n baseType,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n }\n\n return {\n kind: 'types',\n declarations,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseModelAttribute(\n context: ParserContext,\n line: string,\n lineIndex: number,\n): PslModelAttribute | undefined {\n const rawLine = context.lines[lineIndex] ?? '';\n const tokenParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n line,\n firstNonWhitespaceColumn(rawLine),\n );\n if (!tokenParse.ok || tokenParse.tokens.length !== 1) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid model attribute syntax \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n const token = tokenParse.tokens[0];\n if (!token) {\n return undefined;\n }\n return parseAttributeToken(context, {\n token: token.text,\n target: 'model',\n lineIndex,\n span: token.span,\n });\n}\n\nfunction parseEnumAttribute(\n context: ParserContext,\n line: string,\n lineIndex: number,\n): PslAttribute | undefined {\n const rawLine = context.lines[lineIndex] ?? '';\n const tokenParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n line,\n firstNonWhitespaceColumn(rawLine),\n );\n if (!tokenParse.ok || tokenParse.tokens.length !== 1) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ENUM_MEMBER',\n message: `Invalid enum value declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n const token = tokenParse.tokens[0];\n if (!token) {\n return undefined;\n }\n const parsed = parseAttributeToken(context, {\n token: token.text,\n target: 'enum',\n lineIndex,\n span: token.span,\n });\n if (!parsed) {\n return undefined;\n }\n if (parsed.name !== 'map') {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ENUM_MEMBER',\n message: `Invalid enum value declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n return parsed;\n}\n\nfunction parseField(context: ParserContext, line: string, lineIndex: number): PslField | undefined {\n const fieldMatch = line.match(/^([A-Za-z_]\\w*)\\s+([A-Za-z_]\\w*(?:\\[\\])?)(\\?)?(.*)$/);\n if (!fieldMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_MODEL_MEMBER',\n message: `Invalid model member declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n\n const fieldName = fieldMatch[1] ?? '';\n const rawTypeToken = fieldMatch[2] ?? '';\n const optionalMarker = fieldMatch[3] ?? '';\n const attributePart = fieldMatch[4] ?? '';\n const list = rawTypeToken.endsWith('[]');\n const typeName = list ? rawTypeToken.slice(0, -2) : rawTypeToken;\n const optional = optionalMarker === '?';\n\n const attributes: PslFieldAttribute[] = [];\n const rawLine = context.lines[lineIndex] ?? '';\n const trimmedStartColumn = firstNonWhitespaceColumn(rawLine);\n const attributeOffset = line.length - attributePart.length;\n const attributeSource = attributePart.trimStart();\n const leadingAttributeWhitespace = attributePart.length - attributeSource.length;\n const tokenParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n attributeSource,\n trimmedStartColumn + attributeOffset + leadingAttributeWhitespace,\n );\n if (!tokenParse.ok) {\n return {\n kind: 'field',\n name: fieldName,\n typeName,\n optional,\n list,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n };\n }\n\n for (const token of tokenParse.tokens) {\n const parsed = parseAttributeToken(context, {\n token: token.text,\n target: 'field',\n lineIndex,\n span: token.span,\n });\n if (parsed) {\n attributes.push(parsed);\n }\n }\n\n return {\n kind: 'field',\n name: fieldName,\n typeName,\n optional,\n list,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n };\n}\n\nfunction parseAttributeToken(\n context: ParserContext,\n input: {\n readonly token: string;\n readonly target: PslAttributeTarget;\n readonly lineIndex: number;\n readonly span: PslSpan;\n },\n): PslAttribute | undefined {\n const expectsBlockPrefix = input.target === 'model' || input.target === 'enum';\n const targetLabel = input.target === 'enum' ? 'Enum' : 'Model';\n if (expectsBlockPrefix && !input.token.startsWith('@@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `${targetLabel} attribute \"${input.token}\" must use @@ prefix`,\n span: input.span,\n });\n return undefined;\n }\n if (!expectsBlockPrefix && !input.token.startsWith('@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Attribute \"${input.token}\" must use @ prefix`,\n span: input.span,\n });\n return undefined;\n }\n if (!expectsBlockPrefix && input.token.startsWith('@@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Attribute \"${input.token}\" is not valid in ${input.target} context`,\n span: input.span,\n });\n return undefined;\n }\n\n const rawBody = expectsBlockPrefix ? input.token.slice(2) : input.token.slice(1);\n const openParen = rawBody.indexOf('(');\n const closeParen = rawBody.lastIndexOf(')');\n const hasArgs = openParen >= 0 || closeParen >= 0;\n if ((openParen >= 0 && closeParen === -1) || (openParen === -1 && closeParen >= 0)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n const name = (openParen >= 0 ? rawBody.slice(0, openParen) : rawBody).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_-]*(\\.[A-Za-z_][A-Za-z0-9_-]*)*$/.test(name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute name \"${name || input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n let args: readonly PslAttributeArgument[] = [];\n if (hasArgs && openParen >= 0 && closeParen >= openParen) {\n if (closeParen !== rawBody.length - 1) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid trailing syntax in attribute \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n const argsRaw = rawBody.slice(openParen + 1, closeParen);\n const parsedArgs = parseAttributeArguments(context, {\n argsRaw,\n argsOffset: input.span.start.column - 1 + (expectsBlockPrefix ? 2 : 1) + openParen + 1,\n lineIndex: input.lineIndex,\n token: input.token,\n span: input.span,\n });\n if (!parsedArgs) {\n return undefined;\n }\n args = parsedArgs;\n }\n\n return {\n kind: 'attribute',\n target: input.target,\n name,\n args,\n span: input.span,\n };\n}\n\nfunction parseAttributeArguments(\n context: ParserContext,\n input: {\n readonly argsRaw: string;\n readonly argsOffset: number;\n readonly lineIndex: number;\n readonly token: string;\n readonly span: PslSpan;\n },\n): readonly PslAttributeArgument[] | undefined {\n const trimmed = input.argsRaw.trim();\n if (trimmed.length === 0) {\n return [];\n }\n\n const parts = splitTopLevelSegments(input.argsRaw, ',');\n const args: PslAttributeArgument[] = [];\n\n for (const part of parts) {\n const original = part.value;\n const trimmedPart = original.trim();\n if (trimmedPart.length === 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid empty argument in attribute \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n const leadingWhitespace = original.length - original.trimStart().length;\n const partStart = input.argsOffset + part.start + leadingWhitespace;\n const partEnd = partStart + trimmedPart.length;\n const partSpan = createInlineSpan(context, input.lineIndex, partStart, partEnd);\n\n const namedSplit = splitTopLevelSegments(trimmedPart, ':');\n if (namedSplit.length > 1) {\n const first = namedSplit[0];\n if (!first) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid named argument syntax \"${trimmedPart}\"`,\n span: partSpan,\n });\n return undefined;\n }\n const name = first.value.trim();\n const rawValue = trimmedPart.slice(first.end + 1).trim();\n if (!name || rawValue.length === 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid named argument syntax \"${trimmedPart}\"`,\n span: partSpan,\n });\n return undefined;\n }\n args.push({\n kind: 'named',\n name,\n value: normalizeAttributeArgumentValue(rawValue),\n span: partSpan,\n });\n continue;\n }\n\n args.push({\n kind: 'positional',\n value: normalizeAttributeArgumentValue(trimmedPart),\n span: partSpan,\n });\n }\n\n return args;\n}\n\nfunction normalizeAttributeArgumentValue(value: string): string {\n return value.trim();\n}\n\nfunction findBlockBounds(context: ParserContext, startLine: number): BlockBounds {\n let depth = 0;\n\n for (let lineIndex = startLine; lineIndex < context.lines.length; lineIndex += 1) {\n const line = stripInlineComment(context.lines[lineIndex] ?? '');\n let quote: '\"' | \"'\" | null = null;\n let previousCharacter = '';\n for (const character of line) {\n if (quote) {\n if (character === quote && previousCharacter !== '\\\\') {\n quote = null;\n }\n previousCharacter = character;\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n quote = character;\n previousCharacter = character;\n continue;\n }\n\n if (character === '{') {\n depth += 1;\n }\n if (character === '}') {\n depth -= 1;\n if (depth === 0) {\n return { startLine, endLine: lineIndex, closed: true };\n }\n }\n previousCharacter = character;\n }\n }\n\n pushDiagnostic(context, {\n code: 'PSL_UNTERMINATED_BLOCK',\n message: 'Unterminated block declaration',\n span: createTrimmedLineSpan(context, startLine),\n });\n return {\n startLine,\n endLine: context.lines.length - 1,\n closed: false,\n };\n}\n\ninterface TopLevelSegment {\n readonly value: string;\n readonly start: number;\n readonly end: number;\n}\n\nfunction splitTopLevelSegments(value: string, separator: ',' | ':'): TopLevelSegment[] {\n const parts: TopLevelSegment[] = [];\n let depthParen = 0;\n let depthBracket = 0;\n let quote: '\"' | \"'\" | null = null;\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index] ?? '';\n if (quote) {\n if (character === quote && value[index - 1] !== '\\\\') {\n quote = null;\n }\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n\n if (character === '(') {\n depthParen += 1;\n continue;\n }\n if (character === ')') {\n depthParen = Math.max(0, depthParen - 1);\n continue;\n }\n if (character === '[') {\n depthBracket += 1;\n continue;\n }\n if (character === ']') {\n depthBracket = Math.max(0, depthBracket - 1);\n continue;\n }\n\n if (character === separator && depthParen === 0 && depthBracket === 0) {\n parts.push({\n value: value.slice(start, index),\n start,\n end: index,\n });\n start = index + 1;\n }\n }\n\n parts.push({\n value: value.slice(start),\n start,\n end: value.length,\n });\n return parts;\n}\n\nfunction extractAttributeTokensWithSpans(\n context: ParserContext,\n lineIndex: number,\n value: string,\n startColumn: number,\n): { readonly ok: boolean; readonly tokens: readonly { text: string; span: PslSpan }[] } {\n const tokens: { text: string; span: PslSpan }[] = [];\n let index = 0;\n while (index < value.length) {\n while (index < value.length && /\\s/.test(value[index] ?? '')) {\n index += 1;\n }\n if (index >= value.length) {\n break;\n }\n\n if (value[index] !== '@') {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + index, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n const start = index;\n index += 1;\n if (value[index] === '@') {\n index += 1;\n }\n\n const nameStart = index;\n while (index < value.length && /[A-Za-z0-9_.-]/.test(value[index] ?? '')) {\n index += 1;\n }\n\n if (index === nameStart) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.slice(start).trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + start, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n if (value[index] === '(') {\n let depth = 0;\n let quote: '\"' | \"'\" | null = null;\n while (index < value.length) {\n const char = value[index] ?? '';\n if (quote) {\n if (char === quote && value[index - 1] !== '\\\\') {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === '(') {\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth === 0) {\n index += 1;\n break;\n }\n }\n index += 1;\n }\n if (depth !== 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Unterminated attribute argument list in \"${value.slice(start).trim()}\"`,\n span: createInlineSpan(\n context,\n lineIndex,\n startColumn + start,\n startColumn + value.length,\n ),\n });\n return { ok: false, tokens };\n }\n }\n\n const tokenText = value.slice(start, index).trim();\n tokens.push({\n text: tokenText,\n span: createInlineSpan(context, lineIndex, startColumn + start, startColumn + index),\n });\n\n while (index < value.length && /\\s/.test(value[index] ?? '')) {\n index += 1;\n }\n\n if (index < value.length && value[index] !== '@') {\n break;\n }\n }\n\n if (index < value.length && value[index] !== '@') {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + index, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n return { ok: true, tokens };\n}\n\nfunction stripInlineComment(line: string): string {\n let quote: '\"' | \"'\" | null = null;\n for (let index = 0; index < line.length - 1; index += 1) {\n const current = line[index] ?? '';\n const next = line[index + 1] ?? '';\n\n if (quote) {\n if (current === quote && line[index - 1] !== '\\\\') {\n quote = null;\n }\n continue;\n }\n\n if (current === '\"' || current === \"'\") {\n quote = current;\n continue;\n }\n\n if (current === '/' && next === '/') {\n return line.slice(0, index);\n }\n }\n\n return line;\n}\n\nfunction computeLineOffsets(schema: string): number[] {\n const offsets = [0];\n for (let index = 0; index < schema.length; index += 1) {\n if (schema[index] === '\\n') {\n offsets.push(index + 1);\n }\n }\n return offsets;\n}\n\nfunction firstNonWhitespaceColumn(line: string): number {\n const first = line.search(/\\S/);\n return first === -1 ? 0 : first;\n}\n\nfunction createInlineSpan(\n context: ParserContext,\n lineIndex: number,\n startColumn: number,\n endColumn: number,\n): PslSpan {\n return {\n start: createPosition(context, lineIndex, startColumn),\n end: createPosition(context, lineIndex, endColumn),\n };\n}\n\nfunction createTrimmedLineSpan(context: ParserContext, lineIndex: number): PslSpan {\n const line = context.lines[lineIndex] ?? '';\n const startColumn = firstNonWhitespaceColumn(line);\n return {\n start: createPosition(context, lineIndex, startColumn),\n end: createPosition(context, lineIndex, line.length),\n };\n}\n\nfunction createLineRangeSpan(context: ParserContext, startLine: number, endLine: number): PslSpan {\n const startLineText = context.lines[startLine] ?? '';\n const endLineText = context.lines[endLine] ?? '';\n const startColumn = firstNonWhitespaceColumn(startLineText);\n return {\n start: createPosition(context, startLine, startColumn),\n end: createPosition(context, endLine, endLineText.length),\n };\n}\n\nfunction createPosition(\n context: ParserContext,\n lineIndex: number,\n columnIndex: number,\n): PslPosition {\n const clampedLineIndex = Math.max(0, Math.min(lineIndex, context.lineOffsets.length - 1));\n const lineText = context.lines[clampedLineIndex] ?? '';\n const clampedColumnIndex = Math.max(0, Math.min(columnIndex, lineText.length));\n return {\n offset: (context.lineOffsets[clampedLineIndex] ?? 0) + clampedColumnIndex,\n line: clampedLineIndex + 1,\n column: clampedColumnIndex + 1,\n };\n}\n\nfunction pushDiagnostic(\n context: ParserContext,\n diagnostic: Omit<PslDiagnostic, 'sourceId'> & { readonly code: PslDiagnosticCode },\n): void {\n context.diagnostics.push({\n ...diagnostic,\n sourceId: context.sourceId,\n });\n}\n"],"mappings":"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"}
|
package/dist/parser.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as parsePslDocument } from "./parser-
|
|
1
|
+
import { t as parsePslDocument } from "./parser-C7qeAcwZ.mjs";
|
|
2
2
|
export { parsePslDocument };
|
package/dist/parser.mjs
CHANGED
|
@@ -24,7 +24,7 @@ interface PslDefaultLiteralValue {
|
|
|
24
24
|
readonly value: string | number | boolean;
|
|
25
25
|
}
|
|
26
26
|
type PslDefaultValue = PslDefaultFunctionValue | PslDefaultLiteralValue;
|
|
27
|
-
type PslAttributeTarget = 'field' | 'model' | 'namedType';
|
|
27
|
+
type PslAttributeTarget = 'field' | 'model' | 'enum' | 'namedType';
|
|
28
28
|
interface PslAttributePositionalArgument {
|
|
29
29
|
readonly kind: 'positional';
|
|
30
30
|
readonly value: string;
|
|
@@ -83,6 +83,7 @@ interface PslEnum {
|
|
|
83
83
|
readonly kind: 'enum';
|
|
84
84
|
readonly name: string;
|
|
85
85
|
readonly values: readonly PslEnumValue[];
|
|
86
|
+
readonly attributes: readonly PslAttribute[];
|
|
86
87
|
readonly span: PslSpan;
|
|
87
88
|
}
|
|
88
89
|
interface PslNamedTypeDeclaration {
|
|
@@ -116,4 +117,4 @@ interface ParsePslDocumentResult {
|
|
|
116
117
|
}
|
|
117
118
|
//#endregion
|
|
118
119
|
export { PslReferentialAction as C, PslUniqueConstraint as E, PslPosition as S, PslTypesBlock as T, PslFieldAttribute as _, PslAttributeNamedArgument as a, PslModelAttribute as b, PslDefaultFunctionValue as c, PslDiagnostic as d, PslDiagnosticCode as f, PslField as g, PslEnumValue as h, PslAttributeArgument as i, PslDefaultLiteralValue as l, PslEnum as m, ParsePslDocumentResult as n, PslAttributePositionalArgument as o, PslDocumentAst as p, PslAttribute as r, PslAttributeTarget as s, ParsePslDocumentInput as t, PslDefaultValue as u, PslIndexConstraint as v, PslSpan as w, PslNamedTypeDeclaration as x, PslModel as y };
|
|
119
|
-
//# sourceMappingURL=types-
|
|
120
|
+
//# sourceMappingURL=types-0aHhDCP4.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-0aHhDCP4.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";UAAiB,WAAA;EAAA,SAAA,MAAW,EAAA,MAAA;EAMX,SAAA,IAAO,EAAA,MACN;EAIN,SAAA,MAAA,EAAA,MAAiB;AAa7B;AAOiB,UAzBA,OAAA,CAyBA;EAKA,SAAA,KAAA,EA7BC,WA6BqB;EAK3B,SAAA,GAAA,EAjCI,WAiCW;AAE3B;AAEiB,KAlCL,iBAAA,GAkCK,wBAGO,GAAA,iCAAA,GAAA,8BAAA,GAAA,0BAAA,GAAA,iCAAA,GAAA,iCAAA,GAAA,gCAAA,GAAA,gCAAA,GAAA,2BAAA,GAAA,yBAAA,GAAA,0BAAA;AAGP,UA3BA,aAAA,CA2BA;EAOL,SAAA,IAAA,EAjCK,iBAiCe;EAEf,SAAA,OAAY,EAAA,MAAA;EAEV,SAAA,QAAA,EAAA,MAAA;EAEO,SAAA,IAAA,EApCT,OAoCS;;AACF,UAlCP,uBAAA,CAkCO;EAGZ,SAAA,IAAA,EAAA,UAAoB;EAEpB,SAAA,IAAA,EAAA,eAAiB,GAAG,KAAA;AAEhC;AAWiB,UA/CA,sBAAA,CAkDA;EAGA,SAAA,IAAA,EAAA,SAAkB;EAMvB,SAAA,KAAA,EAAA,MAAiB,GAAA,MAAA,GAAG,OAAA;AAEhC;AAG4B,KA3DhB,eAAA,GAAkB,uBA2DF,GA3D4B,sBA2D5B;AACI,KA1DpB,kBAAA,GA0DoB,OAAA,GAAA,OAAA,GAAA,MAAA,GAAA,WAAA;AACf,UAzDA,8BAAA,CAyDA;EAAO,SAAA,IAAA,EAAA,YAAA;EAGP,SAAA,KAAA,EAAY,MAAA;EAMZ,SAAA,IAAO,EA/DP,OA+DO;;AAIQ,UAhEf,yBAAA,CAgEe;EACf,SAAA,IAAA,EAAA,OAAA;EAAO,SAAA,IAAA,EAAA,MAAA;EAGP,SAAA,KAAA,EAAA,MAAA;EAQA,SAAA,IAAA,EAxEA,OAwEa;AAM9B;AAG4B,KA9EhB,oBAAA,GAAuB,8BA8EP,GA9EwC,yBA8ExC;AACD,UA7EV,YAAA,CA6EU;EACR,SAAA,IAAA,EAAA,WAAA;EACF,SAAA,MAAA,EA7EE,kBA6EF;EAAO,SAAA,IAAA,EAAA,MAAA;EAGP,SAAA,IAAA,EAAA,SA9ES,oBA8EY,EAAA;EAKrB,SAAA,IAAA,EAlFA,OAkFA;;KA/EL,oBAAA;KAEA,iBAAA,GAAoB;UAEf,QAAA;;;;;;;gCAOe;iBACf;;UAGA,mBAAA;;;iBAGA;;UAGA,kBAAA;;;iBAGA;;KAGL,iBAAA,GAAoB;UAEf,QAAA;;;4BAGW;gCACI;iBACf;;UAGA,YAAA;;;iBAGA;;UAGA,OAAA;;;4BAGW;gCACI;iBACf;;UAGA,uBAAA;;;;gCAIe;iBACf;;UAGA,aAAA;;kCAEiB;iBACjB;;UAGA,cAAA;;;4BAGW;2BACD;mBACR;iBACF;;UAGA,qBAAA;;;;UAKA,sBAAA;gBACD;iCACiB"}
|
package/dist/types.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as PslReferentialAction, E as PslUniqueConstraint, S as PslPosition, T as PslTypesBlock, _ as PslFieldAttribute, a as PslAttributeNamedArgument, b as PslModelAttribute, c as PslDefaultFunctionValue, d as PslDiagnostic, f as PslDiagnosticCode, g as PslField, h as PslEnumValue, i as PslAttributeArgument, l as PslDefaultLiteralValue, m as PslEnum, n as ParsePslDocumentResult, o as PslAttributePositionalArgument, p as PslDocumentAst, r as PslAttribute, s as PslAttributeTarget, t as ParsePslDocumentInput, u as PslDefaultValue, v as PslIndexConstraint, w as PslSpan, x as PslNamedTypeDeclaration, y as PslModel } from "./types-
|
|
1
|
+
import { C as PslReferentialAction, E as PslUniqueConstraint, S as PslPosition, T as PslTypesBlock, _ as PslFieldAttribute, a as PslAttributeNamedArgument, b as PslModelAttribute, c as PslDefaultFunctionValue, d as PslDiagnostic, f as PslDiagnosticCode, g as PslField, h as PslEnumValue, i as PslAttributeArgument, l as PslDefaultLiteralValue, m as PslEnum, n as ParsePslDocumentResult, o as PslAttributePositionalArgument, p as PslDocumentAst, r as PslAttribute, s as PslAttributeTarget, t as ParsePslDocumentInput, u as PslDefaultValue, v as PslIndexConstraint, w as PslSpan, x as PslNamedTypeDeclaration, y as PslModel } from "./types-0aHhDCP4.mjs";
|
|
2
2
|
export { type ParsePslDocumentInput, type ParsePslDocumentResult, type PslAttribute, type PslAttributeArgument, type PslAttributeNamedArgument, type PslAttributePositionalArgument, type PslAttributeTarget, type PslDefaultFunctionValue, type PslDefaultLiteralValue, type PslDefaultValue, type PslDiagnostic, type PslDiagnosticCode, type PslDocumentAst, type PslEnum, type PslEnumValue, type PslField, type PslFieldAttribute, type PslIndexConstraint, type PslModel, type PslModelAttribute, type PslNamedTypeDeclaration, type PslPosition, type PslReferentialAction, type PslSpan, type PslTypesBlock, type PslUniqueConstraint };
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/psl-parser",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.104",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "Reusable parser for Prisma Schema Language (PSL)",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@prisma-next/utils": "0.3.0-dev.
|
|
8
|
+
"@prisma-next/utils": "0.3.0-dev.104"
|
|
9
9
|
},
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"tsdown": "0.18.4",
|
|
12
12
|
"typescript": "5.9.3",
|
|
13
13
|
"vitest": "4.0.17",
|
|
14
|
-
"@prisma-next/
|
|
15
|
-
"@prisma-next/
|
|
14
|
+
"@prisma-next/tsconfig": "0.0.0",
|
|
15
|
+
"@prisma-next/tsdown": "0.0.0"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
package/src/parser.ts
CHANGED
|
@@ -238,6 +238,7 @@ function parseModelBlock(context: ParserContext, name: string, bounds: BlockBoun
|
|
|
238
238
|
|
|
239
239
|
function parseEnumBlock(context: ParserContext, name: string, bounds: BlockBounds): PslEnum {
|
|
240
240
|
const values: PslEnumValue[] = [];
|
|
241
|
+
const attributes: PslAttribute[] = [];
|
|
241
242
|
|
|
242
243
|
for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {
|
|
243
244
|
const raw = context.lines[lineIndex] ?? '';
|
|
@@ -246,6 +247,14 @@ function parseEnumBlock(context: ParserContext, name: string, bounds: BlockBound
|
|
|
246
247
|
continue;
|
|
247
248
|
}
|
|
248
249
|
|
|
250
|
+
if (line.startsWith('@@')) {
|
|
251
|
+
const attribute = parseEnumAttribute(context, line, lineIndex);
|
|
252
|
+
if (attribute) {
|
|
253
|
+
attributes.push(attribute);
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
|
|
249
258
|
const valueMatch = line.match(/^([A-Za-z_]\w*)$/);
|
|
250
259
|
if (!valueMatch) {
|
|
251
260
|
pushDiagnostic(context, {
|
|
@@ -267,6 +276,7 @@ function parseEnumBlock(context: ParserContext, name: string, bounds: BlockBound
|
|
|
267
276
|
kind: 'enum',
|
|
268
277
|
name,
|
|
269
278
|
values,
|
|
279
|
+
attributes,
|
|
270
280
|
span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),
|
|
271
281
|
};
|
|
272
282
|
}
|
|
@@ -367,6 +377,50 @@ function parseModelAttribute(
|
|
|
367
377
|
});
|
|
368
378
|
}
|
|
369
379
|
|
|
380
|
+
function parseEnumAttribute(
|
|
381
|
+
context: ParserContext,
|
|
382
|
+
line: string,
|
|
383
|
+
lineIndex: number,
|
|
384
|
+
): PslAttribute | undefined {
|
|
385
|
+
const rawLine = context.lines[lineIndex] ?? '';
|
|
386
|
+
const tokenParse = extractAttributeTokensWithSpans(
|
|
387
|
+
context,
|
|
388
|
+
lineIndex,
|
|
389
|
+
line,
|
|
390
|
+
firstNonWhitespaceColumn(rawLine),
|
|
391
|
+
);
|
|
392
|
+
if (!tokenParse.ok || tokenParse.tokens.length !== 1) {
|
|
393
|
+
pushDiagnostic(context, {
|
|
394
|
+
code: 'PSL_INVALID_ENUM_MEMBER',
|
|
395
|
+
message: `Invalid enum value declaration "${line}"`,
|
|
396
|
+
span: createTrimmedLineSpan(context, lineIndex),
|
|
397
|
+
});
|
|
398
|
+
return undefined;
|
|
399
|
+
}
|
|
400
|
+
const token = tokenParse.tokens[0];
|
|
401
|
+
if (!token) {
|
|
402
|
+
return undefined;
|
|
403
|
+
}
|
|
404
|
+
const parsed = parseAttributeToken(context, {
|
|
405
|
+
token: token.text,
|
|
406
|
+
target: 'enum',
|
|
407
|
+
lineIndex,
|
|
408
|
+
span: token.span,
|
|
409
|
+
});
|
|
410
|
+
if (!parsed) {
|
|
411
|
+
return undefined;
|
|
412
|
+
}
|
|
413
|
+
if (parsed.name !== 'map') {
|
|
414
|
+
pushDiagnostic(context, {
|
|
415
|
+
code: 'PSL_INVALID_ENUM_MEMBER',
|
|
416
|
+
message: `Invalid enum value declaration "${line}"`,
|
|
417
|
+
span: createTrimmedLineSpan(context, lineIndex),
|
|
418
|
+
});
|
|
419
|
+
return undefined;
|
|
420
|
+
}
|
|
421
|
+
return parsed;
|
|
422
|
+
}
|
|
423
|
+
|
|
370
424
|
function parseField(context: ParserContext, line: string, lineIndex: number): PslField | undefined {
|
|
371
425
|
const fieldMatch = line.match(/^([A-Za-z_]\w*)\s+([A-Za-z_]\w*(?:\[\])?)(\?)?(.*)$/);
|
|
372
426
|
if (!fieldMatch) {
|
|
@@ -442,16 +496,17 @@ function parseAttributeToken(
|
|
|
442
496
|
readonly span: PslSpan;
|
|
443
497
|
},
|
|
444
498
|
): PslAttribute | undefined {
|
|
445
|
-
const
|
|
446
|
-
|
|
499
|
+
const expectsBlockPrefix = input.target === 'model' || input.target === 'enum';
|
|
500
|
+
const targetLabel = input.target === 'enum' ? 'Enum' : 'Model';
|
|
501
|
+
if (expectsBlockPrefix && !input.token.startsWith('@@')) {
|
|
447
502
|
pushDiagnostic(context, {
|
|
448
503
|
code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',
|
|
449
|
-
message:
|
|
504
|
+
message: `${targetLabel} attribute "${input.token}" must use @@ prefix`,
|
|
450
505
|
span: input.span,
|
|
451
506
|
});
|
|
452
507
|
return undefined;
|
|
453
508
|
}
|
|
454
|
-
if (!
|
|
509
|
+
if (!expectsBlockPrefix && !input.token.startsWith('@')) {
|
|
455
510
|
pushDiagnostic(context, {
|
|
456
511
|
code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',
|
|
457
512
|
message: `Attribute "${input.token}" must use @ prefix`,
|
|
@@ -459,7 +514,7 @@ function parseAttributeToken(
|
|
|
459
514
|
});
|
|
460
515
|
return undefined;
|
|
461
516
|
}
|
|
462
|
-
if (!
|
|
517
|
+
if (!expectsBlockPrefix && input.token.startsWith('@@')) {
|
|
463
518
|
pushDiagnostic(context, {
|
|
464
519
|
code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',
|
|
465
520
|
message: `Attribute "${input.token}" is not valid in ${input.target} context`,
|
|
@@ -468,7 +523,7 @@ function parseAttributeToken(
|
|
|
468
523
|
return undefined;
|
|
469
524
|
}
|
|
470
525
|
|
|
471
|
-
const rawBody =
|
|
526
|
+
const rawBody = expectsBlockPrefix ? input.token.slice(2) : input.token.slice(1);
|
|
472
527
|
const openParen = rawBody.indexOf('(');
|
|
473
528
|
const closeParen = rawBody.lastIndexOf(')');
|
|
474
529
|
const hasArgs = openParen >= 0 || closeParen >= 0;
|
|
@@ -504,7 +559,7 @@ function parseAttributeToken(
|
|
|
504
559
|
const argsRaw = rawBody.slice(openParen + 1, closeParen);
|
|
505
560
|
const parsedArgs = parseAttributeArguments(context, {
|
|
506
561
|
argsRaw,
|
|
507
|
-
argsOffset: input.span.start.column - 1 + (
|
|
562
|
+
argsOffset: input.span.start.column - 1 + (expectsBlockPrefix ? 2 : 1) + openParen + 1,
|
|
508
563
|
lineIndex: input.lineIndex,
|
|
509
564
|
token: input.token,
|
|
510
565
|
span: input.span,
|
package/src/types.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface PslDefaultLiteralValue {
|
|
|
41
41
|
|
|
42
42
|
export type PslDefaultValue = PslDefaultFunctionValue | PslDefaultLiteralValue;
|
|
43
43
|
|
|
44
|
-
export type PslAttributeTarget = 'field' | 'model' | 'namedType';
|
|
44
|
+
export type PslAttributeTarget = 'field' | 'model' | 'enum' | 'namedType';
|
|
45
45
|
|
|
46
46
|
export interface PslAttributePositionalArgument {
|
|
47
47
|
readonly kind: 'positional';
|
|
@@ -113,6 +113,7 @@ export interface PslEnum {
|
|
|
113
113
|
readonly kind: 'enum';
|
|
114
114
|
readonly name: string;
|
|
115
115
|
readonly values: readonly PslEnumValue[];
|
|
116
|
+
readonly attributes: readonly PslAttribute[];
|
|
116
117
|
readonly span: PslSpan;
|
|
117
118
|
}
|
|
118
119
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser-BgdIJNqs.d.mts","names":[],"sources":["../src/parser.ts"],"sourcesContent":[],"mappings":";;;iBAgDgB,gBAAA,QAAwB,wBAAwB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser-Br4vqzd-.mjs","names":["diagnostics: PslDiagnostic[]","context: ParserContext","models: PslModel[]","enums: PslEnum[]","typesBlock: PslTypesBlock | undefined","fields: PslField[]","attributes: PslModelAttribute[]","values: PslEnumValue[]","declarations: PslNamedTypeDeclaration[]","attributes: PslFieldAttribute[]","args: readonly PslAttributeArgument[]","args: PslAttributeArgument[]","quote: '\"' | \"'\" | null","parts: TopLevelSegment[]","tokens: { text: string; span: PslSpan }[]"],"sources":["../src/parser.ts"],"sourcesContent":["import { ifDefined } from '@prisma-next/utils/defined';\nimport type {\n ParsePslDocumentInput,\n ParsePslDocumentResult,\n PslAttribute,\n PslAttributeArgument,\n PslAttributeTarget,\n PslDiagnostic,\n PslDiagnosticCode,\n PslDocumentAst,\n PslEnum,\n PslEnumValue,\n PslField,\n PslFieldAttribute,\n PslModel,\n PslModelAttribute,\n PslNamedTypeDeclaration,\n PslPosition,\n PslSpan,\n PslTypesBlock,\n} from './types';\n\nconst SCALAR_TYPES = new Set([\n 'String',\n 'Boolean',\n 'Int',\n 'BigInt',\n 'Float',\n 'Decimal',\n 'DateTime',\n 'Json',\n 'Bytes',\n]);\n\ninterface BlockBounds {\n readonly startLine: number;\n readonly endLine: number;\n readonly closed: boolean;\n}\n\ninterface ParserContext {\n readonly schema: string;\n readonly sourceId: string;\n readonly lines: readonly string[];\n readonly lineOffsets: readonly number[];\n readonly diagnostics: PslDiagnostic[];\n}\n\nexport function parsePslDocument(input: ParsePslDocumentInput): ParsePslDocumentResult {\n const normalizedSchema = input.schema.replaceAll('\\r\\n', '\\n');\n const lines = normalizedSchema.split('\\n');\n const lineOffsets = computeLineOffsets(normalizedSchema);\n const diagnostics: PslDiagnostic[] = [];\n const context: ParserContext = {\n schema: normalizedSchema,\n sourceId: input.sourceId,\n lines,\n lineOffsets,\n diagnostics,\n };\n\n const models: PslModel[] = [];\n const enums: PslEnum[] = [];\n let typesBlock: PslTypesBlock | undefined;\n\n let lineIndex = 0;\n while (lineIndex < lines.length) {\n const rawLine = lines[lineIndex] ?? '';\n const line = stripInlineComment(rawLine).trim();\n if (line.length === 0) {\n lineIndex += 1;\n continue;\n }\n\n const modelMatch = line.match(/^model\\s+([A-Za-z_]\\w*)\\s*\\{$/);\n if (modelMatch) {\n const bounds = findBlockBounds(context, lineIndex);\n const name = modelMatch[1] ?? '';\n if (name.length === 0) {\n lineIndex = bounds.endLine + 1;\n continue;\n }\n models.push(parseModelBlock(context, name, bounds));\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n const enumMatch = line.match(/^enum\\s+([A-Za-z_]\\w*)\\s*\\{$/);\n if (enumMatch) {\n const bounds = findBlockBounds(context, lineIndex);\n const name = enumMatch[1] ?? '';\n if (name.length === 0) {\n lineIndex = bounds.endLine + 1;\n continue;\n }\n enums.push(parseEnumBlock(context, name, bounds));\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n if (/^types\\s*\\{$/.test(line)) {\n const bounds = findBlockBounds(context, lineIndex);\n typesBlock = parseTypesBlock(context, bounds);\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n if (line.includes('{')) {\n const blockName = line.split(/\\s+/)[0] ?? 'block';\n pushDiagnostic(context, {\n code: 'PSL_UNSUPPORTED_TOP_LEVEL_BLOCK',\n message: `Unsupported top-level block \"${blockName}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n const bounds = findBlockBounds(context, lineIndex);\n lineIndex = bounds.endLine + 1;\n continue;\n }\n\n pushDiagnostic(context, {\n code: 'PSL_UNSUPPORTED_TOP_LEVEL_BLOCK',\n message: `Unsupported top-level declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n lineIndex += 1;\n }\n\n const namedTypeNames = new Set(\n (typesBlock?.declarations ?? []).map((declaration) => declaration.name),\n );\n const modelNames = new Set(models.map((model) => model.name));\n const enumNames = new Set(enums.map((enumBlock) => enumBlock.name));\n for (const declaration of typesBlock?.declarations ?? []) {\n if (SCALAR_TYPES.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with scalar type \"${declaration.name}\"`,\n span: declaration.span,\n });\n continue;\n }\n if (modelNames.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with model name \"${declaration.name}\"`,\n span: declaration.span,\n });\n continue;\n }\n if (enumNames.has(declaration.name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Named type \"${declaration.name}\" conflicts with enum name \"${declaration.name}\"`,\n span: declaration.span,\n });\n }\n }\n const normalizedModels = models.map((model) => ({\n ...model,\n fields: model.fields.map((field) => {\n if (!namedTypeNames.has(field.typeName)) {\n return field;\n }\n const hasRelationAttribute = field.attributes.some(\n (attribute) => attribute.name === 'relation',\n );\n if (\n hasRelationAttribute ||\n modelNames.has(field.typeName) ||\n enumNames.has(field.typeName) ||\n SCALAR_TYPES.has(field.typeName)\n ) {\n return field;\n }\n return {\n ...field,\n typeRef: field.typeName,\n };\n }),\n }));\n\n const ast: PslDocumentAst = {\n kind: 'document',\n sourceId: input.sourceId,\n models: normalizedModels,\n enums,\n ...ifDefined('types', typesBlock),\n span: {\n start: createPosition(context, 0, 0),\n end: createPosition(\n context,\n Math.max(lines.length - 1, 0),\n (lines[Math.max(lines.length - 1, 0)] ?? '').length,\n ),\n },\n };\n\n return {\n ast,\n diagnostics,\n ok: diagnostics.length === 0,\n };\n}\n\nfunction parseModelBlock(context: ParserContext, name: string, bounds: BlockBounds): PslModel {\n const fields: PslField[] = [];\n const attributes: PslModelAttribute[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const line = stripInlineComment(raw).trim();\n if (line.length === 0) {\n continue;\n }\n\n if (line.startsWith('@@')) {\n const attribute = parseModelAttribute(context, line, lineIndex);\n if (attribute) {\n attributes.push(attribute);\n }\n continue;\n }\n\n const field = parseField(context, line, lineIndex);\n if (field) {\n fields.push(field);\n }\n }\n\n return {\n kind: 'model',\n name,\n fields,\n attributes,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseEnumBlock(context: ParserContext, name: string, bounds: BlockBounds): PslEnum {\n const values: PslEnumValue[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const line = stripInlineComment(raw).trim();\n if (line.length === 0) {\n continue;\n }\n\n const valueMatch = line.match(/^([A-Za-z_]\\w*)$/);\n if (!valueMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ENUM_MEMBER',\n message: `Invalid enum value declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n continue;\n }\n\n values.push({\n kind: 'enumValue',\n name: valueMatch[1] ?? '',\n span: createTrimmedLineSpan(context, lineIndex),\n });\n }\n\n return {\n kind: 'enum',\n name,\n values,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseTypesBlock(context: ParserContext, bounds: BlockBounds): PslTypesBlock {\n const declarations: PslNamedTypeDeclaration[] = [];\n\n for (let lineIndex = bounds.startLine + 1; lineIndex < bounds.endLine; lineIndex += 1) {\n const raw = context.lines[lineIndex] ?? '';\n const lineWithoutComment = stripInlineComment(raw);\n const line = lineWithoutComment.trim();\n if (line.length === 0) {\n continue;\n }\n\n const declarationMatch = line.match(/^([A-Za-z_]\\w*)\\s*=\\s*([A-Za-z_]\\w*)(.*)$/);\n if (!declarationMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_TYPES_MEMBER',\n message: `Invalid types declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n continue;\n }\n\n const declarationName = declarationMatch[1] ?? '';\n const baseType = declarationMatch[2] ?? '';\n const attributePart = declarationMatch[3] ?? '';\n const trimmedStartColumn = firstNonWhitespaceColumn(raw);\n const attributeOffset = line.length - attributePart.length;\n const attributeSource = attributePart.trimStart();\n const leadingAttributeWhitespace = attributePart.length - attributeSource.length;\n const attributeParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n attributeSource,\n trimmedStartColumn + attributeOffset + leadingAttributeWhitespace,\n );\n if (!attributeParse.ok) {\n continue;\n }\n const attributes = attributeParse.tokens\n .map((token) =>\n parseAttributeToken(context, {\n token: token.text,\n target: 'namedType',\n lineIndex,\n span: token.span,\n }),\n )\n .filter((attribute): attribute is PslAttribute => Boolean(attribute));\n\n declarations.push({\n kind: 'namedType',\n name: declarationName,\n baseType,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n }\n\n return {\n kind: 'types',\n declarations,\n span: createLineRangeSpan(context, bounds.startLine, bounds.endLine),\n };\n}\n\nfunction parseModelAttribute(\n context: ParserContext,\n line: string,\n lineIndex: number,\n): PslModelAttribute | undefined {\n const rawLine = context.lines[lineIndex] ?? '';\n const tokenParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n line,\n firstNonWhitespaceColumn(rawLine),\n );\n if (!tokenParse.ok || tokenParse.tokens.length !== 1) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid model attribute syntax \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n const token = tokenParse.tokens[0];\n if (!token) {\n return undefined;\n }\n return parseAttributeToken(context, {\n token: token.text,\n target: 'model',\n lineIndex,\n span: token.span,\n });\n}\n\nfunction parseField(context: ParserContext, line: string, lineIndex: number): PslField | undefined {\n const fieldMatch = line.match(/^([A-Za-z_]\\w*)\\s+([A-Za-z_]\\w*(?:\\[\\])?)(\\?)?(.*)$/);\n if (!fieldMatch) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_MODEL_MEMBER',\n message: `Invalid model member declaration \"${line}\"`,\n span: createTrimmedLineSpan(context, lineIndex),\n });\n return undefined;\n }\n\n const fieldName = fieldMatch[1] ?? '';\n const rawTypeToken = fieldMatch[2] ?? '';\n const optionalMarker = fieldMatch[3] ?? '';\n const attributePart = fieldMatch[4] ?? '';\n const list = rawTypeToken.endsWith('[]');\n const typeName = list ? rawTypeToken.slice(0, -2) : rawTypeToken;\n const optional = optionalMarker === '?';\n\n const attributes: PslFieldAttribute[] = [];\n const rawLine = context.lines[lineIndex] ?? '';\n const trimmedStartColumn = firstNonWhitespaceColumn(rawLine);\n const attributeOffset = line.length - attributePart.length;\n const attributeSource = attributePart.trimStart();\n const leadingAttributeWhitespace = attributePart.length - attributeSource.length;\n const tokenParse = extractAttributeTokensWithSpans(\n context,\n lineIndex,\n attributeSource,\n trimmedStartColumn + attributeOffset + leadingAttributeWhitespace,\n );\n if (!tokenParse.ok) {\n return {\n kind: 'field',\n name: fieldName,\n typeName,\n optional,\n list,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n };\n }\n\n for (const token of tokenParse.tokens) {\n const parsed = parseAttributeToken(context, {\n token: token.text,\n target: 'field',\n lineIndex,\n span: token.span,\n });\n if (parsed) {\n attributes.push(parsed);\n }\n }\n\n return {\n kind: 'field',\n name: fieldName,\n typeName,\n optional,\n list,\n attributes,\n span: createTrimmedLineSpan(context, lineIndex),\n };\n}\n\nfunction parseAttributeToken(\n context: ParserContext,\n input: {\n readonly token: string;\n readonly target: PslAttributeTarget;\n readonly lineIndex: number;\n readonly span: PslSpan;\n },\n): PslAttribute | undefined {\n const expectsModelPrefix = input.target === 'model';\n if (expectsModelPrefix && !input.token.startsWith('@@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Model attribute \"${input.token}\" must use @@ prefix`,\n span: input.span,\n });\n return undefined;\n }\n if (!expectsModelPrefix && !input.token.startsWith('@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Attribute \"${input.token}\" must use @ prefix`,\n span: input.span,\n });\n return undefined;\n }\n if (!expectsModelPrefix && input.token.startsWith('@@')) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Attribute \"${input.token}\" is not valid in ${input.target} context`,\n span: input.span,\n });\n return undefined;\n }\n\n const rawBody = expectsModelPrefix ? input.token.slice(2) : input.token.slice(1);\n const openParen = rawBody.indexOf('(');\n const closeParen = rawBody.lastIndexOf(')');\n const hasArgs = openParen >= 0 || closeParen >= 0;\n if ((openParen >= 0 && closeParen === -1) || (openParen === -1 && closeParen >= 0)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n const name = (openParen >= 0 ? rawBody.slice(0, openParen) : rawBody).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_-]*(\\.[A-Za-z_][A-Za-z0-9_-]*)*$/.test(name)) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute name \"${name || input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n let args: readonly PslAttributeArgument[] = [];\n if (hasArgs && openParen >= 0 && closeParen >= openParen) {\n if (closeParen !== rawBody.length - 1) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid trailing syntax in attribute \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n const argsRaw = rawBody.slice(openParen + 1, closeParen);\n const parsedArgs = parseAttributeArguments(context, {\n argsRaw,\n argsOffset: input.span.start.column - 1 + (expectsModelPrefix ? 2 : 1) + openParen + 1,\n lineIndex: input.lineIndex,\n token: input.token,\n span: input.span,\n });\n if (!parsedArgs) {\n return undefined;\n }\n args = parsedArgs;\n }\n\n return {\n kind: 'attribute',\n target: input.target,\n name,\n args,\n span: input.span,\n };\n}\n\nfunction parseAttributeArguments(\n context: ParserContext,\n input: {\n readonly argsRaw: string;\n readonly argsOffset: number;\n readonly lineIndex: number;\n readonly token: string;\n readonly span: PslSpan;\n },\n): readonly PslAttributeArgument[] | undefined {\n const trimmed = input.argsRaw.trim();\n if (trimmed.length === 0) {\n return [];\n }\n\n const parts = splitTopLevelSegments(input.argsRaw, ',');\n const args: PslAttributeArgument[] = [];\n\n for (const part of parts) {\n const original = part.value;\n const trimmedPart = original.trim();\n if (trimmedPart.length === 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid empty argument in attribute \"${input.token}\"`,\n span: input.span,\n });\n return undefined;\n }\n\n const leadingWhitespace = original.length - original.trimStart().length;\n const partStart = input.argsOffset + part.start + leadingWhitespace;\n const partEnd = partStart + trimmedPart.length;\n const partSpan = createInlineSpan(context, input.lineIndex, partStart, partEnd);\n\n const namedSplit = splitTopLevelSegments(trimmedPart, ':');\n if (namedSplit.length > 1) {\n const first = namedSplit[0];\n if (!first) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid named argument syntax \"${trimmedPart}\"`,\n span: partSpan,\n });\n return undefined;\n }\n const name = first.value.trim();\n const rawValue = trimmedPart.slice(first.end + 1).trim();\n if (!name || rawValue.length === 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid named argument syntax \"${trimmedPart}\"`,\n span: partSpan,\n });\n return undefined;\n }\n args.push({\n kind: 'named',\n name,\n value: normalizeAttributeArgumentValue(rawValue),\n span: partSpan,\n });\n continue;\n }\n\n args.push({\n kind: 'positional',\n value: normalizeAttributeArgumentValue(trimmedPart),\n span: partSpan,\n });\n }\n\n return args;\n}\n\nfunction normalizeAttributeArgumentValue(value: string): string {\n return value.trim();\n}\n\nfunction findBlockBounds(context: ParserContext, startLine: number): BlockBounds {\n let depth = 0;\n\n for (let lineIndex = startLine; lineIndex < context.lines.length; lineIndex += 1) {\n const line = stripInlineComment(context.lines[lineIndex] ?? '');\n let quote: '\"' | \"'\" | null = null;\n let previousCharacter = '';\n for (const character of line) {\n if (quote) {\n if (character === quote && previousCharacter !== '\\\\') {\n quote = null;\n }\n previousCharacter = character;\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n quote = character;\n previousCharacter = character;\n continue;\n }\n\n if (character === '{') {\n depth += 1;\n }\n if (character === '}') {\n depth -= 1;\n if (depth === 0) {\n return { startLine, endLine: lineIndex, closed: true };\n }\n }\n previousCharacter = character;\n }\n }\n\n pushDiagnostic(context, {\n code: 'PSL_UNTERMINATED_BLOCK',\n message: 'Unterminated block declaration',\n span: createTrimmedLineSpan(context, startLine),\n });\n return {\n startLine,\n endLine: context.lines.length - 1,\n closed: false,\n };\n}\n\ninterface TopLevelSegment {\n readonly value: string;\n readonly start: number;\n readonly end: number;\n}\n\nfunction splitTopLevelSegments(value: string, separator: ',' | ':'): TopLevelSegment[] {\n const parts: TopLevelSegment[] = [];\n let depthParen = 0;\n let depthBracket = 0;\n let quote: '\"' | \"'\" | null = null;\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index] ?? '';\n if (quote) {\n if (character === quote && value[index - 1] !== '\\\\') {\n quote = null;\n }\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n\n if (character === '(') {\n depthParen += 1;\n continue;\n }\n if (character === ')') {\n depthParen = Math.max(0, depthParen - 1);\n continue;\n }\n if (character === '[') {\n depthBracket += 1;\n continue;\n }\n if (character === ']') {\n depthBracket = Math.max(0, depthBracket - 1);\n continue;\n }\n\n if (character === separator && depthParen === 0 && depthBracket === 0) {\n parts.push({\n value: value.slice(start, index),\n start,\n end: index,\n });\n start = index + 1;\n }\n }\n\n parts.push({\n value: value.slice(start),\n start,\n end: value.length,\n });\n return parts;\n}\n\nfunction extractAttributeTokensWithSpans(\n context: ParserContext,\n lineIndex: number,\n value: string,\n startColumn: number,\n): { readonly ok: boolean; readonly tokens: readonly { text: string; span: PslSpan }[] } {\n const tokens: { text: string; span: PslSpan }[] = [];\n let index = 0;\n while (index < value.length) {\n while (index < value.length && /\\s/.test(value[index] ?? '')) {\n index += 1;\n }\n if (index >= value.length) {\n break;\n }\n\n if (value[index] !== '@') {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + index, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n const start = index;\n index += 1;\n if (value[index] === '@') {\n index += 1;\n }\n\n const nameStart = index;\n while (index < value.length && /[A-Za-z0-9_.-]/.test(value[index] ?? '')) {\n index += 1;\n }\n\n if (index === nameStart) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.slice(start).trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + start, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n if (value[index] === '(') {\n let depth = 0;\n let quote: '\"' | \"'\" | null = null;\n while (index < value.length) {\n const char = value[index] ?? '';\n if (quote) {\n if (char === quote && value[index - 1] !== '\\\\') {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === '(') {\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth === 0) {\n index += 1;\n break;\n }\n }\n index += 1;\n }\n if (depth !== 0) {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Unterminated attribute argument list in \"${value.slice(start).trim()}\"`,\n span: createInlineSpan(\n context,\n lineIndex,\n startColumn + start,\n startColumn + value.length,\n ),\n });\n return { ok: false, tokens };\n }\n }\n\n const tokenText = value.slice(start, index).trim();\n tokens.push({\n text: tokenText,\n span: createInlineSpan(context, lineIndex, startColumn + start, startColumn + index),\n });\n\n while (index < value.length && /\\s/.test(value[index] ?? '')) {\n index += 1;\n }\n\n if (index < value.length && value[index] !== '@') {\n break;\n }\n }\n\n if (index < value.length && value[index] !== '@') {\n pushDiagnostic(context, {\n code: 'PSL_INVALID_ATTRIBUTE_SYNTAX',\n message: `Invalid attribute syntax \"${value.trim()}\"`,\n span: createInlineSpan(context, lineIndex, startColumn + index, startColumn + value.length),\n });\n return { ok: false, tokens };\n }\n\n return { ok: true, tokens };\n}\n\nfunction stripInlineComment(line: string): string {\n let quote: '\"' | \"'\" | null = null;\n for (let index = 0; index < line.length - 1; index += 1) {\n const current = line[index] ?? '';\n const next = line[index + 1] ?? '';\n\n if (quote) {\n if (current === quote && line[index - 1] !== '\\\\') {\n quote = null;\n }\n continue;\n }\n\n if (current === '\"' || current === \"'\") {\n quote = current;\n continue;\n }\n\n if (current === '/' && next === '/') {\n return line.slice(0, index);\n }\n }\n\n return line;\n}\n\nfunction computeLineOffsets(schema: string): number[] {\n const offsets = [0];\n for (let index = 0; index < schema.length; index += 1) {\n if (schema[index] === '\\n') {\n offsets.push(index + 1);\n }\n }\n return offsets;\n}\n\nfunction firstNonWhitespaceColumn(line: string): number {\n const first = line.search(/\\S/);\n return first === -1 ? 0 : first;\n}\n\nfunction createInlineSpan(\n context: ParserContext,\n lineIndex: number,\n startColumn: number,\n endColumn: number,\n): PslSpan {\n return {\n start: createPosition(context, lineIndex, startColumn),\n end: createPosition(context, lineIndex, endColumn),\n };\n}\n\nfunction createTrimmedLineSpan(context: ParserContext, lineIndex: number): PslSpan {\n const line = context.lines[lineIndex] ?? '';\n const startColumn = firstNonWhitespaceColumn(line);\n return {\n start: createPosition(context, lineIndex, startColumn),\n end: createPosition(context, lineIndex, line.length),\n };\n}\n\nfunction createLineRangeSpan(context: ParserContext, startLine: number, endLine: number): PslSpan {\n const startLineText = context.lines[startLine] ?? '';\n const endLineText = context.lines[endLine] ?? '';\n const startColumn = firstNonWhitespaceColumn(startLineText);\n return {\n start: createPosition(context, startLine, startColumn),\n end: createPosition(context, endLine, endLineText.length),\n };\n}\n\nfunction createPosition(\n context: ParserContext,\n lineIndex: number,\n columnIndex: number,\n): PslPosition {\n const clampedLineIndex = Math.max(0, Math.min(lineIndex, context.lineOffsets.length - 1));\n const lineText = context.lines[clampedLineIndex] ?? '';\n const clampedColumnIndex = Math.max(0, Math.min(columnIndex, lineText.length));\n return {\n offset: (context.lineOffsets[clampedLineIndex] ?? 0) + clampedColumnIndex,\n line: clampedLineIndex + 1,\n column: clampedColumnIndex + 1,\n };\n}\n\nfunction pushDiagnostic(\n context: ParserContext,\n diagnostic: Omit<PslDiagnostic, 'sourceId'> & { readonly code: PslDiagnosticCode },\n): void {\n context.diagnostics.push({\n ...diagnostic,\n sourceId: context.sourceId,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-CyfspkvF.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";UAAiB,WAAA;EAAA,SAAA,MAAW,EAAA,MAAA;EAMX,SAAA,IAAO,EAAA,MACN;EAIN,SAAA,MAAA,EAAA,MAAiB;AAa7B;AAOiB,UAzBA,OAAA,CAyBA;EAKA,SAAA,KAAA,EA7BC,WA6BqB;EAK3B,SAAA,GAAA,EAjCI,WAiCW;AAE3B;AAEiB,KAlCL,iBAAA,GAkCK,wBAGA,GAAO,iCAAA,GAAA,8BAAA,GAAA,0BAAA,GAAA,iCAAA,GAAA,iCAAA,GAAA,gCAAA,GAAA,gCAAA,GAAA,2BAAA,GAAA,yBAAA,GAAA,0BAAA;AAGP,UA3BA,aAAA,CA2BA;EAOL,SAAA,IAAA,EAjCK,iBAiCe;EAEf,SAAA,OAAY,EAAA,MAAA;EAEV,SAAA,QAAA,EAAA,MAAA;EAEO,SAAA,IAAA,EApCT,OAoCS;;AACF,UAlCP,uBAAA,CAkCO;EAGZ,SAAA,IAAA,EAAA,UAAoB;EAEpB,SAAA,IAAA,EAAA,eAAiB,GAAG,KAAA;AAEhC;AAWiB,UA/CA,sBAAA,CAkDA;EAGA,SAAA,IAAA,EAAA,SAAkB;EAMvB,SAAA,KAAA,EAAA,MAAiB,GAAA,MAAA,GAAG,OAAA;AAEhC;AAG4B,KA3DhB,eAAA,GAAkB,uBA2DF,GA3D4B,sBA2D5B;AACI,KA1DpB,kBAAA,GA0DoB,OAAA,GAAA,OAAA,GAAA,WAAA;AACf,UAzDA,8BAAA,CAyDA;EAAO,SAAA,IAAA,EAAA,YAAA;EAGP,SAAA,KAAA,EAAY,MAAA;EAMZ,SAAA,IAAO,EA/DP,OAkEW;AAI5B;AAQiB,UA3EA,yBAAA,CA6EiB;EAIjB,SAAA,IAAA,EAAA,OAAc;EAGH,SAAA,IAAA,EAAA,MAAA;EACD,SAAA,KAAA,EAAA,MAAA;EACR,SAAA,IAAA,EAlFF,OAkFE;;AACK,KAhFZ,oBAAA,GAAuB,8BAgFX,GAhF4C,yBAgF5C;AAGP,UAjFA,YAAA,CAiFqB;EAKrB,SAAA,IAAA,EAAA,WAAsB;mBApFpB;;0BAEO;iBACT;;KAGL,oBAAA;KAEA,iBAAA,GAAoB;UAEf,QAAA;;;;;;;gCAOe;iBACf;;UAGA,mBAAA;;;iBAGA;;UAGA,kBAAA;;;iBAGA;;KAGL,iBAAA,GAAoB;UAEf,QAAA;;;4BAGW;gCACI;iBACf;;UAGA,YAAA;;;iBAGA;;UAGA,OAAA;;;4BAGW;iBACX;;UAGA,uBAAA;;;;gCAIe;iBACf;;UAGA,aAAA;;kCAEiB;iBACjB;;UAGA,cAAA;;;4BAGW;2BACD;mBACR;iBACF;;UAGA,qBAAA;;;;UAKA,sBAAA;gBACD;iCACiB"}
|