diff --git a/.vscode/launch.json b/.vscode/launch.json index 000630c3a..0f3428cb1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -233,20 +233,6 @@ "program": "${workspaceFolder}/node_modules/jest/bin/jest" } }, - { - "type": "node", - "request": "launch", - "name": "jest structured-types", - "program": "${workspaceFolder}/node_modules/.bin/jest", - "cwd": "${workspaceFolder}/misc/structured-types", - "args": ["react-function-component"], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "disableOptimisticBPs": true, - "windows": { - "program": "${workspaceFolder}/node_modules/jest/bin/jest" - } - }, { "type": "node", "request": "launch", @@ -261,20 +247,6 @@ "program": "${workspaceFolder}/node_modules/jest/bin/jest" } }, - { - "type": "node", - "request": "launch", - "name": "jest typescript-config", - "program": "${workspaceFolder}/node_modules/.bin/jest", - "cwd": "${workspaceFolder}/misc/typescript-config", - "args": ["tsconfig-extends"], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "disableOptimisticBPs": true, - "windows": { - "program": "${workspaceFolder}/node_modules/jest/bin/jest" - } - }, { "type": "node", "request": "launch", diff --git a/core/config/src/index.ts b/core/config/src/index.ts index d0e2a5d58..8ddbfddad 100644 --- a/core/config/src/index.ts +++ b/core/config/src/index.ts @@ -63,7 +63,7 @@ export const getConfigurationArg = ( return argv.config; }; -let warningIssued: boolean = false; +let warningIssued = false; export const loadConfig = ( configPath: string, ): ConfigurationResult | undefined => { diff --git a/core/core/package.json b/core/core/package.json index 7987014ab..7d9fa3954 100644 --- a/core/core/package.json +++ b/core/core/package.json @@ -35,7 +35,7 @@ "@babel/types": "^7.12.6", "@component-controls/follow-imports": "^3.14.4", "@component-controls/logger": "^3.10.0", - "@component-controls/typescript-config": "^3.14.4", + "@structured-types/typescript-config": "^3.16.2", "@storybook/csf": "^0.0.1", "deepmerge": "^4.2.2", "escape-html": "^1.0.3", diff --git a/core/core/src/components.ts b/core/core/src/components.ts index 962669653..e09e2dcd9 100644 --- a/core/core/src/components.ts +++ b/core/core/src/components.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { CodeLocation, ImportType, Imports } from './utility'; import { FileInfo } from './files'; import { JestTests } from './jest'; diff --git a/core/core/src/deepMerge.ts b/core/core/src/deepMerge.ts index 16ad6fe82..9d204ccf1 100644 --- a/core/core/src/deepMerge.ts +++ b/core/core/src/deepMerge.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import merge from 'deepmerge'; const concatMerge = (dest: any[], src: any[]) => [...dest, ...src]; diff --git a/core/core/src/modules.ts b/core/core/src/modules.ts index 6f8353bd9..7a8b16450 100644 --- a/core/core/src/modules.ts +++ b/core/core/src/modules.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import * as ts from 'typescript'; import { createHash } from 'crypto'; import { error } from '@component-controls/logger'; -import { getTypescriptConfig } from '@component-controls/typescript-config'; +import { getTypescriptConfig } from '@structured-types/typescript-config'; /** * returns the basename stripped of the extension diff --git a/core/instrument/src/babel/extract-arguments-usage.ts b/core/instrument/src/babel/extract-arguments-usage.ts index f7675b07d..0bad50fe9 100644 --- a/core/instrument/src/babel/extract-arguments-usage.ts +++ b/core/instrument/src/babel/extract-arguments-usage.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { TraverseOptions } from '@babel/traverse'; import { Story, diff --git a/core/instrument/src/babel/extract-attributes.ts b/core/instrument/src/babel/extract-attributes.ts index af7b1f30d..4b1cbb9bf 100644 --- a/core/instrument/src/babel/extract-attributes.ts +++ b/core/instrument/src/babel/extract-attributes.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import generate from '@babel/generator'; interface StoryAttribute { diff --git a/core/instrument/src/babel/extract-function.ts b/core/instrument/src/babel/extract-function.ts index bfe1dd028..daa1002b2 100644 --- a/core/instrument/src/babel/extract-function.ts +++ b/core/instrument/src/babel/extract-function.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Story, Example } from '@component-controls/core'; import traverse, { NodePath } from '@babel/traverse'; import { FunctionDeclaration, VariableDeclarator } from '@babel/types'; diff --git a/core/instrument/src/misc/mdx-exports.ts b/core/instrument/src/misc/mdx-exports.ts index 5b673d0b5..f304336e3 100644 --- a/core/instrument/src/misc/mdx-exports.ts +++ b/core/instrument/src/misc/mdx-exports.ts @@ -3,7 +3,7 @@ import { stringifyObject } from './stringify-object'; const mdxPropertiesExport = ( exportType: MDXExportType, - defObject: object, + defObject: Record, ): string => { const obj = { ...defObject, ...(exportType ? exportType.story : {}) }; return stringifyObject(obj); @@ -24,7 +24,9 @@ export const extractStoryExports = ( if (exportNames.length) { let defaultExportCode = ''; if (exports.default) { - const defaults: any = { MDXPage: new String('MDXContent') }; + const defaults: Record = { + MDXPage: new String('MDXContent'), + }; if (storybookExports) { //docs parameters defaults.parameters = { diff --git a/core/instrument/src/misc/package-info.ts b/core/instrument/src/misc/package-info.ts index b9d1dee06..306725fd7 100644 --- a/core/instrument/src/misc/package-info.ts +++ b/core/instrument/src/misc/package-info.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import * as fs from 'fs'; import * as path from 'path'; import readJson from 'read-package-json'; @@ -31,12 +32,17 @@ const getPackageJson = async ( if (!fileName) { return resolve(null); } - readJson(fileName, null, false, (err: string, data: object) => { - if (err) { - return reject(err); - } - return resolve({ fileName, packageJSON: data }); - }); + readJson( + fileName, + null, + false, + (err: string, data: Record) => { + if (err) { + return reject(err); + } + return resolve({ fileName, packageJSON: data }); + }, + ); }); }; diff --git a/core/instrument/src/misc/stringify-object.ts b/core/instrument/src/misc/stringify-object.ts index d73a177aa..006ad5564 100644 --- a/core/instrument/src/misc/stringify-object.ts +++ b/core/instrument/src/misc/stringify-object.ts @@ -1,10 +1,7 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import jsStringEscape from 'js-string-escape'; -export const stringifyObject = ( - val: any, - sep: string = ' ', - depth: number = 1, -): string => { +export const stringifyObject = (val: any, sep = ' ', depth = 1): string => { switch (typeof val) { case 'string': return `"${jsStringEscape(val)}"`; diff --git a/core/store/src/state/recoil/StateRoot.tsx b/core/store/src/state/recoil/StateRoot.tsx index 62ffda33a..3aa0782de 100644 --- a/core/store/src/state/recoil/StateRoot.tsx +++ b/core/store/src/state/recoil/StateRoot.tsx @@ -32,7 +32,7 @@ export interface StateRootProps { * global options passed from container * those are global parameters as well as decorators */ - options?: object; + options?: Record; } export const StateRoot: FC = ({ diff --git a/examples/structured-types-site/.config/buildtime.js b/examples/structured-types-site/.config/buildtime.js deleted file mode 100644 index 86bd50ec6..000000000 --- a/examples/structured-types-site/.config/buildtime.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - stories: ['../docs/*.mdx'], - siteUrl: 'https://component-controls.com', -}; diff --git a/examples/structured-types-site/.config/runtime.tsx b/examples/structured-types-site/.config/runtime.tsx deleted file mode 100644 index ecc76b13b..000000000 --- a/examples/structured-types-site/.config/runtime.tsx +++ /dev/null @@ -1,75 +0,0 @@ -/** @jsx jsx */ -import { jsx, Box, Text, Theme } from 'theme-ui'; -import { RuntimeConfiguration } from '@component-controls/core'; -import { Link } from '@component-controls/components'; -import { OctofaceIcon } from '@primer/octicons-react'; - -const config: RuntimeConfiguration = { - title: 'structured-types', - description: `api to extract structured type information from typescript types and jsdoc comments.`, - copyright: null, - author: null, - theme: { - fonts: { - heading: - '"Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif;', - }, - tabs: { - '.react-tabs__tab--selected': { - borderBottom: (t: Theme): string => `1px solid ${t?.colors?.primary}`, - color: 'primary', - }, - }, - }, - toolbar: { - right: [ - { - node: ( - - - - github - - - ), - }, - ], - }, - footer: { - left: [ - { - node: ( - - built with - - - component-controls - - - - ), - }, - ], - }, -}; - -export default config; diff --git a/examples/structured-types-site/docs/home-page.mdx b/examples/structured-types-site/docs/home-page.mdx deleted file mode 100644 index 1c2acc35d..000000000 --- a/examples/structured-types-site/docs/home-page.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Home -route: / -type: page -author: atanasster -fullPage: true -keywords: - - typescript - - react - - jsdoc - - type information ---- -import { Box, Heading } from 'theme-ui'; -import { Playground } from '../src/components/Playground.tsx'; - - - - Structured js types - - - api to extract structured type information from typescript types and jsdoc comments - - - - - - - - - diff --git a/examples/structured-types-site/next-env.d.ts b/examples/structured-types-site/next-env.d.ts deleted file mode 100644 index 7b7aa2c77..000000000 --- a/examples/structured-types-site/next-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/examples/structured-types-site/next.config.js b/examples/structured-types-site/next.config.js deleted file mode 100644 index 67156884b..000000000 --- a/examples/structured-types-site/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -const withStories = require('@component-controls/nextjs-plugin/build'); - -module.exports = withStories({ - future: { - webpack5: true, - }, - configPath: '.config', -}); diff --git a/examples/structured-types-site/package.json b/examples/structured-types-site/package.json deleted file mode 100644 index 13a7e3630..000000000 --- a/examples/structured-types-site/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "structured-types-site", - "description": "playground site for structured-types", - "version": "3.14.4", - "private": true, - "license": "MIT", - "scripts": { - "start": "next", - "build-sample": "next build", - "server": "next start" - }, - "repository": { - "type": "git", - "url": "https://github.com/atanasster/gatsby-controls-starter.git" - }, - "dependencies": { - "@component-controls/nextjs-plugin": "^3.14.6", - "@component-controls/structured-types": "^3.14.4", - "@monaco-editor/react": "^4.2.1", - "file-saver": "^2.0.5", - "jsdoc-api": "^7.0.1", - "next": "^10.0.7", - "react": "^17.0.1", - "react-docgen": "^5.4.0", - "react-docgen-typescript": "^2.0.0", - "react-dom": "^17.0.1", - "react-json-tree": "^0.15.0", - "react-split": "^2.0.11", - "ts-json-schema-generator": "^0.94.0", - "typedoc": "^0.21.2", - "typescript": "^4.2.4" - }, - "devDependencies": { - "@types/file-saver": "^2.0.2" - } -} diff --git a/examples/structured-types-site/pages/[doctype].tsx b/examples/structured-types-site/pages/[doctype].tsx deleted file mode 100644 index 6eb7a2edd..000000000 --- a/examples/structured-types-site/pages/[doctype].tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { GetStaticProps, GetStaticPaths } from 'next'; -import { - NextLayout, - getHomePagesPaths, - getDocHomePage, -} from '@component-controls/nextjs-plugin'; - -const DocHome: typeof NextLayout = props => ; - -export const getStaticPaths: GetStaticPaths = async () => { - return { paths: getHomePagesPaths(), fallback: false }; -}; - -export const getStaticProps: GetStaticProps = async ({ params }) => { - const { doctype: basepath } = params as { doctype: string }; - return { props: getDocHomePage(basepath) }; -}; - -export default DocHome; diff --git a/examples/structured-types-site/pages/[doctype]/[...docid].tsx b/examples/structured-types-site/pages/[doctype]/[...docid].tsx deleted file mode 100644 index 4604acb4d..000000000 --- a/examples/structured-types-site/pages/[doctype]/[...docid].tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { GetStaticProps, GetStaticPaths } from 'next'; -import { - NextLayout, - getDocPagesPaths, - getDocPage, -} from '@component-controls/nextjs-plugin'; - -const DocPage: typeof NextLayout = props => ; - -export const getStaticPaths: GetStaticPaths = async () => { - return { paths: getDocPagesPaths(), fallback: false }; -}; - -export const getStaticProps: GetStaticProps = async ({ params }) => { - const { doctype, docid } = params as { doctype: string; docid: string[] }; - return { props: getDocPage(doctype, docid) }; -}; - -export default DocPage; diff --git a/examples/structured-types-site/pages/api/examples/get.ts b/examples/structured-types-site/pages/api/examples/get.ts deleted file mode 100644 index 17bf06e09..000000000 --- a/examples/structured-types-site/pages/api/examples/get.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { examples } from './list'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { name = '', group = '', section = '' } = req.query as { - name?: string; - group?: string; - section?: string; - }; - if (!examples[section]) { - res.status(404).json({ error: `section "${section}" not found` }); - } else { - const Section = examples[section]; - if (typeof Section === 'string' || !Section[group]) { - res.status(404).json({ error: `group "${group}" not found` }); - } else { - const Group = Section[group]; - if (typeof Group === 'string' || !Group[name]) { - res.status(404).json({ error: `example "${name}" not found` }); - } else { - res.status(200).json({ code: Group[name] }); - } - } - } -}; diff --git a/examples/structured-types-site/pages/api/examples/list.ts b/examples/structured-types-site/pages/api/examples/list.ts deleted file mode 100644 index 68a641597..000000000 --- a/examples/structured-types-site/pages/api/examples/list.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import fs from 'fs'; -import path from 'path'; - -export type Examples = { - [name: string]: string | Examples; -}; - -const traverseFolder = (folder: string, examples: Examples): void => { - const files = fs.readdirSync(folder); - - files.forEach(fileName => { - const filePath = path.resolve(folder, fileName); - const stat = fs.statSync(filePath); - if ( - !filePath.includes('.test.') && - !fileName.startsWith('__') && - !fileName.startsWith('fixtures') - ) { - if (stat.isFile()) { - const content = fs.readFileSync(filePath, 'utf8'); - examples[fileName] = content; - } else { - const subFolder: Examples = {}; - traverseFolder(filePath, subFolder); - examples[fileName] = subFolder; - } - } - }); -}; -const getExamples = (): Examples => { - const examplesFolder = path.resolve( - __dirname, - '../../../../', - 'misc/structured-types/test', - ); - const examples = {}; - traverseFolder(examplesFolder, examples); - return examples; -}; - -export const examples = getExamples(); - -const list = Object.keys(examples).map(name => ({ - name, - items: Object.keys(examples[name]) - .filter(key => typeof (examples[name] as Examples)[key] === 'object') - .map(key => ({ - name: key, - items: Object.keys((examples[name] as Examples)[key]).map(name => ({ - name, - })), - })), -})); -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - res.status(200).json(list); -}; diff --git a/examples/structured-types-site/pages/api/jsdoc.ts b/examples/structured-types-site/pages/api/jsdoc.ts deleted file mode 100644 index fafbb9b99..000000000 --- a/examples/structured-types-site/pages/api/jsdoc.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -const jsdoc = require('jsdoc-api'); - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code } = req.query as { code?: string }; - try { - const result = jsdoc.explainSync({ source: code }); - res.status(200).json(result); - } catch (e) { - res.status(200).json({ __error: e.toString() }); - } -}; diff --git a/examples/structured-types-site/pages/api/react-docgen-typescript.ts b/examples/structured-types-site/pages/api/react-docgen-typescript.ts deleted file mode 100644 index fb3ea24ff..000000000 --- a/examples/structured-types-site/pages/api/react-docgen-typescript.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { withCompilerOptions, ParserOptions } from 'react-docgen-typescript'; -import { getTypescriptConfig } from '@component-controls/typescript-config'; -import { createTempFile } from '../../src/api/create-temp-file'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code, tsoptions } = req.query as { - code?: string; - tsoptions?: string; - }; - const options = { - ...(tsoptions ? JSON.parse(tsoptions) : undefined), - }; - const { lang = 'typescript' } = options || {}; - const extension = lang === 'javascript' ? 'jsx' : 'tsx'; - const parserOptions: ParserOptions = { - shouldIncludePropTagMap: true, - shouldExtractLiteralValuesFromEnum: true, - shouldRemoveUndefinedFromOptional: true, - savePropValueAsString: false, - }; - const __errors: any[] = []; - const result = createTempFile( - extension, - fileNames => { - return fileNames.reduce((acc, fileName) => { - const tsOptions = getTypescriptConfig(fileName, options); - const parser = withCompilerOptions(tsOptions || {}, parserOptions); - try { - const docgenInfo = parser.parse(fileName); - return { ...acc, ...docgenInfo }; - } catch (e) { - __errors.push(e.toString()); - return acc; - } - }, {}); - }, - code, - ); - if (__errors.length) { - result.__errors = __errors; - } - res.status(200).json(result); -}; diff --git a/examples/structured-types-site/pages/api/react-docgen.ts b/examples/structured-types-site/pages/api/react-docgen.ts deleted file mode 100644 index 5d2004a27..000000000 --- a/examples/structured-types-site/pages/api/react-docgen.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { parse } from 'react-docgen'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code } = req.query as { code?: string }; - try { - const result = parse(code); - res.status(200).json(result); - } catch (e) { - res.status(200).json({ __error: e.toString() }); - } -}; diff --git a/examples/structured-types-site/pages/api/structured-types.ts b/examples/structured-types-site/pages/api/structured-types.ts deleted file mode 100644 index 92fc487cc..000000000 --- a/examples/structured-types-site/pages/api/structured-types.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import reactPlugin from '@component-controls/structured-types/react'; - -import { parseFiles, DocsOptions } from '@component-controls/structured-types'; -import { createTempFile } from '../../src/api/create-temp-file'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code, config, tsoptions } = req.query as { - code?: string; - config?: string; - tsoptions?: string; - }; - const options: DocsOptions = { - plugins: [reactPlugin], - ...(config ? JSON.parse(config) : undefined), - tsOptions: tsoptions ? JSON.parse(tsoptions) : undefined, - }; - const { lang = 'typescript' } = options?.tsOptions || {}; - const extension = lang === 'javascript' ? 'jsx' : 'tsx'; - const result = createTempFile( - extension, - fileNames => { - return parseFiles(fileNames, options); - }, - code, - ); - res.status(200).json(result); -}; diff --git a/examples/structured-types-site/pages/api/ts-json-schema-generator.ts b/examples/structured-types-site/pages/api/ts-json-schema-generator.ts deleted file mode 100644 index 73905e128..000000000 --- a/examples/structured-types-site/pages/api/ts-json-schema-generator.ts +++ /dev/null @@ -1,69 +0,0 @@ -import * as ts from 'typescript'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { getTypescriptConfig } from '@component-controls/typescript-config'; -import { createGenerator } from 'ts-json-schema-generator'; -import { createTempFile } from '../../src/api/create-temp-file'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code, tsoptions } = req.query as { - code?: string; - tsoptions?: string; - }; - const options = { - ...(tsoptions ? JSON.parse(tsoptions) : undefined), - }; - const { lang = 'typescript' } = options?.tsOptions || {}; - const extension = lang === 'javascript' ? 'jsx' : 'tsx'; - - const __errors: any[] = []; - const host = ts.createCompilerHost({}); - const createHash = host.createHash; - if (createHash) { - const result = createTempFile( - extension, - fileNames => { - return fileNames.reduce((acc, fileName) => { - const tsOptions = getTypescriptConfig(fileName, options, true); - const tsconfig = createHash(Math.random().toString()) + '.json'; - const config = { - path: fileName, - tsconfig, - type: '*', - }; - ts.sys.writeFile( - tsconfig, - JSON.stringify({ - compilerOptions: tsOptions, - }), - ); - try { - try { - const generated = createGenerator(config).createSchema( - config.type, - ); - - return { ...acc, ...generated }; - } catch (e) { - __errors.push(e.toString()); - return acc; - } - } finally { - if (ts.sys.deleteFile) { - ts.sys.deleteFile(tsconfig); - } - } - }, {}); - }, - code, - ); - if (__errors.length) { - result.__errors = __errors; - } - res.status(200).json(result); - } else { - res.status(200).json({ __errors: 'Can not locate host.createHash' }); - } -}; diff --git a/examples/structured-types-site/pages/api/typedoc.ts b/examples/structured-types-site/pages/api/typedoc.ts deleted file mode 100644 index 3df8460ee..000000000 --- a/examples/structured-types-site/pages/api/typedoc.ts +++ /dev/null @@ -1,76 +0,0 @@ -import * as ts from 'typescript'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { getTypescriptConfig } from '@component-controls/typescript-config'; -import { Application, TypeDocReader, TSConfigReader } from 'typedoc'; -import { createTempFile } from '../../src/api/create-temp-file'; - -export default async ( - req: NextApiRequest, - res: NextApiResponse, -): Promise => { - const { code, tsoptions } = req.query as { - code?: string; - tsoptions?: string; - }; - const options = { - ...(tsoptions ? JSON.parse(tsoptions) : undefined), - }; - const { lang = 'typescript' } = options?.tsOptions || {}; - const extension = lang === 'javascript' ? 'jsx' : 'tsx'; - - const app = new Application(); - app.options.addReader(new TypeDocReader()); - app.options.addReader(new TSConfigReader()); - const __errors: any[] = []; - const host = ts.createCompilerHost({}); - const createHash = host.createHash; - if (createHash) { - const result = createTempFile( - extension, - fileNames => { - return fileNames.reduce((acc, fileName) => { - const tsOptions = getTypescriptConfig(fileName, options, true); - const tsconfig = createHash(Math.random().toString()) + '.json'; - - ts.sys.writeFile( - tsconfig, - JSON.stringify({ - compilerOptions: tsOptions, - }), - ); - try { - app.bootstrap({ tsconfig }); - try { - const program = ts.createProgram({ - rootNames: app.options.getFileNames(), - options: app.options.getCompilerOptions(), - projectReferences: app.options.getProjectReferences(), - }); - app.options.setValue( - 'entryPoints', - app.expandInputFiles([fileName]), - ); - const reflection = app.convert(); - const serialized = app.serializer.toObject(reflection, program); - return { ...acc, ...serialized }; - } catch (e) { - __errors.push(e.toString()); - return acc; - } - } finally { - if (ts.sys.deleteFile) { - ts.sys.deleteFile(tsconfig); - } - } - }, {}); - }, - code, - ); - if (__errors.length) { - result.__errors = __errors; - } - res.status(200).json(result); - } else { - res.status(200).json({ __errors: 'Can not locate host.createHash' }); - } -}; diff --git a/examples/structured-types-site/pages/index.tsx b/examples/structured-types-site/pages/index.tsx deleted file mode 100644 index b60865168..000000000 --- a/examples/structured-types-site/pages/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { GetServerSideProps } from 'next'; -import { NextLayout, getIndexPage } from '@component-controls/nextjs-plugin'; - -const HomePage: typeof NextLayout = props => ; - -export const getServerSideProps: GetServerSideProps = async () => { - const { getExamples } = require('../src/utils/examples'); - return { - props: { ...getIndexPage(), userData: { examples: getExamples() } }, - }; -}; -export default HomePage; diff --git a/examples/structured-types-site/src/api/create-temp-file.ts b/examples/structured-types-site/src/api/create-temp-file.ts deleted file mode 100644 index 96865bb4a..000000000 --- a/examples/structured-types-site/src/api/create-temp-file.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as ts from 'typescript'; - -/** - * @param extension file extension - * @param callback callback to do the parsing with temporaty file name - * @param code source code to tbe analyzed - * @returns the result of the callback function - */ -export const createTempFile = ( - extension: 'js' | 'ts' | 'jsx' | 'tsx', - callback: (fileName: string[]) => any, - code?: string, -): any => { - const result = {}; - if (code) { - const host = ts.createCompilerHost({}); - if (host.createHash) { - const name = host.createHash(Math.random().toString()).substring(0, 12); - const fileName = `${name}.${extension}`; - - ts.sys.writeFile(fileName, code); - try { - return callback([fileName]); - } finally { - if (ts.sys.deleteFile) { - ts.sys.deleteFile(fileName); - } - } - } - } - return result; -}; diff --git a/examples/structured-types-site/src/components/Editor.tsx b/examples/structured-types-site/src/components/Editor.tsx deleted file mode 100644 index 59ec972f9..000000000 --- a/examples/structured-types-site/src/components/Editor.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import MonacoEditor from '@monaco-editor/react'; -import { Box, useColorMode } from 'theme-ui'; -import { useOptions } from '../contexts/OptionsContext'; -import { useCodeContext } from '../contexts/CodeContext'; - -export const Editor: React.FC = () => { - const [colorMode] = useColorMode(); - const [tsOptions] = useOptions('tsOptions'); - const { code, updateCode } = useCodeContext(); - const language = - tsOptions.General.lang.value || tsOptions.General.lang.defaultValue; - function handleEditorChange(value: string | undefined) { - updateCode(value || ''); - } - - return ( - - - - ); -}; diff --git a/examples/structured-types-site/src/components/Playground.tsx b/examples/structured-types-site/src/components/Playground.tsx deleted file mode 100644 index ac32b6f58..000000000 --- a/examples/structured-types-site/src/components/Playground.tsx +++ /dev/null @@ -1,140 +0,0 @@ -/** @jsx jsx */ -import { FC, useEffect, useState } from 'react'; -import { jsx, Theme, Box, Heading } from 'theme-ui'; -import { TriangleUpIcon, TriangleDownIcon } from '@primer/octicons-react'; -import Split from 'react-split'; -import { Tabs, TabList, Tab, TabPanel } from '@component-controls/components'; -import { useURLParams } from '@component-controls/blocks'; -import { ExamplesPanel } from './panels/ExamplesPanel'; -import { ConfigPanel } from './panels/ConfigPanel'; -import { ParseConfigPanel } from './panels/ParseConfigPanel'; -import { OptionsProvider } from '../contexts/OptionsContext'; -import { ParsersContextProvider } from '../contexts/ParsersContext'; - -import { CodeContextProvider } from '../contexts/CodeContext'; -import { Editor } from './Editor'; -import { InfoContainer } from './viewers/InfoContainer'; - -export const Playground: FC = () => { - const [sizes, setSizes] = useState([70, 30]); - const [tabIndex, setTabIndex] = useURLParams('tab', 0); - useEffect(() => { - const storeSizes = localStorage.getItem('split-size'); - if (storeSizes) { - setSizes(JSON.parse(storeSizes)); - } - }, []); - - return ( - - - - - { - if (index === prevIndex) { - setTabIndex(0); - } else { - setTabIndex(index); - } - }} - > - - - Playground - - - - - - Examples{' '} - {tabIndex === 1 ? ( - - ) : ( - - )} - - - TS Config{' '} - {tabIndex === 2 ? ( - - ) : ( - - )} - - - Parse Config{' '} - {tabIndex === 3 ? ( - - ) : ( - - )} - - - - - - { - localStorage.setItem('split-size', JSON.stringify(sizes)); - }} - sx={{ - flex: 1, - display: 'flex', - border: (t: Theme) => `1px solid ${t.colors?.muted}`, - '.gutter': { - border: (t: Theme) => `1px solid ${t.colors?.muted}`, - cursor: 'col-resize', - }, - }} - > - - - - - - setTabIndex(0)} /> - - - setTabIndex(0)} /> - - - setTabIndex(0)} /> - - - - - - - ); -}; diff --git a/examples/structured-types-site/src/components/config/CheckboxOption.tsx b/examples/structured-types-site/src/components/config/CheckboxOption.tsx deleted file mode 100644 index 665a3a7e2..000000000 --- a/examples/structured-types-site/src/components/config/CheckboxOption.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/** @jsx jsx */ -import { FC } from 'react'; -import { jsx, Box, Heading, Checkbox, Label } from 'theme-ui'; -import { InfoIcon } from '@primer/octicons-react'; -import { Link, Markdown } from '@component-controls/components'; -import { useUpdateOptions } from '../../contexts/OptionsContext'; -import { OptionsData, OptionsName } from '../../contexts/options'; - -export const CheckboxOption: FC<{ - paramName: OptionsName; - title: string; -} & OptionsData> = ({ - paramName, - title, - help, - value: propValue, - defaultValue, -}) => { - const value = typeof propValue === 'undefined' ? defaultValue : propValue; - const updateOption = useUpdateOptions(paramName, title); - return ( - - - - - - {help} - - - ); -}; diff --git a/examples/structured-types-site/src/components/config/ConfigOption.tsx b/examples/structured-types-site/src/components/config/ConfigOption.tsx deleted file mode 100644 index d24271e2b..000000000 --- a/examples/structured-types-site/src/components/config/ConfigOption.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { FC } from 'react'; -import { OptionsData, OptionsName } from '../../contexts/options'; -import { MemoOption } from './MemoOption'; -import { CheckboxOption } from './CheckboxOption'; -import { SelectOption } from './SelectOption'; - -export const ConfigOption: FC<{ - paramName: OptionsName; - title: string; -} & OptionsData> = props => { - const { value: propValue, options, defaultValue, type } = props; - const value = typeof propValue === 'undefined' ? defaultValue : propValue; - if (Array.isArray(value) || type === 'textarea') { - return ; - } else if (Array.isArray(options) || type === 'select') { - return ; - } - return ; -}; diff --git a/examples/structured-types-site/src/components/config/MemoOption.tsx b/examples/structured-types-site/src/components/config/MemoOption.tsx deleted file mode 100644 index bd5f40eac..000000000 --- a/examples/structured-types-site/src/components/config/MemoOption.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/** @jsx jsx */ -import { FC } from 'react'; -import { jsx, Box, Heading, Textarea } from 'theme-ui'; -import { Markdown } from '@component-controls/components'; -import { useUpdateOptions } from '../../contexts/OptionsContext'; -import { OptionsData, OptionsName } from '../../contexts/options'; - -export const MemoOption: FC<{ - paramName: OptionsName; - title: string; -} & OptionsData> = ({ - paramName, - title, - help, - value: propValue, - defaultValue, -}) => { - const value = typeof propValue === 'undefined' ? defaultValue : propValue; - const updateOption = useUpdateOptions(paramName, title); - return ( - - - {`${title}:`} - -