diff --git a/packages/transformers/ajsttil/.eslintignore b/packages/transformers/ajsttil/.eslintignore new file mode 100644 index 0000000..e8e7770 --- /dev/null +++ b/packages/transformers/ajsttil/.eslintignore @@ -0,0 +1,2 @@ +**/*.js +**/*.mjs diff --git a/packages/transformers/ajsttil/.eslintrc.js b/packages/transformers/ajsttil/.eslintrc.js new file mode 100644 index 0000000..8f4a2ee --- /dev/null +++ b/packages/transformers/ajsttil/.eslintrc.js @@ -0,0 +1,8 @@ +/** @type { import("eslint").ESLint.ConfigData } */ +module.exports = { + extends: '@cuaklabs/eslint-config', + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/transformers/ajsttil/.gitignore b/packages/transformers/ajsttil/.gitignore new file mode 100644 index 0000000..c33861a --- /dev/null +++ b/packages/transformers/ajsttil/.gitignore @@ -0,0 +1,11 @@ +# node modules +/node_modules/ + +# Test coverage report +/coverage + +# Compiled files +/lib/ + +# Turborepo files +.turbo/ diff --git a/packages/transformers/ajsttil/.lintstagedrc.json b/packages/transformers/ajsttil/.lintstagedrc.json new file mode 100644 index 0000000..0061dfc --- /dev/null +++ b/packages/transformers/ajsttil/.lintstagedrc.json @@ -0,0 +1,9 @@ +{ + "*.js": [ + "prettier --write" + ], + "*.ts": [ + "prettier --write", + "eslint" + ] +} diff --git a/packages/transformers/ajsttil/CHANGELOG.md b/packages/transformers/ajsttil/CHANGELOG.md new file mode 100644 index 0000000..6bbf1cf --- /dev/null +++ b/packages/transformers/ajsttil/CHANGELOG.md @@ -0,0 +1,25 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + + + + + + +## [UNRELEASED] + + + diff --git a/packages/transformers/ajsttil/LICENSE b/packages/transformers/ajsttil/LICENSE new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/packages/transformers/ajsttil/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/packages/transformers/ajsttil/package.json b/packages/transformers/ajsttil/package.json new file mode 100644 index 0000000..364eec0 --- /dev/null +++ b/packages/transformers/ajsttil/package.json @@ -0,0 +1,44 @@ +{ + "author": "Roberto Pintos López (https://github.com/notaphplover)", + "description": "ajstt intermediate language", + "devDependencies": { + "@cuaklabs/json-schema-types": "workspace:*", + "@jest/globals": "29.6.4", + "@types/glob": "8.1.0", + "@types/node": "18.17.14", + "@typescript-eslint/eslint-plugin": "6.6.0", + "@typescript-eslint/parser": "6.6.0", + "eslint": "8.48.0", + "eslint-import-resolver-typescript": "3.6.0", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-jest": "27.2.3", + "eslint-plugin-prettier": "5.0.0", + "prettier": "3.0.3", + "rimraf": "5.0.1", + "typescript": "5.2.2" + }, + "bugs": { + "url": "https://github.com/cuaklabs/ajstt/issues" + }, + "homepage": "https://github.com/cuaklabs/ajstt#readme", + "license": "See license in \"LICENSE\" file", + "exports": { + ".": "./lib/index.js" + }, + "name": "@cuaklabs/ajsttil", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/cuaklabs/ajstt.git" + }, + "scripts": { + "build": "tsc --build tsconfig.json", + "build:clean": "rimraf lib", + "format": "prettier --write ./src/**/*.ts", + "lint": "eslint --ext ts --ignore-path .gitignore ./src", + "prebuild": "pnpm run build:clean" + }, + "version": "0.1.0" +} diff --git a/packages/transformers/ajsttil/prettier.config.mjs b/packages/transformers/ajsttil/prettier.config.mjs new file mode 100644 index 0000000..6b34292 --- /dev/null +++ b/packages/transformers/ajsttil/prettier.config.mjs @@ -0,0 +1,3 @@ +import config from '@cuaklabs/prettier-config'; + +export default config; diff --git a/packages/transformers/ajsttil/src/index.ts b/packages/transformers/ajsttil/src/index.ts new file mode 100644 index 0000000..aa5fda1 --- /dev/null +++ b/packages/transformers/ajsttil/src/index.ts @@ -0,0 +1,72 @@ +import { JsonValue } from '@cuaklabs/json-schema-types'; + +export enum TypeMetadataKind { + and, + anyType, + arrayType, + booleanType, + integerType, + literalType, + noneType, + nullType, + numberType, + or, + propertyType, + stringType, + xor, +} + +export interface BaseTypeMetadata { + id?: string; + kind: TKind; +} + +export interface OneChildTypeMetadata + extends BaseTypeMetadata { + child: TypeMedatata; +} + +export interface ManyChildrenTypeMetadata< + TKind extends TypeMetadataKind, + TChildren extends TypeMedatata[] = TypeMedatata[], +> extends BaseTypeMetadata { + children: TChildren[]; +} + +export type AndTypeMetadata = ManyChildrenTypeMetadata; +export type AnyTypeMetadata = BaseTypeMetadata; +export type ArrayTypeMetadata = + OneChildTypeMetadata; +export type BooleanTypeMetadata = + BaseTypeMetadata; +export type IntegerTypeMetadata = + BaseTypeMetadata; +export interface LiteralTypeMetadata + extends BaseTypeMetadata { + literal: JsonValue; +} +export type NoneTypeMetadata = BaseTypeMetadata; +export type NullTypeMetadata = BaseTypeMetadata; +export type NumberTypeMetadata = BaseTypeMetadata; +export type OrTypeMetadata = ManyChildrenTypeMetadata; +export interface PropertyTypeMetadata + extends OneChildTypeMetadata { + property: string; +} +export type StringTypeMetadata = BaseTypeMetadata; +export type XorTypeMetadata = ManyChildrenTypeMetadata; + +export type TypeMedatata = + | AndTypeMetadata + | AnyTypeMetadata + | ArrayTypeMetadata + | BooleanTypeMetadata + | IntegerTypeMetadata + | LiteralTypeMetadata + | NoneTypeMetadata + | NullTypeMetadata + | NumberTypeMetadata + | OrTypeMetadata + | PropertyTypeMetadata + | StringTypeMetadata + | XorTypeMetadata; diff --git a/packages/transformers/ajsttil/tsconfig.json b/packages/transformers/ajsttil/tsconfig.json new file mode 100644 index 0000000..4c1edb9 --- /dev/null +++ b/packages/transformers/ajsttil/tsconfig.json @@ -0,0 +1,9 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "@cuaklabs/typescript-config/tsconfig.base.node.cjs.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src" + }, + "include": ["src"] +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b37caf3..54f44b6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - "packages/parser/*" - "packages/tools/*" + - "packages/transformers/*"