diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b55cd8b76fd0..6ba88fc895cf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -31,6 +31,8 @@ /sdk/keyvault/ @jonathandturner @sadasant /sdk/storage/ @XiaoningLiu @jeremymeng @HarshaNalluru @vinjiang @jiacfan @ljian3377 +/sdk/tables/ @mahdiva @joheredi + /sdk/test-utils/ @HarshaNalluru @sadasant /sdk/textanalytics/ @xirzec @willmtemple /sdk/formrecognizer/ @jeremymeng @willmtemple diff --git a/dataplane.code-workspace b/dataplane.code-workspace index be77b25efbb7..f223733abab3 100644 --- a/dataplane.code-workspace +++ b/dataplane.code-workspace @@ -112,6 +112,10 @@ "name": "storage-queue", "path": "sdk\\storage\\storage-queue" }, + { + "name": "tables", + "path": "sdk\\tables\\azure-tables" + }, { "name": "text analytics", "path": "sdk\\textanalytics\\ai-text-analytics" @@ -158,9 +162,11 @@ "**/test-browser/*": true }, "typescript.tsdk": "core-http\\node_modules\\typescript\\lib", - }, "extensions": { - "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] } } diff --git a/rush.json b/rush.json index 0f1069646931..36e0bbb23756 100644 --- a/rush.json +++ b/rush.json @@ -467,6 +467,11 @@ "projectFolder": "sdk/storage/storage-queue", "versionPolicyName": "client" }, + { + "packageName": "@azure/tables", + "projectFolder": "sdk/tables/azure-tables", + "versionPolicyName": "client" + }, { "packageName": "@azure/template", "projectFolder": "sdk/template/template", diff --git a/sdk/tables/azure-tables/.eslintrc.json b/sdk/tables/azure-tables/.eslintrc.json new file mode 100644 index 000000000000..47d9fc35be4a --- /dev/null +++ b/sdk/tables/azure-tables/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "plugins": ["@azure/azure-sdk"], + "extends": ["plugin:@azure/azure-sdk/azure-sdk-base"] +} diff --git a/sdk/tables/azure-tables/.vscode/launch.json b/sdk/tables/azure-tables/.vscode/launch.json new file mode 100644 index 000000000000..5098b87e0455 --- /dev/null +++ b/sdk/tables/azure-tables/.vscode/launch.json @@ -0,0 +1,42 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Current TS File", + "args": [ + "${fileBasename}" + ], + "runtimeArgs": [ + "--nolazy", + "-r", + "ts-node/register" + ], + "cwd": "${fileDirname}", + "sourceMaps": true, + "protocol": "inspector" + }, + { + "type": "node", + "request": "launch", + "name": "Run unit tests", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "--timeout", + "999999", + "--colors", + "${workspaceFolder}/dist-test/index.node.js" + ], + "cwd": "${workspaceFolder}", + "internalConsoleOptions": "openOnSessionStart", + "skipFiles": [ + "/**/async_hooks.js", + "/**/*.js" + ] + } + ] +} diff --git a/sdk/tables/azure-tables/.vscode/tasks.json b/sdk/tables/azure-tables/.vscode/tasks.json new file mode 100644 index 000000000000..83bb44526db4 --- /dev/null +++ b/sdk/tables/azure-tables/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build Node", + "type": "npm", + "script": "build:node", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/sdk/tables/azure-tables/CHANGELOG.md b/sdk/tables/azure-tables/CHANGELOG.md new file mode 100644 index 000000000000..dd06ac6d9985 --- /dev/null +++ b/sdk/tables/azure-tables/CHANGELOG.md @@ -0,0 +1,3 @@ +# Release History + +## 1.0.0 (UNRELEASED) diff --git a/sdk/tables/azure-tables/LICENSE b/sdk/tables/azure-tables/LICENSE new file mode 100644 index 000000000000..ea8fb1516028 --- /dev/null +++ b/sdk/tables/azure-tables/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/sdk/tables/azure-tables/README.md b/sdk/tables/azure-tables/README.md new file mode 100644 index 000000000000..70f4ff7f14cb --- /dev/null +++ b/sdk/tables/azure-tables/README.md @@ -0,0 +1,68 @@ +# Azure Tables client library for JavaScript + +[Azure Tables](https://azure.microsoft.com/en-us/services/storage/tables/) is a cloud-based service that stores structured NoSQL data, providing a key/attribute store with a schemaless design. Tables storage gives developers flexibility and scalability with all the best parts of Azure cloud. + +Use the client library to: + +- Create/Delete Tables +- Query/Create/Read/Update/Delete Entities + +[Source code](https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/tables/azure-tables/) | [Package (NPM)](https://www.npmjs.com/package/@azure/tables) | [API reference documentation](https://aka.ms/js-docs) | [Product documentation](https://docs.microsoft.com/en-us/azure/storage/tables/table-storage-overview/) | [Samples](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/tables/azure-tables/samples/) + +## Getting started + +### Currently supported environments + +- Node.js version 8.x.x or higher + +### Prerequisites + +TODO: content + +### Install the `@azure/tables` package + +TODO: content + +### Create and authenticate a `TableServiceClient` + +TODO: content + +#### Using a Shared Account Key (Connection String) + +TODO: content + +#### Using a Shared Access Signature + +TODO: content + +## Key concepts + +TODO: content + +## Examples + +TODO: content + +## Troubleshooting + +TODO: content + +## Next steps + +TODO: content + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us +the rights to use your contribution. For details, visit https://cla.microsoft.com. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide +a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions +provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +If you'd like to contribute to this library, please read the [contributing guide](https://github.com/Azure/azure-sdk-for-js/blob/master/CONTRIBUTING.md) to learn more about how to build and test the code. diff --git a/sdk/tables/azure-tables/api-extractor.json b/sdk/tables/azure-tables/api-extractor.json new file mode 100644 index 000000000000..71b70509eb4b --- /dev/null +++ b/sdk/tables/azure-tables/api-extractor.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "mainEntryPointFilePath": "types/src/index.d.ts", + "docModel": { + "enabled": false + }, + "apiReport": { + "enabled": true, + "reportFolder": "./review" + }, + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "", + "publicTrimmedFilePath": "./types/tables.d.ts" + }, + "messages": { + "tsdocMessageReporting": { + "default": { + "logLevel": "none" + } + }, + "extractorMessageReporting": { + "ae-missing-release-tag": { + "logLevel": "none" + }, + "ae-unresolved-link": { + "logLevel": "none" + } + } + } +} diff --git a/sdk/tables/azure-tables/karma.conf.js b/sdk/tables/azure-tables/karma.conf.js new file mode 100644 index 000000000000..66750cbf22d3 --- /dev/null +++ b/sdk/tables/azure-tables/karma.conf.js @@ -0,0 +1,121 @@ +// https://github.com/karma-runner/karma-chrome-launcher +process.env.CHROME_BIN = require("puppeteer").executablePath(); + +module.exports = function(config) { + config.set({ + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: "./", + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ["mocha"], + + plugins: [ + "karma-mocha", + "karma-mocha-reporter", + "karma-chrome-launcher", + "karma-edge-launcher", + "karma-firefox-launcher", + "karma-ie-launcher", + "karma-env-preprocessor", + "karma-coverage", + "karma-remap-istanbul", + "karma-junit-reporter" + ], + + // list of files / patterns to load in the browser + files: [ + // Uncomment the cdn link below for the polyfill service to support IE11 missing features + // Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys + // "https://cdn.polyfill.io/v2/polyfill.js?features=Symbol,Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys|always", + "dist-test/index.browser.js", + { pattern: "dist-test/index.browser.js.map", type: "html", included: false, served: true } + ], + + // list of files / patterns to exclude + exclude: [], + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + "**/*.js": ["env"], + // IMPORTANT: COMMENT following line if you want to debug in your browsers!! + // Preprocess source file to calculate code coverage, however this will make source file unreadable + "dist-test/index.js": ["coverage"] + }, + + // inject following environment values into browser testing with window.__env__ + // environment values MUST be exported or set with same console running "karma start" + // https://www.npmjs.com/package/karma-env-preprocessor + envPreprocessor: ["ACCOUNT_NAME", "ACCOUNT_SAS"], + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ["mocha", "coverage", "karma-remap-istanbul", "junit"], + + coverageReporter: { + // specify a common output directory + dir: "coverage-browser/", + reporters: [{ type: "json", subdir: ".", file: "coverage.json" }] + }, + + remapIstanbulReporter: { + src: "coverage-browser/coverage.json", + reports: { + lcovonly: "coverage-browser/lcov.info", + html: "coverage-browser/html/report", + "text-summary": null, + cobertura: "./coverage-browser/cobertura-coverage.xml" + } + }, + + junitReporter: { + outputDir: "", // results will be saved as $outputDir/$browserName.xml + outputFile: "test-results.browser.xml", // if included, results will be saved as $outputDir/$browserName/$outputFile + suite: "", // suite will become the package name attribute in xml testsuite element + useBrowserName: false, // add browser name to report and classes names + nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element + classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element + properties: {} // key value pair of properties to add to the section of the report + }, + + // web server port + port: 9876, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + // 'ChromeHeadless', 'Chrome', 'Firefox', 'Edge', 'IE' + browsers: ["ChromeHeadless"], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: 1, + + browserNoActivityTimeout: 600000, + browserDisconnectTimeout: 10000, + browserDisconnectTolerance: 3, + + client: { + mocha: { + // change Karma's debug.html to the mocha web reporter + reporter: "html", + timeout: "600000" + } + } + }); +}; diff --git a/sdk/tables/azure-tables/package.json b/sdk/tables/azure-tables/package.json new file mode 100644 index 000000000000..f83cb7e15b11 --- /dev/null +++ b/sdk/tables/azure-tables/package.json @@ -0,0 +1,113 @@ +{ + "name": "@azure/tables", + "version": "1.0.0-preview.1", + "description": "An isomorphic client library for the Azure Tables service.", + "sdk-type": "client", + "main": "dist/index.js", + "module": "dist-esm/src/index.js", + "browser": { + "stream": "./node_modules/stream-browserify/index.js", + "./dist-esm/src/print.js": "./dist-esm/src/print.browser.js" + }, + "types": "types/tables.d.ts", + "scripts": { + "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", + "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", + "build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1", + "build:samples": "cd samples && tsc -p .", + "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1", + "build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local", + "check-format": "prettier --list-different \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "clean": "rimraf dist dist-* types *.tgz *.log", + "execute:samples": "echo skipped", + "extract-api": "tsc -p . && api-extractor run --local", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "integration-test:browser": "echo skipped", + "integration-test:node": "echo skipped", + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "lint:fix": "eslint package.json tsconfig.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]", + "lint": "eslint package.json tsconfig.json api-extractor.json src test --ext .ts -f html -o tables-lintReport.html || exit 0", + "pack": "npm pack 2>&1", + "prebuild": "npm run clean", + "test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser", + "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node", + "test": "npm run build:test && npm run unit-test && npm run integration-test", + "unit-test:browser": "karma start --single-run", + "unit-test:node": "mocha --reporter ../../../common/tools/mocha-multi-reporter.js dist-test/index.node.js", + "unit-test": "npm run unit-test:node && npm run unit-test:browser" + }, + "files": [ + "dist/", + "dist-esm/src/", + "types/tables.d.ts", + "README.md", + "LICENSE" + ], + "repository": "github:Azure/azure-sdk-for-js", + "keywords": [ + "azure", + "cloud", + "Azure" + ], + "author": "Microsoft Corporation", + "license": "MIT", + "bugs": { + "url": "https://github.com/Azure/azure-sdk-for-js/issues" + }, + "engines": { + "node": ">=8.0.0" + }, + "homepage": "https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/tables/azure-tables/", + "sideEffects": false, + "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json", + "dependencies": { + "@azure/core-http": "^1.1.1", + "@opentelemetry/api": "^0.6.1", + "events": "^3.0.0", + "tslib": "^1.10.0" + }, + "devDependencies": { + "@microsoft/api-extractor": "7.7.11", + "@rollup/plugin-commonjs": "11.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-multi-entry": "^3.0.0", + "@rollup/plugin-node-resolve": "^8.0.0", + "@rollup/plugin-replace": "^2.2.0", + "@types/mocha": "^7.0.2", + "@types/node": "^8.0.0", + "@typescript-eslint/eslint-plugin": "^2.0.0", + "@typescript-eslint/parser": "^2.0.0", + "@azure/eslint-plugin-azure-sdk": "^3.0.0", + "assert": "^1.4.1", + "cross-env": "^7.0.2", + "eslint": "^6.1.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-no-null": "^1.0.2", + "eslint-plugin-no-only-tests": "^2.3.0", + "eslint-plugin-promise": "^4.1.1", + "inherits": "^2.0.3", + "karma": "^4.0.1", + "karma-chrome-launcher": "^3.0.0", + "karma-coverage": "^2.0.0", + "karma-edge-launcher": "^0.4.2", + "karma-env-preprocessor": "^0.1.1", + "karma-firefox-launcher": "^1.1.0", + "karma-ie-launcher": "^1.0.0", + "karma-junit-reporter": "^2.0.1", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + "karma-remap-istanbul": "^0.6.0", + "mocha": "^7.1.1", + "mocha-junit-reporter": "^1.18.0", + "prettier": "^1.16.4", + "rimraf": "^3.0.0", + "rollup": "^1.16.3", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-terser": "^5.1.1", + "rollup-plugin-visualizer": "^3.1.1", + "typescript": "~3.9.3", + "util": "^0.12.1", + "chai": "^4.2.0", + "@types/chai": "^4.1.6" + } +} diff --git a/sdk/tables/azure-tables/review/tables.api.md b/sdk/tables/azure-tables/review/tables.api.md new file mode 100644 index 000000000000..0d3e9b1ed8e8 --- /dev/null +++ b/sdk/tables/azure-tables/review/tables.api.md @@ -0,0 +1,21 @@ +## API Report File for "@azure/tables" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +// @public (undocumented) +export interface Foo { + // (undocumented) + bar: number; + // (undocumented) + test: string; +} + +// @public (undocumented) +export function helloWorld(): string; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/sdk/tables/azure-tables/rollup.base.config.js b/sdk/tables/azure-tables/rollup.base.config.js new file mode 100644 index 000000000000..b55677722794 --- /dev/null +++ b/sdk/tables/azure-tables/rollup.base.config.js @@ -0,0 +1,120 @@ +import path from "path"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import multiEntry from "@rollup/plugin-multi-entry"; +import cjs from "@rollup/plugin-commonjs"; +import replace from "@rollup/plugin-replace"; +import { terser } from "rollup-plugin-terser"; +import sourcemaps from "rollup-plugin-sourcemaps"; +import viz from "rollup-plugin-visualizer"; + +const pkg = require("./package.json"); +const depNames = Object.keys(pkg.dependencies); +const devDepNames = Object.keys(pkg.devDependencies); +const input = "dist-esm/src/index.js"; +const production = process.env.NODE_ENV === "production"; + +export function nodeConfig(test = false) { + const externalNodeBuiltins = []; + const baseConfig = { + input: input, + external: depNames.concat(externalNodeBuiltins), + output: { file: "dist/index.js", format: "cjs", sourcemap: true }, + preserveSymlinks: false, + plugins: [ + sourcemaps(), + replace({ + delimiters: ["", ""], + values: { + // replace dynamic checks with if (true) since this is for node only. + // Allows rollup's dead code elimination to be more aggressive. + "if (isNode)": "if (true)" + } + }), + nodeResolve({ preferBuiltins: true }), + cjs() + ] + }; + + if (test) { + // Entry points - test files under the `test` folder(common for both browser and node), node specific test files + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/node/*.spec.js"]; + baseConfig.plugins.unshift(multiEntry({ exports: false })); + + // different output file + baseConfig.output.file = "dist-test/index.node.js"; + + // mark devdeps as external + baseConfig.external.push(...devDepNames); + + // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting + // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also + // applies to test code, which causes all tests to be removed by tree-shaking. + baseConfig.treeshake = false; + } else if (production) { + baseConfig.plugins.push(terser()); + } + + return baseConfig; +} + +export function browserConfig(test = false) { + const baseConfig = { + input: input, + output: { + file: "dist-browser/azure-tables.js", + format: "umd", + name: "Azure.Tables", + sourcemap: true + }, + preserveSymlinks: false, + plugins: [ + sourcemaps(), + replace({ + delimiters: ["", ""], + values: { + // replace dynamic checks with if (false) since this is for + // browser only. Rollup's dead code elimination will remove + // any code guarded by if (isNode) { ... } + "if (isNode)": "if (false)" + } + }), + nodeResolve({ + mainFields: ["module", "browser"], + preferBuiltins: false + }), + cjs({ + namedExports: { + chai: ["assert"], + "@opentelemetry/api": ["CanonicalCode", "SpanKind", "TraceFlags"] + } + }), + viz({ filename: "dist-browser/browser-stats.html", sourcemap: false }) + ] + }; + + if (test) { + // Entry points - test files under the `test` folder(common for both browser and node), browser specific test files + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/browser/*.spec.js"]; + baseConfig.plugins.unshift(multiEntry({ exports: false })); + baseConfig.output.file = "dist-test/index.browser.js"; + + baseConfig.onwarn = (warning) => { + if ( + warning.code === "CIRCULAR_DEPENDENCY" && + warning.importer.indexOf(path.normalize("node_modules/chai/lib") === 0) + ) { + // Chai contains circular references, but they are not fatal and can be ignored. + return; + } + + console.error(`(!) ${warning.message}`); + }; + + // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting + // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also + // applies to test code, which causes all tests to be removed by tree-shaking. + baseConfig.treeshake = false; + } + + return baseConfig; +} diff --git a/sdk/tables/azure-tables/rollup.config.js b/sdk/tables/azure-tables/rollup.config.js new file mode 100644 index 000000000000..14652aa67ed8 --- /dev/null +++ b/sdk/tables/azure-tables/rollup.config.js @@ -0,0 +1,13 @@ +import * as base from "./rollup.base.config"; + +const inputs = []; + +if (!process.env.ONLY_BROWSER) { + inputs.push(base.nodeConfig()); +} + +if (!process.env.ONLY_NODE) { + inputs.push(base.browserConfig()); +} + +export default inputs; diff --git a/sdk/tables/azure-tables/rollup.test.config.js b/sdk/tables/azure-tables/rollup.test.config.js new file mode 100644 index 000000000000..925a4421a53e --- /dev/null +++ b/sdk/tables/azure-tables/rollup.test.config.js @@ -0,0 +1,3 @@ +import * as base from "./rollup.base.config"; + +export default [base.nodeConfig(true), base.browserConfig(true)]; diff --git a/sdk/tables/azure-tables/samples/.gitkeep b/sdk/tables/azure-tables/samples/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/sdk/tables/azure-tables/src/index.ts b/sdk/tables/azure-tables/src/index.ts new file mode 100644 index 000000000000..8574a3392a43 --- /dev/null +++ b/sdk/tables/azure-tables/src/index.ts @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +// This node built-in must be shimmed for the browser. + +// This is a node dependency that needs to be replaced with a +// different implementation in the browser. + + +// this is a utility function from a library that should be external +// for both node and web +import { isNode } from "@azure/core-http"; + +export interface Foo { + bar: number; + test: string; +} + +export function helloWorld(): string { + if (isNode) { + console.log("Node 👊"); + } else { + console.log("Browser ❤"); + } + + return "Hello world!"; + +} diff --git a/sdk/tables/azure-tables/src/print.browser.ts b/sdk/tables/azure-tables/src/print.browser.ts new file mode 100644 index 000000000000..594dc6cd615f --- /dev/null +++ b/sdk/tables/azure-tables/src/print.browser.ts @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +// This shim just declares "document" to be defined in this scope. +// If you really need access to browser features with strong +// type-checking, extend the shim to the extent you require or use: +// +// /// +declare const document: any; + +export default function(str: string): void { + document.write(str); +} diff --git a/sdk/tables/azure-tables/src/print.ts b/sdk/tables/azure-tables/src/print.ts new file mode 100644 index 000000000000..d717040cbbc3 --- /dev/null +++ b/sdk/tables/azure-tables/src/print.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +export default function(str: string): void { + console.log(str); +} diff --git a/sdk/tables/azure-tables/test/browser/sampleBrowser.spec.ts b/sdk/tables/azure-tables/test/browser/sampleBrowser.spec.ts new file mode 100644 index 000000000000..05941e66ed2c --- /dev/null +++ b/sdk/tables/azure-tables/test/browser/sampleBrowser.spec.ts @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { helloWorld } from "../../src"; + +// another node built-in that has to be shimmed for the browser +import { assert } from "chai"; + +describe("Hello function - browser", () => { + it("should create an event emitter", () => { + const result = helloWorld(); + assert.strictEqual(result, "Hello world!"); + }); +}); diff --git a/sdk/tables/azure-tables/test/node/index.spec.ts b/sdk/tables/azure-tables/test/node/index.spec.ts new file mode 100644 index 000000000000..170ffeb78cdf --- /dev/null +++ b/sdk/tables/azure-tables/test/node/index.spec.ts @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { helloWorld } from "../../src"; + +// another node built-in that has to be shimmed for the browser +import { assert } from "chai"; + +describe("Hello function - node", () => { + it("should create an event emitter", () => { + const result = helloWorld(); + assert.strictEqual(result, "Hello world!"); + }); +}); diff --git a/sdk/tables/azure-tables/tsconfig.json b/sdk/tables/azure-tables/tsconfig.json new file mode 100644 index 000000000000..733a8ef32522 --- /dev/null +++ b/sdk/tables/azure-tables/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.package", + "compilerOptions": { + "outDir": "./dist-esm", + "declarationDir": "./types" + }, + "exclude": ["node_modules", "types", "temp", "browser", "dist", "dist-esm", "./samples/**/*.ts"] +} diff --git a/sdk/tables/ci.yml b/sdk/tables/ci.yml new file mode 100644 index 000000000000..0bf4197c8526 --- /dev/null +++ b/sdk/tables/ci.yml @@ -0,0 +1,42 @@ +# DO NOT EDIT THIS FILE +# This file is generated automatically and any changes will be lost. + +resources: + repositories: + - repository: azure-sdk-build-tools + type: git + name: internal/azure-sdk-build-tools + + - repository: azure-sdk-tools + type: github + name: Azure/azure-sdk-tools + endpoint: azure + +trigger: + branches: + include: + - master + - release/* + - hotfix/* + paths: + include: + - sdk/tables/ + +pr: + branches: + include: + - master + - feature/* + - release/* + - hotfix/* + paths: + include: + - sdk/tables/ + +stages: + - template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml + parameters: + ServiceDirectory: tables + Artifacts: + - name: azure-tables + safeName: azuretables