Compare commits
22 Commits
c50bcca6ca
...
384fda3116
Author | SHA1 | Date |
---|---|---|
AJ ONeal | 384fda3116 | |
AJ ONeal | b4a965296b | |
AJ ONeal | 594dd673e5 | |
AJ ONeal | 8f01148975 | |
AJ ONeal | 3fd9c6d426 | |
AJ ONeal | 7f753622e1 | |
AJ ONeal | 77ad53208e | |
AJ ONeal | 0635d41907 | |
AJ ONeal | 738922451e | |
AJ ONeal | 9f3017b2e9 | |
AJ ONeal | b47f4eeb31 | |
AJ ONeal | cef7e822eb | |
AJ ONeal | 480227cc4f | |
AJ ONeal | 1ee66ed697 | |
AJ ONeal | 6566c66af6 | |
AJ ONeal | 2944bdbc4c | |
AJ ONeal | dc70e6caab | |
AJ ONeal | 607f69e402 | |
AJ ONeal | 8084f8ff30 | |
AJ ONeal | be92cb7aa2 | |
AJ ONeal | 8abe08ac48 | |
AJ ONeal | e58a1e03c9 |
|
@ -0,0 +1,24 @@
|
|||
name: Node.js CI
|
||||
on:
|
||||
push:
|
||||
branches: ['main']
|
||||
pull_request:
|
||||
jobs:
|
||||
build:
|
||||
name: 'Node.js build: fmt, clean-install, lint, test'
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
node-version:
|
||||
# - 20.x
|
||||
- latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- run: npm run fmt
|
||||
- run: npm clean-install
|
||||
- run: npm run lint
|
||||
- run: npm run test
|
57
README.md
57
README.md
|
@ -1,20 +1,33 @@
|
|||
# [ajquery.js](https://git.coolaj86.com/coolaj86/ajquery.js)
|
||||
|
||||
The fastest, most lightweight, fewest dependency jQuery alternative.
|
||||
The fastest, most lightweight, fewest dependency jQuery alternative. \
|
||||
**New**: Now typed, Ai-enhanced, and better than ever!
|
||||
|
||||
Development Build: 145B (with comments) \
|
||||
Production Build: 103B (min + gz)
|
||||
Development Build: 721B (types + comments) \
|
||||
Production Build: 117B (min + gz)
|
||||
|
||||
## Example Usage
|
||||
|
||||
Provides modern, advanced CSS4-compatible query selection:
|
||||
|
||||
```js
|
||||
console.log("innerText:", $("p:nth-child(2").innerText);
|
||||
```
|
||||
|
||||
## Install
|
||||
|
||||
### via GitHub
|
||||
|
||||
```bash
|
||||
my_ver="v2.1.2"
|
||||
my_ver="v3.0.3"
|
||||
|
||||
mkdir ./vendor/
|
||||
|
||||
curl -fsSL "https://raw.githubusercontent.com/coolaj86/ajquery.js/${my_ver}/ajquery.js" \
|
||||
-o ./vendor/ajquery.js
|
||||
|
||||
# Lighthouse-optimized
|
||||
npx -p uglify-js@3 uglifyjs ./vendor/ajquery.js -o ./vendor/ajquery.min.js
|
||||
```
|
||||
|
||||
```html
|
||||
|
@ -24,15 +37,41 @@ curl -fsSL "https://raw.githubusercontent.com/coolaj86/ajquery.js/${my_ver}/ajqu
|
|||
### via CDN
|
||||
|
||||
```html
|
||||
<script src="https://unpkg.com/ajquery"></script>
|
||||
<script src="https://unpkg.com/ajquery@3.0.3/ajquery.min.js"></script>
|
||||
```
|
||||
|
||||
## Example Usage
|
||||
Bundler-optimized:
|
||||
|
||||
Provides modern, advanced CSS4-compatible query selection:
|
||||
```html
|
||||
<script src="https://unpkg.com/ajquery@3.0.3/ajquery.min.cjs"></script>
|
||||
```
|
||||
|
||||
Tree-shaking-optimized:
|
||||
|
||||
```html
|
||||
<script src="https://unpkg.com/ajquery@3.0.3/ajquery.min.mjs"></script>
|
||||
```
|
||||
|
||||
### via NPM
|
||||
|
||||
```sh
|
||||
npm install --save ajquery@3
|
||||
```
|
||||
|
||||
#### CommonJS
|
||||
|
||||
```js
|
||||
console.log("innerText:", $("p:nth-child(2").innerText);
|
||||
let AJQuery = require("ajquery");
|
||||
let $ = AJQuery.$;
|
||||
let $$ = AJQuery.$$;
|
||||
```
|
||||
|
||||
#### ESM
|
||||
|
||||
```js
|
||||
import AJQuery from "ajquery";
|
||||
let $ = AJQuery.$;
|
||||
let $$ = AJQuery.$$;
|
||||
```
|
||||
|
||||
## API
|
||||
|
@ -57,7 +96,7 @@ const stylesheets = $$('link[rel="stylesheet"]', head).map(console.log);
|
|||
|
||||
## Benchmarks
|
||||
|
||||
![ajquery-benchmarks](https://user-images.githubusercontent.com/122831/126774017-9e2a4f32-3ab8-4ba8-a7f3-290977a49cd0.png "it's over 9000")
|
||||
![ajquery-benchmarks](https://user-images.githubusercontent.com/122831/126774421-1ee009f4-d16d-4710-b041-f19035ff8c35.png "it's over 9000")
|
||||
|
||||
## Compatibility
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* AJQuery - The fastest, most lightweight, least dependency jQuery alternative,
|
||||
* now typed, Ai-enhanced, and better than ever!
|
||||
* @typedef AJQuery
|
||||
* @prop {AJQuerySelector} $
|
||||
* @prop {AJQuerySelectorAll} $$
|
||||
*/
|
||||
|
||||
/**
|
||||
* Select first matching element, just like console $
|
||||
* @callback AJQuerySelector
|
||||
* @param {String} cssSelector
|
||||
* @param {ParentNode} [$parent=document]
|
||||
*/
|
||||
|
||||
/**
|
||||
* Select all matching child elements as a JS Array, just like console $$
|
||||
* @callback AJQuerySelectorAll
|
||||
* @param {String} cssSelector
|
||||
* @param {ParentNode} [$parent=document]
|
||||
*/
|
||||
|
||||
/** @type {AJQuery} */
|
||||
//@ts-ignore
|
||||
var AJQuery = ("object" === typeof module && exports) || {};
|
||||
(function (window, AJQuery) {
|
||||
"use strict";
|
||||
|
||||
/** @type {AJQuerySelector} */
|
||||
AJQuery.$ = function (cssSelector, $parent = document) {
|
||||
let $child = $parent.querySelector(cssSelector);
|
||||
return $child;
|
||||
};
|
||||
|
||||
/** @type {AJQuerySelectorAll} */
|
||||
AJQuery.$$ = function (cssSelector, $parent = document) {
|
||||
let nodeList = $parent.querySelectorAll(cssSelector);
|
||||
let $children = Array.from(nodeList);
|
||||
return $children;
|
||||
};
|
||||
|
||||
Object.assign(window, AJQuery);
|
||||
|
||||
//@ts-ignore
|
||||
window.AJQuery = AJQuery;
|
||||
})(globalThis.window || {}, AJQuery);
|
||||
if ("object" === typeof module) {
|
||||
module.exports = AJQuery;
|
||||
}
|
26
ajquery.js
26
ajquery.js
|
@ -1,7 +1,25 @@
|
|||
function $(sel, el) {
|
||||
return (el || document).querySelector(sel);
|
||||
/**
|
||||
* AJQuery - The fastest, most lightweight, least dependency jQuery alternative,
|
||||
* now typed, Ai-enhanced, and better than ever!
|
||||
*/
|
||||
|
||||
/**
|
||||
* Select first matching element, just like console $
|
||||
* @param {String} cssSelector
|
||||
* @param {ParentNode} [$parent=document]
|
||||
*/
|
||||
function $(cssSelector, $parent = document) {
|
||||
let $child = $parent.querySelector(cssSelector);
|
||||
return $child;
|
||||
}
|
||||
|
||||
function $$(sel, el) {
|
||||
return Array.from((el || document).querySelectorAll(sel));
|
||||
/**
|
||||
* Select all matching child elements as a JS Array, just like console $$
|
||||
* @param {String} cssSelector
|
||||
* @param {ParentNode} [$parent=document]
|
||||
*/
|
||||
function $$(cssSelector, $parent = document) {
|
||||
let nodeList = $parent.querySelectorAll(cssSelector);
|
||||
let $children = Array.from(nodeList);
|
||||
return $children;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/** @import('typed-query-selector/strict') */
|
||||
|
||||
let AJQuery = { $, $$ };
|
||||
|
||||
/**
|
||||
* AJQuery - The fastest, most lightweight, least dependency jQuery alternative,
|
||||
* now typed, Ai-enhanced, and better than ever!
|
||||
* @namespace AJQuery
|
||||
*/
|
||||
|
||||
/**
|
||||
* Selects the first element that matches the given selector within the specified parent.
|
||||
* @param {string} sel - The CSS selector to match.
|
||||
* @param {Document|Element} [$parent=document] - The parent element to search within. Defaults to document.
|
||||
*/
|
||||
function $(sel, $parent = document) {
|
||||
let $child = $parent.querySelector(sel);
|
||||
return $child;
|
||||
}
|
||||
|
||||
/**
|
||||
* Select all matching child elements from $parent (which is document by default)
|
||||
* @param {String} sel - The CSS selector to match.
|
||||
* @param {Document|Element} [$parent=document] - The parent element to search within. Defaults to document.
|
||||
*/
|
||||
function $$(sel, $parent = document) {
|
||||
let $children = $parent.querySelectorAll(sel);
|
||||
let children = Array.from($children);
|
||||
return children;
|
||||
}
|
||||
|
||||
export default AJQuery;
|
|
@ -8,6 +8,8 @@ async function main() {
|
|||
console.info("Angular: 2517");
|
||||
await sleep(520);
|
||||
console.info("React: 3785");
|
||||
await sleep(128);
|
||||
console.info("Vite: 6666");
|
||||
await sleep(230);
|
||||
console.info('"Vanilla" JS: 6237');
|
||||
await sleep(65);
|
||||
|
|
14
example.html
14
example.html
|
@ -6,6 +6,18 @@
|
|||
<script src="./ajquery.js"></script>
|
||||
<script>
|
||||
document.write("Hello, World!");
|
||||
console.log($("body").innerText);
|
||||
let text = $("body").textContent;
|
||||
console.log(text);
|
||||
</script>
|
||||
|
||||
<script src="./ajquery.min.cjs"></script>
|
||||
<script>
|
||||
console.log("globalThis.AJQuery:", globalThis.AJQuery);
|
||||
</script>
|
||||
|
||||
<script type="module" src="./ajquery.mjs"></script>
|
||||
<script type="module">
|
||||
import AJQuery from "./ajquery.min.mjs";
|
||||
console.log("imported AJQuery", AJQuery);
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
"moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
"typeRoots": ["./typings","./node_modules/@types"], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
"allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
"checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
"noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
"alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
},
|
||||
"include": [
|
||||
"ajquery.js",
|
||||
"ajquery.cjs",
|
||||
"ajquery.mjs",
|
||||
"bin/**/*.js",
|
||||
"lib/**/*.js",
|
||||
"src/**/*.js"
|
||||
],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
|
@ -1,233 +1,13 @@
|
|||
{
|
||||
"name": "ajquery",
|
||||
"version": "2.1.2",
|
||||
"lockfileVersion": 1,
|
||||
"version": "3.0.3",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"cli": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
|
||||
"integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
|
||||
"requires": {
|
||||
"exit": "0.1.2",
|
||||
"glob": "^7.1.1"
|
||||
}
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
},
|
||||
"console-browserify": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
|
||||
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
|
||||
"requires": {
|
||||
"date-now": "^0.1.4"
|
||||
}
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"date-now": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
||||
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
|
||||
},
|
||||
"dom-serializer": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
|
||||
"integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
|
||||
"requires": {
|
||||
"domelementtype": "^2.0.1",
|
||||
"entities": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"domelementtype": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
|
||||
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
|
||||
},
|
||||
"entities": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
|
||||
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"domelementtype": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
|
||||
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
|
||||
},
|
||||
"domhandler": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
|
||||
"integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
|
||||
"requires": {
|
||||
"domelementtype": "1"
|
||||
}
|
||||
},
|
||||
"domutils": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
|
||||
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
|
||||
"requires": {
|
||||
"dom-serializer": "0",
|
||||
"domelementtype": "1"
|
||||
}
|
||||
},
|
||||
"entities": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
|
||||
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
|
||||
},
|
||||
"exit": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
||||
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.7",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
|
||||
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.8.3",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
|
||||
"integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
|
||||
"requires": {
|
||||
"domelementtype": "1",
|
||||
"domhandler": "2.3",
|
||||
"domutils": "1.5",
|
||||
"entities": "1.0",
|
||||
"readable-stream": "1.1"
|
||||
}
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"requires": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||
},
|
||||
"jshint": {
|
||||
"version": "2.13.0",
|
||||
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.0.tgz",
|
||||
"integrity": "sha512-Nd+md9wIeyfDK+RGrbOBzwLONSTdihGMtyGYU/t7zYcN2EgUa4iuY3VK2oxtPYrW5ycTj18iC+UbhNTxe4C66g==",
|
||||
"requires": {
|
||||
"cli": "~1.0.0",
|
||||
"console-browserify": "1.1.x",
|
||||
"exit": "0.1.x",
|
||||
"htmlparser2": "3.8.x",
|
||||
"lodash": "~4.17.21",
|
||||
"minimatch": "~3.0.2",
|
||||
"shelljs": "0.3.x",
|
||||
"strip-json-comments": "1.0.x"
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||
},
|
||||
"prettier": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz",
|
||||
"integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.1.14",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.1",
|
||||
"isarray": "0.0.1",
|
||||
"string_decoder": "~0.10.x"
|
||||
}
|
||||
},
|
||||
"shelljs": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
|
||||
"integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "0.10.31",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
|
||||
"integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E="
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ajquery",
|
||||
"version": "3.0.3",
|
||||
"license": "MPL-2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
45
package.json
45
package.json
|
@ -1,18 +1,47 @@
|
|||
{
|
||||
"name": "ajquery",
|
||||
"version": "2.1.2",
|
||||
"description": "The fastest, most lightweight, least dependency jQuery alternative",
|
||||
"main": "ajquery.min.js",
|
||||
"version": "3.0.3",
|
||||
"description": "The fastest, most lightweight, least dependency jQuery alternative. Now typed, Ai-enhanced, and better than ever!",
|
||||
"main": "ajquery.cjs",
|
||||
"module": "ajquery.mjs",
|
||||
"type": "commonjs",
|
||||
"browser": {
|
||||
"ajquery.min.cjs": "ajquery.min.js"
|
||||
},
|
||||
"exports": {
|
||||
".": {
|
||||
"require": "./ajquery.cjs",
|
||||
"import": "./ajquery.mjs",
|
||||
"default": "./ajquery.cjs"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"ajquery.js"
|
||||
"ajquery.js",
|
||||
"ajquery.min.js",
|
||||
"ajquery.cjs",
|
||||
"ajquery.min.cjs",
|
||||
"ajquery.mjs",
|
||||
"ajquery.min.mjs"
|
||||
],
|
||||
"scripts": {
|
||||
"benchmark": "node benchmark.js",
|
||||
"benchmark": "node ./benchmark.js",
|
||||
"build": "npm run build-all",
|
||||
"bump": "npm version -m \"chore(release): bump to v%s\"",
|
||||
"fmt": "npm run prettier",
|
||||
"lint": "npm run jshint && npm run tsc",
|
||||
"start": "open http://localhost/example.html && caddy file-server --browse --root .",
|
||||
"test": "node ./tests/",
|
||||
"--------": "---------------------------------------",
|
||||
"build-all": "npm run build-js && npm run build-cjs && npm run build-mjs",
|
||||
"build-js": "npx -p uglify-js@3 uglifyjs --compress 'assignments' --mangle reserved='[\"$\",\"$$\",\"require\",\"exports\"]' ajquery.js -o ajquery.min.js",
|
||||
"build-cjs": "npx -p uglify-js@3 uglifyjs --compress 'assignments' --mangle reserved='[\"$\",\"$$\",\"require\",\"exports\"]' ajquery.cjs -o ajquery.min.cjs",
|
||||
"build-mjs": "npx -p uglify-js@3 uglifyjs --compress 'assignments' --mangle reserved='[\"$\",\"$$\"]' ajquery.mjs -o ajquery.min.mjs",
|
||||
"jshint": "npx -p jshint@2.x -- jshint -c ./.jshintrc ./ajquery.js ./ajquery.cjs ./ajquery.mjs",
|
||||
"prepare": "npm run build",
|
||||
"start": "open example.html",
|
||||
"prepublish": "npm run reexport-types",
|
||||
"prettier": "npx prettier -w '**/*.{js,md,css,html}'",
|
||||
"build": "npx uglify-js ajquery.js -o ajquery.min.js",
|
||||
"test": "node test.js"
|
||||
"reexport-types": "npx -p jswt@1.x -- reexport",
|
||||
"tsc": "npx -p typescript@5.x -- tsc -p ./jsconfig.json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
"use strict";
|
||||
|
||||
let AJQueryDefault = require("../");
|
||||
let AJQueryExplicit = require("../ajquery.cjs");
|
||||
|
||||
if (!AJQueryDefault.$) {
|
||||
throw new Error("did not export $ correctly");
|
||||
}
|
||||
if (!AJQueryDefault.$$) {
|
||||
throw new Error("did not export $$ correctly");
|
||||
}
|
||||
|
||||
if (AJQueryDefault.$ !== AJQueryExplicit.$) {
|
||||
throw new Error("exported $s do not match");
|
||||
}
|
||||
|
||||
if (AJQueryDefault.$$ !== AJQueryExplicit.$$) {
|
||||
throw new Error("exported $$s do not match");
|
||||
}
|
||||
|
||||
console.log(`\x1b[34mPASS\x1b[33m`);
|
|
@ -0,0 +1,12 @@
|
|||
"use strict";
|
||||
|
||||
import AJQueryExplicit from "../ajquery.mjs";
|
||||
|
||||
if (!AJQueryExplicit.$) {
|
||||
throw new Error("did not export $ correctly");
|
||||
}
|
||||
if (!AJQueryExplicit.$$) {
|
||||
throw new Error("did not export $$ correctly");
|
||||
}
|
||||
|
||||
console.log(`\x1b[34mPASS\x1b[33m`);
|
|
@ -0,0 +1,109 @@
|
|||
"use strict";
|
||||
|
||||
let ChildProcess = require("child_process");
|
||||
let Fs = require("node:fs/promises");
|
||||
let Path = require("node:path");
|
||||
|
||||
async function main() {
|
||||
console.info("TAP version 13");
|
||||
|
||||
let dirents = await Fs.readdir(__dirname, { withFileTypes: true });
|
||||
|
||||
let failures = 0;
|
||||
let count = 0;
|
||||
for (let dirent of dirents) {
|
||||
if (dirent.name === "index.js") {
|
||||
continue;
|
||||
}
|
||||
|
||||
count += 1;
|
||||
let direntPath = Path.join(__dirname, dirent.name);
|
||||
let relPath = Path.relative(".", direntPath);
|
||||
|
||||
let success = await handleEach(count, relPath);
|
||||
if (!success) {
|
||||
failures += 1;
|
||||
}
|
||||
}
|
||||
|
||||
let start = 1;
|
||||
if (count < 1) {
|
||||
start = 0;
|
||||
}
|
||||
|
||||
let passes = count - failures;
|
||||
console.info(``);
|
||||
console.info(`${start}..${count}`);
|
||||
console.info(`# tests ${count}`);
|
||||
console.info(`# pass ${passes}`);
|
||||
console.info(`# fail ${failures}`);
|
||||
console.info(`# skip 0`);
|
||||
|
||||
if (failures !== 0) {
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleEach(count, relPath) {
|
||||
let success = await exec("node", [relPath])
|
||||
.then(function (result) {
|
||||
console.info(`ok ${count} - ${relPath}`);
|
||||
return true;
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.info(`not ok ${count} - ${relPath}`);
|
||||
if (err.code) {
|
||||
console.info(` # Error: ${err.code}`);
|
||||
}
|
||||
if (err.stderr) {
|
||||
console.info(` # Stderr: ${err.stderr}`);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
async function exec(exe, args) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
let cmd = ChildProcess.spawn(exe, args);
|
||||
|
||||
let stdout = [];
|
||||
let stderr = [];
|
||||
|
||||
cmd.stdout.on("data", function (data) {
|
||||
stdout.push(data.toString("utf8"));
|
||||
});
|
||||
|
||||
cmd.stderr.on("data", function (data) {
|
||||
stderr.push(data.toString("utf8"));
|
||||
});
|
||||
|
||||
cmd.on("close", function (code) {
|
||||
let result = {
|
||||
code: code,
|
||||
stdout: stdout.join(""),
|
||||
stderr: stderr.join(""),
|
||||
};
|
||||
|
||||
if (!code) {
|
||||
resolve(result);
|
||||
return;
|
||||
}
|
||||
|
||||
let err = new Error(result.stderr);
|
||||
Object.assign(err, result);
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
main()
|
||||
.then(function () {
|
||||
process.exit(0);
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error("Fail:");
|
||||
console.error(err.stack || err);
|
||||
process.exit(1);
|
||||
});
|
Loading…
Reference in New Issue