6 Commits

Author SHA1 Message Date
ed2cd40f59 ## 1.6.4 2024-08-02 13:38:14 -07:00
2eae9ad27d ## 1.6.2 2024-06-13 13:40:21 -07:00
a3321fcb20 ## 1.6.1 2024-05-01 17:17:14 -07:00
3c0b01091a ## 1.6.0 2024-05-01 11:39:49 -07:00
927db6dbd5 ## 1.5.3 2024-01-05 18:48:46 -07:00
929d4e1ccd ## 1.5.1 2023-09-29 19:14:53 -07:00
51 changed files with 5878 additions and 1327 deletions

39
.gitignore vendored
View File

@ -264,3 +264,42 @@ __pycache__/
type-script-helper-1.1.6.vsix type-script-helper-1.1.6.vsix
type-script-helper-1.1.7.vsix type-script-helper-1.1.7.vsix
type-script-helper-1.1.8.vsix type-script-helper-1.1.8.vsix
.kanbn
*.exe
*.pdb
.vscode/helper/**
type-script-helper/src/Card.js
type-script-helper/src/Card.js.map
type-script-helper/src/ColumnsToCardsWebviewViewProvider.js
type-script-helper/src/ColumnsToCardsWebviewViewProvider.js.map
type-script-helper/src/constants.js
type-script-helper/src/constants.js.map
type-script-helper/src/extension.js
type-script-helper/src/extension.js.map
type-script-helper/src/getNonce.js
type-script-helper/src/getNonce.js.map
type-script-helper/src/H2HexColor.js
type-script-helper/src/H2HexColor.js.map
type-script-helper/src/H2NoCheckboxes.js
type-script-helper/src/H2NoCheckboxes.js.map
type-script-helper/src/H2WithCheckboxes.js
type-script-helper/src/H2WithCheckboxes.js.map
type-script-helper/src/kanbanHelper.js
type-script-helper/src/kanbanHelper.js.map
type-script-helper/src/LineNumber.js
type-script-helper/src/LineNumber.js.map
type-script-helper/src/markdownHelper.js
type-script-helper/src/markdownHelper.js.map
type-script-helper/src/PostMessage.js
type-script-helper/src/PostMessage.js.map
type-script-helper/src/promiseLinesHelper.js
type-script-helper/src/promiseLinesHelper.js.map
type-script-helper/src/readOnlyLinesHelper.js
type-script-helper/src/readOnlyLinesHelper.js.map
type-script-helper/src/replaceLinesHelper.js
type-script-helper/src/replaceLinesHelper.js.map
type-script-helper/src/WebViewPanel.js
type-script-helper/src/WebViewPanel.js.map

24
.vscode/settings.json vendored
View File

@ -1,5 +1,23 @@
{ {
"cSpell.words": [ "[markdown]": {
"VSIX" "editor.wordWrap": "off"
] },
"cSpell.words": [
"initialise",
"Kanban",
"VSIX"
],
"files.eol": "\n",
"files.exclude": {
"**/dist": false,
"**/node_modules": true,
"**/out": false
},
"files.watcherExclude": {
"**/node_modules": true
},
"search.exclude": {
"**/dist": true,
"**/out": true
}
} }

BIN
Application.evtx Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,6 @@
out .vscode-test/
.vscode/helper/**
*.vsix
dist dist
node_modules node_modules
.vscode-test/ out
*.vsix

View File

@ -14,22 +14,16 @@
], ],
"outFiles": [ "outFiles": [
"${workspaceFolder}/dist/**/*.js" "${workspaceFolder}/dist/**/*.js"
], ]
"preLaunchTask": "${defaultBuildTask}"
}, },
{ {
"name": "Extension Tests", "type": "node",
"type": "extensionHost",
"request": "launch", "request": "launch",
"args": [ "name": "Launch Program",
"--extensionDevelopmentPath=${workspaceFolder}", "program": "${workspaceFolder}/src/extension.ts",
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
],
"outFiles": [ "outFiles": [
"${workspaceFolder}/out/**/*.js", "${workspaceFolder}/out/**/*.js"
"${workspaceFolder}/dist/**/*.js" ]
],
"preLaunchTask": "tasks: watch-tests"
} }
] ]
} }

11
type-script-helper/.vscode/mklink.md vendored Normal file
View File

@ -0,0 +1,11 @@
---
type: "note"
created: "2023-10-20T03:53:13.742Z"
updated: "2023-10-20T04:00:37.259Z"
---
# mklink
```bash
mklink /J "L:\Git\YO-VSCode\type-script-helper\net8.0\win-x64\publish" "L:\DevOps\Mesa_FI\File-Folder-Helper\bin\Release\net8.0\win-x64\publish"
```

View File

@ -1,13 +1,23 @@
// Place your settings in this file to overwrite default and user settings.
{ {
"files.exclude": { "[markdown]": {
"out": false, // set this to true to hide the "out" folder with the compiled JS files "editor.wordWrap": "off"
"dist": false // set this to true to hide the "dist" folder with the compiled JS files },
}, "cSpell.words": [
"search.exclude": { "initialise",
"out": true, // set this to false to include "out" folder in search results "Kanban",
"dist": true // set this to false to include "dist" folder in search results "VSIX"
}, ],
// Turn off tsc task auto detection since we have the necessary tasks as npm scripts "files.eol": "\n",
"typescript.tsc.autoDetect": "off" "files.exclude": {
"**/dist": false,
"**/node_modules": true,
"**/out": false
},
"files.watcherExclude": {
"**/node_modules": true
},
"search.exclude": {
"**/dist": true,
"**/out": true
}
} }

View File

@ -1,40 +0,0 @@
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "watch",
"problemMatcher": "$ts-webpack-watch",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "npm",
"script": "watch-tests",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": "build"
},
{
"label": "tasks: watch-tests",
"dependsOn": [
"npm: watch",
"npm: watch-tests"
],
"problemMatcher": []
}
]
}

View File

@ -1,13 +1,14 @@
.vscode/**
.vscode-test/**
out/**
node_modules/**
src/**
.gitignore .gitignore
.vscode-test/**
.vscode/**
.yarnrc .yarnrc
webpack.config.js
vsc-extension-quickstart.md
**/tsconfig.json
**/.eslintrc.json **/.eslintrc.json
**/*.map **/*.map
**/*.ts **/*.ts
**/tsconfig.json
build/**
node_modules/**
src/**
webviews/**
vsc-extension-quickstart.md
webpack.config.js

View File

@ -1,9 +0,0 @@
# Change Log
All notable changes to the "type-script-helper" extension will be documented in this file.
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
## [Unreleased]
- Initial release

View File

@ -1,3 +1,11 @@
---
type: "note"
created: "2022-03-10T21:18:17.054Z"
updated: "2022-03-10T21:18:17.054Z"
---
# LICENSE
Copyright (c) Twitter Inc Copyright (c) Twitter Inc
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy

View File

@ -1,3 +1,9 @@
---
type: "read-me"
created: "2023-09-30T01:47:18.241Z"
updated: "2023-09-30T01:47:18.242Z"
---
# type-script-helper README # type-script-helper README
## Features ## Features
@ -16,10 +22,10 @@ yo code
# ? What's the name of your extension? HelloWorld # ? What's the name of your extension? HelloWorld
### Press <Enter> to choose default for all options below ### ### Press <Enter> to choose default for all options below ###
# ? What's the identifier of your extension? helloworld # ? What's the identifier of your extension? hello-world
# ? What's the description of your extension? LEAVE BLANK # ? What's the description of your extension? LEAVE BLANK
# ? Initialize a git repository? Yes # ? Initialize a git repository? Yes
# ? Bundle the source code with webpack? No # ? Bundle the source code with webpack? No (should be yes?)
# ? Which package manager to use? npm # ? Which package manager to use? npm
# ? Do you want to open the new folder with Visual Studio Code? Open with `code` # ? Do you want to open the new folder with Visual Studio Code? Open with `code`
@ -104,3 +110,43 @@ None
----------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------
- Transform to Param Case - Transform to Param Case
## 1.5.1
-----------------------------------------------------------------------------------------------------------
- columns-to-cards-webview-view-provider
- file-folder-helper-exe
- clickable list
## 1.5.2
-----------------------------------------------------------------------------------------------------------
- file-folder-helper-exe net8.0
## 1.5.3
-----------------------------------------------------------------------------------------------------------
- Updated File-Folder-Helper ccea8de8cf49343dd4190a77ac755d233bb4e528
## 1.6.0
-----------------------------------------------------------------------------------------------------------
- Updated File-Folder-Helper 4e3f06bb44b7e85ba40a5e589e6ca871cbdbfb3e
## 1.6.1
-----------------------------------------------------------------------------------------------------------
- Updated File-Folder-Helper 299aa19d538bcfd5e06e4743a5a05f6d62960a80
- code --install-extension D:\Tmp\phares\type-script-helper-1.6.1.vsix
- code-insiders --install-extension D:\Tmp\phares\type-script-helper-1.6.1.vsix
## 1.6.2
-----------------------------------------------------------------------------------------------------------
- Updated File-Folder-Helper 47e6b85c218f994216fb35d44906850a790c36d0
- Open with Text Editor Kanban
## 1.6.4 Fri Aug 02 2024 13:07:24 GMT-0700 (Mountain Standard Time)
-----------------------------------------------------------------------------------------------------------
- Wrap directory in quotes

View File

@ -4,24 +4,21 @@
const path = require('path'); const path = require('path');
//@ts-check /**@type {import('webpack').Configuration}*/
/** @typedef {import('webpack').Configuration} WebpackConfig **/ const config = {
target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/
/** @type WebpackConfig */
const extensionConfig = {
target: 'node', // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/
mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/
output: { output: {
// the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/
path: path.resolve(__dirname, 'dist'), path: path.resolve(__dirname, '..', 'dist'),
filename: 'extension.js', filename: 'extension.js',
libraryTarget: 'commonjs2' libraryTarget: 'commonjs2'
}, },
devtool: 'nosources-source-map',
externals: { externals: {
vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/
// modules added here also need to be added in the .vscodeignore file
}, },
resolve: { resolve: {
// support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader
@ -39,10 +36,6 @@ const extensionConfig = {
] ]
} }
] ]
}, }
devtool: 'nosources-source-map',
infrastructureLogging: {
level: "log", // enables logging required for problem matchers
},
}; };
module.exports = [ extensionConfig ]; module.exports = config;

View File

@ -0,0 +1 @@
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 4.48h-.71L2 3.43l.71-.7.69.68L4.81 2l.71.71-1.77 1.77zM6.99 3h8v1h-8V3zm0 3h8v1h-8V6zm8 3h-8v1h8V9zm-8 3h8v1h-8v-1zM3.04 7.48h.71l1.77-1.77-.71-.7L3.4 6.42l-.69-.69-.71.71 1.04 1.04zm.71 3.01h-.71L2 9.45l.71-.71.69.69 1.41-1.42.71.71-1.77 1.77zm-.71 3.01h.71l1.77-1.77-.71-.71-1.41 1.42-.69-.69-.71.7 1.04 1.05z"/></svg>

After

Width:  |  Height:  |  Size: 479 B

View File

@ -0,0 +1,7 @@
// This script will be run within the webview itself
// It cannot access the main VS Code APIs directly.
(function () {
const vscode = acquireVsCodeApi();
console.log("hello there from javascript");
})();

View File

@ -0,0 +1,30 @@
html {
box-sizing: border-box;
font-size: 13px;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body,
h1,
h2,
h3,
h4,
h5,
h6,
p,
ol,
ul {
margin: 0;
padding: 0;
font-weight: normal;
}
img {
max-width: 100%;
height: auto;
}

View File

@ -0,0 +1,91 @@
:root {
--container-paddding: 20px;
--input-padding-vertical: 6px;
--input-padding-horizontal: 4px;
--input-margin-vertical: 4px;
--input-margin-horizontal: 0;
}
body {
padding: 0 var(--container-paddding);
color: var(--vscode-foreground);
font-size: var(--vscode-font-size);
font-weight: var(--vscode-font-weight);
font-family: var(--vscode-font-family);
background-color: var(--vscode-editor-background);
}
ol,
ul {
padding-left: var(--container-paddding);
}
body > *,
form > * {
margin-block-start: var(--input-margin-vertical);
margin-block-end: var(--input-margin-vertical);
}
*:focus {
outline-color: var(--vscode-focusBorder) !important;
}
a {
color: var(--vscode-textLink-foreground);
}
a:hover,
a:active {
color: var(--vscode-textLink-activeForeground);
}
code {
font-size: var(--vscode-editor-font-size);
font-family: var(--vscode-editor-font-family);
}
button {
border: none;
padding: var(--input-padding-vertical) var(--input-padding-horizontal);
width: 100%;
text-align: center;
outline: 1px solid transparent;
outline-offset: 2px !important;
color: var(--vscode-button-foreground);
background: var(--vscode-button-background);
}
button:hover {
cursor: pointer;
background: var(--vscode-button-hoverBackground);
}
button:focus {
outline-color: var(--vscode-focusBorder);
}
button.secondary {
color: var(--vscode-button-secondaryForeground);
background: var(--vscode-button-secondaryBackground);
}
button.secondary:hover {
background: var(--vscode-button-secondaryHoverBackground);
}
input:not([type="checkbox"]),
textarea {
display: block;
width: 100%;
border: none;
font-family: var(--vscode-font-family);
padding: var(--input-padding-vertical) var(--input-padding-horizontal);
color: var(--vscode-input-foreground);
outline-color: var(--vscode-input-border);
background-color: var(--vscode-input-background);
}
input::placeholder,
textarea::placeholder {
color: var(--vscode-input-placeholderForeground);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,158 +1,263 @@
{ {
"name": "type-script-helper", "activationEvents": [],
"displayName": "Type Script Helper",
"description": "Helper for VS Code in TypeScript",
"publisher": "IFX",
"repository": "https://github.com/mikepharesjr/YO-VSCode/tree/master/type-script-helper",
"version": "1.4.4",
"engines": {
"vscode": "^1.79.0"
},
"categories": [ "categories": [
"Other" "Other"
], ],
"activationEvents": [],
"main": "./dist/extension.js",
"contributes": { "contributes": {
"configuration": {
"type": "object",
"title": "Type Script Helper Configuration",
"properties": {
"fileTemplates.author": {
"type": [
"string",
"null"
],
"default": null,
"description": "Value to use to replace #{author} variable."
},
"fileTemplates.company": {
"type": [
"string",
"null"
],
"default": null,
"description": "Value to use to replace #{company} variable."
}
}
},
"commands": [ "commands": [
{ {
"category": "Helper",
"command": "open-in-new-window.open", "command": "open-in-new-window.open",
"title": "Open in New Window" "title": "Open in New Window"
}, },
{ {
"category": "Helper",
"command": "promiseLinesHelper.codeGeneratorQuickPick", "command": "promiseLinesHelper.codeGeneratorQuickPick",
"title": "Code Generator - Quick Pick" "title": "Code Generator - Quick Pick"
}, },
{ {
"category": "Helper",
"command": "promiseLinesHelper.insertDateTime", "command": "promiseLinesHelper.insertDateTime",
"title": "Insert DateTime" "title": "Insert DateTime"
}, },
{ {
"command": "promiseLinesHelper.transformToPopperCase", "category": "Helper",
"title": "Transform to Popper Case"
},
{
"command": "promiseLinesHelper.transformToParamCase", "command": "promiseLinesHelper.transformToParamCase",
"title": "Transform to Param Case" "title": "Transform to Param Case"
}, },
{ {
"category": "Helper",
"command": "promiseLinesHelper.transformToPopperCase",
"title": "Transform to Popper Case"
},
{
"category": "Helper",
"command": "readOnlyLinesHelper.searchGoogle", "command": "readOnlyLinesHelper.searchGoogle",
"title": "Search Google" "title": "Search Google"
}, },
{ {
"category": "Kanban",
"command": "kanban.refreshBoth",
"title": "Refresh Kanban Both"
},
{
"category": "Kanban",
"command": "kanban.refreshSidebar",
"title": "Refresh Kanban Sidebar"
},
{
"category": "Kanban",
"command": "kanban.refreshWebView",
"title": "Refresh Kanban WebView"
},
{
"category": "Kanban",
"command": "kanban.debugReload",
"title": "Debug Reload Kanban"
},
{
"category": "Kanban",
"command": "kanban.openWithTextEditor",
"title": "Open with Text Editor Kanban"
},
{
"category": "Markdown",
"command": "markdown.newMarkdownFile",
"title": "New Markdown File"
},
{
"category": "Quick Fix",
"command": "replaceLinesHelper.quickFixCamelCaseProperties",
"title": "Camel Case Properties"
},
{
"category": "Quick Fix",
"command": "replaceLinesHelper.quickFixCS0108",
"title": " CS0108 (Data Annotations)"
},
{
"category": "Quick Fix",
"command": "replaceLinesHelper.quickFixInstanceFieldToCalisthenics",
"title": "Instance Field to Calisthenics"
},
{
"category": "Quick Fix",
"command": "replaceLinesHelper.quickFixProperCaseProperties",
"title": "Proper Case Properties"
},
{
"category": "Quick Fix",
"command": "replaceLinesHelper.quickFixPublic",
"title": "Public (Expression Body)"
},
{
"category": "Replace",
"command": "replaceLinesHelper.addCSharpComment", "command": "replaceLinesHelper.addCSharpComment",
"title": "Add C# Comment" "title": "Add C# Comment"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.addVBComment", "command": "replaceLinesHelper.addVBComment",
"title": "Add VB Comment" "title": "Add VB Comment"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.convertToRegularExpression", "command": "replaceLinesHelper.convertToRegularExpression",
"title": "Convert to Regular Expression" "title": "Convert to Regular Expression"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.cutEachLine", "command": "replaceLinesHelper.cutEachLine",
"title": "Cut each line after |||" "title": "Cut each line after |||"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.distinctLines", "command": "replaceLinesHelper.distinctLines",
"title": "Distinct Lines" "title": "Distinct Lines"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.expandSql", "command": "replaceLinesHelper.expandSql",
"title": "Expand Sql" "title": "Expand Sql"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.listToListFamily", "command": "replaceLinesHelper.listToListFamily",
"title": "List to list family (Kristy, Mike ...)" "title": "List to list family (Kristy, Mike ...)"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.listToListWrappedComma", "command": "replaceLinesHelper.listToListWrappedComma",
"title": "List to list wrapped comma" "title": "List to list wrapped comma"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.prettySql", "command": "replaceLinesHelper.prettySql",
"title": "Pretty Sql" "title": "Pretty Sql"
}, },
{ {
"command": "replaceLinesHelper.quickFixCamelCaseProperties", "category": "Replace",
"title": "Quick Fix - Camel Case Properties"
},
{
"command": "replaceLinesHelper.quickFixCS0108",
"title": "Quick Fix - CS0108 (Data Annotations)"
},
{
"command": "replaceLinesHelper.quickFixInstanceFieldToCalisthenics",
"title": "Quick Fix - Instance Field to Calisthenics"
},
{
"command": "replaceLinesHelper.quickFixProperCaseProperties",
"title": "Quick Fix - Proper Case Properties"
},
{
"command": "replaceLinesHelper.quickFixPublic",
"title": "Quick Fix - Public (Expression Body)"
},
{
"command": "replaceLinesHelper.removeComment", "command": "replaceLinesHelper.removeComment",
"title": "Remove comment" "title": "Remove comment"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.sortLength", "command": "replaceLinesHelper.sortLength",
"title": "Sort by Length" "title": "Sort by Length"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.sortNormal", "command": "replaceLinesHelper.sortNormal",
"title": "My Sort lines (ascending, case sensitive)" "title": "My Sort lines (ascending, case sensitive)"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.splitBySpaceReverseJoinSort", "command": "replaceLinesHelper.splitBySpaceReverseJoinSort",
"title": "Split by Space Reverse Join Sort lines (ascending, case sensitive)" "title": "Split by Space Reverse Join Sort lines (ascending, case sensitive)"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.unwrapSql", "command": "replaceLinesHelper.unwrapSql",
"title": "Un-wrap Sql" "title": "Un-wrap Sql"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.wrapSqlCSharp", "command": "replaceLinesHelper.wrapSqlCSharp",
"title": "Wrap Sql for C#" "title": "Wrap Sql for C#"
}, },
{ {
"category": "Replace",
"command": "replaceLinesHelper.wrapSqlVB", "command": "replaceLinesHelper.wrapSqlVB",
"title": "Wrap Sql for VB" "title": "Wrap Sql for VB"
},
{
"category": "WebView",
"command": "webView.webView",
"title": "Web View"
} }
] ],
}, "views": {
"scripts": { "columns-to-cards-webview-view-provider-view": [
"vscode:prepublish": "npm run package", {
"compile": "webpack", "contextualTitle": "Kanban",
"watch": "webpack --watch", "icon": "media/checklist.svg",
"package": "webpack --mode production --devtool hidden-source-map", "id": "columns-to-cards-webview-view-provider",
"compile-tests": "tsc -p . --outDir out", "name": "Kanban",
"watch-tests": "tsc -p . -w --outDir out", "type": "webview"
"pretest": "npm run compile-tests && npm run compile && npm run lint", }
"lint": "eslint src --ext ts", ]
"test": "node ./out/test/runTest.js" },
}, "viewsContainers": {
"devDependencies": { "activitybar": [
"@types/glob": "^8.1.0", {
"@types/mocha": "^10.0.1", "icon": "media/checklist.svg",
"@types/node": "20.2.5", "id": "columns-to-cards-webview-view-provider-view",
"@types/vscode": "^1.79.0", "title": "Kanban"
"@typescript-eslint/eslint-plugin": "^5.59.8", }
"@typescript-eslint/parser": "^5.59.8", ]
"@vscode/test-electron": "^2.3.2", }
"eslint": "^8.41.0",
"glob": "^8.1.0",
"mocha": "^10.2.0",
"ts-loader": "^9.4.3",
"typescript": "^5.1.3",
"webpack": "^5.85.0",
"webpack-cli": "^5.1.1"
}, },
"dependencies": { "dependencies": {
"@vscode/vsce": "^2.19.0" "@vscode/vsce": "^2.19.0",
} "polka": "^0.5.2"
},
"description": "Helper for VS Code in TypeScript",
"devDependencies": {
"@nodelib/fs.stat": "^3.0.0",
"@types/mocha": "^10.0.6",
"@types/node": "^18.11.0",
"@types/vscode": "^1.63.0",
"@typescript-eslint/eslint-plugin": "^5.40.0",
"@typescript-eslint/parser": "^5.40.0",
"@vscode/test-electron": "^2.4.0",
"@vscode/test-web": "*",
"concurrently": "^8.2.2",
"eslint": "^8.25.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"glob": "^10.4.1",
"mocha": "^10.4.0",
"prettier": "^2.7.1",
"ts-loader": "^9.4.1",
"typescript": "^4.8.4",
"webpack": "^5.74.0",
"webpack-cli": "^4.10.0"
},
"displayName": "Type Script Helper",
"engines": {
"vscode": "^1.79.0"
},
"main": "./dist/extension.js",
"name": "type-script-helper",
"publisher": "IFX",
"repository": "https://github.com/mikepharesjr/YO-VSCode/tree/master/type-script-helper",
"scripts": {
"tsc-build": "tsc",
"vscode:publish": "node node_modules/@vscode/vsce/vsce package",
"webpack": "webpack --config ./build/node-extension.webpack.config.js",
"watch": "concurrently \"rollup -c -w\" \"webpack --watch --config ./build/node-extension.webpack.config.js\""
},
"version": "1.6.4"
} }

View File

@ -0,0 +1,68 @@
import svelte from "rollup-plugin-svelte";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import { terser } from "rollup-plugin-terser";
import sveltePreprocess from "svelte-preprocess";
import typescript from "@rollup/plugin-typescript";
import path from "path";
import fs from "fs";
const production = !process.env.ROLLUP_WATCH;
export default fs
.readdirSync(path.join(__dirname, "webviews", "pages"))
.map((input) => {
const name = input.split(".")[0];
return {
input: "webviews/pages/" + input,
output: {
sourcemap: true,
format: "iife",
name: "app",
file: "out/compiled/" + name + ".js",
},
plugins: [
svelte({
// enable run-time checks when not in production
dev: !production,
// we'll extract any component CSS out into
// a separate file - better for performance
css: (css) => {
css.write(name + ".css");
},
preprocess: sveltePreprocess(),
}),
// If you have external dependencies installed from
// npm, you'll most likely need these plugins. In
// some cases you'll need additional configuration -
// consult the documentation for details:
// https://github.com/rollup/plugins/tree/master/packages/commonjs
resolve({
browser: true,
dedupe: ["svelte"],
}),
commonjs(),
typescript({
tsconfig: "webviews/tsconfig.json",
sourceMap: !production,
inlineSources: !production,
}),
// In dev mode, call `npm run start` once
// the bundle has been generated
// !production && serve(),
// Watch the `public` directory and refresh the
// browser on changes when not in production
// !production && livereload("public"),
// If we're building for production (npm run build
// instead of npm run dev), minify
production && terser(),
],
watch: {
clearScreen: false,
},
};
});

View File

@ -0,0 +1,22 @@
import { H2HexColor } from "./H2HexColor";
import { LineNumber } from "./LineNumber";
import { H2NoCheckboxes } from "./H2NoCheckboxes";
import { H2WithCheckboxes } from "./H2WithCheckboxes";
export type Card = {
Assignees: Array<string>;
CreationDateTime: Date;
Directory: string;
Extension: string;
File: string;
FileName: string;
FileNameWithoutExtension: string;
H1: string;
H2HexColorCollection: Array<H2HexColor>;
H2NoCheckboxesCollection: Array<H2NoCheckboxes>;
H2WithCheckboxesCollection: Array<H2WithCheckboxes>;
LastWriteDateTime: Date;
LineNumber: LineNumber;
RequestedDateTime: string;
Type: string;
};

View File

@ -0,0 +1,188 @@
import { Card } from "./Card";
import { readFile } from "fs";
import * as vscode from "vscode";
import { getNonce } from "./getNonce";
import { PostMessage } from "./PostMessage";
import { apiBaseUrl, key } from "./constants";
import { ExecException, exec } from 'child_process';
export function refreshSidebarLogic(): any {
vscode.commands.executeCommand("workbench.action.closeSidebar").then(_ => {
vscode.commands.executeCommand("workbench.view.extension.columns-to-cards-sidebar-view");
});
}
function columnsToCardsRead(webviewView: vscode.WebviewView, columnsToCardsUri: vscode.Uri, err: NodeJS.ErrnoException | null, data: string | Buffer) {
if (err)
vscode.window.showInformationMessage(`<${columnsToCardsUri.fsPath}> doesn't exist! ${err.message}`);
const columnsToCards: Record<string, Array<Card>> = {};
const jsonObject: any = JSON.parse(data.toString('utf8'));
for (const property in jsonObject) {
columnsToCards[property] = jsonObject[property];
}
const postMessage: PostMessage = { type: "columns-to-cards", value: columnsToCards };
webviewView.webview.postMessage(postMessage);
}
function execCallback(webviewView: vscode.WebviewView, destination: vscode.Uri, error: ExecException | null, stdout: string, stderr: string) {
if (error) {
vscode.window.showInformationMessage(error.message);
return;
}
if (stderr) {
vscode.window.showInformationMessage(stderr);
return;
}
console.log(`stdout: ${stdout}`);
const columnsToCards = vscode.Uri.joinPath(destination, "columnsToCards.json");
readFile(columnsToCards.fsPath, (err, data) =>
columnsToCardsRead(webviewView, columnsToCards, err, data));
};
async function postColumnsToCards(extensionUri: vscode.Uri, webviewView: vscode.WebviewView) {
if (vscode.workspace.workspaceFolders === undefined)
vscode.window.showInformationMessage("Open workspace first!");
else {
const workspaceFoldersZero = vscode.workspace.workspaceFolders[0].uri;
const destination: vscode.Uri = vscode.Uri.joinPath(workspaceFoldersZero, ".vscode", "helper");
const fileFolderHelper: vscode.Uri = vscode.Uri.joinPath(extensionUri, "net8.0", "win-x64", "publish", "File-Folder-Helper.exe");
const command: string = `${fileFolderHelper.fsPath} s M "${workspaceFoldersZero.fsPath}" -d "${destination.fsPath}"`;
exec(command, (error, stdout, stderr) =>
execCallback(webviewView, destination, error, stdout, stderr));
}
}
function getToken(workspaceState: vscode.Memento, webviewView: vscode.WebviewView) {
webviewView.webview.postMessage({
type: "token",
value: workspaceState.get(key),
});
}
function authenticate(workspaceState: vscode.Memento, webviewView: vscode.WebviewView) {
webviewView.webview.postMessage({
type: "token",
value: workspaceState.get(key),
});
}
function logout(workspaceState: vscode.Memento) {
workspaceState.update(key, "");
}
async function openCard(value: any) {
if (vscode.workspace.workspaceFolders === undefined)
vscode.window.showInformationMessage("Open workspace first!");
else {
if (!value.File)
vscode.window.showInformationMessage("File wasn't passed!");
else {
const textDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(value.File);
vscode.window.showTextDocument(textDocument);
}
}
}
export class ColumnsToCardsWebviewViewProvider implements vscode.WebviewViewProvider {
_view?: vscode.WebviewView;
constructor(private readonly _extensionContext: vscode.ExtensionContext) {
}
public revive(panel: vscode.WebviewView) {
this._view = panel;
}
public resolveWebviewView(webviewView: vscode.WebviewView) {
this._view = webviewView;
webviewView.webview.options = {
// Allow scripts in the webview
enableScripts: true,
localResourceRoots: [this._extensionContext.extensionUri],
};
webviewView.webview.html = this._getHtmlForWebview(webviewView.webview);
webviewView.webview.onDidReceiveMessage(async (postMessage: PostMessage) => {
switch (postMessage.type) {
case "logout":
logout(this._extensionContext.workspaceState);
break;
case "authenticate":
authenticate(this._extensionContext.workspaceState, webviewView);
break;
case "get-token":
getToken(this._extensionContext.workspaceState, webviewView);
break;
case "get-columns-to-cards":
postColumnsToCards(this._extensionContext.extensionUri, webviewView);
break;
case "open-card":
openCard(postMessage.value);
break;
case "on-info":
if (!postMessage.value)
return;
vscode.window.showInformationMessage(postMessage.value);
break;
case "on-error":
if (!postMessage.value)
return;
vscode.window.showErrorMessage(postMessage.value);
break;
default:
vscode.window.showErrorMessage(postMessage.type);
break;
}
});
}
private _getHtmlForWebview(webview: vscode.Webview) {
const styleResetUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "reset.css")
);
const styleVSCodeUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "vscode.css")
);
const scriptUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/ColumnsToCards.js")
);
const styleMainUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/ColumnsToCards.css")
);
// Use a nonce to only allow a specific script to be run.
const nonce = getNonce();
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--
Use a content security policy to only allow loading images from https or from our extension directory,
and only allow scripts that have a specific nonce.
-->
<meta http-equiv="Content-Security-Policy"
content="img-src https: data:;
style-src 'unsafe-inline' ${webview.cspSource};
script-src 'nonce-${nonce}';">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="${styleResetUri}" rel="stylesheet">
<link href="${styleVSCodeUri}" rel="stylesheet">
<link href="${styleMainUri}" rel="stylesheet">
<script nonce="${nonce}">
const acquiredVsCodeApi = acquireVsCodeApi();
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
</script>
</head>
<body>
<script nonce="${nonce}" src="${scriptUri}"></script>
</body>
</html>`;
}
}
export const refreshSidebar = () => refreshSidebarLogic();

View File

@ -0,0 +1,4 @@
export type H2HexColor = {
H2: string;
HexColor: string;
};

View File

@ -0,0 +1,5 @@
export type H2NoCheckboxes = {
H2: string;
Lines: Array<string>;
};

View File

@ -0,0 +1,7 @@
export type H2WithCheckboxes = {
Completed: number;
H2: string;
NotCompleted: number;
Total: number;
};

View File

@ -0,0 +1,9 @@
export type LineNumber = {
Created: number;
H1: number;
FrontMatterYamlEnd: number;
Status: number;
Type: number;
Updated: number;
};

View File

@ -0,0 +1,5 @@
export type PostMessage = {
type: string;
value: any;
};

View File

@ -0,0 +1,166 @@
import * as vscode from "vscode";
import { getNonce } from "./getNonce";
import { apiBaseUrl } from "./constants";
import { PostMessage } from "./PostMessage";
export function refreshWebView(extensionContext: vscode.ExtensionContext): any {
WebViewPanel.kill();
WebViewPanel.createOrShow(extensionContext);
}
export class WebViewPanel {
/**
* Track the currently panel. Only allow a single panel to exist at a time.
*/
public static currentPanel: WebViewPanel | undefined;
public static readonly viewType = "web-view-panel";
private _disposables: vscode.Disposable[] = [];
public static createOrShow(extensionContext: vscode.ExtensionContext) {
const column = vscode.window.activeTextEditor
? vscode.window.activeTextEditor.viewColumn
: undefined;
// If we already have a panel, show it.
if (WebViewPanel.currentPanel) {
WebViewPanel.currentPanel._panel.reveal(column);
WebViewPanel.currentPanel._update();
return;
}
// Otherwise, create a new panel.
const panel = vscode.window.createWebviewPanel(
WebViewPanel.viewType,
"Web-View-Panel",
column || vscode.ViewColumn.One,
{
// Enable javascript in the webview
enableScripts: true,
// And restrict the webview to only loading content from our extension's `media` directory.
localResourceRoots: [
vscode.Uri.joinPath(extensionContext.extensionUri, "media"),
vscode.Uri.joinPath(extensionContext.extensionUri, "out/compiled"),
],
}
);
WebViewPanel.currentPanel = new WebViewPanel(panel, extensionContext);
}
public static kill() {
WebViewPanel.currentPanel?.dispose();
WebViewPanel.currentPanel = undefined;
}
public static revive(panel: vscode.WebviewPanel, extensionContext: vscode.ExtensionContext) {
WebViewPanel.currentPanel = new WebViewPanel(panel, extensionContext);
}
private constructor(private readonly _panel: vscode.WebviewPanel, private readonly _extensionContext: vscode.ExtensionContext) {
// Set the webview's initial html content
this._update();
// Listen for when the panel is disposed
// This happens when the user closes the panel or when the panel is closed programmatically
this._panel.onDidDispose(() => this.dispose(), null, this._disposables);
// // Handle messages from the webview
// this._panel.webview.onDidReceiveMessage(
// (message) => {
// switch (message.command) {
// case "alert":
// vscode.window.showErrorMessage(message.text);
// return;
// }
// },
// null,
// this._disposables
// );
}
public dispose() {
WebViewPanel.currentPanel = undefined;
// Clean up our resources
this._panel.dispose();
while (this._disposables.length) {
const x = this._disposables.pop();
if (x) {
x.dispose();
}
}
}
private async _update() {
const webview = this._panel.webview;
this._panel.webview.html = this._getHtmlForWebview(webview);
webview.onDidReceiveMessage(async (postMessage: PostMessage) => {
switch (postMessage.type) {
case "on-info":
if (!postMessage.value)
return;
vscode.window.showInformationMessage(postMessage.value);
break;
case "on-error":
if (!postMessage.value)
return;
vscode.window.showErrorMessage(postMessage.value);
break;
default:
vscode.window.showErrorMessage(postMessage.type);
break;
}
});
}
private _getHtmlForWebview(webview: vscode.Webview) {
const styleResetUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "reset.css")
);
const styleVSCodeUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "media", "vscode.css")
);
const scriptUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/DisplayDate.js")
);
const styleMainUri = webview.asWebviewUri(
vscode.Uri.joinPath(this._extensionContext.extensionUri, "out", "compiled/DisplayDate.css")
);
// Use a nonce to only allow a specific script to be run.
const nonce = getNonce();
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--
Use a content security policy to only allow loading images from https or from our extension directory,
and only allow scripts that have a specific nonce.
-->
<meta http-equiv="Content-Security-Policy"
content="img-src https: data:;
style-src 'unsafe-inline' ${webview.cspSource};
script-src 'nonce-${nonce}';">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="${styleResetUri}" rel="stylesheet">
<link href="${styleVSCodeUri}" rel="stylesheet">
<link href="${styleMainUri}" rel="stylesheet">
<script nonce="${nonce}">
const acquiredVsCodeApi = acquireVsCodeApi();
const apiBaseUrl = ${JSON.stringify(apiBaseUrl)}
</script>
</head>
<body>
<script nonce="${nonce}" src="${scriptUri}"></script>
</body>
</html>`;
}
}

View File

@ -0,0 +1,2 @@
export const apiBaseUrl: string = "http://localhost:3002";
export const key: string = "type-script-helper";

View File

@ -1,17 +1,29 @@
// The module 'vscode' contains the VS Code extensibility API // The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below // Import the module and reference it with the alias vscode in your code below
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import * as kanbanHelper from './kanbanHelper';
import * as markdownHelper from './markdownHelper';
import * as promiseLinesHelper from './promiseLinesHelper';
import * as replaceLinesHelper from './replaceLinesHelper'; import * as replaceLinesHelper from './replaceLinesHelper';
import * as readOnlyLinesHelper from './readOnlyLinesHelper'; import * as readOnlyLinesHelper from './readOnlyLinesHelper';
import * as promiseLinesHelper from './promiseLinesHelper'; import { WebViewPanel, refreshWebView } from "./WebViewPanel";
import { ColumnsToCardsWebviewViewProvider, refreshSidebar } from "./ColumnsToCardsWebviewViewProvider";
// This method is called when your extension is activated // This method is called when your extension is activated
// Your extension is activated the very first time the command is executed // Your extension is activated the very first time the command is executed
export function activate(context: vscode.ExtensionContext) { export async function activate(extensionContext: vscode.ExtensionContext) {
const columnsToCardsWebviewViewProvider = new ColumnsToCardsWebviewViewProvider(extensionContext);
const item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right);
item.text = "$(beaker) Show Kanban";
// item.command = "kanban.show";
item.show();
extensionContext.subscriptions.push(vscode.window.registerWebviewViewProvider("columns-to-cards-webview-view-provider", columnsToCardsWebviewViewProvider));
// Use the console to output diagnostic information (console.log) and errors (console.error) // Use the console to output diagnostic information (console.log) and errors (console.error)
// This line of code will only be executed once when your extension is activated // This line of code will only be executed once when your extension is activated
console.log('Congratulations, your extension "type-script-helper" is now active!'); console.log('Congratulations, your extension "type-script-helper":1.6.2 is now active!');
// // The command has been defined in the package.json file // // The command has been defined in the package.json file
// // Now provide the implementation of the command with registerCommand // // Now provide the implementation of the command with registerCommand
@ -25,6 +37,11 @@ export function activate(context: vscode.ExtensionContext) {
// context.subscriptions.push(disposable); // context.subscriptions.push(disposable);
const commands = [ const commands = [
vscode.commands.registerCommand("kanban.refreshBoth", () => { kanbanHelper.refreshBoth(extensionContext); }),
vscode.commands.registerCommand("kanban.refreshSidebar", refreshSidebar),
vscode.commands.registerCommand("kanban.refreshWebView", () => { refreshWebView(extensionContext); }),
vscode.commands.registerCommand("kanban.openWithTextEditor", kanbanHelper.openWithTextEditor),
vscode.commands.registerCommand("markdown.newMarkdownFile", markdownHelper.newMarkdownFile),
vscode.commands.registerCommand('promiseLinesHelper.codeGeneratorQuickPick', promiseLinesHelper.codeGeneratorQuickPick), vscode.commands.registerCommand('promiseLinesHelper.codeGeneratorQuickPick', promiseLinesHelper.codeGeneratorQuickPick),
vscode.commands.registerCommand('promiseLinesHelper.insertDateTime', promiseLinesHelper.insertDateTime), vscode.commands.registerCommand('promiseLinesHelper.insertDateTime', promiseLinesHelper.insertDateTime),
vscode.commands.registerCommand('promiseLinesHelper.transformToPopperCase', promiseLinesHelper.transformToPopperCase), vscode.commands.registerCommand('promiseLinesHelper.transformToPopperCase', promiseLinesHelper.transformToPopperCase),
@ -50,10 +67,11 @@ export function activate(context: vscode.ExtensionContext) {
vscode.commands.registerCommand('replaceLinesHelper.splitBySpaceReverseJoinSort', replaceLinesHelper.splitBySpaceReverseJoinSort), vscode.commands.registerCommand('replaceLinesHelper.splitBySpaceReverseJoinSort', replaceLinesHelper.splitBySpaceReverseJoinSort),
vscode.commands.registerCommand('replaceLinesHelper.unwrapSql', replaceLinesHelper.unwrapSql), vscode.commands.registerCommand('replaceLinesHelper.unwrapSql', replaceLinesHelper.unwrapSql),
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlCSharp', replaceLinesHelper.wrapSqlCSharp), vscode.commands.registerCommand('replaceLinesHelper.wrapSqlCSharp', replaceLinesHelper.wrapSqlCSharp),
vscode.commands.registerCommand('replaceLinesHelper.wrapSqlVB', replaceLinesHelper.wrapSqlVB) vscode.commands.registerCommand('replaceLinesHelper.wrapSqlVB', replaceLinesHelper.wrapSqlVB),
vscode.commands.registerCommand("webView.webView", () => { WebViewPanel.createOrShow(extensionContext); })
]; ];
commands.forEach(command => context.subscriptions.push(command)); commands.forEach(command => extensionContext.subscriptions.push(command));
} }
// This method is called when your extension is deactivated // This method is called when your extension is deactivated

View File

@ -0,0 +1,9 @@
export function getNonce() {
let text = "";
const possible =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 32; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}

View File

@ -0,0 +1,35 @@
import * as vscode from 'vscode';
import { refreshWebView } from './WebViewPanel';
import { paramCase } from './promiseLinesHelper';
import { refreshSidebar } from './ColumnsToCardsWebviewViewProvider';
export function refreshBoth(extensionContext: vscode.ExtensionContext): any {
refreshSidebar();
refreshWebView(extensionContext);
setTimeout(() => { vscode.commands.executeCommand("workbench.action.webview.openDeveloperTools"); }, 500);
}
async function openWithTextEditorLogic(): Promise<any> {
if (vscode.workspace.workspaceFolders === undefined) {
vscode.window.showInformationMessage("Open workspace first!");
return;
}
if (vscode.window.tabGroups.activeTabGroup.activeTab === undefined) {
vscode.window.showInformationMessage("Open a tab first!");
return;
}
const activeTabLabel = vscode.window.tabGroups.activeTabGroup.activeTab.label;
const paramCaseActiveTabLabel: string = paramCase(activeTabLabel);
vscode.window.showInformationMessage(`Searching for <${paramCaseActiveTabLabel}>`);
const fileUris: vscode.Uri[] = await vscode.workspace.findFiles(`**/${paramCaseActiveTabLabel}*`);
if (fileUris.length === 0) {
vscode.window.showInformationMessage(`Didn't find a file matching <${paramCaseActiveTabLabel}>!`);
return;
}
for (let i = 0; i < fileUris.length; ++i) {
const textDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(fileUris[i]);
await vscode.window.showTextDocument(textDocument);
}
}
export const openWithTextEditor = () => openWithTextEditorLogic();

View File

@ -0,0 +1,22 @@
import * as vscode from 'vscode';
import { paramCase } from './promiseLinesHelper';
async function newMarkdownFileLogic(): Promise<any> {
console.log(vscode.window.tabGroups.activeTabGroup.activeTab?.label);
if (vscode.workspace.workspaceFolders === undefined) {
vscode.window.showInformationMessage("Open workspace first!");
return;
}
const workspaceFoldersZero = vscode.workspace.workspaceFolders[0].uri;
const cardTitle = await vscode.window.showInputBox({ prompt: 'Provide title for card.' });
if (cardTitle === undefined)
return;
const paramCaseCardTitle: string = paramCase(cardTitle);
const fileUri: vscode.Uri = vscode.Uri.joinPath(workspaceFoldersZero, `${paramCaseCardTitle}.md`);
const buffer: Buffer = Buffer.from(`# ${cardTitle}`, 'utf8');
await vscode.workspace.fs.writeFile(fileUri, buffer);
const textDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(fileUri);
vscode.window.showTextDocument(textDocument);
}
export const newMarkdownFile = () => newMarkdownFileLogic();

View File

@ -177,7 +177,7 @@ function transformToPopperCaseLogic(): undefined {
return undefined; return undefined;
} }
function paramCase(str: string) { export function paramCase(str: string) {
return str return str
.replace( .replace(
/([A-Z]+(.))/g, /([A-Z]+(.))/g,

View File

@ -1,23 +0,0 @@
import * as path from 'path';
import { runTests } from '@vscode/test-electron';
async function main() {
try {
// The folder containing the Extension Manifest package.json
// Passed to `--extensionDevelopmentPath`
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
// The path to test runner
// Passed to --extensionTestsPath
const extensionTestsPath = path.resolve(__dirname, './suite/index');
// Download VS Code, unzip it and run the integration test
await runTests({ extensionDevelopmentPath, extensionTestsPath });
} catch (err) {
console.error('Failed to run tests', err);
process.exit(1);
}
}
main();

View File

@ -1,15 +0,0 @@
import * as assert from 'assert';
// You can import and use all API from the 'vscode' module
// as well as import your extension to test it
import * as vscode from 'vscode';
// import * as myExtension from '../../extension';
suite('Extension Test Suite', () => {
vscode.window.showInformationMessage('Start all tests.');
test('Sample test', () => {
assert.strictEqual(-1, [1, 2, 3].indexOf(5));
assert.strictEqual(-1, [1, 2, 3].indexOf(0));
});
});

View File

@ -1,38 +0,0 @@
import * as path from 'path';
import * as Mocha from 'mocha';
import * as glob from 'glob';
export function run(): Promise<void> {
// Create the mocha test
const mocha = new Mocha({
ui: 'tdd',
color: true
});
const testsRoot = path.resolve(__dirname, '..');
return new Promise((c, e) => {
glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
if (err) {
return e(err);
}
// Add files to the test suite
files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
try {
// Run the mocha test
mocha.run(failures => {
if (failures > 0) {
e(new Error(`${failures} tests failed.`));
} else {
c();
}
});
} catch (err) {
console.error(err);
e(err);
}
});
});
}

View File

@ -1,16 +1,18 @@
{ {
"compilerOptions": { "compilerOptions": {
"module": "commonjs", "allowSyntheticDefaultImports": true,
"target": "ES2020",
"lib": [ "lib": [
"ES2020" "ES2020"
], ],
"sourceMap": true, "module": "commonjs",
"rootDir": "src", "rootDir": "src",
"strict": true /* enable all strict type-checking options */ "sourceMap": true,
/* Additional Checks */ "strict": true,
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ "target": "ES2020"
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ },
// "noUnusedParameters": true, /* Report errors on unused parameters. */ "exclude": [
} "node_modules",
".vscode-test",
"webviews"
]
} }

View File

@ -1,3 +1,11 @@
---
type: "note"
created: "2023-07-07T16:15:27.822Z"
updated: "2023-07-07T16:15:27.822Z"
---
# vsc-extension-quickstart
# Welcome to your VS Code Extension # Welcome to your VS Code Extension
## What's in the folder ## What's in the folder

View File

@ -0,0 +1,25 @@
<script lang="ts">
import type { Card } from "../../src/Card";
export let key: string;
export let card: Card;
export let index: number;
</script>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore missing-declaration -->
<li id={index.toString()}>
<!-- svelte-ignore a11y-invalid-attribute -->
<a
href="#{index.toString()}"
title="{key}"
on:click={async () => {
acquiredVsCodeApi.postMessage({
type: "open-card",
value: { File: card.File },
});
}}
>
{card.H1}
</a>
</li>

View File

@ -0,0 +1,19 @@
<script lang="ts">
import type { Card } from "../../src/Card";
import CardComponent from "./CardComponent.svelte";
export let key: string = "";
export let value: Array<Card> = [];
</script>
{#if !value}
<div>loading...</div>
{:else}
<hr>
<h1>{key}</h1>
<ul>
{#each value as card, index}
<CardComponent {key} {card} {index} />
{/each}
</ul>
{/if}

View File

@ -0,0 +1,33 @@
<script lang="ts">
import { onMount } from "svelte";
import Cards from "./Cards.svelte";
import type { Card } from "../../src/Card";
import type { PostMessage } from "../../src/PostMessage";
let columnsToCards: Record<string, Array<Card>> = {};
onMount(async () => {
window.addEventListener("message", async (event) => {
const postMessage: PostMessage = event.data;
switch (postMessage.type) {
case "columns-to-cards": {
columnsToCards = postMessage.value;
break;
}
}
});
const postMessage: PostMessage = {
type: "get-columns-to-cards",
value: undefined,
};
acquiredVsCodeApi.postMessage(postMessage);
});
</script>
{#if Object.entries(columnsToCards).length == 0}
<div>loading...</div>
{:else}
{#each Object.entries(columnsToCards) as [key, value], index (key)}
<Cards {key} {value} />
{/each}
{/if}

View File

@ -0,0 +1,4 @@
<script lang="ts">
</script>
<h1>2023-09-23-15-20</h1>

View File

@ -0,0 +1,10 @@
import * as _vscode from "vscode";
import type { PostMessage } from "../types";
declare global {
const acquiredVsCodeApi: {
postMessage: (PostMessage) => void;
getState: () => any;
setState: (state: any) => void;
};
}

View File

@ -0,0 +1,7 @@
import App from "../components/ColumnsToCards.svelte";
const app = new App({
target: document.body,
});
export default app;

View File

@ -0,0 +1,7 @@
import App from "../components/DisplayDate.svelte";
const app = new App({
target: document.body,
});
export default app;

View File

@ -0,0 +1,13 @@
{
"compilerOptions": {
"ignoreDeprecations": "5.0",
"strict": true
},
"exclude": [
"../node_modules/*"
],
"extends": "@tsconfig/svelte/tsconfig.json",
"include": [
"./**/*"
]
}